From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 19ACAA052A; Tue, 26 Jan 2021 04:41:35 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9EE971411EB; Tue, 26 Jan 2021 04:41:34 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2078.outbound.protection.outlook.com [40.107.21.78]) by mails.dpdk.org (Postfix) with ESMTP id E74561411E7 for ; Tue, 26 Jan 2021 04:41:31 +0100 (CET) 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=cFnxfua1FN2GsUXERsLel02IKx9DY3KKRU0kJvUMZgc=; b=lRJ+Fd6y0KpT4VuBuovwXL73Jivg0+rCILlQnkXSuSpGHDJ/dbq/5qHgoBo9mTuPyXMInPzkkbIbSMNFftCcXHNXZznYkX3GXQEhaXYpm1mWmm31AueHhFjAB3kBXlx0DWTs8hCXj4C9eYnlA1kcr7FIm/x7mFiUO5exgn5TJOc= Received: from AM6PR10CA0006.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:89::19) by HE1PR0801MB2108.eurprd08.prod.outlook.com (2603:10a6:3:51::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.17; Tue, 26 Jan 2021 03:41:29 +0000 Received: from VE1EUR03FT037.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:89:cafe::a7) by AM6PR10CA0006.outlook.office365.com (2603:10a6:209:89::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Tue, 26 Jan 2021 03:41:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT037.mail.protection.outlook.com (10.152.19.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Tue, 26 Jan 2021 03:41:28 +0000 Received: ("Tessian outbound e989e14f9207:v71"); Tue, 26 Jan 2021 03:41:28 +0000 X-CR-MTA-TID: 64aa7808 Received: from d24829de83e7.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 63D6EFF0-9016-46AE-B039-DD7EC1C68F57.1; Tue, 26 Jan 2021 03:41:23 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d24829de83e7.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 26 Jan 2021 03:41:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GjarISRRYSc541swKrqEnXpe2IxlpFpDOlPlTpnA5au9hA11fWW/iEUOAX/FZG4NmgxvfNPpPmrj3G0XBb/Uz0qnI59WpeHZ3F9lQWklfbVqpi6+PhE86Z3K55quhSk2J8382npMQyniPw689YL56KqN+Z9X8AUFMD7hFAz4ojHAfwC2Az0QT/ASRM1/9eck8u9LmQxdpOT+9TCK29mm0S1azZUFXtqipz+AhuCETv2g8pAMnQMvZsz9AYq+5XGB1rQGj3ivlsL66lGCizTDpB/Emog728lfmW1rtzAi46p2snDmWUHwi3Ub9nTJBYB9xDagOjE4vKlYJDwKd6GNWg== 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=cFnxfua1FN2GsUXERsLel02IKx9DY3KKRU0kJvUMZgc=; b=enXKv6VgJL/oIiu9ozRPrN7aVX2VMnV+I9fIymSzaNaj7GlrcAzJRxY+DrA6WBECZAsI4c2KQpUnH2meHh2ArfMsqN4jroL+7iqojfL4KNz7p05j/oSIj4R/G8E4ZzdId9eKUQHBxQphIpbKKxjAr2g4k/s/cAzpGiuM7FHHpimWO3x/qkT7mlnxfq21yAs+OVEvq3+zvetBp46Nhto0LYkLnewJiGkvUD+pHKHIKg7KuIPhcDlhoKeeoXf7xZsoKczz8j/tTOCly91Lo6YPNu9NlIZaD+82Dv2n9ddPwU+9XXh5NpJyMHa+m1b2rB6IkO3lgGXswPUrVp/J0kbJ0w== 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=cFnxfua1FN2GsUXERsLel02IKx9DY3KKRU0kJvUMZgc=; b=lRJ+Fd6y0KpT4VuBuovwXL73Jivg0+rCILlQnkXSuSpGHDJ/dbq/5qHgoBo9mTuPyXMInPzkkbIbSMNFftCcXHNXZznYkX3GXQEhaXYpm1mWmm31AueHhFjAB3kBXlx0DWTs8hCXj4C9eYnlA1kcr7FIm/x7mFiUO5exgn5TJOc= Received: from DBBPR08MB4411.eurprd08.prod.outlook.com (2603:10a6:10:cb::17) by DBBPR08MB5978.eurprd08.prod.outlook.com (2603:10a6:10:1f5::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.9; Tue, 26 Jan 2021 03:41:20 +0000 Received: from DBBPR08MB4411.eurprd08.prod.outlook.com ([fe80::19c2:8f5f:aabb:16fc]) by DBBPR08MB4411.eurprd08.prod.outlook.com ([fe80::19c2:8f5f:aabb:16fc%7]) with mapi id 15.20.3784.017; Tue, 26 Jan 2021 03:41:20 +0000 From: Feifei Wang To: "Ananyev, Konstantin" , Honnappa Nagarahalli CC: "dev@dpdk.org" , nd , nd , nd Thread-Topic: [PATCH v1 3/3] ring: rename and refactor ring library Thread-Index: AQHW14p51TMYKMfmekCUnEm8kXcjX6oz0FkAgALuO2CAAZjHgIAAA1wAgAEXodA= Date: Tue, 26 Jan 2021 03:41:19 +0000 Message-ID: References: <20201221111359.22013-1-feifei.wang2@arm.com> <20201221111359.22013-4-feifei.wang2@arm.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 15B556EB0634044B843A8EE6425E5B2A.0 x-checkrecipientchecked: true Authentication-Results-Original: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [203.126.0.111] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 7318a1d4-09cd-448c-d65c-08d8c1ac43f4 x-ms-traffictypediagnostic: DBBPR08MB5978:|HE1PR0801MB2108: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: RwrZxpNncs2xFY8O6O3aA5sj0r6c7rG4QPGkleOiNcth3ar1ommVOES/xp+gVpfsaN42yUt1bbpAallNhsFuoXh6vVWoSYoDXsS186uNhzzBi7YJ0uP0JyApIiF4KlyZNtxcUEh4jxw2GLgLO/561Tz5CDpdvId2b/mDC0d9RaZyU2K/1mFEwJMS0HO/kIFO9xapvxXsliRGSni8077J1XX2QaZRV7fBNDS09MR55s9oMCog+Vbnx4jil744yl2hNm0TnEimCN/M9QZ4OLQ1sE9GuqOZ6DRC681atf0BPDdvmsr+uesg7daE9xIAfsvuEeiq9StU+GUKEHNQaU3D8ktXKbpNrZSubkQiMECqL4amz2TF0wrV73bwOa0s5T5toR/SnBcUGlZQUofkqUroyGayQG2IEKbnUn/IX+z+2vfGq6MrKhkhkjWkygYi5yhRrtM1DgCK0eS6SXfspsFKKQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR08MB4411.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(136003)(376002)(366004)(346002)(396003)(2906002)(64756008)(7696005)(5660300002)(66446008)(55016002)(9686003)(71200400001)(110136005)(478600001)(76116006)(86362001)(52536014)(6506007)(4326008)(30864003)(66556008)(6636002)(186003)(966005)(66476007)(316002)(224303003)(33656002)(83380400001)(66946007)(54906003)(8936002)(26005)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?dzZUNU9UNzdoMjRNTThScW1BZkpYSHZ3bkVPbWdFUThIemFCWGFwRW5wVmJv?= =?utf-8?B?WVpab21mbGJDSmFQNVh4MHNpejNQaERNZDgxZGFtVFdpc01SNVZONkp3TGhj?= =?utf-8?B?ZWVUbE4ybjVhMjF5MUs0WGJiWlZIT3l6MFBtdWN6K2dUY2NIVE1UZi9qNldX?= =?utf-8?B?NEhYYVRjZVR4Z2ZUVzdMZ1BvWGFMZFVyOUpRazdmTGVOSVlYSktRZDV5cXlB?= =?utf-8?B?ck83SkNGM2J2QVQ4blVaa0o1THJsZEgxT1ZBQldpM0RrOGFzYk9wWnJMMExn?= =?utf-8?B?cHFuU1lsSlo3Q0c5OVUzenRqMEwvVmZCMWRsbGFrbEhEazd3OW1RMVkzZnpM?= =?utf-8?B?b1NOT09ZT0ZNc2lyOHFlWUwxN0ZYMjd5QVlPVEp6N250VmMzYWRrM1VjVld2?= =?utf-8?B?dE52QXJsT3kzRHM4cUVwdFZBY0dleXRmd3FvaTdsWWJOZGdqOEFZNk5kT0VR?= =?utf-8?B?bUFQMEpLbVhPZTN4MlJZd2tGUTlqaDBsSW95QU91djRqdzJGY2NiYkw4eTBh?= =?utf-8?B?U1BGdm00TE5VVVczLzdVYkppOEFwalpEMTE5dUdEY1RJcmxyamlIUFd6Y0pG?= =?utf-8?B?SzJQdzUrS3JaYTFNbzB5OGpVbHl1dmdDZWdoT0xHWG8zcmMrRyt4WmduOGVT?= =?utf-8?B?QjVkd3hYMjk5VjlrdlBpYkF0RnNCZjhyY0tQbjUyWDMvUzcrcy9GdjNIVGx4?= =?utf-8?B?RjB6OFNNL25YRjJiSWVjZTNjeW80a241TW9EbFR6NFloNDJ2RWRLVWYvTXdQ?= =?utf-8?B?OTVORHp4d2UvUUZ3VzZMSHpzSmZ1NWdoa0NjYWZTL3dyRXNEZVdHWSszVlIy?= =?utf-8?B?Ni9oazgxZXJMWmQvMFVVemRxckFIRzJVbm5oQzJBZE9QdXJMb2FERXI4ZFVK?= =?utf-8?B?K1dGMHFuWEhkK0NiTUR1VjlBOElYZGFsTy9VTjcrWGZLK3huZnNCRExGUGVB?= =?utf-8?B?VlF6ZDN5c1ZUbm40ZzRyV3NrR2tkclZiZ1N3RXlsVjN3K045aytIUFdWeEJR?= =?utf-8?B?SzIyWEMyWWlyU09BcFZBcG5mdkY2WmlhZHQreDdaY0pVRklTdTF2QU1nbzVo?= =?utf-8?B?Q3FFTU10eTdSczZqMkZzMENvRVdZbThENFoyWmNVYncxV0MyRkxGcEJRRGR2?= =?utf-8?B?SnpMejFpUXVraVAwalBXU3VXTzVaUzhweTN2MVozVEw3UHVZV2F5bWF1d2tj?= =?utf-8?B?RjZoalI2WkRSSjVUTk9wdHduMld3VXdCdTBnSkgrbVF1dk5lR0JYeCs3R1Zm?= =?utf-8?B?NkEyODd4WXpUMzRVSi9tdENlZlhlMnJLN1I4dlZJdFZXZDR6Tng0U0hUdXZW?= =?utf-8?B?OGtIQTJGNCtNZGs0dmFSdXlGUFV2aDRrWjBwdWtqRTkzMzY0b2daSFI5R3J5?= =?utf-8?B?T2cvQUdkLzBTYVVFazY2enM4cjFqWjNyQW1QZVl6c0JEcUk2TFE2QmVSTStF?= =?utf-8?Q?1AwTfugW?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB5978 Original-Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT037.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 2270b42b-6547-4eed-0ca2-08d8c1ac3ed0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7nmd5MYgFZeS6VkqFBQ7auSmJBoMaAQykKcZn92upjugGsIdjdyKwzSTAPAGb89LnucR+eOm0F0HsGGPqFbqSH2QkEGB+HppBKu2Gavh/XJ0Pt98gKk/BCB1Ns5vlm6NPS6gZ2xY303nu7aIlZ4tZN/6TsMZz1m3oFA2DEMp7ol0/CYyUWDYWzU0eYegk0o5tM10ZCi4RhKT5fTd8lfeV60qYaKESMYZ32WCQM0QgwRVxaQcyIxc4LtyfT7ZIZrANSUtEIJ+WJDe9k86o5bXdDDhD6sOian8Nx0CprPlNnuTfIuVfavy6DquK+mUi84lNZ5fprFuHUtTjRfMlYzwSavxXFDnGkg2GVfdQe8bT0sZ5bNK1DOoTTSxx2WcfKHfhn2cG8anx3nwbEslL2XdwPori5/pbqtmJdplAL/ylK9HsJWcJsaxNmPe11dupvG2fuEyvmrzn85OneUu9/5G2CcPITQ+QzFy0fmJyLzkmNU6i1sd5tQx7h1W/xCm6xtQJobFipHCjv/3mmQTfzGSp3DWcPbe3IADnmMOeGVKlpA= X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(39860400002)(376002)(346002)(136003)(396003)(46966006)(478600001)(47076005)(224303003)(82310400003)(316002)(70586007)(70206006)(5660300002)(336012)(9686003)(83380400001)(110136005)(33656002)(6636002)(356005)(186003)(55016002)(966005)(6506007)(82740400003)(26005)(81166007)(8936002)(7696005)(30864003)(2906002)(4326008)(86362001)(52536014)(54906003)(579004)(559001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2021 03:41:28.9880 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7318a1d4-09cd-448c-d65c-08d8c1ac43f4 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-AuthSource: VE1EUR03FT037.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB2108 Subject: [dpdk-dev] =?utf-8?b?5Zue5aSNOiBbUEFUQ0ggdjEgMy8zXSByaW5nOiBy?= =?utf-8?q?ename_and_refactor_ring_library?= X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGksIEtvbnN0YW50aW4NCg0KPiAtLS0tLemCruS7tuWOn+S7ti0tLS0tDQo+IOWPkeS7tuS6ujog QW5hbnlldiwgS29uc3RhbnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4g5Y+R 6YCB5pe26Ze0OiAyMDIx5bm0MeaciDI15pelIDE4OjI5DQo+IOaUtuS7tuS6ujogQW5hbnlldiwg S29uc3RhbnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT47IEZlaWZlaSBXYW5nDQo+ IDxGZWlmZWkuV2FuZzJAYXJtLmNvbT47IEhvbm5hcHBhIE5hZ2FyYWhhbGxpDQo+IDxIb25uYXBw YS5OYWdhcmFoYWxsaUBhcm0uY29tPg0KPiDmioTpgIE6IGRldkBkcGRrLm9yZzsgbmQgPG5kQGFy bS5jb20+OyBuZCA8bmRAYXJtLmNvbT4NCj4g5Li76aKYOiBSRTogW1BBVENIIHYxIDMvM10gcmlu ZzogcmVuYW1lIGFuZCByZWZhY3RvciByaW5nIGxpYnJhcnkNCj4gDQo+IA0KPiANCj4gPg0KPiA+ IEhpIEZlaWZlaSwNCj4gPg0KPiA+ID4gPiA+IEZvciBsZWdhY3kgbW9kZXMsIHJlbmFtZSByaW5n X2dlbmVyaWMvYzExIHRvIHJpbmdfZ2VuZXJpYy9jMTFfcHZ0Lg0KPiA+ID4gPiA+IEZ1cnRoZXJt b3JlLCBhZGQgbmV3IGZpbGUgcmluZ19lbGVtX3B2dC5oIHdoaWNoIGluY2x1ZGVzDQo+ID4gPiA+ ID4gcmluZ19kb19lcS9kZXEgYW5kIHJpbmcgZWxlbWVudCBjb3B5L2RlbGV0ZSBBUElzLg0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gRm9yIG90aGVyIG1vZGVzLCByZW5hbWUgeHhfYzExX21lbSB0byB4 eF9lbGVtX3B2dC4gTW92ZSBhbGwNCj4gcHJpdmF0ZQ0KPiA+ID4gPiA+IEFQSXMgaW50byB0aGVz ZSBuZXcgaGVhZGVyIGZpbGVzLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gU3VnZ2VzdGVkLWJ5OiBI b25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA8SG9ubmFwcGEuTmFnYXJhaGFsbGlAYXJtLmNvbT4NCj4g PiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBGZWlmZWkgV2FuZyA8ZmVpZmVpLndhbmcyQGFybS5jb20+ DQo+ID4gPiA+ID4gUmV2aWV3ZWQtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpDQo+IDxIb25uYXBw YS5OYWdhcmFoYWxsaUBhcm0uY29tPg0KPiA+ID4gPiA+IFJldmlld2VkLWJ5OiBSdWlmZW5nIFdh bmcgPHJ1aWZlbmcud2FuZ0Bhcm0uY29tPg0KPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ICBsaWIv bGlicnRlX3JpbmcvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gPiA+ ID4gPiAgLi4uL3tydGVfcmluZ19jMTFfbWVtLmggPT4gcmluZ19jMTFfcHZ0Lmh9ICAgIHwgICA5 ICstDQo+ID4gPiA+ID4gIGxpYi9saWJydGVfcmluZy9yaW5nX2VsZW1fcHZ0LmggICAgICAgICAg ICAgICB8IDM4NSArKysrKysrKysrKysrKysrKysNCj4gPiA+ID4gPiAgLi4ue3J0ZV9yaW5nX2dl bmVyaWMuaCA9PiByaW5nX2dlbmVyaWNfcHZ0Lmh9IHwgICA2ICstDQo+ID4gPiA+ID4gIC4uLnJp bmdfaHRzX2MxMV9tZW0uaCA9PiByaW5nX2h0c19lbGVtX3B2dC5ofSB8ICA4OCArKystDQo+ID4g PiA+ID4gLi4ubmdfcGVla19jMTFfbWVtLmggPT4gcmluZ19wZWVrX2VsZW1fcHZ0Lmh9IHwgIDc1 ICsrKy0NCj4gPiA+ID4gPiAuLi5yaW5nX3J0c19jMTFfbWVtLmggPT4gcmluZ19ydHNfZWxlbV9w dnQuaH0gfCAgODggKysrLQ0KPiA+ID4gPiA+ICBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZWxl bS5oICAgICAgICAgICAgICAgfCAzNzQgKy0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ID4gPiAgbGli L2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5oICAgICAgICAgICAgICAgIHwgIDg0ICstLS0NCj4g PiA+ID4gPiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaCAgICAgICAgICAgICAgIHwg IDcxICstLS0NCj4gPiA+ID4gPiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaCAg ICAgICAgICAgIHwgICAyICstDQo+ID4gPiA+ID4gIGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19y dHMuaCAgICAgICAgICAgICAgICB8ICA4NCArLS0tDQo+ID4gPiA+ID4gIDEyIGZpbGVzIGNoYW5n ZWQsIDY0NiBpbnNlcnRpb25zKCspLCA2MzUgZGVsZXRpb25zKC0pICByZW5hbWUNCj4gPiA+ID4g PiBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX2MxMV9tZW0uaCA9PiByaW5nX2MxMV9wdnQuaH0g KDk2JSkgIGNyZWF0ZQ0KPiA+ID4gPiA+IG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmluZy9yaW5n X2VsZW1fcHZ0LmggIHJlbmFtZQ0KPiA+ID4gPiA+IGxpYi9saWJydGVfcmluZy97cnRlX3Jpbmdf Z2VuZXJpYy5oID0+IHJpbmdfZ2VuZXJpY19wdnQuaH0gKDk4JSkNCj4gPiA+ID4gPiByZW5hbWUg bGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19odHNfYzExX21lbS5oID0+DQo+IHJpbmdfaHRzX2Vs ZW1fcHZ0Lmh9DQo+ID4gPiA+ID4gKDYwJSkgIHJlbmFtZSBsaWIvbGlicnRlX3Jpbmcve3J0ZV9y aW5nX3BlZWtfYzExX21lbS5oID0+DQo+ID4gPiA+ID4gcmluZ19wZWVrX2VsZW1fcHZ0Lmh9ICg2 MiUpICByZW5hbWUNCj4gPiA+ID4gPiBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX3J0c19jMTFf bWVtLmggPT4gcmluZ19ydHNfZWxlbV9wdnQuaH0NCj4gKDYyJSkNCj4gPiA+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBTb3JyeSwgYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0 aGF0IHBhdGNoLg0KPiA+ID4gPiBBcyBJIHJlbWVtYmVyIGJ5IERQREsgbmFtaW5nIGNvbnZlbnRp b24gYWxsIGluc3RhbGxhYmxlIGhlYWRlcnMNCj4gc2hvdWxkDQo+ID4gPiA+IGhhdmUgJ3J0ZV8n IHByZWZpeC4gU2FtZSBmb3IgcHVibGljIGRlZmluZXMgKFJURV8pLg0KPiA+ID4gPiBXaHkgdG8g YWJhbmRvbiBpdCBoZXJlPw0KPiA+ID4NCj4gPiA+IFRoaXMgY2hhbmdlIHJlZmVycyB0byB5b3Ug YW5kIEhvbm5hcHBhJ3MgZGlzY3Vzc2lvbiBhYm91dCByaW5nOg0KPiA+ID4gaHR0cHM6Ly9tYWls cy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAyMC1NYXkvMTY2ODAzLmh0bWwNCj4gPiA+DQo+ID4g PiBBbmQgaXQgaXMgdG8gc2VwYXJhdGUgdGhlIGV4dGVybmFsIEFQSXMgdGhhdCBjYW4gYmUgY2Fs bGVkIGJ5IHVzZXJzLA0KPiA+ID4gZnJvbSBpbnRlcm5hbCBBUElzIHRoYXQgY2Fubm90IGJlIGNh bGxlZCBieSB1c2Vycy4NCj4gPiA+IFRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIGluY2x1ZGVk IGluIHRoZSBmaWxlcyB3aXRoIHh4X3B2dC5oLg0KPiA+DQo+ID4gRXZlbiB0aGVzZSB4eF9wdnQu aCBmaWxlcyBjb250YWluIGludGVybmFsIEFQSSBhbmQgbm90IHN1cHBvc2VkIHRvIGJlDQo+IGlu Y2x1ZGVkIGRpcmVjdGx5LA0KPiA+IHRoZXkgaGF2ZSB0byBiZSBpbnN0YWxsZWQgaW50byBwdWJs aWMgZGlyICg8ZHBkay1pbnN0YWxsLWRpci9pbmNsdWRlKS4NCj4gPiBTbyBJIHRoaW5rIHdlIG5l ZWQgdG8ga2VlcCBEUERLIHB1YmxpYyBwcmVmaXhlcyBmb3IgdGhlbSAoYW5kIGluc2lkZQ0KPiB0 aGVtKToNCj4gPiBydGVfeHhfcHZ0LmggKF9SVEVfKS4NCj4gDQo+IEFzIGFub3RoZXIgdGhvdWdo dCAtIGl0IGlzIHByb2JhYmx5IGdvb2QgdG8gaW50cm9kdWNlIG5ldyBnZW5lcmljIG5hbWluZw0K PiBjb252ZW50aW9uDQo+IGZvciBzdWNoIHNvcnQgb2YgZmlsZXMgKGludGVybmFsIG9uZXMgdGhh dCBzdGlsbCBoYXZlIHRvIGJlIGV4cG9zZWQpLg0KPiBNaWdodCBiZSAnX3J0ZV8nIHByZWZpeCBv ciBzby4uLg0KPiBUaG91Z2ggSSBzdXBwb3NlIGl0IHdvdWxkIHJlcXVpcmUgYnJvYWRlciBkaXNj dXNzaW9uIGZpcnN0Lg0KPiANCg0KVGhhbmtzIHZlcnkgbXVjaCBmb3IgeW91ciBjb21tZW50cy4g QWNjb3JkaW5nIHRvIHRoaXMsIEkgdGhpbmsgbWF5YmUgd2UgY2FuIG9ubHkNCnNlcGFyYXRlIHRo ZSBleHRlcm5hbCBBUElzIGZyb20gaW50ZXJuYWwgQVBJcyBpbiB0aGlzIHBhdGNoIGFuZCBrZWVw IERQREsgcHVibGljIHByZWZpeGVzDQpmb3IgdGhpcyBmaWxlcy4gVGh1cywgdGhvdWdoIHRoZXNl IHByaXZhdGUgZmlsZXMgY2FuIGJlIGV4cG9zZWQsIHRoZSAieHhfX3B2dCIgc3VmZml4IGNhbiBy ZW1pbmQNCnVzZXJzIG5vdCB0byB1c2UgdGhlbS4NCg0KT24gdGhlIG90aGVyIHNpZGUsIGZvciBu ZXcgZ2VuZXJpYyBuYW1pbmcgY29udmVudGlvbiwgd2UgY2FuIGxlYXZlIGl0IGZvciBsYXRlciBk aXNjdXNzaW9uLg0KDQpCZXN0IFJlZ2FyZHMNCkZlaWZlaQ0KPiA+DQo+ID4gS29uc3RhbnRpbg0K PiA+DQo+ID4gPg0KPiA+ID4gQmVzdCBSZWdhcmRzDQo+ID4gPiBGZWlmZWkNCj4gPiA+ID4NCj4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL21lc29uLmJ1aWxkIGIvbGliL2xp YnJ0ZV9yaW5nL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gaW5kZXggMzZmZGNiNmE1Li45OGVhYzU4 MTAgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL21lc29uLmJ1aWxkDQo+ ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gQEAg LTIsMTUgKzIsMTYgQEANCj4gPiA+ID4gPiAgIyBDb3B5cmlnaHQoYykgMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHNvdXJjZXMgPSBmaWxlcygncnRlX3Jpbmcu YycpDQo+ID4gPiA+ID4gLWhlYWRlcnMgPSBmaWxlcygncnRlX3JpbmcuaCcsDQo+ID4gPiA+ID4g K2hlYWRlcnMgPSBmaWxlcygncmluZ19jMTFfcHZ0LmgnLA0KPiA+ID4gPiA+ICsJCSdyaW5nX2Vs ZW1fcHZ0LmgnLA0KPiA+ID4gPiA+ICsJCSdyaW5nX2dlbmVyaWNfcHZ0LmgnLA0KPiA+ID4gPiA+ ICsJCSdyaW5nX2h0c19lbGVtX3B2dC5oJywNCj4gPiA+ID4gPiArCQkncmluZ19wZWVrX2VsZW1f cHZ0LmgnLA0KPiA+ID4gPiA+ICsJCSdyaW5nX3J0c19lbGVtX3B2dC5oJywNCj4gPiA+ID4gPiAr CQkncnRlX3JpbmcuaCcsDQo+ID4gPiA+ID4gIAkJJ3J0ZV9yaW5nX2NvcmUuaCcsDQo+ID4gPiA+ ID4gIAkJJ3J0ZV9yaW5nX2VsZW0uaCcsDQo+ID4gPiA+ID4gLQkJJ3J0ZV9yaW5nX2MxMV9tZW0u aCcsDQo+ID4gPiA+ID4gLQkJJ3J0ZV9yaW5nX2dlbmVyaWMuaCcsDQo+ID4gPiA+ID4gIAkJJ3J0 ZV9yaW5nX2h0cy5oJywNCj4gPiA+ID4gPiAtCQkncnRlX3JpbmdfaHRzX2MxMV9tZW0uaCcsDQo+ ID4gPiA+ID4gIAkJJ3J0ZV9yaW5nX3BlZWsuaCcsDQo+ID4gPiA+ID4gLQkJJ3J0ZV9yaW5nX3Bl ZWtfYzExX21lbS5oJywNCj4gPiA+ID4gPiAgCQkncnRlX3JpbmdfcGVla196Yy5oJywNCj4gPiA+ ID4gPiAtCQkncnRlX3JpbmdfcnRzLmgnLA0KPiA+ID4gPiA+IC0JCSdydGVfcmluZ19ydHNfYzEx X21lbS5oJykNCj4gPiA+ID4gPiArCQkncnRlX3JpbmdfcnRzLmgnKQ0KPiA+ID4gPiA+IGRpZmYg LS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ID4gPiA+ID4gYi9s aWIvbGlicnRlX3JpbmcvcmluZ19jMTFfcHZ0Lmggc2ltaWxhcml0eSBpbmRleCA5NiUgcmVuYW1l IGZyb20NCj4gPiA+ID4gPiBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ID4g PiA+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmluZy9yaW5nX2MxMV9wdnQuaCBpbmRleCA3ZjVl YmEyNjIuLjlmMmY1MzE4Zg0KPiA+ID4gPiA+IDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2xpYi9s aWJydGVfcmluZy9ydGVfcmluZ19jMTFfbWVtLmgNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRl X3JpbmcvcmluZ19jMTFfcHZ0LmgNCj4gPiA+ID4gPiBAQCAtNyw4ICs3LDggQEANCj4gPiA+ID4g PiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBLaXAgTWFj eS4NCj4gPiA+ID4gPiAgICovDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtI2lmbmRlZiBfUlRFX1JJ TkdfQzExX01FTV9IXw0KPiA+ID4gPiA+IC0jZGVmaW5lIF9SVEVfUklOR19DMTFfTUVNX0hfDQo+ ID4gPiA+ID4gKyNpZm5kZWYgX1JJTkdfQzExX1BWVF9IXw0KPiA+ID4gPiA+ICsjZGVmaW5lIF9S SU5HX0MxMV9QVlRfSF8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB2b2lkDQo+ID4gPiA+ID4gIF9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoc3RydWN0IHJ0 ZV9yaW5nX2hlYWR0YWlsICpodCwgdWludDMyX3QNCj4gPiA+ID4gPiBvbGRfdmFsLCBAQCAtNjks OSArNjksNiBAQCBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkKHN0cnVjdA0KPiBydGVfcmluZw0K PiA+ID4gPiAqciwgdW5zaWduZWQgaW50IGlzX3NwLA0KPiA+ID4gPiA+ICAJCS8qIEVuc3VyZSB0 aGUgaGVhZCBpcyByZWFkIGJlZm9yZSB0YWlsICovDQo+ID4gPiA+ID4gIAkJX19hdG9taWNfdGhy ZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gLQkJLyog bG9hZC1hY3F1aXJlIHN5bmNocm9uaXplIHdpdGggc3RvcmUtcmVsZWFzZSBvZiBodC0NCj4gPnRh aWwNCj4gPiA+ID4gPiAtCQkgKiBpbiB1cGRhdGVfdGFpbC4NCj4gPiA+ID4gPiAtCQkgKi8NCj4g PiA+ID4gPiAgCQljb25zX3RhaWwgPSBfX2F0b21pY19sb2FkX24oJnItPmNvbnMudGFpbCwNCj4g PiA+ID4gPiAgCQkJCQlfX0FUT01JQ19BQ1FVSVJFKTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEBA IC0xNzgsNCArMTc1LDQgQEAgX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChzdHJ1Y3QgcnRlX3Jp bmcNCj4gKnIsIGludA0KPiA+ID4gPiBpc19zYywNCj4gPiA+ID4gPiAgCXJldHVybiBuOw0KPiA+ ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklOR19DMTFf TUVNX0hfICovDQo+ID4gPiA+ID4gKyNlbmRpZiAvKiBfUklOR19DMTFfUFZUX0hfICovDQo+ID4g PiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9yaW5nX2VsZW1fcHZ0LmgNCj4gPiA+ ID4gPiBiL2xpYi9saWJydGVfcmluZy9yaW5nX2VsZW1fcHZ0LmggbmV3IGZpbGUgbW9kZSAxMDA2 NDQgaW5kZXgNCj4gPiA+ID4gPiAwMDAwMDAwMDAuLjgwMDNlNWVkYw0KPiA+ID4gPiA+IC0tLSAv ZGV2L251bGwNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcmluZ19lbGVtX3B2dC5o DQo+ID4gPiA+ID4gQEAgLTAsMCArMSwzODUgQEANCj4gPiA+ID4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTcsMjAxOCBIWFQtc2VtaXRlY2ggQ29ycG9yYXRpb24uDQo+ID4gPiA+ ID4gKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEtpcCBNYWN5IGttYWN5QGZyZWVic2Qub3Jn DQo+ID4gPiA+ID4gKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gPiA+ID4gKyAqIERlcml2 ZWQgZnJvbSBGcmVlQlNEJ3MgYnVmcmluZy5oDQo+ID4gPiA+ID4gKyAqIFVzZWQgYXMgQlNELTMg TGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ID4gPiA+ID4gKyAqLw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lmbmRlZiBfUklOR19FTEVNX1BWVF9IXw0KPiA+ID4g PiA+ICsjZGVmaW5lIF9SSU5HX0VMRU1fUFZUX0hfDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ID4gK19fcnRlX3JpbmdfZW5x dWV1ZV9lbGVtc18zMihzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHVpbnQzMl90DQo+IHNpemUs DQo+ID4gPiA+ID4gKwkJdWludDMyX3QgaWR4LCBjb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQz Ml90IG4pIHsNCj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiA+ICsJdWludDMy X3QgKnJpbmcgPSAodWludDMyX3QgKikmclsxXTsNCj4gPiA+ID4gPiArCWNvbnN0IHVpbnQzMl90 ICpvYmogPSAoY29uc3QgdWludDMyX3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ID4gKwlpZiAobGlr ZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAobiAm IH4weDcpOyBpICs9IDgsIGlkeCArPSA4KSB7DQo+ID4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9i altpXTsNCj4gPiA+ID4gPiArCQkJcmluZ1tpZHggKyAxXSA9IG9ialtpICsgMV07DQo+ID4gPiA+ ID4gKwkJCXJpbmdbaWR4ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ID4gPiA+ICsJCQlyaW5nW2lk eCArIDNdID0gb2JqW2kgKyAzXTsNCj4gPiA+ID4gPiArCQkJcmluZ1tpZHggKyA0XSA9IG9ialtp ICsgNF07DQo+ID4gPiA+ID4gKwkJCXJpbmdbaWR4ICsgNV0gPSBvYmpbaSArIDVdOw0KPiA+ID4g PiA+ICsJCQlyaW5nW2lkeCArIDZdID0gb2JqW2kgKyA2XTsNCj4gPiA+ID4gPiArCQkJcmluZ1tp ZHggKyA3XSA9IG9ialtpICsgN107DQo+ID4gPiA+ID4gKwkJfQ0KPiA+ID4gPiA+ICsJCXN3aXRj aCAobiAmIDB4Nykgew0KPiA+ID4gPiA+ICsJCWNhc2UgNzoNCj4gPiA+ID4gPiArCQkJcmluZ1tp ZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiArCQljYXNlIDY6 DQo+ID4gPiA+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICov DQo+ID4gPiA+ID4gKwkJY2FzZSA1Og0KPiA+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtp KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+ICsJCWNhc2UgNDoNCj4gPiA+ID4gPiAr CQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiAr CQljYXNlIDM6DQo+ID4gPiA+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0 aHJvdWdoICovDQo+ID4gPiA+ID4gKwkJY2FzZSAyOg0KPiA+ID4gPiA+ICsJCQlyaW5nW2lkeCsr XSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+ICsJCWNhc2UgMToNCj4g PiA+ID4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4g PiA+ID4gPiArCQl9DQo+ID4gPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gPiA+ICsJCWZvciAoaSA9 IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9i altpXTsNCj4gPiA+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+ ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ID4gPiArCQkJcmlu Z1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ID4g K19fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc182NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90 DQo+IHByb2RfaGVhZCwNCj4gPiA+ID4gPiArCQljb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQz Ml90IG4pDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ID4g PiA+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4gPiA+ID4gKwl1aW50MzJf dCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gPiA+ICsJdWludDY0X3QgKnJpbmcg PSAodWludDY0X3QgKikmclsxXTsNCj4gPiA+ID4gPiArCWNvbnN0IHVuYWxpZ25lZF91aW50NjRf dCAqb2JqID0gKGNvbnN0IHVuYWxpZ25lZF91aW50NjRfdA0KPiA+ID4gPiAqKW9ial90YWJsZTsN Cj4gPiA+ID4gPiArCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiA+ID4gKwkJ Zm9yIChpID0gMDsgaSA8IChuICYgfjB4Myk7IGkgKz0gNCwgaWR4ICs9IDQpIHsNCj4gPiA+ID4g PiArCQkJcmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gPiA+ICsJCQlyaW5nW2lkeCArIDFdID0g b2JqW2kgKyAxXTsNCj4gPiA+ID4gPiArCQkJcmluZ1tpZHggKyAyXSA9IG9ialtpICsgMl07DQo+ ID4gPiA+ID4gKwkJCXJpbmdbaWR4ICsgM10gPSBvYmpbaSArIDNdOw0KPiA+ID4gPiA+ICsJCX0N Cj4gPiA+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDMpIHsNCj4gPiA+ID4gPiArCQljYXNlIDM6DQo+ ID4gPiA+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ ID4gPiA+ID4gKwkJY2FzZSAyOg0KPiA+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytd OyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+ICsJCWNhc2UgMToNCj4gPiA+ID4gPiArCQkJ cmluZ1tpZHgrK10gPSBvYmpbaSsrXTsNCj4gPiA+ID4gPiArCQl9DQo+ID4gPiA+ID4gKwl9IGVs c2Ugew0KPiA+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ ID4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ID4gPiArCQkvKiBTdGFydCBh dCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsr LCBpZHgrKykNCj4gPiA+ID4gPiArCQkJcmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gPiA+ICsJ fQ0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ID4gK19fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18xMjgo c3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdA0KPiBwcm9kX2hlYWQsDQo+ID4gPiA+ID4gKwkJ Y29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiArCWNvbnN0IHVpbnQzMl90IHNpemUgPSBy LT5zaXplOw0KPiA+ID4gPiA+ICsJdWludDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsN Cj4gPiA+ID4gPiArCXJ0ZV9pbnQxMjhfdCAqcmluZyA9IChydGVfaW50MTI4X3QgKikmclsxXTsN Cj4gPiA+ID4gPiArCWNvbnN0IHJ0ZV9pbnQxMjhfdCAqb2JqID0gKGNvbnN0IHJ0ZV9pbnQxMjhf dCAqKW9ial90YWJsZTsNCj4gPiA+ID4gPiArCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7 DQo+ID4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4MSk7IGkgKz0gMiwgaWR4ICs9 IDIpDQo+ID4gPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShyaW5nICsgaWR4KSwNCj4gPiA+ID4g PiArCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAzMik7DQo+ID4gPiA+ID4gKwkJc3dpdGNo IChuICYgMHgxKSB7DQo+ID4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiA+ICsJCQltZW1jcHko KHZvaWQgKikocmluZyArIGlkeCksDQo+ID4gPiA+ID4gKwkJCQkoY29uc3Qgdm9pZCAqKShvYmog KyBpKSwgMTYpOw0KPiA+ID4gPiA+ICsJCX0NCj4gPiA+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiA+ ID4gKwkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ID4gPiArCQkJ bWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gPiA+ICsJCQkJKGNvbnN0IHZvaWQg Kikob2JqICsgaSksIDE2KTsNCj4gPiA+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5n ICovDQo+ID4gPiA+ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ ID4gPiArCQkJbWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gPiA+ICsJCQkJKGNv bnN0IHZvaWQgKikob2JqICsgaSksIDE2KTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArfQ0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyogdGhlIGFjdHVhbCBlbnF1ZXVlIG9mIGVsZW1lbnRz IG9uIHRoZSByaW5nLg0KPiA+ID4gPiA+ICsgKiBQbGFjZWQgaGVyZSBzaW5jZSBpZGVudGljYWwg Y29kZSBuZWVkZWQgaW4gYm90aA0KPiA+ID4gPiA+ICsgKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1 Y2VyIGVucXVldWUgZnVuY3Rpb25zLg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RhdGlj IF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2VucXVldWVf ZWxlbXMoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiA+ID4g KwkJY29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbnVtKSB7 DQo+ID4gPiA+ID4gKwkvKiA4QiBhbmQgMTZCIGNvcGllcyBpbXBsZW1lbnRlZCBpbmRpdmlkdWFs bHkgdG8gcmV0YWluDQo+ID4gPiA+ID4gKwkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4g PiA+ID4gPiArCSAqLw0KPiA+ID4gPiA+ICsJaWYgKGVzaXplID09IDgpDQo+ID4gPiA+ID4gKwkJ X19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzY0KHIsIHByb2RfaGVhZCwNCj4gb2JqX3RhYmxlLA0K PiA+ID4gPiBudW0pOw0KPiA+ID4gPiA+ICsJZWxzZSBpZiAoZXNpemUgPT0gMTYpDQo+ID4gPiA+ ID4gKwkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzEyOChyLCBwcm9kX2hlYWQsDQo+IG9ial90 YWJsZSwNCj4gPiA+ID4gbnVtKTsNCj4gPiA+ID4gPiArCWVsc2Ugew0KPiA+ID4gPiA+ICsJCXVp bnQzMl90IGlkeCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCQkvKiBOb3JtYWxpemUgdG8gdWludDMyX3QgKi8NCj4gPiA+ID4gPiArCQlz Y2FsZSA9IGVzaXplIC8gc2l6ZW9mKHVpbnQzMl90KTsNCj4gPiA+ID4gPiArCQlucl9udW0gPSBu dW0gKiBzY2FsZTsNCj4gPiA+ID4gPiArCQlpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ ID4gPiA+ICsJCW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0KPiA+ID4gPiA+ICsJCW5yX3NpemUgPSBy LT5zaXplICogc2NhbGU7DQo+ID4gPiA+ID4gKwkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzMy KHIsIG5yX3NpemUsIG5yX2lkeCwNCj4gPiA+ID4gPiArCQkJCW9ial90YWJsZSwgbnJfbnVtKTsN Cj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RlcXVl dWVfZWxlbXNfMzIoc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB1aW50MzJfdA0KPiBzaXplLA0K PiA+ID4gPiA+ICsJCXVpbnQzMl90IGlkeCwgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKSB7 DQo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiArCXVpbnQzMl90ICpyaW5n ID0gKHVpbnQzMl90ICopJnJbMV07DQo+ID4gPiA+ID4gKwl1aW50MzJfdCAqb2JqID0gKHVpbnQz Ml90ICopb2JqX3RhYmxlOw0KPiA+ID4gPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkp IHsNCj4gPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHg3KTsgaSArPSA4LCBpZHgg Kz0gOCkgew0KPiA+ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ID4gKwkJ CW9ialtpICsgMV0gPSByaW5nW2lkeCArIDFdOw0KPiA+ID4gPiA+ICsJCQlvYmpbaSArIDJdID0g cmluZ1tpZHggKyAyXTsNCj4gPiA+ID4gPiArCQkJb2JqW2kgKyAzXSA9IHJpbmdbaWR4ICsgM107 DQo+ID4gPiA+ID4gKwkJCW9ialtpICsgNF0gPSByaW5nW2lkeCArIDRdOw0KPiA+ID4gPiA+ICsJ CQlvYmpbaSArIDVdID0gcmluZ1tpZHggKyA1XTsNCj4gPiA+ID4gPiArCQkJb2JqW2kgKyA2XSA9 IHJpbmdbaWR4ICsgNl07DQo+ID4gPiA+ID4gKwkJCW9ialtpICsgN10gPSByaW5nW2lkeCArIDdd Ow0KPiA+ID4gPiA+ICsJCX0NCj4gPiA+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiA+ ID4gPiArCQljYXNlIDc6DQo+ID4gPiA+ID4gKwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8q IGZhbGx0aHJvdWdoICovDQo+ID4gPiA+ID4gKwkJY2FzZSA2Og0KPiA+ID4gPiA+ICsJCQlvYmpb aSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+ICsJCWNhc2Ug NToNCj4gPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2gg Ki8NCj4gPiA+ID4gPiArCQljYXNlIDQ6DQo+ID4gPiA+ID4gKwkJCW9ialtpKytdID0gcmluZ1tp ZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiA+ID4gKwkJY2FzZSAzOg0KPiA+ID4gPiA+ ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+ ICsJCWNhc2UgMjoNCj4gPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFs bHRocm91Z2ggKi8NCj4gPiA+ID4gPiArCQljYXNlIDE6DQo+ID4gPiA+ID4gKwkJCW9ialtpKytd ID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiA+ID4gKwkJfQ0KPiA+ID4g PiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyss IGlkeCsrKQ0KPiA+ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ID4gKwkJ LyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+ICsJCWZvciAoaWR4ID0gMDsg aSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4g PiA+ID4gPiArCX0NCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGlj IF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RlcXVldWVf ZWxlbXNfNjQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdA0KPiBwcm9kX2hlYWQsDQo+ID4g PiA+ID4gKwkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gPiA+ICt7DQo+ID4g PiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiArCWNvbnN0IHVpbnQzMl90IHNpemUg PSByLT5zaXplOw0KPiA+ID4gPiA+ICsJdWludDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFz azsNCj4gPiA+ID4gPiArCXVpbnQ2NF90ICpyaW5nID0gKHVpbnQ2NF90ICopJnJbMV07DQo+ID4g PiA+ID4gKwl1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9ICh1bmFsaWduZWRfdWludDY0X3QgKilv YmpfdGFibGU7DQo+ID4gPiA+ID4gKwlpZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ ID4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDMpOyBpICs9IDQsIGlkeCArPSA0KSB7 DQo+ID4gPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gPiArCQkJb2JqW2kg KyAxXSA9IHJpbmdbaWR4ICsgMV07DQo+ID4gPiA+ID4gKwkJCW9ialtpICsgMl0gPSByaW5nW2lk eCArIDJdOw0KPiA+ID4gPiA+ICsJCQlvYmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4gPiA+ ID4gPiArCQl9DQo+ID4gPiA+ID4gKwkJc3dpdGNoIChuICYgMHgzKSB7DQo+ID4gPiA+ID4gKwkJ Y2FzZSAzOg0KPiA+ID4gPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ID4gPiA+ICsJCWNhc2UgMjoNCj4gPiA+ID4gPiArCQkJb2JqW2krK10gPSBy aW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiArCQljYXNlIDE6DQo+ID4g PiA+ID4gKwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4g PiA+ID4gKwkJfQ0KPiA+ID4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4gPiArCQlmb3IgKGkgPSAw OyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lk eF07DQo+ID4gPiA+ID4gKwkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+ ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ID4gKwkJCW9ialtp XSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+ICtf X3J0ZV9yaW5nX2RlcXVldWVfZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QN Cj4gcHJvZF9oZWFkLA0KPiA+ID4gPiA+ICsJCXZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikN Cj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ID4gKwlj b25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiA+ID4gPiArCXVpbnQzMl90IGlkeCA9 IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiA+ID4gKwlydGVfaW50MTI4X3QgKnJpbmcgPSAo cnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gPiA+ID4gKwlydGVfaW50MTI4X3QgKm9iaiA9IChy dGVfaW50MTI4X3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ID4gKwlpZiAobGlrZWx5KGlkeCArIG4g PCBzaXplKSkgew0KPiA+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDEpOyBpICs9 IDIsIGlkeCArPSAyKQ0KPiA+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2 b2lkICopKHJpbmcgKyBpZHgpLA0KPiAzMik7DQo+ID4gPiA+ID4gKwkJc3dpdGNoIChuICYgMHgx KSB7DQo+ID4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKiko b2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiAxNik7DQo+ID4gPiA+ID4gKwkJfQ0K PiA+ID4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXpl OyBpKyssIGlkeCsrKQ0KPiA+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2 b2lkICopKHJpbmcgKyBpZHgpLA0KPiAxNik7DQo+ID4gPiA+ID4gKwkJLyogU3RhcnQgYXQgdGhl IGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4 KyspDQo+ID4gPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShvYmogKyBpKSwgKHZvaWQgKikocmlu ZyArIGlkeCksDQo+IDE2KTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiArLyogdGhlIGFjdHVhbCBkZXF1ZXVlIG9mIGVsZW1lbnRzIGZyb20gdGhl IHJpbmcuDQo+ID4gPiA+ID4gKyAqIFBsYWNlZCBoZXJlIHNpbmNlIGlkZW50aWNhbCBjb2RlIG5l ZWRlZCBpbiBib3RoDQo+ID4gPiA+ID4gKyAqIHNpbmdsZSBhbmQgbXVsdGkgcHJvZHVjZXIgZW5x dWV1ZSBmdW5jdGlvbnMuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ID4gK19fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhz dHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IGNvbnNfaGVhZCwNCj4gPiA+ID4gPiArCQl2b2lk ICpvYmpfdGFibGUsIHVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBudW0pIHsNCj4gPiA+ID4gPiAr CS8qIDhCIGFuZCAxNkIgY29waWVzIGltcGxlbWVudGVkIGluZGl2aWR1YWxseSB0byByZXRhaW4N Cj4gPiA+ID4gPiArCSAqIHRoZSBjdXJyZW50IHBlcmZvcm1hbmNlLg0KPiA+ID4gPiA+ICsJICov DQo+ID4gPiA+ID4gKwlpZiAoZXNpemUgPT0gOCkNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2Rl cXVldWVfZWxlbXNfNjQociwgY29uc19oZWFkLA0KPiBvYmpfdGFibGUsDQo+ID4gPiA+IG51bSk7 DQo+ID4gPiA+ID4gKwllbHNlIGlmIChlc2l6ZSA9PSAxNikNCj4gPiA+ID4gPiArCQlfX3J0ZV9y aW5nX2RlcXVldWVfZWxlbXNfMTI4KHIsIGNvbnNfaGVhZCwNCj4gb2JqX3RhYmxlLA0KPiA+ID4g PiBudW0pOw0KPiA+ID4gPiA+ICsJZWxzZSB7DQo+ID4gPiA+ID4gKwkJdWludDMyX3QgaWR4LCBz Y2FsZSwgbnJfaWR4LCBucl9udW0sIG5yX3NpemU7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJ CS8qIE5vcm1hbGl6ZSB0byB1aW50MzJfdCAqLw0KPiA+ID4gPiA+ICsJCXNjYWxlID0gZXNpemUg LyBzaXplb2YodWludDMyX3QpOw0KPiA+ID4gPiA+ICsJCW5yX251bSA9IG51bSAqIHNjYWxlOw0K PiA+ID4gPiA+ICsJCWlkeCA9IGNvbnNfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiA+ID4gKwkJbnJf aWR4ID0gaWR4ICogc2NhbGU7DQo+ID4gPiA+ID4gKwkJbnJfc2l6ZSA9IHItPnNpemUgKiBzY2Fs ZTsNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXNfMzIociwgbnJfc2l6ZSwg bnJfaWR4LA0KPiA+ID4gPiA+ICsJCQkJb2JqX3RhYmxlLCBucl9udW0pOw0KPiA+ID4gPiA+ICsJ fQ0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBCZXR3ZWVuIGxvYWQg YW5kIGxvYWQuIHRoZXJlIG1pZ2h0IGJlIGNwdSByZW9yZGVyIGluIHdlYWsNCj4gbW9kZWwNCj4g PiA+ID4gPiArICogKHBvd2VycGMvYXJtKS4NCj4gPiA+ID4gPiArICogVGhlcmUgYXJlIDIgY2hv aWNlcyBmb3IgdGhlIHVzZXJzDQo+ID4gPiA+ID4gKyAqIDEudXNlIHJtYigpIG1lbW9yeSBiYXJy aWVyDQo+ID4gPiA+ID4gKyAqIDIudXNlIG9uZS1kaXJlY3Rpb24gbG9hZF9hY3F1aXJlL3N0b3Jl X3JlbGVhc2UgYmFycmllcg0KPiA+ID4gPiA+ICsgKiBJdCBkZXBlbmRzIG9uIHBlcmZvcm1hbmNl IHRlc3QgcmVzdWx0cy4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gKyNpZmRlZiBSVEVfVVNF X0MxMV9NRU1fTU9ERUwNCj4gPiA+ID4gPiArI2luY2x1ZGUgInJpbmdfYzExX3B2dC5oIg0KPiA+ ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICsjaW5jbHVkZSAicmluZ19nZW5lcmljX3B2dC5oIg0K PiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ ICsgKiBAaW50ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIHJpbmcNCj4gPiA+ ID4gPiArICoNCj4gPiA+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ID4gPiArICogICBBIHBvaW50 ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxl DQo+ID4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ ID4gPiArICogQHBhcmFtIGVzaXplDQo+ID4gPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBl bGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiA+ID4g KyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhl IHJpbmcuDQo+IE90aGVyd2lzZQ0KPiA+ID4gPiA+ICsgKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRl ZmluZWQuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ID4gKyAqICAgVGhlIG51bWJl ciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4g PiA+ID4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVF X0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zDQo+IGZyb20gYQ0KPiA+ ID4gPiByaW5nDQo+ID4gPiA+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVl dWUgYXMgbWFueSBpdGVtcyBhcw0KPiBwb3NzaWJsZQ0KPiA+ID4gPiBmcm9tIHJpbmcNCj4gPiA+ ID4gPiArICogQHBhcmFtIGlzX3NwDQo+ID4gPiA+ID4gKyAqICAgSW5kaWNhdGVzIHdoZXRoZXIg dG8gdXNlIHNpbmdsZSBwcm9kdWNlciBvciBtdWx0aS1wcm9kdWNlciBoZWFkDQo+ID4gPiA+IHVw ZGF0ZQ0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiA+ICsgKiAgIHJl dHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFz DQo+IGZpbmlzaGVkDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICBBY3R1 YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gKyAqICAgSWYgYmVoYXZp b3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4g PiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2ln bmVkIGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRl X3JpbmcgKnIsIGNvbnN0IHZvaWQNCj4gKm9ial90YWJsZSwNCj4gPiA+ID4gPiArCQl1bnNpZ25l ZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBuLA0KPiA+ID4gPiA+ICsJCWVudW0gcnRlX3Jpbmdf cXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVuc2lnbmVkDQo+IGludCBpc19zcCwNCj4gPiA+ID4g PiArCQl1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiAr CXVpbnQzMl90IHByb2RfaGVhZCwgcHJvZF9uZXh0Ow0KPiA+ID4gPiA+ICsJdWludDMyX3QgZnJl ZV9lbnRyaWVzOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCW4gPSBfX3J0ZV9yaW5nX21vdmVf cHJvZF9oZWFkKHIsIGlzX3NwLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gPiArCQkJJnByb2RfaGVh ZCwgJnByb2RfbmV4dCwgJmZyZWVfZW50cmllcyk7DQo+ID4gPiA+ID4gKwlpZiAobiA9PSAwKQ0K PiA+ID4gPiA+ICsJCWdvdG8gZW5kOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCV9fcnRlX3Jp bmdfZW5xdWV1ZV9lbGVtcyhyLCBwcm9kX2hlYWQsIG9ial90YWJsZSwgZXNpemUsDQo+IG4pOw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCV9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoJnItPnByb2Qs IHByb2RfaGVhZCwgcHJvZF9uZXh0LA0KPiBpc19zcCwgMSk7DQo+ID4gPiA+ID4gK2VuZDoNCj4g PiA+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiA+ID4gKwkJKmZyZWVfc3Bh Y2UgPSBmcmVlX2VudHJpZXMgLSBuOw0KPiA+ID4gPiA+ICsJcmV0dXJuIG47DQo+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBAaW50ZXJuYWwg RGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcmluZw0KPiA+ID4gPiA+ICsgKg0KPiA+ ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmlu ZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gPiAr ICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiA+ICsgKiBAcGFy YW0gZXNpemUNCj4gPiA+ID4gPiArICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5 dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ID4gPiArICogICBUaGlzIG11 c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4NCj4gT3Ro ZXJ3aXNlDQo+ID4gPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMg dG8gcHVsbCBmcm9tIHRoZSByaW5nLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4g PiA+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVxdWV1ZSBhIGZpeGVkIG51 bWJlciBvZiBpdGVtcw0KPiBmcm9tIGENCj4gPiA+ID4gcmluZw0KPiA+ID4gPiA+ICsgKiAgIFJU RV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMNCj4gcG9zc2li bGUNCj4gPiA+ID4gZnJvbSByaW5nDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBpc19zYw0KPiA+ID4g PiA+ICsgKiAgIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUgY29uc3VtZXIgb3IgbXVs dGktY29uc3VtZXINCj4gaGVhZA0KPiA+ID4gPiB1cGRhdGUNCj4gPiA+ID4gPiArICogQHBhcmFt IGF2YWlsYWJsZQ0KPiA+ID4gPiA+ICsgKiAgIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5p bmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVlDQo+IGhhcw0KPiA+ID4gPiBmaW5pc2hl ZA0KPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4gKyAqICAgLSBBY3R1YWwgbnVtYmVy IG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gPiA+ID4gKyAqICAgICBJZiBiZWhhdmlvciA9PSBS VEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiA+ ICsgKi8NCj4gPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50 DQo+ID4gPiA+ID4gK19fcnRlX3JpbmdfZG9fZGVxdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAq ciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gPiA+ICsJCXVuc2lnbmVkIGludCBlc2l6ZSwgdW5z aWduZWQgaW50IG4sDQo+ID4gPiA+ID4gKwkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBi ZWhhdmlvciwgdW5zaWduZWQNCj4gaW50IGlzX3NjLA0KPiA+ID4gPiA+ICsJCXVuc2lnbmVkIGlu dCAqYXZhaWxhYmxlKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKwl1aW50MzJfdCBjb25zX2hl YWQsIGNvbnNfbmV4dDsNCj4gPiA+ID4gPiArCXVpbnQzMl90IGVudHJpZXM7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWQociwgKGludClpc19z YywgbiwgYmVoYXZpb3IsDQo+ID4gPiA+ID4gKwkJCSZjb25zX2hlYWQsICZjb25zX25leHQsICZl bnRyaWVzKTsNCj4gPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4gPiA+ID4gKwkJZ290byBlbmQ7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGNv bnNfaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwNCj4gbik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsJX19ydGVfcmluZ191cGRhdGVfdGFpbCgmci0+Y29ucywgY29uc19oZWFkLCBjb25zX25leHQs DQo+IGlzX3NjLCAwKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK2VuZDoNCj4gPiA+ID4gPiAr CWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4gPiA+ID4gPiArCQkqYXZhaWxhYmxlID0gZW50cmll cyAtIG47DQo+ID4gPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArI2VuZGlmIC8qIF9SSU5HX0VMRU1fUFZUX0hfICovDQo+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19nZW5lcmljLmgNCj4gPiA+ID4gPiBi L2xpYi9saWJydGVfcmluZy9yaW5nX2dlbmVyaWNfcHZ0LmgNCj4gPiA+ID4gPiBzaW1pbGFyaXR5 IGluZGV4IDk4JQ0KPiA+ID4gPiA+IHJlbmFtZSBmcm9tIGxpYi9saWJydGVfcmluZy9ydGVfcmlu Z19nZW5lcmljLmgNCj4gPiA+ID4gPiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZ2Vu ZXJpY19wdnQuaA0KPiA+ID4gPiA+IGluZGV4IDM3YzYyYjhkNi4uZmM0NmEyN2IyIDEwMDY0NA0K PiA+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19nZW5lcmljLmgNCj4gPiA+ ID4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcmluZ19nZW5lcmljX3B2dC5oDQo+ID4gPiA+ID4g QEAgLTcsOCArNyw4IEBADQo+ID4gPiA+ID4gICAqIFVzZWQgYXMgQlNELTMgTGljZW5zZWQgd2l0 aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ID4gPiA+ID4gICAqLw0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gLSNpZm5kZWYgX1JURV9SSU5HX0dFTkVSSUNfSF8NCj4gPiA+ID4gPiAtI2RlZmlu ZSBfUlRFX1JJTkdfR0VORVJJQ19IXw0KPiA+ID4gPiA+ICsjaWZuZGVmIF9SSU5HX0dFTkVSSUNf UFZUX0hfDQo+ID4gPiA+ID4gKyNkZWZpbmUgX1JJTkdfR0VORVJJQ19QVlRfSF8NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ID4g IF9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoc3RydWN0IHJ0ZV9yaW5nX2hlYWR0YWlsICpodCwgdWlu dDMyX3QNCj4gPiA+ID4gPiBvbGRfdmFsLCBAQCAtMTcwLDQgKzE3MCw0IEBAIF9fcnRlX3Jpbmdf bW92ZV9jb25zX2hlYWQoc3RydWN0DQo+ID4gPiA+IHJ0ZV9yaW5nICpyLCB1bnNpZ25lZCBpbnQg aXNfc2MsDQo+ID4gPiA+ID4gIAlyZXR1cm4gbjsNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gLSNlbmRpZiAvKiBfUlRFX1JJTkdfR0VORVJJQ19IXyAqLw0KPiA+ID4gPiA+ICsj ZW5kaWYgLyogX1JJTkdfR0VORVJJQ19QVlRfSF8gKi8NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0c19jMTFfbWVtLmgNCj4gPiA+ID4gPiBiL2xpYi9s aWJydGVfcmluZy9yaW5nX2h0c19lbGVtX3B2dC5oDQo+ID4gPiA+ID4gc2ltaWxhcml0eSBpbmRl eCA2MCUNCj4gPiA+ID4gPiByZW5hbWUgZnJvbSBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfaHRz X2MxMV9tZW0uaA0KPiA+ID4gPiA+IHJlbmFtZSB0byBsaWIvbGlicnRlX3JpbmcvcmluZ19odHNf ZWxlbV9wdnQuaA0KPiA+ID4gPiA+IGluZGV4IDE2ZTU0YjZmZi4uOTI2ODc1MGIwIDEwMDY0NA0K PiA+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHNfYzExX21lbS5oDQo+ ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4gPiA+ ID4gPiBAQCAtNyw4ICs3LDggQEANCj4gPiA+ID4gPiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNl ZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBLaXAgTWFjeS4NCj4gPiA+ID4gPiAgICovDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiAtI2lmbmRlZiBfUlRFX1JJTkdfSFRTX0MxMV9NRU1fSF8NCj4gPiA+ID4g PiAtI2RlZmluZSBfUlRFX1JJTkdfSFRTX0MxMV9NRU1fSF8NCj4gPiA+ID4gPiArI2lmbmRlZiBf UklOR19IVFNfRUxFTV9QVlRfSF8NCj4gPiA+ID4gPiArI2RlZmluZSBfUklOR19IVFNfRUxFTV9Q VlRfSF8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ID4gPiAgICogQGZpbGUgcnRl X3JpbmdfaHRzX2MxMV9tZW0uaA0KPiA+ID4gPiA+IEBAIC0xNjEsNCArMTYxLDg2IEBAIF9fcnRl X3JpbmdfaHRzX21vdmVfY29uc19oZWFkKHN0cnVjdA0KPiBydGVfcmluZw0KPiA+ID4gPiAqciwg dW5zaWduZWQgaW50IG51bSwNCj4gPiA+ID4gPiAgCXJldHVybiBuOw0KPiA+ID4gPiA+ICB9DQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklOR19IVFNfQzExX01FTV9IXyAq Lw0KPiA+ID4gPiA+ICsvKioNCj4gPiA+ID4gPiArICogQGludGVybmFsIEVucXVldWUgc2V2ZXJh bCBvYmplY3RzIG9uIHRoZSBIVFMgcmluZy4NCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICog QHBhcmFtIHINCj4gPiA+ID4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJl Lg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiA+ID4gKyAqICAgQSBwb2lu dGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ID4gPiArICogQHBhcmFtIGVzaXplDQo+ ID4gPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVz dCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiA+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBz YW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuDQo+IE90aGVyd2lzZQ0KPiA+ ID4gPiA+ICsgKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+ID4gKyAqIEBw YXJhbSBuDQo+ID4gPiA+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0 aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBiZWhhdmlv cg0KPiA+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4 ZWQgbnVtYmVyIG9mIGl0ZW1zDQo+IGZyb20gYQ0KPiA+ID4gPiByaW5nDQo+ID4gPiA+ID4gKyAq ICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcw0KPiBw b3NzaWJsZQ0KPiA+ID4gPiBmcm9tIHJpbmcNCj4gPiA+ID4gPiArICogQHBhcmFtIGZyZWVfc3Bh Y2UNCj4gPiA+ID4gPiArICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhl IGVucXVldWUgb3BlcmF0aW9uIGhhcw0KPiBmaW5pc2hlZA0KPiA+ID4gPiA+ICsgKiBAcmV0dXJu DQo+ID4gPiA+ID4gKyAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiA+ ID4gPiA+ICsgKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdp bGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gPiArX19ydGVfcmluZ19kb19o dHNfZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZA0KPiA+ID4gPiAq b2JqX3RhYmxlLA0KPiA+ID4gPiA+ICsJdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0g cnRlX3JpbmdfcXVldWVfYmVoYXZpb3INCj4gYmVoYXZpb3IsDQo+ID4gPiA+ID4gKwl1aW50MzJf dCAqZnJlZV9zcGFjZSkNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsJdWludDMyX3QgZnJlZSwg aGVhZDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVf cHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwNCj4gJmZyZWUpOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCWlmIChuICE9IDApIHsNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2VucXVl dWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwNCj4gbik7DQo+ID4gPiA+ID4gKwkJ X19ydGVfcmluZ19odHNfdXBkYXRlX3RhaWwoJnItPmh0c19wcm9kLCBoZWFkLCBuLA0KPiAxKTsN Cj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAoZnJlZV9zcGFjZSAh PSBOVUxMKQ0KPiA+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZSAtIG47DQo+ID4gPiA+ID4g KwlyZXR1cm4gbjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ ID4gPiA+ID4gKyAqIEBpbnRlcm5hbCBEZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBI VFMgcmluZy4NCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ID4g PiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gPiA+ICsgKiBA cGFyYW0gb2JqX3RhYmxlDQo+ID4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Yg b2JqZWN0cy4NCj4gPiA+ID4gPiArICogQHBhcmFtIGVzaXplDQo+ID4gPiA+ID4gKyAqICAgVGhl IHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9m IDQuDQo+ID4gPiA+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hp bGUgY3JlYXRpbmcgdGhlIHJpbmcuDQo+IE90aGVyd2lzZQ0KPiA+ID4gPiA+ICsgKiAgIHRoZSBy ZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ID4g KyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+ ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVf RklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMNCj4gZnJvbSBhDQo+ID4g PiA+IHJpbmcNCj4gPiA+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1 ZSBhcyBtYW55IGl0ZW1zIGFzDQo+IHBvc3NpYmxlDQo+ID4gPiA+IGZyb20gcmluZw0KPiA+ID4g PiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gPiA+ID4gKyAqICAgcmV0dXJucyB0aGUgbnVt YmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUNCj4gaGFzDQo+ ID4gPiA+IGZpbmlzaGVkDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICAt IEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4gPiA+ID4gPiArICogICAgIElm IGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9u bHkuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGlu ZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gPiArX19ydGVfcmluZ19kb19odHNfZGVxdWV1ZV9lbGVt KHN0cnVjdCBydGVfcmluZyAqciwgdm9pZA0KPiAqb2JqX3RhYmxlLA0KPiA+ID4gPiA+ICsJdWlu dDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3INCj4g YmVoYXZpb3IsDQo+ID4gPiA+ID4gKwl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ID4gPiA+ICt7 DQo+ID4gPiA+ID4gKwl1aW50MzJfdCBlbnRyaWVzLCBoZWFkOw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArCW4gPSBfX3J0ZV9yaW5nX2h0c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwg JmhlYWQsDQo+ID4gPiA+ICZlbnRyaWVzKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAo biAhPSAwKSB7DQo+ID4gPiA+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQs IG9ial90YWJsZSwgZXNpemUsDQo+IG4pOw0KPiA+ID4gPiA+ICsJCV9fcnRlX3JpbmdfaHRzX3Vw ZGF0ZV90YWlsKCZyLT5odHNfY29ucywgaGVhZCwgbiwNCj4gMCk7DQo+ID4gPiA+ID4gKwl9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4gPiA+ ICsJCSphdmFpbGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiA+ID4gPiArCXJldHVybiBuOw0KPiA+ ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjZW5kaWYgLyogX1JJTkdfSFRTX0VM RU1fUFZUX0hfICovDQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVf cmluZ19wZWVrX2MxMV9tZW0uaA0KPiA+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfcGVl a19lbGVtX3B2dC5oDQo+ID4gPiA+ID4gc2ltaWxhcml0eSBpbmRleCA2MiUNCj4gPiA+ID4gPiBy ZW5hbWUgZnJvbSBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVla19jMTFfbWVtLmgNCj4gPiA+ ID4gPiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfcGVla19lbGVtX3B2dC5oDQo+ID4g PiA+ID4gaW5kZXggMjgzYzdlNzBiLi4xYzU3YmNkZDYgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfYzExX21lbS5oDQo+ID4gPiA+ID4gKysrIGIv bGliL2xpYnJ0ZV9yaW5nL3JpbmdfcGVla19lbGVtX3B2dC5oDQo+ID4gPiA+ID4gQEAgLTcsOCAr Nyw4IEBADQo+ID4gPiA+ID4gICAqIFVzZWQgYXMgQlNELTMgTGljZW5zZWQgd2l0aCBwZXJtaXNz aW9uIGZyb20gS2lwIE1hY3kuDQo+ID4gPiA+ID4gICAqLw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g LSNpZm5kZWYgX1JURV9SSU5HX1BFRUtfQzExX01FTV9IXw0KPiA+ID4gPiA+IC0jZGVmaW5lIF9S VEVfUklOR19QRUVLX0MxMV9NRU1fSF8NCj4gPiA+ID4gPiArI2lmbmRlZiBfUklOR19QRUVLX0VM RU1fUFZUX0hfDQo+ID4gPiA+ID4gKyNkZWZpbmUgX1JJTkdfUEVFS19FTEVNX1BWVF9IXw0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBAZmlsZSBydGVfcmluZ19wZWVr X2MxMV9tZW0uaA0KPiA+ID4gPiA+IEBAIC0xMDcsNCArMTA3LDczIEBAIF9fcnRlX3JpbmdfaHRz X3NldF9oZWFkX3RhaWwoc3RydWN0DQo+ID4gPiA+IHJ0ZV9yaW5nX2h0c19oZWFkdGFpbCAqaHQs IHVpbnQzMl90IHRhaWwsDQo+ID4gPiA+ID4gIAlfX2F0b21pY19zdG9yZV9uKCZodC0+aHQucmF3 LCBwLnJhdywNCj4gX19BVE9NSUNfUkVMRUFTRSk7ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAt I2VuZGlmIC8qIF9SVEVfUklOR19QRUVLX0MxMV9NRU1fSF8gKi8NCj4gPiA+ID4gPiArLyoqDQo+ ID4gPiA+ID4gKyAqIEBpbnRlcm5hbCBUaGlzIGZ1bmN0aW9uIG1vdmVzIHByb2QgaGVhZCB2YWx1 ZS4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVuc2lnbmVkIGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX2VucXVldWVfc3RhcnQoc3Ry dWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBuLA0KPiA+ID4gPiA+ICsJCWVudW0gcnRlX3Jpbmdf cXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVpbnQzMl90DQo+ID4gPiA+ICpmcmVlX3NwYWNlKSB7 DQo+ID4gPiA+ID4gKwl1aW50MzJfdCBmcmVlLCBoZWFkLCBuZXh0Ow0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArCXN3aXRjaCAoci0+cHJvZC5zeW5jX3R5cGUpIHsNCj4gPiA+ID4gPiArCWNhc2Ug UlRFX1JJTkdfU1lOQ19TVDoNCj4gPiA+ID4gPiArCQluID0gX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZChyLA0KPiBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ID4gPiA+ICsJCQliZWhhdmlvciwg JmhlYWQsICZuZXh0LCAmZnJlZSk7DQo+ID4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ID4gKwlj YXNlIFJURV9SSU5HX1NZTkNfTVRfSFRTOg0KPiA+ID4gPiA+ICsJCW4gPSAgX19ydGVfcmluZ19o dHNfbW92ZV9wcm9kX2hlYWQociwgbiwgYmVoYXZpb3IsDQo+ID4gPiA+ID4gKwkJCSZoZWFkLCAm ZnJlZSk7DQo+ID4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ID4gKwljYXNlIFJURV9SSU5HX1NZ TkNfTVQ6DQo+ID4gPiA+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVRfUlRTOg0KPiA+ID4gPiA+ ICsJZGVmYXVsdDoNCj4gPiA+ID4gPiArCQkvKiB1bnN1cHBvcnRlZCBtb2RlLCBzaG91bGRuJ3Qg YmUgaGVyZSAqLw0KPiA+ID4gPiA+ICsJCVJURV9BU1NFUlQoMCk7DQo+ID4gPiA+ID4gKwkJbiA9 IDA7DQo+ID4gPiA+ID4gKwkJZnJlZSA9IDA7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ID4gPiArCQkqZnJlZV9z cGFjZSA9IGZyZWUgLSBuOw0KPiA+ID4gPiA+ICsJcmV0dXJuIG47DQo+ID4gPiA+ID4gK30NCj4g PiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBAaW50ZXJuYWwgVGhpcyBm dW5jdGlvbiBtb3ZlcyBjb25zIGhlYWQgdmFsdWUgYW5kIGNvcGllcyB1cCB0bw0KPiAqbioNCj4g PiA+ID4gPiArICogb2JqZWN0cyBmcm9tIHRoZSByaW5nIHRvIHRoZSB1c2VyIHByb3ZpZGVkIG9i al90YWJsZS4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX2RlcXVldWVfc3Rh cnQoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4gPiA+ID4gKwl1aW50 MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvcg0KPiBi ZWhhdmlvciwNCj4gPiA+ID4gPiArCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiA+ID4gK3sN Cj4gPiA+ID4gPiArCXVpbnQzMl90IGF2YWlsLCBoZWFkLCBuZXh0Ow0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArCXN3aXRjaCAoci0+Y29ucy5zeW5jX3R5cGUpIHsNCj4gPiA+ID4gPiArCWNhc2Ug UlRFX1JJTkdfU1lOQ19TVDoNCj4gPiA+ID4gPiArCQluID0gX19ydGVfcmluZ19tb3ZlX2NvbnNf aGVhZChyLA0KPiBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ID4gPiA+ICsJCQliZWhhdmlvciwg JmhlYWQsICZuZXh0LCAmYXZhaWwpOw0KPiA+ID4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gPiA+ICsJ Y2FzZSBSVEVfUklOR19TWU5DX01UX0hUUzoNCj4gPiA+ID4gPiArCQluID0gIF9fcnRlX3Jpbmdf aHRzX21vdmVfY29uc19oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiA+ICsJCQkmaGVhZCwg JmF2YWlsKTsNCj4gPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gPiArCWNhc2UgUlRFX1JJTkdf U1lOQ19NVDoNCj4gPiA+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ID4gPiA+ ID4gKwlkZWZhdWx0Og0KPiA+ID4gPiA+ICsJCS8qIHVuc3VwcG9ydGVkIG1vZGUsIHNob3VsZG4n dCBiZSBoZXJlICovDQo+ID4gPiA+ID4gKwkJUlRFX0FTU0VSVCgwKTsNCj4gPiA+ID4gPiArCQlu ID0gMDsNCj4gPiA+ID4gPiArCQlhdmFpbCA9IDA7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICsJaWYgKG4gIT0gMCkNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2RlcXVl dWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwNCj4gbik7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4gPiA+ICsJCSphdmFpbGFi bGUgPSBhdmFpbCAtIG47DQo+ID4gPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiArI2VuZGlmIC8qIF9SSU5HX1BFRUtfRUxFTV9QVlRfSF8gKi8N Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19jMTFf bWVtLmgNCj4gPiA+ID4gPiBiL2xpYi9saWJydGVfcmluZy9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ ID4gPiA+ID4gc2ltaWxhcml0eSBpbmRleCA2MiUNCj4gPiA+ID4gPiByZW5hbWUgZnJvbSBsaWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzX2MxMV9tZW0uaA0KPiA+ID4gPiA+IHJlbmFtZSB0byBs aWIvbGlicnRlX3JpbmcvcmluZ19ydHNfZWxlbV9wdnQuaA0KPiA+ID4gPiA+IGluZGV4IDMyN2Yy Mjc5Ni4uY2JjZWM3M2ViIDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9y dGVfcmluZ19ydHNfYzExX21lbS5oDQo+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3Jp bmdfcnRzX2VsZW1fcHZ0LmgNCj4gPiA+ID4gPiBAQCAtNyw4ICs3LDggQEANCj4gPiA+ID4gPiAg ICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBLaXAgTWFjeS4N Cj4gPiA+ID4gPiAgICovDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtI2lmbmRlZiBfUlRFX1JJTkdf UlRTX0MxMV9NRU1fSF8NCj4gPiA+ID4gPiAtI2RlZmluZSBfUlRFX1JJTkdfUlRTX0MxMV9NRU1f SF8NCj4gPiA+ID4gPiArI2lmbmRlZiBfUklOR19SVFNfRUxFTV9QVlRfSF8NCj4gPiA+ID4gPiAr I2RlZmluZSBfUklOR19SVFNfRUxFTV9QVlRfSF8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKioN Cj4gPiA+ID4gPiAgICogQGZpbGUgcnRlX3JpbmdfcnRzX2MxMV9tZW0uaA0KPiA+ID4gPiA+IEBA IC0xNzYsNCArMTc2LDg2IEBAIF9fcnRlX3JpbmdfcnRzX21vdmVfY29uc19oZWFkKHN0cnVjdA0K PiBydGVfcmluZw0KPiA+ID4gPiAqciwgdWludDMyX3QgbnVtLA0KPiA+ID4gPiA+ICAJcmV0dXJu IG47DQo+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IC0jZW5kaWYgLyogX1JURV9S SU5HX1JUU19DMTFfTUVNX0hfICovDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBAaW50 ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIFJUUyByaW5nLg0KPiA+ID4gPiA+ ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0 byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4g PiA+ID4gPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiA+ ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ID4gPiArICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1l bnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ID4gPiArICog ICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmlu Zy4NCj4gT3RoZXJ3aXNlDQo+ID4gPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5l ZC4NCj4gPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gPiArICogICBUaGUgbnVtYmVyIG9m IG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gPiA+ID4g PiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfRklY RUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMNCj4gZnJvbSBhDQo+ID4gPiA+ IHJpbmcNCj4gPiA+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBh cyBtYW55IGl0ZW1zIGFzDQo+IHBvc3NpYmxlDQo+ID4gPiA+IGZyb20gcmluZw0KPiA+ID4gPiA+ ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiA+ICsgKiAgIHJldHVybnMgdGhlIGFtb3Vu dCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFzDQo+IGZpbmlzaGVkDQo+ ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9i amVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gKyAqICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdf UVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gPiArICovDQo+ ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4g PiA+ICtfX3J0ZV9yaW5nX2RvX3J0c19lbnF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBj b25zdCB2b2lkDQo+ID4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+ID4gKwl1aW50MzJfdCBlc2l6 ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvcg0KPiBiZWhhdmlvciwN Cj4gPiA+ID4gPiArCXVpbnQzMl90ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ ID4gKwl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCW4gPSAg X19ydGVfcmluZ19ydHNfbW92ZV9wcm9kX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0KPiAm ZnJlZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJaWYgKG4gIT0gMCkgew0KPiA+ID4gPiA+ ICsJCV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLA0K PiBuKTsNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX3J0c191cGRhdGVfdGFpbCgmci0+cnRzX3By b2QpOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWlmIChmcmVlX3Nw YWNlICE9IE5VTEwpDQo+ID4gPiA+ID4gKwkJKmZyZWVfc3BhY2UgPSBmcmVlIC0gbjsNCj4gPiA+ ID4gPiArCXJldHVybiBuOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsv KioNCj4gPiA+ID4gPiArICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20g dGhlIFJUUyByaW5nLg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4g KyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJs ZSBvZiBvYmplY3RzLg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ID4gPiArICog ICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlw bGUgb2YgNC4NCj4gPiA+ID4gPiArICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNl ZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4NCj4gT3RoZXJ3aXNlDQo+ID4gPiA+ID4gKyAqICAg dGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSByaW5nLg0K PiA+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gPiArICogICBSVEVfUklOR19R VUVVRV9GSVhFRDogICAgRGVxdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcw0KPiBmcm9tIGEN Cj4gPiA+ID4gcmluZw0KPiA+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBE ZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMNCj4gcG9zc2libGUNCj4gPiA+ID4gZnJvbSByaW5nDQo+ ID4gPiA+ID4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiA+ID4gPiArICogICByZXR1cm5zIHRo ZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZQ0KPiBo YXMNCj4gPiA+ID4gZmluaXNoZWQNCj4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ICsg KiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiA+ID4gPiA+ICsgKiAg ICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9y IG4gb25seS4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX3J0c19kZXF1ZXVl X2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkDQo+ICpvYmpfdGFibGUsDQo+ID4gPiA+ID4g Kwl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv cg0KPiBiZWhhdmlvciwNCj4gPiA+ID4gPiArCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiA+ ID4gK3sNCj4gPiA+ID4gPiArCXVpbnQzMl90IGVudHJpZXMsIGhlYWQ7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJbiA9IF9fcnRlX3JpbmdfcnRzX21vdmVfY29uc19oZWFkKHIsIG4sIGJlaGF2 aW9yLCAmaGVhZCwNCj4gPiA+ID4gJmVudHJpZXMpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr CWlmIChuICE9IDApIHsNCj4gPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwg aGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwNCj4gbik7DQo+ID4gPiA+ID4gKwkJX19ydGVfcmluZ19y dHNfdXBkYXRlX3RhaWwoJnItPnJ0c19jb25zKTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiA+ID4gKwkJKmF2YWls YWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gPiA+ICsJcmV0dXJuIG47DQo+ID4gPiA+ID4gK30N Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNlbmRpZiAvKiBfUklOR19SVFNfRUxFTV9QVlRfSF8g Ki8NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0u aA0KPiA+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaCBpbmRleCA1NzM0 NGQ0N2QuLjExOWI1YzBiNiAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX3Jpbmcv cnRlX3JpbmdfZWxlbS5oDQo+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n X2VsZW0uaA0KPiA+ID4gPiA+IEBAIC0yMSw2ICsyMSw3IEBAIGV4dGVybiAiQyIgew0KPiA+ID4g PiA+ICAjZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX3JpbmdfY29y ZS5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cmluZ19lbGVtX3B2dC5oPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBDYWxjdWxhdGUgdGhlIG1lbW9yeSBzaXplIG5l ZWRlZCBmb3IgYSByaW5nIHdpdGggZ2l2ZW4gZWxlbWVudA0KPiA+ID4gPiA+IHNpemUgQEAgLTEw NSwzNzkgKzEwNiw2IEBAIHNzaXplX3QNCj4gPiA+ID4gcnRlX3JpbmdfZ2V0X21lbXNpemVfZWxl bSh1bnNpZ25lZA0KPiA+ID4gPiA+IGludCBlc2l6ZSwgdW5zaWduZWQgaW50IGNvdW50KTsgIHN0 cnVjdCBydGVfcmluZw0KPiAqcnRlX3JpbmdfY3JlYXRlX2VsZW0oY29uc3QNCj4gPiA+ID4gY2hh ciAqbmFtZSwgdW5zaWduZWQgaW50IGVzaXplLA0KPiA+ID4gPiA+ICAJCQl1bnNpZ25lZCBpbnQg Y291bnQsIGludCBzb2NrZXRfaWQsIHVuc2lnbmVkDQo+IGludCBmbGFncyk7DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+IC1f X3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfMzIoc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB1aW50 MzJfdA0KPiBzaXplLA0KPiA+ID4gPiA+IC0JCXVpbnQzMl90IGlkeCwgY29uc3Qgdm9pZCAqb2Jq X3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gPiA+IC17DQo+ID4gPiA+ID4gLQl1bnNpZ25lZCBp bnQgaTsNCj4gPiA+ID4gPiAtCXVpbnQzMl90ICpyaW5nID0gKHVpbnQzMl90ICopJnJbMV07DQo+ ID4gPiA+ID4gLQljb25zdCB1aW50MzJfdCAqb2JqID0gKGNvbnN0IHVpbnQzMl90ICopb2JqX3Rh YmxlOw0KPiA+ID4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+ID4g PiAtCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHg3KTsgaSArPSA4LCBpZHggKz0gOCkgew0KPiA+ ID4gPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4ICsg MV0gPSBvYmpbaSArIDFdOw0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeCArIDJdID0gb2JqW2kgKyAy XTsNCj4gPiA+ID4gPiAtCQkJcmluZ1tpZHggKyAzXSA9IG9ialtpICsgM107DQo+ID4gPiA+ID4g LQkJCXJpbmdbaWR4ICsgNF0gPSBvYmpbaSArIDRdOw0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeCAr IDVdID0gb2JqW2kgKyA1XTsNCj4gPiA+ID4gPiAtCQkJcmluZ1tpZHggKyA2XSA9IG9ialtpICsg Nl07DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4ICsgN10gPSBvYmpbaSArIDddOw0KPiA+ID4gPiA+ IC0JCX0NCj4gPiA+ID4gPiAtCQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiA+ID4gPiAtCQljYXNl IDc6DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdo ICovDQo+ID4gPiA+ID4gLQkJY2FzZSA2Og0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9i altpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0JCWNhc2UgNToNCj4gPiA+ID4g PiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4g PiAtCQljYXNlIDQ6DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZh bGx0aHJvdWdoICovDQo+ID4gPiA+ID4gLQkJY2FzZSAzOg0KPiA+ID4gPiA+IC0JCQlyaW5nW2lk eCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0JCWNhc2UgMjoN Cj4gPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ID4gPiAtCQljYXNlIDE6DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2kr K107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiA+ID4gLQkJfQ0KPiA+ID4gPiA+IC0JfSBlbHNl IHsNCj4gPiA+ID4gPiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ ID4gPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gPiA+ID4gLQkJLyogU3RhcnQgYXQg dGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywg aWR4KyspDQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ID4gPiAtCX0N Cj4gPiA+ID4gPiAtfQ0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5 c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+IC1fX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfNjQoc3Ry dWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdA0KPiBwcm9kX2hlYWQsDQo+ID4gPiA+ID4gLQkJY29u c3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gPiA+IC17DQo+ID4gPiA+ID4g LQl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gPiAtCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5z aXplOw0KPiA+ID4gPiA+IC0JdWludDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4g PiA+ID4gPiAtCXVpbnQ2NF90ICpyaW5nID0gKHVpbnQ2NF90ICopJnJbMV07DQo+ID4gPiA+ID4g LQljb25zdCB1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9IChjb25zdCB1bmFsaWduZWRfdWludDY0 X3QNCj4gPiA+ID4gKilvYmpfdGFibGU7DQo+ID4gPiA+ID4gLQlpZiAobGlrZWx5KGlkeCArIG4g PCBzaXplKSkgew0KPiA+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDMpOyBpICs9 IDQsIGlkeCArPSA0KSB7DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ ID4gPiAtCQkJcmluZ1tpZHggKyAxXSA9IG9ialtpICsgMV07DQo+ID4gPiA+ID4gLQkJCXJpbmdb aWR4ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeCArIDNdID0gb2Jq W2kgKyAzXTsNCj4gPiA+ID4gPiAtCQl9DQo+ID4gPiA+ID4gLQkJc3dpdGNoIChuICYgMHgzKSB7 DQo+ID4gPiA+ID4gLQkJY2FzZSAzOg0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9ialtp KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0JCWNhc2UgMjoNCj4gPiA+ID4gPiAt CQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiAt CQljYXNlIDE6DQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107DQo+ID4gPiA+ ID4gLQkJfQ0KPiA+ID4gPiA+IC0JfSBlbHNlIHsNCj4gPiA+ID4gPiAtCQlmb3IgKGkgPSAwOyBp ZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07 DQo+ID4gPiA+ID4gLQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+IC0J CWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ID4gLQkJCXJpbmdbaWR4 XSA9IG9ialtpXTsNCj4gPiA+ID4gPiAtCX0NCj4gPiA+ID4gPiAtfQ0KPiA+ID4gPiA+IC0NCj4g PiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiA+IC1fX3J0 ZV9yaW5nX2VucXVldWVfZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QNCj4g cHJvZF9oZWFkLA0KPiA+ID4gPiA+IC0JCWNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3Qg bikNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ID4g LQljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGlk eCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiA+ID4gLQlydGVfaW50MTI4X3QgKnJpbmcg PSAocnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gPiA+ID4gLQljb25zdCBydGVfaW50MTI4X3Qg Km9iaiA9IChjb25zdCBydGVfaW50MTI4X3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ID4gLQlpZiAo bGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAo biAmIH4weDEpOyBpICs9IDIsIGlkeCArPSAyKQ0KPiA+ID4gPiA+IC0JCQltZW1jcHkoKHZvaWQg KikocmluZyArIGlkeCksDQo+ID4gPiA+ID4gLQkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwg MzIpOw0KPiA+ID4gPiA+IC0JCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ID4gPiA+IC0JCWNhc2Ug MToNCj4gPiA+ID4gPiAtCQkJbWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gPiA+ IC0JCQkJKGNvbnN0IHZvaWQgKikob2JqICsgaSksIDE2KTsNCj4gPiA+ID4gPiAtCQl9DQo+ID4g PiA+ID4gLQl9IGVsc2Ugew0KPiA+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkr KywgaWR4KyspDQo+ID4gPiA+ID4gLQkJCW1lbWNweSgodm9pZCAqKShyaW5nICsgaWR4KSwNCj4g PiA+ID4gPiAtCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAxNik7DQo+ID4gPiA+ID4gLQkJ LyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiA+IC0JCWZvciAoaWR4ID0gMDsg aSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ID4gLQkJCW1lbWNweSgodm9pZCAqKShyaW5nICsg aWR4KSwNCj4gPiA+ID4gPiAtCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAxNik7DQo+ID4g PiA+ID4gLQl9DQo+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLS8qIHRoZSBh Y3R1YWwgZW5xdWV1ZSBvZiBlbGVtZW50cyBvbiB0aGUgcmluZy4NCj4gPiA+ID4gPiAtICogUGxh Y2VkIGhlcmUgc2luY2UgaWRlbnRpY2FsIGNvZGUgbmVlZGVkIGluIGJvdGgNCj4gPiA+ID4gPiAt ICogc2luZ2xlIGFuZCBtdWx0aSBwcm9kdWNlciBlbnF1ZXVlIGZ1bmN0aW9ucy4NCj4gPiA+ID4g PiAtICovDQo+ID4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ ID4gPiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHN0cnVjdCBydGVfcmluZyAqciwgdWludDMy X3QgcHJvZF9oZWFkLA0KPiA+ID4gPiA+IC0JCWNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMy X3QgZXNpemUsIHVpbnQzMl90IG51bSkNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0JLyogOEIg YW5kIDE2QiBjb3BpZXMgaW1wbGVtZW50ZWQgaW5kaXZpZHVhbGx5IHRvIHJldGFpbg0KPiA+ID4g PiA+IC0JICogdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UuDQo+ID4gPiA+ID4gLQkgKi8NCj4gPiA+ ID4gPiAtCWlmIChlc2l6ZSA9PSA4KQ0KPiA+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5xdWV1ZV9l bGVtc182NChyLCBwcm9kX2hlYWQsDQo+IG9ial90YWJsZSwNCj4gPiA+ID4gbnVtKTsNCj4gPiA+ ID4gPiAtCWVsc2UgaWYgKGVzaXplID09IDE2KQ0KPiA+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5x dWV1ZV9lbGVtc18xMjgociwgcHJvZF9oZWFkLA0KPiBvYmpfdGFibGUsDQo+ID4gPiA+IG51bSk7 DQo+ID4gPiA+ID4gLQllbHNlIHsNCj4gPiA+ID4gPiAtCQl1aW50MzJfdCBpZHgsIHNjYWxlLCBu cl9pZHgsIG5yX251bSwgbnJfc2l6ZTsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQkJLyogTm9y bWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gPiA+ID4gLQkJc2NhbGUgPSBlc2l6ZSAvIHNpemVv Zih1aW50MzJfdCk7DQo+ID4gPiA+ID4gLQkJbnJfbnVtID0gbnVtICogc2NhbGU7DQo+ID4gPiA+ ID4gLQkJaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ID4gPiAtCQlucl9pZHggPSBp ZHggKiBzY2FsZTsNCj4gPiA+ID4gPiAtCQlucl9zaXplID0gci0+c2l6ZSAqIHNjYWxlOw0KPiA+ ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18zMihyLCBucl9zaXplLCBucl9pZHgs DQo+ID4gPiA+ID4gLQkJCQlvYmpfdGFibGUsIG5yX251bSk7DQo+ID4gPiA+ID4gLQl9DQo+ID4g PiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHZvaWQNCj4gPiA+ID4gPiAtX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMyKHN0cnVjdCBy dGVfcmluZyAqciwgY29uc3QgdWludDMyX3QNCj4gc2l6ZSwNCj4gPiA+ID4gPiAtCQl1aW50MzJf dCBpZHgsIHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiA+ID4gPiAtew0KPiA+ID4g PiA+IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ID4gLQl1aW50MzJfdCAqcmluZyA9ICh1aW50 MzJfdCAqKSZyWzFdOw0KPiA+ID4gPiA+IC0JdWludDMyX3QgKm9iaiA9ICh1aW50MzJfdCAqKW9i al90YWJsZTsNCj4gPiA+ID4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4g PiA+ID4gLQkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Nyk7IGkgKz0gOCwgaWR4ICs9IDgpIHsN Cj4gPiA+ID4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ID4gPiA+IC0JCQlvYmpbaSAr IDFdID0gcmluZ1tpZHggKyAxXTsNCj4gPiA+ID4gPiAtCQkJb2JqW2kgKyAyXSA9IHJpbmdbaWR4 ICsgMl07DQo+ID4gPiA+ID4gLQkJCW9ialtpICsgM10gPSByaW5nW2lkeCArIDNdOw0KPiA+ID4g PiA+IC0JCQlvYmpbaSArIDRdID0gcmluZ1tpZHggKyA0XTsNCj4gPiA+ID4gPiAtCQkJb2JqW2kg KyA1XSA9IHJpbmdbaWR4ICsgNV07DQo+ID4gPiA+ID4gLQkJCW9ialtpICsgNl0gPSByaW5nW2lk eCArIDZdOw0KPiA+ID4gPiA+IC0JCQlvYmpbaSArIDddID0gcmluZ1tpZHggKyA3XTsNCj4gPiA+ ID4gPiAtCQl9DQo+ID4gPiA+ID4gLQkJc3dpdGNoIChuICYgMHg3KSB7DQo+ID4gPiA+ID4gLQkJ Y2FzZSA3Og0KPiA+ID4gPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ID4gPiA+IC0JCWNhc2UgNjoNCj4gPiA+ID4gPiAtCQkJb2JqW2krK10gPSBy aW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiAtCQljYXNlIDU6DQo+ID4g PiA+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4g PiA+ID4gLQkJY2FzZSA0Og0KPiA+ID4gPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAv KiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0JCWNhc2UgMzoNCj4gPiA+ID4gPiAtCQkJb2Jq W2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gPiAtCQljYXNl IDI6DQo+ID4gPiA+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdo ICovDQo+ID4gPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdb aWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0JCX0NCj4gPiA+ID4gPiAtCX0g ZWxzZSB7DQo+ID4gPiA+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykN Cj4gPiA+ID4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ID4gPiA+IC0JCS8qIFN0YXJ0 IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiA+ID4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBp KyssIGlkeCsrKQ0KPiA+ID4gPiA+IC0JCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ID4g LQl9DQo+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gPiAtX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzY0 KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QNCj4gcHJvZF9oZWFkLA0KPiA+ID4gPiA+IC0J CXZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0J dW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ID4gLQljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6 ZTsNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4g PiA+ID4gLQl1aW50NjRfdCAqcmluZyA9ICh1aW50NjRfdCAqKSZyWzFdOw0KPiA+ID4gPiA+IC0J dW5hbGlnbmVkX3VpbnQ2NF90ICpvYmogPSAodW5hbGlnbmVkX3VpbnQ2NF90ICopb2JqX3RhYmxl Ow0KPiA+ID4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+ID4gPiAt CQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgzKTsgaSArPSA0LCBpZHggKz0gNCkgew0KPiA+ID4g PiA+IC0JCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ID4gLQkJCW9ialtpICsgMV0gPSBy aW5nW2lkeCArIDFdOw0KPiA+ID4gPiA+IC0JCQlvYmpbaSArIDJdID0gcmluZ1tpZHggKyAyXTsN Cj4gPiA+ID4gPiAtCQkJb2JqW2kgKyAzXSA9IHJpbmdbaWR4ICsgM107DQo+ID4gPiA+ID4gLQkJ fQ0KPiA+ID4gPiA+IC0JCXN3aXRjaCAobiAmIDB4Mykgew0KPiA+ID4gPiA+IC0JCWNhc2UgMzoN Cj4gPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ID4gPiAtCQljYXNlIDI6DQo+ID4gPiA+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgr K107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gPiA+IC0J CQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiA+IC0J CX0NCj4gPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4gPiA+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwg c2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ID4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ ID4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiA+ID4gPiAtCQlmb3Ig KGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiA+IC0JCQlvYmpbaV0gPSByaW5n W2lkeF07DQo+ID4gPiA+ID4gLQl9DQo+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gPiAtX19ydGVfcmlu Z19kZXF1ZXVlX2VsZW1zXzEyOChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90DQo+IHByb2Rf aGVhZCwNCj4gPiA+ID4gPiAtCQl2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiA+ ID4gLXsNCj4gPiA+ID4gPiAtCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiA+IC0JY29uc3QgdWlu dDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4gPiA+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hl YWQgJiByLT5tYXNrOw0KPiA+ID4gPiA+IC0JcnRlX2ludDEyOF90ICpyaW5nID0gKHJ0ZV9pbnQx MjhfdCAqKSZyWzFdOw0KPiA+ID4gPiA+IC0JcnRlX2ludDEyOF90ICpvYmogPSAocnRlX2ludDEy OF90ICopb2JqX3RhYmxlOw0KPiA+ID4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkp IHsNCj4gPiA+ID4gPiAtCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgxKTsgaSArPSAyLCBpZHgg Kz0gMikNCj4gPiA+ID4gPiAtCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShy aW5nICsgaWR4KSwNCj4gMzIpOw0KPiA+ID4gPiA+IC0JCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ ID4gPiA+IC0JCWNhc2UgMToNCj4gPiA+ID4gPiAtCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkp LCAodm9pZCAqKShyaW5nICsgaWR4KSwNCj4gMTYpOw0KPiA+ID4gPiA+IC0JCX0NCj4gPiA+ID4g PiAtCX0gZWxzZSB7DQo+ID4gPiA+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBp ZHgrKykNCj4gPiA+ID4gPiAtCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShy aW5nICsgaWR4KSwNCj4gMTYpOw0KPiA+ID4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5p bmcgKi8NCj4gPiA+ID4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ ID4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgp LA0KPiAxNik7DQo+ID4gPiA+ID4gLQl9DQo+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4g PiA+ID4gLS8qIHRoZSBhY3R1YWwgZGVxdWV1ZSBvZiBlbGVtZW50cyBmcm9tIHRoZSByaW5nLg0K PiA+ID4gPiA+IC0gKiBQbGFjZWQgaGVyZSBzaW5jZSBpZGVudGljYWwgY29kZSBuZWVkZWQgaW4g Ym90aA0KPiA+ID4gPiA+IC0gKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1Y2VyIGVucXVldWUgZnVu Y3Rpb25zLg0KPiA+ID4gPiA+IC0gKi8NCj4gPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdm9pZA0KPiA+ID4gPiA+IC1fX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMoc3RydWN0IHJ0 ZV9yaW5nICpyLCB1aW50MzJfdCBjb25zX2hlYWQsDQo+ID4gPiA+ID4gLQkJdm9pZCAqb2JqX3Rh YmxlLCB1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbnVtKQ0KPiA+ID4gPiA+IC17DQo+ID4gPiA+ ID4gLQkvKiA4QiBhbmQgMTZCIGNvcGllcyBpbXBsZW1lbnRlZCBpbmRpdmlkdWFsbHkgdG8gcmV0 YWluDQo+ID4gPiA+ID4gLQkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4gPiA+ID4gPiAt CSAqLw0KPiA+ID4gPiA+IC0JaWYgKGVzaXplID09IDgpDQo+ID4gPiA+ID4gLQkJX19ydGVfcmlu Z19kZXF1ZXVlX2VsZW1zXzY0KHIsIGNvbnNfaGVhZCwNCj4gb2JqX3RhYmxlLA0KPiA+ID4gPiBu dW0pOw0KPiA+ID4gPiA+IC0JZWxzZSBpZiAoZXNpemUgPT0gMTYpDQo+ID4gPiA+ID4gLQkJX19y dGVfcmluZ19kZXF1ZXVlX2VsZW1zXzEyOChyLCBjb25zX2hlYWQsDQo+IG9ial90YWJsZSwNCj4g PiA+ID4gbnVtKTsNCj4gPiA+ID4gPiAtCWVsc2Ugew0KPiA+ID4gPiA+IC0JCXVpbnQzMl90IGlk eCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ID4gPiA+IC0NCj4gPiA+ID4g PiAtCQkvKiBOb3JtYWxpemUgdG8gdWludDMyX3QgKi8NCj4gPiA+ID4gPiAtCQlzY2FsZSA9IGVz aXplIC8gc2l6ZW9mKHVpbnQzMl90KTsNCj4gPiA+ID4gPiAtCQlucl9udW0gPSBudW0gKiBzY2Fs ZTsNCj4gPiA+ID4gPiAtCQlpZHggPSBjb25zX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gPiA+IC0J CW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0KPiA+ID4gPiA+IC0JCW5yX3NpemUgPSByLT5zaXplICog c2NhbGU7DQo+ID4gPiA+ID4gLQkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMyKHIsIG5yX3Np emUsIG5yX2lkeCwNCj4gPiA+ID4gPiAtCQkJCW9ial90YWJsZSwgbnJfbnVtKTsNCj4gPiA+ID4g PiAtCX0NCj4gPiA+ID4gPiAtfQ0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtLyogQmV0d2VlbiBs b2FkIGFuZCBsb2FkLiB0aGVyZSBtaWdodCBiZSBjcHUgcmVvcmRlciBpbiB3ZWFrDQo+IG1vZGVs DQo+ID4gPiA+ID4gLSAqIChwb3dlcnBjL2FybSkuDQo+ID4gPiA+ID4gLSAqIFRoZXJlIGFyZSAy IGNob2ljZXMgZm9yIHRoZSB1c2Vycw0KPiA+ID4gPiA+IC0gKiAxLnVzZSBybWIoKSBtZW1vcnkg YmFycmllcg0KPiA+ID4gPiA+IC0gKiAyLnVzZSBvbmUtZGlyZWN0aW9uIGxvYWRfYWNxdWlyZS9z dG9yZV9yZWxlYXNlIGJhcnJpZXINCj4gPiA+ID4gPiAtICogSXQgZGVwZW5kcyBvbiBwZXJmb3Jt YW5jZSB0ZXN0IHJlc3VsdHMuDQo+ID4gPiA+ID4gLSAqIEJ5IGRlZmF1bHQsIG1vdmUgY29tbW9u IGZ1bmN0aW9ucyB0byBydGVfcmluZ19nZW5lcmljLmgNCj4gPiA+ID4gPiAtICovDQo+ID4gPiA+ ID4gLSNpZmRlZiBSVEVfVVNFX0MxMV9NRU1fTU9ERUwNCj4gPiA+ID4gPiAtI2luY2x1ZGUgInJ0 ZV9yaW5nX2MxMV9tZW0uaCINCj4gPiA+ID4gPiAtI2Vsc2UNCj4gPiA+ID4gPiAtI2luY2x1ZGUg InJ0ZV9yaW5nX2dlbmVyaWMuaCINCj4gPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+ID4gLQ0KPiA+ ID4gPiA+IC0vKioNCj4gPiA+ID4gPiAtICogQGludGVybmFsIEVucXVldWUgc2V2ZXJhbCBvYmpl Y3RzIG9uIHRoZSByaW5nDQo+ID4gPiA+ID4gLSAqDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSByDQo+ ID4gPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4g PiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byBhIHRh YmxlIG9mIG9iamVjdHMuDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiA+IC0g KiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0 aXBsZSBvZiA0Lg0KPiA+ID4gPiA+IC0gKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1 c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLg0KPiBPdGhlcndpc2UNCj4gPiA+ID4gPiAtICog ICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ ID4gPiA+IC0gKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJv bSB0aGUgb2JqX3RhYmxlLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4g PiAtICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBv ZiBpdGVtcw0KPiBmcm9tIGENCj4gPiA+ID4gcmluZw0KPiA+ID4gPiA+IC0gKiAgIFJURV9SSU5H X1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMNCj4gcG9zc2libGUNCj4g PiA+ID4gZnJvbSByaW5nDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBpc19zcA0KPiA+ID4gPiA+IC0g KiAgIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUgcHJvZHVjZXIgb3IgbXVsdGktcHJv ZHVjZXIgaGVhZA0KPiA+ID4gPiB1cGRhdGUNCj4gPiA+ID4gPiAtICogQHBhcmFtIGZyZWVfc3Bh Y2UNCj4gPiA+ID4gPiAtICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhl IGVucXVldWUgb3BlcmF0aW9uIGhhcw0KPiBmaW5pc2hlZA0KPiA+ID4gPiA+IC0gKiBAcmV0dXJu DQo+ID4gPiA+ID4gLSAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiA+ ID4gPiA+IC0gKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdp bGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiA+ID4gLSAqLw0KPiA+ID4gPiA+IC1zdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gPiAtX19ydGVfcmluZ19kb19l bnF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lkDQo+ICpvYmpfdGFibGUs DQo+ID4gPiA+ID4gLQkJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwNCj4gPiA+ ID4gPiAtCQllbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLCB1bnNpZ25lZA0K PiBpbnQgaXNfc3AsDQo+ID4gPiA+ID4gLQkJdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiA+ ID4gPiA+IC17DQo+ID4gPiA+ID4gLQl1aW50MzJfdCBwcm9kX2hlYWQsIHByb2RfbmV4dDsNCj4g PiA+ID4gPiAtCXVpbnQzMl90IGZyZWVfZW50cmllczsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4g LQluID0gX19ydGVfcmluZ19tb3ZlX3Byb2RfaGVhZChyLCBpc19zcCwgbiwgYmVoYXZpb3IsDQo+ ID4gPiA+ID4gLQkJCSZwcm9kX2hlYWQsICZwcm9kX25leHQsICZmcmVlX2VudHJpZXMpOw0KPiA+ ID4gPiA+IC0JaWYgKG4gPT0gMCkNCj4gPiA+ID4gPiAtCQlnb3RvIGVuZDsNCj4gPiA+ID4gPiAt DQo+ID4gPiA+ID4gLQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwgcHJvZF9oZWFkLCBvYmpf dGFibGUsIGVzaXplLA0KPiBuKTsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlfX3J0ZV9yaW5n X3VwZGF0ZV90YWlsKCZyLT5wcm9kLCBwcm9kX2hlYWQsIHByb2RfbmV4dCwNCj4gaXNfc3AsIDEp Ow0KPiA+ID4gPiA+IC1lbmQ6DQo+ID4gPiA+ID4gLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0K PiA+ID4gPiA+IC0JCSpmcmVlX3NwYWNlID0gZnJlZV9lbnRyaWVzIC0gbjsNCj4gPiA+ID4gPiAt CXJldHVybiBuOw0KPiA+ID4gPiA+IC19DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0vKioNCj4g PiA+ID4gPiAtICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIHJp bmcNCj4gPiA+ID4gPiAtICoNCj4gPiA+ID4gPiAtICogQHBhcmFtIHINCj4gPiA+ID4gPiAtICog ICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0g b2JqX3RhYmxlDQo+ID4gPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0 cy4NCj4gPiA+ID4gPiAtICogQHBhcmFtIGVzaXplDQo+ID4gPiA+ID4gLSAqICAgVGhlIHNpemUg b2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ ID4gPiA+ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3Jl YXRpbmcgdGhlIHJpbmcuDQo+IE90aGVyd2lzZQ0KPiA+ID4gPiA+IC0gKiAgIHRoZSByZXN1bHRz IGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBuDQo+ID4gPiA+ID4gLSAqICAg VGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+ID4gPiAt ICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6 ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMNCj4gZnJvbSBhDQo+ID4gPiA+IHJp bmcNCj4gPiA+ID4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBt YW55IGl0ZW1zIGFzDQo+IHBvc3NpYmxlDQo+ID4gPiA+IGZyb20gcmluZw0KPiA+ID4gPiA+IC0g KiBAcGFyYW0gaXNfc2MNCj4gPiA+ID4gPiAtICogICBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2Ug c2luZ2xlIGNvbnN1bWVyIG9yIG11bHRpLWNvbnN1bWVyDQo+IGhlYWQNCj4gPiA+ID4gdXBkYXRl DQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiA+ID4gPiAtICogICByZXR1cm5z IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZQ0K PiBoYXMNCj4gPiA+ID4gZmluaXNoZWQNCj4gPiA+ID4gPiAtICogQHJldHVybg0KPiA+ID4gPiA+ IC0gKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiA+ID4gPiA+IC0g KiAgICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAw IG9yIG4gb25seS4NCj4gPiA+ID4gPiAtICovDQo+ID4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiA+IC1fX3J0ZV9yaW5nX2RvX2RlcXVldWVf ZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+ID4gPiAtCQl1 bnNpZ25lZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBuLA0KPiA+ID4gPiA+IC0JCWVudW0gcnRl X3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVuc2lnbmVkDQo+IGludCBpc19zYywNCj4g PiA+ID4gPiAtCQl1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZSkNCj4gPiA+ID4gPiAtew0KPiA+ID4g PiA+IC0JdWludDMyX3QgY29uc19oZWFkLCBjb25zX25leHQ7DQo+ID4gPiA+ID4gLQl1aW50MzJf dCBlbnRyaWVzOw0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtCW4gPSBfX3J0ZV9yaW5nX21vdmVf Y29uc19oZWFkKHIsIChpbnQpaXNfc2MsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiA+IC0JCQkmY29u c19oZWFkLCAmY29uc19uZXh0LCAmZW50cmllcyk7DQo+ID4gPiA+ID4gLQlpZiAobiA9PSAwKQ0K PiA+ID4gPiA+IC0JCWdvdG8gZW5kOw0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtCV9fcnRlX3Jp bmdfZGVxdWV1ZV9lbGVtcyhyLCBjb25zX2hlYWQsIG9ial90YWJsZSwgZXNpemUsDQo+IG4pOw0K PiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtCV9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoJnItPmNvbnMs IGNvbnNfaGVhZCwgY29uc19uZXh0LA0KPiBpc19zYywgMCk7DQo+ID4gPiA+ID4gLQ0KPiA+ID4g PiA+IC1lbmQ6DQo+ID4gPiA+ID4gLQlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiA+ID4g LQkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gPiA+IC0JcmV0dXJuIG47DQo+ID4g PiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBFbnF1 ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgcmluZyAobXVsdGktcHJvZHVjZXJzIHNhZmUpLg0K PiA+ID4gPiA+ICAgKg0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmdfaHRzLmgNCj4gPiA+ID4gPiBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHMuaCBp bmRleCAzNTliMTU3NzEuLmJkYmRhZmM5ZiAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9saWIvbGli cnRlX3JpbmcvcnRlX3JpbmdfaHRzLmgNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX3Jpbmcv cnRlX3JpbmdfaHRzLmgNCj4gPiA+ID4gPiBAQCAtMjksODkgKzI5LDcgQEANCj4gPiA+ID4gPiAg ZXh0ZXJuICJDIiB7DQo+ID4gPiA+ID4gICNlbmRpZg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gLSNp bmNsdWRlIDxydGVfcmluZ19odHNfYzExX21lbS5oPg0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAt LyoqDQo+ID4gPiA+ID4gLSAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0 aGUgSFRTIHJpbmcuDQo+ID4gPiA+ID4gLSAqDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSByDQo+ID4g PiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gPiAt ICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byBhIHRhYmxl IG9mIG9iamVjdHMuDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiA+IC0gKiAg IFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBs ZSBvZiA0Lg0KPiA+ID4gPiA+IC0gKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2Vk IHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLg0KPiBPdGhlcndpc2UNCj4gPiA+ID4gPiAtICogICB0 aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4g PiA+IC0gKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0 aGUgb2JqX3RhYmxlLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gPiAt ICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBp dGVtcw0KPiBmcm9tIGENCj4gPiA+ID4gcmluZw0KPiA+ID4gPiA+IC0gKiAgIFJURV9SSU5HX1FV RVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMNCj4gcG9zc2libGUNCj4gPiA+ ID4gZnJvbSByaW5nDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiA+ID4g LSAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJh dGlvbiBoYXMNCj4gZmluaXNoZWQNCj4gPiA+ID4gPiAtICogQHJldHVybg0KPiA+ID4gPiA+IC0g KiAgIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiA+ID4gPiAtICogICBJ ZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBv bmx5Lg0KPiA+ID4gPiA+IC0gKi8NCj4gPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ID4gLV9fcnRlX3JpbmdfZG9faHRzX2VucXVldWVfZWxl bShzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQNCj4gPiA+ID4gKm9ial90YWJsZSwNCj4g PiA+ID4gPiAtCXVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVl X2JlaGF2aW9yDQo+IGJlaGF2aW9yLA0KPiA+ID4gPiA+IC0JdWludDMyX3QgKmZyZWVfc3BhY2Up DQo+ID4gPiA+ID4gLXsNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGZyZWUsIGhlYWQ7DQo+ID4gPiA+ ID4gLQ0KPiA+ID4gPiA+IC0JbiA9ICBfX3J0ZV9yaW5nX2h0c19tb3ZlX3Byb2RfaGVhZChyLCBu LCBiZWhhdmlvciwgJmhlYWQsDQo+ICZmcmVlKTsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlp ZiAobiAhPSAwKSB7DQo+ID4gPiA+ID4gLQkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHIsIGhl YWQsIG9ial90YWJsZSwgZXNpemUsDQo+IG4pOw0KPiA+ID4gPiA+IC0JCV9fcnRlX3JpbmdfaHRz X3VwZGF0ZV90YWlsKCZyLT5odHNfcHJvZCwgaGVhZCwgbiwNCj4gMSk7DQo+ID4gPiA+ID4gLQl9 DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0JaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ ID4gPiAtCQkqZnJlZV9zcGFjZSA9IGZyZWUgLSBuOw0KPiA+ID4gPiA+IC0JcmV0dXJuIG47DQo+ ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLS8qKg0KPiA+ID4gPiA+IC0gKiBA aW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgSFRTIHJpbmcuDQo+ID4g PiA+ID4gLSAqDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSByDQo+ID4gPiA+ID4gLSAqICAgQSBwb2lu dGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gPiAtICogQHBhcmFtIG9ial90YWJs ZQ0KPiA+ID4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4g PiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcg ZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gPiA+ IC0gKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRo ZSByaW5nLg0KPiBPdGhlcndpc2UNCj4gPiA+ID4gPiAtICogICB0aGUgcmVzdWx0cyBhcmUgdW5k ZWZpbmVkLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4gPiA+IC0gKiAgIFRoZSBudW1i ZXIgb2Ygb2JqZWN0cyB0byBwdWxsIGZyb20gdGhlIHJpbmcuDQo+ID4gPiA+ID4gLSAqIEBwYXJh bSBiZWhhdmlvcg0KPiA+ID4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBEZXF1 ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zDQo+IGZyb20gYQ0KPiA+ID4gPiByaW5nDQo+ID4g PiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVt cyBhcw0KPiBwb3NzaWJsZQ0KPiA+ID4gPiBmcm9tIHJpbmcNCj4gPiA+ID4gPiAtICogQHBhcmFt IGF2YWlsYWJsZQ0KPiA+ID4gPiA+IC0gKiAgIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5p bmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVlDQo+IGhhcw0KPiA+ID4gPiBmaW5pc2hl ZA0KPiA+ID4gPiA+IC0gKiBAcmV0dXJuDQo+ID4gPiA+ID4gLSAqICAgLSBBY3R1YWwgbnVtYmVy IG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gPiA+ID4gLSAqICAgICBJZiBiZWhhdmlvciA9PSBS VEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiA+ IC0gKi8NCj4gPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50 DQo+ID4gPiA+ID4gLV9fcnRlX3JpbmdfZG9faHRzX2RlcXVldWVfZWxlbShzdHJ1Y3QgcnRlX3Jp bmcgKnIsIHZvaWQNCj4gKm9ial90YWJsZSwNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGVzaXplLCB1 aW50MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yDQo+IGJlaGF2aW9yLA0KPiA+ ID4gPiA+IC0JdWludDMyX3QgKmF2YWlsYWJsZSkNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0J dWludDMyX3QgZW50cmllcywgaGVhZDsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQluID0gX19y dGVfcmluZ19odHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0KPiA+ID4g PiAmZW50cmllcyk7DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0JaWYgKG4gIT0gMCkgew0KPiA+ ID4gPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVz aXplLA0KPiBuKTsNCj4gPiA+ID4gPiAtCQlfX3J0ZV9yaW5nX2h0c191cGRhdGVfdGFpbCgmci0+ aHRzX2NvbnMsIGhlYWQsIG4sDQo+IDApOw0KPiA+ID4gPiA+IC0JfQ0KPiA+ID4gPiA+IC0NCj4g PiA+ID4gPiAtCWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4gPiA+ID4gPiAtCQkqYXZhaWxhYmxl ID0gZW50cmllcyAtIG47DQo+ID4gPiA+ID4gLQlyZXR1cm4gbjsNCj4gPiA+ID4gPiAtfQ0KPiA+ ID4gPiA+ICsjaW5jbHVkZSA8cmluZ19odHNfZWxlbV9wdnQuaD4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+ICAvKioNCj4gPiA+ID4gPiAgICogRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIEhU UyByaW5nIChtdWx0aS1wcm9kdWNlcnMgc2FmZSkuDQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrLmgNCj4gPiA+ID4gPiBiL2xpYi9saWJydGVfcmlu Zy9ydGVfcmluZ19wZWVrLmggaW5kZXggNDVmNzA3ZGM3Li4wZGQ0MDJiZTQgMTAwNjQ0DQo+ID4g PiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaA0KPiA+ID4gPiA+ICsr KyBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrLmgNCj4gPiA+ID4gPiBAQCAtNDgsMzkg KzQ4LDcgQEANCj4gPiA+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ID4gICNlbmRpZg0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gLSNpbmNsdWRlIDxydGVfcmluZ19wZWVrX2MxMV9tZW0uaD4NCj4g PiA+ID4gPiAtDQo+ID4gPiA+ID4gLS8qKg0KPiA+ID4gPiA+IC0gKiBAaW50ZXJuYWwgVGhpcyBm dW5jdGlvbiBtb3ZlcyBwcm9kIGhlYWQgdmFsdWUuDQo+ID4gPiA+ID4gLSAqLw0KPiA+ID4gPiA+ IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gPiAtX19y dGVfcmluZ19kb19lbnF1ZXVlX3N0YXJ0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgbiwN Cj4gPiA+ID4gPiAtCQllbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLCB1aW50 MzJfdA0KPiA+ID4gPiAqZnJlZV9zcGFjZSkNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0JdWlu dDMyX3QgZnJlZSwgaGVhZCwgbmV4dDsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlzd2l0Y2gg KHItPnByb2Quc3luY190eXBlKSB7DQo+ID4gPiA+ID4gLQljYXNlIFJURV9SSU5HX1NZTkNfU1Q6 DQo+ID4gPiA+ID4gLQkJbiA9IF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWQociwNCj4gUlRFX1JJ TkdfU1lOQ19TVCwgbiwNCj4gPiA+ID4gPiAtCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmZy ZWUpOw0KPiA+ID4gPiA+IC0JCWJyZWFrOw0KPiA+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5D X01UX0hUUzoNCj4gPiA+ID4gPiAtCQluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVfcHJvZF9oZWFk KHIsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiA+IC0JCQkmaGVhZCwgJmZyZWUpOw0KPiA+ID4gPiA+ IC0JCWJyZWFrOw0KPiA+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiA+ID4gPiA+ IC0JY2FzZSBSVEVfUklOR19TWU5DX01UX1JUUzoNCj4gPiA+ID4gPiAtCWRlZmF1bHQ6DQo+ID4g PiA+ID4gLQkJLyogdW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxkbid0IGJlIGhlcmUgKi8NCj4gPiA+ ID4gPiAtCQlSVEVfQVNTRVJUKDApOw0KPiA+ID4gPiA+IC0JCW4gPSAwOw0KPiA+ID4gPiA+IC0J CWZyZWUgPSAwOw0KPiA+ID4gPiA+IC0JfQ0KPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiAtCWlmIChm cmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiA+ID4gLQkJKmZyZWVfc3BhY2UgPSBmcmVlIC0gbjsN Cj4gPiA+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gPiA+IC19DQo+ID4gPiA+ID4gKyNpbmNsdWRl IDxyaW5nX3BlZWtfZWxlbV9wdnQuaD4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ ID4gPiAgICogU3RhcnQgdG8gZW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIHJpbmcuDQo+ ID4gPiA+ID4gQEAgLTI0OCw0MyArMjE2LDYgQEAgcnRlX3JpbmdfZW5xdWV1ZV9maW5pc2goc3Ry dWN0IHJ0ZV9yaW5nICpyLA0KPiB2b2lkICoNCj4gPiA+ID4gY29uc3QgKm9ial90YWJsZSwNCj4g PiA+ID4gPiAgCXJ0ZV9yaW5nX2VucXVldWVfZWxlbV9maW5pc2gociwgb2JqX3RhYmxlLA0KPiBz aXplb2YodWludHB0cl90KSwgbik7ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtLyoqDQo+ID4g PiA+ID4gLSAqIEBpbnRlcm5hbCBUaGlzIGZ1bmN0aW9uIG1vdmVzIGNvbnMgaGVhZCB2YWx1ZSBh bmQgY29waWVzIHVwIHRvDQo+ICpuKg0KPiA+ID4gPiA+IC0gKiBvYmplY3RzIGZyb20gdGhlIHJp bmcgdG8gdGhlIHVzZXIgcHJvdmlkZWQgb2JqX3RhYmxlLg0KPiA+ID4gPiA+IC0gKi8NCj4gPiA+ ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ID4g LV9fcnRlX3JpbmdfZG9fZGVxdWV1ZV9zdGFydChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9i al90YWJsZSwNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBuLCBlbnVtIHJ0 ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yDQo+IGJlaGF2aW9yLA0KPiA+ID4gPiA+IC0JdWludDMyX3Qg KmF2YWlsYWJsZSkNCj4gPiA+ID4gPiAtew0KPiA+ID4gPiA+IC0JdWludDMyX3QgYXZhaWwsIGhl YWQsIG5leHQ7DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0Jc3dpdGNoIChyLT5jb25zLnN5bmNf dHlwZSkgew0KPiA+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+ID4gPiA+IC0J CW4gPSBfX3J0ZV9yaW5nX21vdmVfY29uc19oZWFkKHIsDQo+IFJURV9SSU5HX1NZTkNfU1QsIG4s DQo+ID4gPiA+ID4gLQkJCWJlaGF2aW9yLCAmaGVhZCwgJm5leHQsICZhdmFpbCk7DQo+ID4gPiA+ ID4gLQkJYnJlYWs7DQo+ID4gPiA+ID4gLQljYXNlIFJURV9SSU5HX1NZTkNfTVRfSFRTOg0KPiA+ ID4gPiA+IC0JCW4gPSAgX19ydGVfcmluZ19odHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZp b3IsDQo+ID4gPiA+ID4gLQkJCSZoZWFkLCAmYXZhaWwpOw0KPiA+ID4gPiA+IC0JCWJyZWFrOw0K PiA+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiA+ID4gPiA+IC0JY2FzZSBSVEVf UklOR19TWU5DX01UX1JUUzoNCj4gPiA+ID4gPiAtCWRlZmF1bHQ6DQo+ID4gPiA+ID4gLQkJLyog dW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxkbid0IGJlIGhlcmUgKi8NCj4gPiA+ID4gPiAtCQlSVEVf QVNTRVJUKDApOw0KPiA+ID4gPiA+IC0JCW4gPSAwOw0KPiA+ID4gPiA+IC0JCWF2YWlsID0gMDsN Cj4gPiA+ID4gPiAtCX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlpZiAobiAhPSAwKQ0KPiA+ ID4gPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVz aXplLA0KPiBuKTsNCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlpZiAoYXZhaWxhYmxlICE9IE5V TEwpDQo+ID4gPiA+ID4gLQkJKmF2YWlsYWJsZSA9IGF2YWlsIC0gbjsNCj4gPiA+ID4gPiAtCXJl dHVybiBuOw0KPiA+ID4gPiA+IC19DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ ID4gPiAgICogU3RhcnQgdG8gZGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcmluZy4N Cj4gPiA+ID4gPiAgICogTm90ZSB0aGF0IHVzZXIgaGFzIHRvIGNhbGwgYXBwcm9wcmlhdGUgZGVx dWV1ZV9maW5pc2goKSBkaWZmIC0tZ2l0DQo+ID4gPiA+ID4gYS9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmdfcGVla196Yy5oDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVl a196Yy5oDQo+ID4gPiA+ID4gaW5kZXggY2IzYmJkMDY3Li5iYzgyNTJhMTggMTAwNjQ0DQo+ID4g PiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaA0KPiA+ID4gPiA+ ICsrKyBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrX3pjLmgNCj4gPiA+ID4gPiBAQCAt NzIsNyArNzIsNyBAQA0KPiA+ID4gPiA+ICBleHRlcm4gIkMiIHsNCj4gPiA+ID4gPiAgI2VuZGlm DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtI2luY2x1ZGUgPHJ0ZV9yaW5nX3BlZWtfYzExX21lbS5o Pg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cmluZ19wZWVrX2VsZW1fcHZ0Lmg+DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiAgLyoqDQo+ID4gPiA+ID4gICAqIFJpbmcgemVyby1jb3B5IGluZm9ybWF0aW9u IHN0cnVjdHVyZS4NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9y aW5nX3J0cy5oDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzLmggaW5k ZXggYWZjMTJhYmUyLi44M2Q5OTAzZTIgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0 ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oDQo+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0 ZV9yaW5nX3J0cy5oDQo+ID4gPiA+ID4gQEAgLTU2LDg5ICs1Niw3IEBADQo+ID4gPiA+ID4gIGV4 dGVybiAiQyIgew0KPiA+ID4gPiA+ICAjZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IC0jaW5j bHVkZSA8cnRlX3JpbmdfcnRzX2MxMV9tZW0uaD4NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLS8q Kg0KPiA+ID4gPiA+IC0gKiBAaW50ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhl IFJUUyByaW5nLg0KPiA+ID4gPiA+IC0gKg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gcg0KPiA+ID4g PiA+IC0gKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gLSAq IEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBv ZiBvYmplY3RzLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gZXNpemUNCj4gPiA+ID4gPiAtICogICBU aGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUg b2YgNC4NCj4gPiA+ID4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3 aGlsZSBjcmVhdGluZyB0aGUgcmluZy4NCj4gT3RoZXJ3aXNlDQo+ID4gPiA+ID4gLSAqICAgdGhl IHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ID4gPiAtICogQHBhcmFtIG4NCj4gPiA+ID4g PiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhl IG9ial90YWJsZS4NCj4gPiA+ID4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ID4gLSAq ICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRl bXMNCj4gZnJvbSBhDQo+ID4gPiA+IHJpbmcNCj4gPiA+ID4gPiAtICogICBSVEVfUklOR19RVUVV RV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzDQo+IHBvc3NpYmxlDQo+ID4gPiA+ IGZyb20gcmluZw0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiA+IC0g KiAgIHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRp b24gaGFzDQo+IGZpbmlzaGVkDQo+ID4gPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+ID4gPiAtICog ICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gLSAqICAgSWYg YmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25s eS4NCj4gPiA+ID4gPiAtICovDQo+ID4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVuc2lnbmVkIGludA0KPiA+ID4gPiA+IC1fX3J0ZV9yaW5nX2RvX3J0c19lbnF1ZXVlX2VsZW0o c3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lkDQo+ID4gPiA+ICpvYmpfdGFibGUsDQo+ID4g PiA+ID4gLQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9i ZWhhdmlvcg0KPiBiZWhhdmlvciwNCj4gPiA+ID4gPiAtCXVpbnQzMl90ICpmcmVlX3NwYWNlKQ0K PiA+ID4gPiA+IC17DQo+ID4gPiA+ID4gLQl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4gPiA+ IC0NCj4gPiA+ID4gPiAtCW4gPSAgX19ydGVfcmluZ19ydHNfbW92ZV9wcm9kX2hlYWQociwgbiwg YmVoYXZpb3IsICZoZWFkLA0KPiAmZnJlZSk7DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0JaWYg KG4gIT0gMCkgew0KPiA+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtcyhyLCBoZWFk LCBvYmpfdGFibGUsIGVzaXplLA0KPiBuKTsNCj4gPiA+ID4gPiAtCQlfX3J0ZV9yaW5nX3J0c191 cGRhdGVfdGFpbCgmci0+cnRzX3Byb2QpOw0KPiA+ID4gPiA+IC0JfQ0KPiA+ID4gPiA+IC0NCj4g PiA+ID4gPiAtCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiA+ID4gLQkJKmZyZWVfc3Bh Y2UgPSBmcmVlIC0gbjsNCj4gPiA+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gPiA+IC19DQo+ID4g PiA+ID4gLQ0KPiA+ID4gPiA+IC0vKioNCj4gPiA+ID4gPiAtICogQGludGVybmFsIERlcXVldWUg c2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIFJUUyByaW5nLg0KPiA+ID4gPiA+IC0gKg0KPiA+ID4g PiA+IC0gKiBAcGFyYW0gcg0KPiA+ID4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBz dHJ1Y3R1cmUuDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gPiAtICog ICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0g ZXNpemUNCj4gPiA+ID4gPiAtICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVz LiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ID4gPiAtICogICBUaGlzIG11c3Qg YmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4NCj4gT3RoZXJ3 aXNlDQo+ID4gPiA+ID4gLSAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ID4g PiAtICogQHBhcmFtIG4NCj4gPiA+ID4gPiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8g cHVsbCBmcm9tIHRoZSByaW5nLg0KPiA+ID4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ ID4gPiAtICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVxdWV1ZSBhIGZpeGVkIG51bWJl ciBvZiBpdGVtcw0KPiBmcm9tIGENCj4gPiA+ID4gcmluZw0KPiA+ID4gPiA+IC0gKiAgIFJURV9S SU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMNCj4gcG9zc2libGUN Cj4gPiA+ID4gZnJvbSByaW5nDQo+ID4gPiA+ID4gLSAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiA+ ID4gPiAtICogICByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBh ZnRlciB0aGUgZGVxdWV1ZQ0KPiBoYXMNCj4gPiA+ID4gZmluaXNoZWQNCj4gPiA+ID4gPiAtICog QHJldHVybg0KPiA+ID4gPiA+IC0gKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVl dWVkLg0KPiA+ID4gPiA+IC0gKiAgICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklY RUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gPiAtICovDQo+ID4gPiA+ID4g LXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiA+IC1fX3J0 ZV9yaW5nX2RvX3J0c19kZXF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkDQo+ICpv YmpfdGFibGUsDQo+ID4gPiA+ID4gLQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBy dGVfcmluZ19xdWV1ZV9iZWhhdmlvcg0KPiBiZWhhdmlvciwNCj4gPiA+ID4gPiAtCXVpbnQzMl90 ICphdmFpbGFibGUpDQo+ID4gPiA+ID4gLXsNCj4gPiA+ID4gPiAtCXVpbnQzMl90IGVudHJpZXMs IGhlYWQ7DQo+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+IC0JbiA9IF9fcnRlX3JpbmdfcnRzX21vdmVf Y29uc19oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwNCj4gPiA+ID4gJmVudHJpZXMpOw0KPiA+ ID4gPiA+IC0NCj4gPiA+ID4gPiAtCWlmIChuICE9IDApIHsNCj4gPiA+ID4gPiAtCQlfX3J0ZV9y aW5nX2RlcXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwNCj4gbik7DQo+ID4g PiA+ID4gLQkJX19ydGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19jb25zKTsNCj4gPiA+ ID4gPiAtCX0NCj4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gLQlpZiAoYXZhaWxhYmxlICE9IE5VTEwp DQo+ID4gPiA+ID4gLQkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gPiA+IC0JcmV0 dXJuIG47DQo+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiArI2luY2x1ZGUgPHJpbmdfcnRzX2VsZW1f cHZ0Lmg+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgLyoqDQo+ID4gPiA+ID4gICAqIEVucXVldWUg c2V2ZXJhbCBvYmplY3RzIG9uIHRoZSBSVFMgcmluZyAobXVsdGktcHJvZHVjZXJzIHNhZmUpLg0K PiA+ID4gPiA+IC0tDQo+ID4gPiA+ID4gMi4xNy4xDQoNCg==