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 B4FC0A052A; Sun, 24 Jan 2021 13:12:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 34BD1140D3F; Sun, 24 Jan 2021 13:12:21 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150043.outbound.protection.outlook.com [40.107.15.43]) by mails.dpdk.org (Postfix) with ESMTP id 89BDC140D3A for ; Sun, 24 Jan 2021 13:12:19 +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=4dHaO+mlZuYvEcDr20lEutx5fal57/wzU84pQvX6hR0=; b=x5cqruTci2TVKCRlR/jSolkeUneK9u9mGOl5c0ZV9Dt++zoEaVPhq1tI+SpKWBFhOyGeFhkXscqYDsKtPqtyS2hQggnhShJfEJsksK1Ry68251AYdrO88DOHpHcalR2QBqBpzh+jwYSkv0rSRI7jevG8akd/LEiU4PJ29jmzbJk= Received: from AM6P194CA0008.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::21) by AM6PR08MB4437.eurprd08.prod.outlook.com (2603:10a6:20b:bf::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.13; Sun, 24 Jan 2021 12:12:16 +0000 Received: from VE1EUR03FT022.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:90:cafe::58) by AM6P194CA0008.outlook.office365.com (2603:10a6:209:90::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Sun, 24 Jan 2021 12:12:16 +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 VE1EUR03FT022.mail.protection.outlook.com (10.152.18.64) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Sun, 24 Jan 2021 12:12:16 +0000 Received: ("Tessian outbound 587c3d093005:v71"); Sun, 24 Jan 2021 12:12:15 +0000 X-CR-MTA-TID: 64aa7808 Received: from e43527963833.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id DC0B7508-F25A-4B37-8D9A-A0D0D6460193.1; Sun, 24 Jan 2021 12:12:10 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e43527963833.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Sun, 24 Jan 2021 12:12:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I4A3IO+jlMyOxV+5q6fuevGu89j34k/9sMNRzNuSeI8dX0uH9eSKsAeLBubzov6wQ0UQa6hsAbED5AKoyN47FvsPGl8/O7oYRz37a2ec8wYsni89PNwtap99s1LDoC8Bs1PsNu38w3lVCYVXq2TgnAo6Lq5QJC1DE9t39ktGf3w8FWT/BdTU2e4duLxSrbk3L9H3v496SKsmVgV40h/7mD9jBPmI/MmhsVjnGspSi1mIkXxOWzLv2Tg7YYUHWQMK3P8hRjNPHyC6s8VHJmVrlHXLdOwZqkE9jX3wuYXFrxfpf6wA6o8YhXULeI+xtFnpuj/bPOe8BgUreenOV8tfFA== 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=4dHaO+mlZuYvEcDr20lEutx5fal57/wzU84pQvX6hR0=; b=jTRr9pIRP3qzVpAxSzGPB99pvDgMfyR0wtM0u1xzUT41Eypx2jg8w5g5/PNHuF8sAxlm1U+fkKnuajyZ3VlXlJfwXIyLkjrpg7ON7h2egCbX2SfWrwT2ErR7PBrDeXzulvtjMT9lbweMSTRjxFGYaRst5msXxm1Blj3YsrIaA1sFQoRzOXBOHXa1vR78B9aZzPUoWLMyX2kpaypx3SJj5CXWh15RBV1zQfjwLVTGpCUA8brUboCaRhk/o6Uq/ZGHlolp9eShGdSkt6Bzuf7PUeioP1Kv/+6n07kLPAKrukTXRHqvMyPdd8gmDYA9RaE3y+rZtMJc9IO3ybpjAERChw== 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=4dHaO+mlZuYvEcDr20lEutx5fal57/wzU84pQvX6hR0=; b=x5cqruTci2TVKCRlR/jSolkeUneK9u9mGOl5c0ZV9Dt++zoEaVPhq1tI+SpKWBFhOyGeFhkXscqYDsKtPqtyS2hQggnhShJfEJsksK1Ry68251AYdrO88DOHpHcalR2QBqBpzh+jwYSkv0rSRI7jevG8akd/LEiU4PJ29jmzbJk= Received: from DBBPR08MB4411.eurprd08.prod.outlook.com (2603:10a6:10:cb::17) by DBBPR08MB4855.eurprd08.prod.outlook.com (2603:10a6:10:da::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.12; Sun, 24 Jan 2021 12:12:07 +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; Sun, 24 Jan 2021 12:12:06 +0000 From: Feifei Wang To: "Ananyev, Konstantin" , Honnappa Nagarahalli CC: "dev@dpdk.org" , nd , nd Thread-Topic: [PATCH v1 3/3] ring: rename and refactor ring library Thread-Index: AQHW14p51TMYKMfmekCUnEm8kXcjX6oz0FkAgALuO2A= Date: Sun, 24 Jan 2021 12:12:06 +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: B11540FA39F4EE4DA93A5AA2273905C2.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: ee203e8b-835d-4148-deff-08d8c0614a74 x-ms-traffictypediagnostic: DBBPR08MB4855:|AM6PR08MB4437: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: ejYY7/9UElQQKAiKuBsh5aXICRs4xYWVMocUloDR4o9vQMbpnR1082xM/CUoiubSVmWuJrw8ckIg303xP4ctHtTkY4Xu3GdOKc5K3Zo2UstxAAkc59G2kkdPtpbL5DZ/vcue9J83SJZ04iQqci1wicukY7I0yh4Us5FqZgjzyrg8LFDYoVD3j6qsUdZgXGflMEZ5J2i3s2NjV81BzTsNpcLSjDidnD6TejsTHkJLe38aSBWCE9+1YnI09/FhpvSakih/6rp6sPFPKZ2sJNOzbAIh97masVwgBmwVbTglaInLyf+lTyUGrg7phagV5vPmZc4pchSZMdTqkwxYFQexH9/M5ZIiI0gQqWILPC9pNdfCzrZCegI/6naX5TWaENds9EI/F5Pm8k3yfRGVH1C9/rtIgfPW75SRJXMJrC0+oUmxjPKUJomh826iskiNM/cEQTAdM/RbCw844QRgXjuvVixyO1hnS2ZM8m7NolWqMaeU1ekNEncvPWXYaxv6v78Ny6L75Yy1xGNqLSHmuFyzQxyoqYDGgJaSzhderImMUX6ihZ1lKlMfeFfHeS5r8LLAQN1iqurbc+//P+ppM7yxSDZEmwltiqpVXZACu2hj7cM= 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)(366004)(346002)(376002)(39850400004)(396003)(136003)(8936002)(966005)(6506007)(55016002)(6636002)(52536014)(86362001)(9686003)(76116006)(316002)(186003)(4326008)(26005)(110136005)(66946007)(54906003)(64756008)(66476007)(66446008)(66556008)(7696005)(478600001)(33656002)(224303003)(71200400001)(83380400001)(30864003)(2906002)(5660300002)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?L0ROM0pqdWN4NVduL1AvczF1eUNBLzBUeC82THRFVDRsMzFqZ3NXQnZFNU9n?= =?utf-8?B?TThEcEgzVDBpakVrL0tUT25pVk1XUzlTNDk3UEtqSFRJQTlHcWRpaDJHc1hh?= =?utf-8?B?bkVGYlhhTXIyVTVWMWtzQ3JBemV0VTh6TjBKWnJYVCs0Y1hET25Fd1NTcGE2?= =?utf-8?B?Ull1bkMwVXozQW9rdzJlUHJKQ3VrL2E3VCtGTFdkdE9HTERieENweWVYSm9S?= =?utf-8?B?LzYxejl4Nm0vRktuZ3p0ckhkT3NkTEN6OVFjK1daak5Rems3VE1LK2VPMjB0?= =?utf-8?B?TzFlQVFuSjVkcHdURm9OQnhNWjNRYzhjQk94TFJTdlhHSmJvb3ZDbUJqeHBO?= =?utf-8?B?OWdCL0Q5KzhXaWxlVmcxQ3VRRkNuNnlBV1ZNYzJWQ0t0bWtCYlpySkk0dU43?= =?utf-8?B?RWZYNjBEalRyajBvRnJGcDBQWTlzVHV3WEUyQ0hsQ0xGRG9aeUplR1pMT1ds?= =?utf-8?B?RGxZUzFwaUMvbFc0MEVyUWh4Vy9mV2tLcHVBSmpJL2dsdk1NNFhqNEFiTzM3?= =?utf-8?B?NTEyakEvMTQ5K2VsQzZiNHVNbXJORTdVZ1cvV3czZHErSXREdk93M3NERDBF?= =?utf-8?B?Ui9za3RsNjNDZHhBYmVTbmVFWExzb2pyZjF3TXF6enZ5S2l1aTd0bjgxeVEx?= =?utf-8?B?YndGUUFJTGo0WUNqTFNRQXFTQjZ0eThRb0JmMGIrWTZCZnJ0cmRRUDVkU0xo?= =?utf-8?B?NzFlZTY3SkkyMU4zQUhscWp0ci85UjBBUFoyNWM4YXhndnNQREtCZngrakJ1?= =?utf-8?B?MVVJZFduOFZqOG03bHU0Q2F6OVN2UnhqclI1QkhIOVlrWE9rRzRyTnR5NE5p?= =?utf-8?B?V2toSlVDUVd3bEtOQTV6VFlqdjhiRUVxRXZWVFA0NThRanNIbUdRUDYxOGw0?= =?utf-8?B?VXUyZFgxcEY0SG01bVlsUUIxWlN3eG9rL2ozWUxZdDFRTG5jcVpqSFNHQ1F4?= =?utf-8?B?WlY2eFZSU0t2Uzd4M3I4a2RiYTluVVBhYVc1d0Nvd05TY2RpaVlBa2sxNWcx?= =?utf-8?B?ZmVmc3o1K096cko2MnZIZ3hyeEM1MVZibHVQWjBNOHhJL2ZiQW5uMGE1cWtS?= =?utf-8?B?RXI2T3doOU5XT2V5S0pZdTgzeTVIUVZyR3JnS0xVQk5nTWxOYmFYWDJMbDl1?= =?utf-8?B?dy80c05XTTR3V2N3bHpSYU12dTExa0dmYkhSUVZFcnV3dlQ0U1NOcjBDbWd0?= =?utf-8?B?M0dxS0NlaGQwOGlXREJUbnlPNTRZeTJ1WkxTcEhKOUhnRmpCWVJaa0NFRTV3?= =?utf-8?B?aG1vcm90MUhMYmczZ1loMmlJbW00SXFoc2wxRExMcXhzSDU4d0QvS1JlTFh0?= =?utf-8?Q?IgzW2jsTGMThU=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4855 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: VE1EUR03FT022.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 813b0554-78a0-427a-2486-08d8c0614499 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XDMsWNRJRNjUeeCuv2AlMTUQNahDGXQtqk86uwzoD5ijJizh2oddd2Mh3CLJDxWdXyzOpe98p3WRwOoTqIgsMqFVMOPZcXnfQ4wFCF54zv1Efvq6YXtYrvALBN3fznIBFjSerHGEcK6tqMQXpJz53Q/RF0kPI+fTLlbw+gK6yV/CKcWM4cAnRXFcPDajAfRxGH0HjzIlfKFQUGbfNHH3GCnXBRAt9QcF0fBrTNQEqjvPDQJp7jrQu9NaYhxigcD5fWWRRLZWTO6PSCLd7tzS5cJbLdnVVzvyPvl11zGGsoS5pEFWPsyMGcLGT4aQk5tqtWzvcXjyiTiFkzMnKtFTmifH3DQFHfKDBon6j6CdRz9B5mPQpaz6T0ffw6LVLMgF1DlVu33lc9MJeDGTYtUuTnNiBIt0923U+/7dhCuOtenzc4JJwVPH/2LX1YHN/zmrw/ddCHnd4b2q70v7xFFr1ouVvAgkuwdFpwR1MWQ2537u3hCC9w/hVmNpWIQZx3IaSlbN/Vm5V27MzuPAV0fKG9hyT7OtRygA7I/CA3nEQvc= 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)(136003)(376002)(39850400004)(396003)(346002)(46966006)(966005)(6506007)(54906003)(110136005)(86362001)(52536014)(30864003)(81166007)(316002)(26005)(9686003)(478600001)(83380400001)(55016002)(47076005)(70586007)(186003)(70206006)(82310400003)(2906002)(336012)(224303003)(8936002)(356005)(33656002)(7696005)(82740400003)(6636002)(4326008)(5660300002)(579004)(559001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2021 12:12:16.4620 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ee203e8b-835d-4148-deff-08d8c0614a74 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: VE1EUR03FT022.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4437 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 6YCB5pe26Ze0OiAyMDIx5bm0MeaciDIy5pelIDIxOjA5DQo+IOaUtuS7tuS6ujogRmVpZmVpIFdh bmcgPEZlaWZlaS5XYW5nMkBhcm0uY29tPjsgSG9ubmFwcGEgTmFnYXJhaGFsbGkNCj4gPEhvbm5h cHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+DQo+IOaKhOmAgTogZGV2QGRwZGsub3JnOyBuZCA8bmRA YXJtLmNvbT4NCj4g5Li76aKYOiBSRTogW1BBVENIIHYxIDMvM10gcmluZzogcmVuYW1lIGFuZCBy ZWZhY3RvciByaW5nIGxpYnJhcnkNCj4gDQo+IA0KPiA+IEZvciBsZWdhY3kgbW9kZXMsIHJlbmFt ZSByaW5nX2dlbmVyaWMvYzExIHRvIHJpbmdfZ2VuZXJpYy9jMTFfcHZ0Lg0KPiA+IEZ1cnRoZXJt b3JlLCBhZGQgbmV3IGZpbGUgcmluZ19lbGVtX3B2dC5oIHdoaWNoIGluY2x1ZGVzDQo+ID4gcmlu Z19kb19lcS9kZXEgYW5kIHJpbmcgZWxlbWVudCBjb3B5L2RlbGV0ZSBBUElzLg0KPiA+DQo+ID4g Rm9yIG90aGVyIG1vZGVzLCByZW5hbWUgeHhfYzExX21lbSB0byB4eF9lbGVtX3B2dC4gTW92ZSBh bGwgcHJpdmF0ZQ0KPiA+IEFQSXMgaW50byB0aGVzZSBuZXcgaGVhZGVyIGZpbGVzLg0KPiA+DQo+ ID4gU3VnZ2VzdGVkLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxsaSA8SG9ubmFwcGEuTmFnYXJhaGFs bGlAYXJtLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBGZWlmZWkgV2FuZyA8ZmVpZmVpLndhbmcy QGFybS5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxIb25uYXBw YS5OYWdhcmFoYWxsaUBhcm0uY29tPg0KPiA+IFJldmlld2VkLWJ5OiBSdWlmZW5nIFdhbmcgPHJ1 aWZlbmcud2FuZ0Bhcm0uY29tPg0KPiA+IC0tLQ0KPiA+ICBsaWIvbGlicnRlX3JpbmcvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gPiAgLi4uL3tydGVfcmluZ19jMTFf bWVtLmggPT4gcmluZ19jMTFfcHZ0Lmh9ICAgIHwgICA5ICstDQo+ID4gIGxpYi9saWJydGVfcmlu Zy9yaW5nX2VsZW1fcHZ0LmggICAgICAgICAgICAgICB8IDM4NSArKysrKysrKysrKysrKysrKysN Cj4gPiAgLi4ue3J0ZV9yaW5nX2dlbmVyaWMuaCA9PiByaW5nX2dlbmVyaWNfcHZ0Lmh9IHwgICA2 ICstDQo+ID4gIC4uLnJpbmdfaHRzX2MxMV9tZW0uaCA9PiByaW5nX2h0c19lbGVtX3B2dC5ofSB8 ICA4OCArKystDQo+ID4gLi4ubmdfcGVla19jMTFfbWVtLmggPT4gcmluZ19wZWVrX2VsZW1fcHZ0 Lmh9IHwgIDc1ICsrKy0NCj4gPiAuLi5yaW5nX3J0c19jMTFfbWVtLmggPT4gcmluZ19ydHNfZWxl bV9wdnQuaH0gfCAgODggKysrLQ0KPiA+ICBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZWxlbS5o ICAgICAgICAgICAgICAgfCAzNzQgKy0tLS0tLS0tLS0tLS0tLS0NCj4gPiAgbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX2h0cy5oICAgICAgICAgICAgICAgIHwgIDg0ICstLS0NCj4gPiAgbGliL2xp YnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaCAgICAgICAgICAgICAgIHwgIDcxICstLS0NCj4gPiAg bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaCAgICAgICAgICAgIHwgICAyICstDQo+ ID4gIGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHMuaCAgICAgICAgICAgICAgICB8ICA4NCAr LS0tDQo+ID4gIDEyIGZpbGVzIGNoYW5nZWQsIDY0NiBpbnNlcnRpb25zKCspLCA2MzUgZGVsZXRp b25zKC0pICByZW5hbWUNCj4gPiBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX2MxMV9tZW0uaCA9 PiByaW5nX2MxMV9wdnQuaH0gKDk2JSkgIGNyZWF0ZQ0KPiA+IG1vZGUgMTAwNjQ0IGxpYi9saWJy dGVfcmluZy9yaW5nX2VsZW1fcHZ0LmggIHJlbmFtZQ0KPiA+IGxpYi9saWJydGVfcmluZy97cnRl X3JpbmdfZ2VuZXJpYy5oID0+IHJpbmdfZ2VuZXJpY19wdnQuaH0gKDk4JSkNCj4gPiByZW5hbWUg bGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19odHNfYzExX21lbS5oID0+IHJpbmdfaHRzX2VsZW1f cHZ0Lmh9DQo+ID4gKDYwJSkgIHJlbmFtZSBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX3BlZWtf YzExX21lbS5oID0+DQo+ID4gcmluZ19wZWVrX2VsZW1fcHZ0Lmh9ICg2MiUpICByZW5hbWUNCj4g PiBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX3J0c19jMTFfbWVtLmggPT4gcmluZ19ydHNfZWxl bV9wdnQuaH0gKDYyJSkNCj4gPg0KPiANCj4gU29ycnksIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQg dGhlIHB1cnBvc2Ugb2YgdGhhdCBwYXRjaC4NCj4gQXMgSSByZW1lbWJlciBieSBEUERLIG5hbWlu ZyBjb252ZW50aW9uIGFsbCBpbnN0YWxsYWJsZSBoZWFkZXJzIHNob3VsZA0KPiBoYXZlICdydGVf JyBwcmVmaXguIFNhbWUgZm9yIHB1YmxpYyBkZWZpbmVzIChSVEVfKS4NCj4gV2h5IHRvIGFiYW5k b24gaXQgaGVyZT8NCg0KVGhpcyBjaGFuZ2UgcmVmZXJzIHRvIHlvdSBhbmQgSG9ubmFwcGEncyBk aXNjdXNzaW9uIGFib3V0IHJpbmc6DQpodHRwczovL21haWxzLmRwZGsub3JnL2FyY2hpdmVzL2Rl di8yMDIwLU1heS8xNjY4MDMuaHRtbA0KDQpBbmQgaXQgaXMgdG8gc2VwYXJhdGUgdGhlIGV4dGVy bmFsIEFQSXMgdGhhdCBjYW4gYmUgY2FsbGVkIGJ5IHVzZXJzLCANCmZyb20gaW50ZXJuYWwgQVBJ cyB0aGF0IGNhbm5vdCBiZSBjYWxsZWQgYnkgdXNlcnMuIA0KVGhlIGludGVybmFsIGZ1bmN0aW9u cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGVzIHdpdGggeHhfcHZ0LmguDQoNCkJlc3QgUmVnYXJk cw0KRmVpZmVpDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvbWVzb24uYnVp bGQgYi9saWIvbGlicnRlX3JpbmcvbWVzb24uYnVpbGQNCj4gPiBpbmRleCAzNmZkY2I2YTUuLjk4 ZWFjNTgxMCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvbWVzb24uYnVpbGQNCj4g PiArKysgYi9saWIvbGlicnRlX3JpbmcvbWVzb24uYnVpbGQNCj4gPiBAQCAtMiwxNSArMiwxNiBA QA0KPiA+ICAjIENvcHlyaWdodChjKSAyMDE3IEludGVsIENvcnBvcmF0aW9uDQo+ID4NCj4gPiAg c291cmNlcyA9IGZpbGVzKCdydGVfcmluZy5jJykNCj4gPiAtaGVhZGVycyA9IGZpbGVzKCdydGVf cmluZy5oJywNCj4gPiAraGVhZGVycyA9IGZpbGVzKCdyaW5nX2MxMV9wdnQuaCcsDQo+ID4gKwkJ J3JpbmdfZWxlbV9wdnQuaCcsDQo+ID4gKwkJJ3JpbmdfZ2VuZXJpY19wdnQuaCcsDQo+ID4gKwkJ J3JpbmdfaHRzX2VsZW1fcHZ0LmgnLA0KPiA+ICsJCSdyaW5nX3BlZWtfZWxlbV9wdnQuaCcsDQo+ ID4gKwkJJ3JpbmdfcnRzX2VsZW1fcHZ0LmgnLA0KPiA+ICsJCSdydGVfcmluZy5oJywNCj4gPiAg CQkncnRlX3JpbmdfY29yZS5oJywNCj4gPiAgCQkncnRlX3JpbmdfZWxlbS5oJywNCj4gPiAtCQkn cnRlX3JpbmdfYzExX21lbS5oJywNCj4gPiAtCQkncnRlX3JpbmdfZ2VuZXJpYy5oJywNCj4gPiAg CQkncnRlX3JpbmdfaHRzLmgnLA0KPiA+IC0JCSdydGVfcmluZ19odHNfYzExX21lbS5oJywNCj4g PiAgCQkncnRlX3JpbmdfcGVlay5oJywNCj4gPiAtCQkncnRlX3JpbmdfcGVla19jMTFfbWVtLmgn LA0KPiA+ICAJCSdydGVfcmluZ19wZWVrX3pjLmgnLA0KPiA+IC0JCSdydGVfcmluZ19ydHMuaCcs DQo+ID4gLQkJJ3J0ZV9yaW5nX3J0c19jMTFfbWVtLmgnKQ0KPiA+ICsJCSdydGVfcmluZ19ydHMu aCcpDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19jMTFfbWVtLmgN Cj4gPiBiL2xpYi9saWJydGVfcmluZy9yaW5nX2MxMV9wdnQuaCBzaW1pbGFyaXR5IGluZGV4IDk2 JSByZW5hbWUgZnJvbQ0KPiA+IGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19jMTFfbWVtLmgNCj4g PiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfYzExX3B2dC5oIGluZGV4IDdmNWViYTI2 Mi4uOWYyZjUzMThmDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9y aW5nX2MxMV9tZW0uaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9yaW5nX2MxMV9wdnQuaA0K PiA+IEBAIC03LDggKzcsOCBAQA0KPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGgg cGVybWlzc2lvbiBmcm9tIEtpcCBNYWN5Lg0KPiA+ICAgKi8NCj4gPg0KPiA+IC0jaWZuZGVmIF9S VEVfUklOR19DMTFfTUVNX0hfDQo+ID4gLSNkZWZpbmUgX1JURV9SSU5HX0MxMV9NRU1fSF8NCj4g PiArI2lmbmRlZiBfUklOR19DMTFfUFZUX0hfDQo+ID4gKyNkZWZpbmUgX1JJTkdfQzExX1BWVF9I Xw0KPiA+DQo+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAgX19ydGVf cmluZ191cGRhdGVfdGFpbChzdHJ1Y3QgcnRlX3JpbmdfaGVhZHRhaWwgKmh0LCB1aW50MzJfdA0K PiA+IG9sZF92YWwsIEBAIC02OSw5ICs2OSw2IEBAIF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWQo c3RydWN0IHJ0ZV9yaW5nDQo+ICpyLCB1bnNpZ25lZCBpbnQgaXNfc3AsDQo+ID4gIAkJLyogRW5z dXJlIHRoZSBoZWFkIGlzIHJlYWQgYmVmb3JlIHRhaWwgKi8NCj4gPiAgCQlfX2F0b21pY190aHJl YWRfZmVuY2UoX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4NCj4gPiAtCQkvKiBsb2FkLWFjcXVpcmUg c3luY2hyb25pemUgd2l0aCBzdG9yZS1yZWxlYXNlIG9mIGh0LT50YWlsDQo+ID4gLQkJICogaW4g dXBkYXRlX3RhaWwuDQo+ID4gLQkJICovDQo+ID4gIAkJY29uc190YWlsID0gX19hdG9taWNfbG9h ZF9uKCZyLT5jb25zLnRhaWwsDQo+ID4gIAkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4NCj4g PiBAQCAtMTc4LDQgKzE3NSw0IEBAIF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWQoc3RydWN0IHJ0 ZV9yaW5nICpyLCBpbnQNCj4gaXNfc2MsDQo+ID4gIAlyZXR1cm4gbjsNCj4gPiAgfQ0KPiA+DQo+ ID4gLSNlbmRpZiAvKiBfUlRFX1JJTkdfQzExX01FTV9IXyAqLw0KPiA+ICsjZW5kaWYgLyogX1JJ TkdfQzExX1BWVF9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcmluZ19l bGVtX3B2dC5oDQo+ID4gYi9saWIvbGlicnRlX3JpbmcvcmluZ19lbGVtX3B2dC5oIG5ldyBmaWxl IG1vZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAwMDAwLi44MDAzZTVlZGMNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZWxlbV9wdnQuaA0KPiA+IEBA IC0wLDAgKzEsMzg1IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D bGF1c2UNCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE3LDIwMTggSFhULXNlbWl0 ZWNoIENvcnBvcmF0aW9uLg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBLaXAgTWFj eSBrbWFjeUBmcmVlYnNkLm9yZw0KPiA+ICsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsg KiBEZXJpdmVkIGZyb20gRnJlZUJTRCdzIGJ1ZnJpbmcuaA0KPiA+ICsgKiBVc2VkIGFzIEJTRC0z IExpY2Vuc2VkIHdpdGggcGVybWlzc2lvbiBmcm9tIEtpcCBNYWN5Lg0KPiA+ICsgKi8NCj4gPiAr DQo+ID4gKyNpZm5kZWYgX1JJTkdfRUxFTV9QVlRfSF8NCj4gPiArI2RlZmluZSBfUklOR19FTEVN X1BWVF9IXw0KPiA+ICsNCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ ICtfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfMzIoc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB1 aW50MzJfdCBzaXplLA0KPiA+ICsJCXVpbnQzMl90IGlkeCwgY29uc3Qgdm9pZCAqb2JqX3RhYmxl LCB1aW50MzJfdCBuKSB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArCXVpbnQzMl90ICpy aW5nID0gKHVpbnQzMl90ICopJnJbMV07DQo+ID4gKwljb25zdCB1aW50MzJfdCAqb2JqID0gKGNv bnN0IHVpbnQzMl90ICopb2JqX3RhYmxlOw0KPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6 ZSkpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHg3KTsgaSArPSA4LCBpZHggKz0g OCkgew0KPiA+ICsJCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gKwkJCXJpbmdbaWR4ICsgMV0g PSBvYmpbaSArIDFdOw0KPiA+ICsJCQlyaW5nW2lkeCArIDJdID0gb2JqW2kgKyAyXTsNCj4gPiAr CQkJcmluZ1tpZHggKyAzXSA9IG9ialtpICsgM107DQo+ID4gKwkJCXJpbmdbaWR4ICsgNF0gPSBv YmpbaSArIDRdOw0KPiA+ICsJCQlyaW5nW2lkeCArIDVdID0gb2JqW2kgKyA1XTsNCj4gPiArCQkJ cmluZ1tpZHggKyA2XSA9IG9ialtpICsgNl07DQo+ID4gKwkJCXJpbmdbaWR4ICsgN10gPSBvYmpb aSArIDddOw0KPiA+ICsJCX0NCj4gPiArCQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiArCQljYXNl IDc6DQo+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ ID4gKwkJY2FzZSA2Og0KPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ICsJCWNhc2UgNToNCj4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiArCQljYXNlIDQ6DQo+ID4gKwkJCXJpbmdbaWR4KytdID0g b2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gKwkJY2FzZSAzOg0KPiA+ICsJCQlyaW5n W2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ICsJCWNhc2UgMjoNCj4g PiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiArCQlj YXNlIDE6DQo+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICov DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXpl OyBpKyssIGlkeCsrKQ0KPiA+ICsJCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gKwkJLyogU3Rh cnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywg aWR4KyspDQo+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ICtfX3J0ZV9yaW5n X2VucXVldWVfZWxlbXNfNjQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQs DQo+ID4gKwkJY29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ICt7DQo+ID4g Kwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXplOw0K PiA+ICsJdWludDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiArCXVpbnQ2NF90 ICpyaW5nID0gKHVpbnQ2NF90ICopJnJbMV07DQo+ID4gKwljb25zdCB1bmFsaWduZWRfdWludDY0 X3QgKm9iaiA9IChjb25zdCB1bmFsaWduZWRfdWludDY0X3QNCj4gKilvYmpfdGFibGU7DQo+ID4g KwlpZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAo biAmIH4weDMpOyBpICs9IDQsIGlkeCArPSA0KSB7DQo+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtp XTsNCj4gPiArCQkJcmluZ1tpZHggKyAxXSA9IG9ialtpICsgMV07DQo+ID4gKwkJCXJpbmdbaWR4 ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ICsJCQlyaW5nW2lkeCArIDNdID0gb2JqW2kgKyAzXTsN Cj4gPiArCQl9DQo+ID4gKwkJc3dpdGNoIChuICYgMHgzKSB7DQo+ID4gKwkJY2FzZSAzOg0KPiA+ ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ICsJCWNh c2UgMjoNCj4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiArCQljYXNlIDE6DQo+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107DQo+ID4gKwkJ fQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlk eCsrKQ0KPiA+ICsJCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gKwkJLyogU3RhcnQgYXQgdGhl IGJlZ2lubmluZyAqLw0KPiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ICtfX3J0ZV9yaW5nX2VucXVldWVf ZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ICsJ CWNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiArew0KPiA+ICsJdW5zaWdu ZWQgaW50IGk7DQo+ID4gKwljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiArCXVp bnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gKwlydGVfaW50MTI4X3QgKnJp bmcgPSAocnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gKwljb25zdCBydGVfaW50MTI4X3QgKm9i aiA9IChjb25zdCBydGVfaW50MTI4X3QgKilvYmpfdGFibGU7DQo+ID4gKwlpZiAobGlrZWx5KGlk eCArIG4gPCBzaXplKSkgew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDEpOyBpICs9 IDIsIGlkeCArPSAyKQ0KPiA+ICsJCQltZW1jcHkoKHZvaWQgKikocmluZyArIGlkeCksDQo+ID4g KwkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwgMzIpOw0KPiA+ICsJCXN3aXRjaCAobiAmIDB4 MSkgew0KPiA+ICsJCWNhc2UgMToNCj4gPiArCQkJbWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgp LA0KPiA+ICsJCQkJKGNvbnN0IHZvaWQgKikob2JqICsgaSksIDE2KTsNCj4gPiArCQl9DQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ ID4gKwkJCW1lbWNweSgodm9pZCAqKShyaW5nICsgaWR4KSwNCj4gPiArCQkJCShjb25zdCB2b2lk ICopKG9iaiArIGkpLCAxNik7DQo+ID4gKwkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0K PiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gKwkJCW1lbWNweSgo dm9pZCAqKShyaW5nICsgaWR4KSwNCj4gPiArCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAx Nik7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHRoZSBhY3R1YWwgZW5xdWV1ZSBv ZiBlbGVtZW50cyBvbiB0aGUgcmluZy4NCj4gPiArICogUGxhY2VkIGhlcmUgc2luY2UgaWRlbnRp Y2FsIGNvZGUgbmVlZGVkIGluIGJvdGgNCj4gPiArICogc2luZ2xlIGFuZCBtdWx0aSBwcm9kdWNl ciBlbnF1ZXVlIGZ1bmN0aW9ucy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHZvaWQNCj4gPiArX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHN0cnVjdCBydGVfcmlu ZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ICsJCWNvbnN0IHZvaWQgKm9ial90YWJsZSwg dWludDMyX3QgZXNpemUsIHVpbnQzMl90IG51bSkgew0KPiA+ICsJLyogOEIgYW5kIDE2QiBjb3Bp ZXMgaW1wbGVtZW50ZWQgaW5kaXZpZHVhbGx5IHRvIHJldGFpbg0KPiA+ICsJICogdGhlIGN1cnJl bnQgcGVyZm9ybWFuY2UuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChlc2l6ZSA9PSA4KQ0KPiA+ICsJ CV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc182NChyLCBwcm9kX2hlYWQsIG9ial90YWJsZSwNCj4g bnVtKTsNCj4gPiArCWVsc2UgaWYgKGVzaXplID09IDE2KQ0KPiA+ICsJCV9fcnRlX3JpbmdfZW5x dWV1ZV9lbGVtc18xMjgociwgcHJvZF9oZWFkLCBvYmpfdGFibGUsDQo+IG51bSk7DQo+ID4gKwll bHNlIHsNCj4gPiArCQl1aW50MzJfdCBpZHgsIHNjYWxlLCBucl9pZHgsIG5yX251bSwgbnJfc2l6 ZTsNCj4gPiArDQo+ID4gKwkJLyogTm9ybWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gKwkJc2Nh bGUgPSBlc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7DQo+ID4gKwkJbnJfbnVtID0gbnVtICogc2Nh bGU7DQo+ID4gKwkJaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiArCQlucl9pZHggPSBp ZHggKiBzY2FsZTsNCj4gPiArCQlucl9zaXplID0gci0+c2l6ZSAqIHNjYWxlOw0KPiA+ICsJCV9f cnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18zMihyLCBucl9zaXplLCBucl9pZHgsDQo+ID4gKwkJCQlv YmpfdGFibGUsIG5yX251bSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMy KHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6ZSwNCj4gPiArCQl1aW50MzJf dCBpZHgsIHZvaWQgKm9ial90YWJsZSwgdWludDMyX3Qgbikgew0KPiA+ICsJdW5zaWduZWQgaW50 IGk7DQo+ID4gKwl1aW50MzJfdCAqcmluZyA9ICh1aW50MzJfdCAqKSZyWzFdOw0KPiA+ICsJdWlu dDMyX3QgKm9iaiA9ICh1aW50MzJfdCAqKW9ial90YWJsZTsNCj4gPiArCWlmIChsaWtlbHkoaWR4 ICsgbiA8IHNpemUpKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Nyk7IGkgKz0g OCwgaWR4ICs9IDgpIHsNCj4gPiArCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ICsJCQlvYmpb aSArIDFdID0gcmluZ1tpZHggKyAxXTsNCj4gPiArCQkJb2JqW2kgKyAyXSA9IHJpbmdbaWR4ICsg Ml07DQo+ID4gKwkJCW9ialtpICsgM10gPSByaW5nW2lkeCArIDNdOw0KPiA+ICsJCQlvYmpbaSAr IDRdID0gcmluZ1tpZHggKyA0XTsNCj4gPiArCQkJb2JqW2kgKyA1XSA9IHJpbmdbaWR4ICsgNV07 DQo+ID4gKwkJCW9ialtpICsgNl0gPSByaW5nW2lkeCArIDZdOw0KPiA+ICsJCQlvYmpbaSArIDdd ID0gcmluZ1tpZHggKyA3XTsNCj4gPiArCQl9DQo+ID4gKwkJc3dpdGNoIChuICYgMHg3KSB7DQo+ ID4gKwkJY2FzZSA3Og0KPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ICsJCWNhc2UgNjoNCj4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiArCQljYXNlIDU6DQo+ID4gKwkJCW9ialtpKytdID0gcmlu Z1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gKwkJY2FzZSA0Og0KPiA+ICsJCQlvYmpb aSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ICsJCWNhc2UgMzoNCj4g PiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiArCQlj YXNlIDI6DQo+ID4gKwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICov DQo+ID4gKwkJY2FzZSAxOg0KPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxs dGhyb3VnaCAqLw0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZm9yIChpID0gMDsg aWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiArCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ ICsJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiArCQlmb3IgKGlkeCA9IDA7IGkg PCBuOyBpKyssIGlkeCsrKQ0KPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gKwl9DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAr X19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzY0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3Qg cHJvZF9oZWFkLA0KPiA+ICsJCXZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiArew0K PiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKwljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6 ZTsNCj4gPiArCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gKwl1aW50 NjRfdCAqcmluZyA9ICh1aW50NjRfdCAqKSZyWzFdOw0KPiA+ICsJdW5hbGlnbmVkX3VpbnQ2NF90 ICpvYmogPSAodW5hbGlnbmVkX3VpbnQ2NF90ICopb2JqX3RhYmxlOw0KPiA+ICsJaWYgKGxpa2Vs eShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgzKTsg aSArPSA0LCBpZHggKz0gNCkgew0KPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gKwkJ CW9ialtpICsgMV0gPSByaW5nW2lkeCArIDFdOw0KPiA+ICsJCQlvYmpbaSArIDJdID0gcmluZ1tp ZHggKyAyXTsNCj4gPiArCQkJb2JqW2kgKyAzXSA9IHJpbmdbaWR4ICsgM107DQo+ID4gKwkJfQ0K PiA+ICsJCXN3aXRjaCAobiAmIDB4Mykgew0KPiA+ICsJCWNhc2UgMzoNCj4gPiArCQkJb2JqW2kr K10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiArCQljYXNlIDI6DQo+ID4g KwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gKwkJY2Fz ZSAxOg0KPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0K PiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsg aSsrLCBpZHgrKykNCj4gPiArCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ICsJCS8qIFN0YXJ0 IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiArCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlk eCsrKQ0KPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gKwl9DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArX19ydGVfcmluZ19k ZXF1ZXVlX2VsZW1zXzEyOChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHByb2RfaGVhZCwN Cj4gPiArCQl2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gK3sNCj4gPiArCXVuc2ln bmVkIGludCBpOw0KPiA+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4gKwl1 aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ICsJcnRlX2ludDEyOF90ICpy aW5nID0gKHJ0ZV9pbnQxMjhfdCAqKSZyWzFdOw0KPiA+ICsJcnRlX2ludDEyOF90ICpvYmogPSAo cnRlX2ludDEyOF90ICopb2JqX3RhYmxlOw0KPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6 ZSkpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgxKTsgaSArPSAyLCBpZHggKz0g MikNCj4gPiArCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4 KSwgMzIpOw0KPiA+ICsJCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ICsJCWNhc2UgMToNCj4gPiAr CQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4KSwgMTYpOw0K PiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsg aSsrLCBpZHgrKykNCj4gPiArCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShy aW5nICsgaWR4KSwgMTYpOw0KPiA+ICsJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4g PiArCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ICsJCQltZW1jcHkoKHZv aWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgpLCAxNik7DQo+ID4gKwl9DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qIHRoZSBhY3R1YWwgZGVxdWV1ZSBvZiBlbGVtZW50cyBmcm9tIHRo ZSByaW5nLg0KPiA+ICsgKiBQbGFjZWQgaGVyZSBzaW5jZSBpZGVudGljYWwgY29kZSBuZWVkZWQg aW4gYm90aA0KPiA+ICsgKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1Y2VyIGVucXVldWUgZnVuY3Rp b25zLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ ICtfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBj b25zX2hlYWQsDQo+ID4gKwkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBlc2l6ZSwgdWludDMy X3QgbnVtKSB7DQo+ID4gKwkvKiA4QiBhbmQgMTZCIGNvcGllcyBpbXBsZW1lbnRlZCBpbmRpdmlk dWFsbHkgdG8gcmV0YWluDQo+ID4gKwkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4gPiAr CSAqLw0KPiA+ICsJaWYgKGVzaXplID09IDgpDQo+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2Vs ZW1zXzY0KHIsIGNvbnNfaGVhZCwgb2JqX3RhYmxlLA0KPiBudW0pOw0KPiA+ICsJZWxzZSBpZiAo ZXNpemUgPT0gMTYpDQo+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzEyOChyLCBjb25z X2hlYWQsIG9ial90YWJsZSwNCj4gbnVtKTsNCj4gPiArCWVsc2Ugew0KPiA+ICsJCXVpbnQzMl90 IGlkeCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ICsNCj4gPiArCQkvKiBO b3JtYWxpemUgdG8gdWludDMyX3QgKi8NCj4gPiArCQlzY2FsZSA9IGVzaXplIC8gc2l6ZW9mKHVp bnQzMl90KTsNCj4gPiArCQlucl9udW0gPSBudW0gKiBzY2FsZTsNCj4gPiArCQlpZHggPSBjb25z X2hlYWQgJiByLT5tYXNrOw0KPiA+ICsJCW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0KPiA+ICsJCW5y X3NpemUgPSByLT5zaXplICogc2NhbGU7DQo+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1z XzMyKHIsIG5yX3NpemUsIG5yX2lkeCwNCj4gPiArCQkJCW9ial90YWJsZSwgbnJfbnVtKTsNCj4g PiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQmV0d2VlbiBsb2FkIGFuZCBsb2FkLiB0aGVy ZSBtaWdodCBiZSBjcHUgcmVvcmRlciBpbiB3ZWFrIG1vZGVsDQo+ID4gKyAqIChwb3dlcnBjL2Fy bSkuDQo+ID4gKyAqIFRoZXJlIGFyZSAyIGNob2ljZXMgZm9yIHRoZSB1c2Vycw0KPiA+ICsgKiAx LnVzZSBybWIoKSBtZW1vcnkgYmFycmllcg0KPiA+ICsgKiAyLnVzZSBvbmUtZGlyZWN0aW9uIGxv YWRfYWNxdWlyZS9zdG9yZV9yZWxlYXNlIGJhcnJpZXINCj4gPiArICogSXQgZGVwZW5kcyBvbiBw ZXJmb3JtYW5jZSB0ZXN0IHJlc3VsdHMuDQo+ID4gKyAqLw0KPiA+ICsjaWZkZWYgUlRFX1VTRV9D MTFfTUVNX01PREVMDQo+ID4gKyNpbmNsdWRlICJyaW5nX2MxMV9wdnQuaCINCj4gPiArI2Vsc2UN Cj4gPiArI2luY2x1ZGUgInJpbmdfZ2VuZXJpY19wdnQuaCINCj4gPiArI2VuZGlmDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogQGludGVybmFsIEVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9uIHRo ZSByaW5nDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBwb2ludGVyIHRv IHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ICsgKiAg IEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4gKyAqIEBwYXJhbSBlc2l6ZQ0K PiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUg YSBtdWx0aXBsZSBvZiA0Lg0KPiA+ICsgKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1 c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBPdGhlcndpc2UNCj4gPiArICogICB0aGUgcmVz dWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ICsgKiBAcGFyYW0gbg0KPiA+ICsgKiAgIFRoZSBudW1i ZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiA+ ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiArICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAg RW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGENCj4gcmluZw0KPiA+ICsgKiAg IFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2li bGUNCj4gZnJvbSByaW5nDQo+ID4gKyAqIEBwYXJhbSBpc19zcA0KPiA+ICsgKiAgIEluZGljYXRl cyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUgcHJvZHVjZXIgb3IgbXVsdGktcHJvZHVjZXIgaGVhZA0K PiB1cGRhdGUNCj4gPiArICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiArICogICByZXR1cm5zIHRo ZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hl ZA0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVu cXVldWVkLg0KPiA+ICsgKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0 aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiArX19ydGVfcmluZ19kb19lbnF1ZXVlX2VsZW0o c3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lkICpvYmpfdGFibGUsDQo+ID4gKwkJdW5zaWdu ZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwNCj4gPiArCQllbnVtIHJ0ZV9yaW5nX3F1ZXVl X2JlaGF2aW9yIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQgaXNfc3AsDQo+ID4gKwkJdW5zaWduZWQg aW50ICpmcmVlX3NwYWNlKQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCBwcm9kX2hlYWQsIHByb2Rf bmV4dDsNCj4gPiArCXVpbnQzMl90IGZyZWVfZW50cmllczsNCj4gPiArDQo+ID4gKwluID0gX19y dGVfcmluZ19tb3ZlX3Byb2RfaGVhZChyLCBpc19zcCwgbiwgYmVoYXZpb3IsDQo+ID4gKwkJCSZw cm9kX2hlYWQsICZwcm9kX25leHQsICZmcmVlX2VudHJpZXMpOw0KPiA+ICsJaWYgKG4gPT0gMCkN Cj4gPiArCQlnb3RvIGVuZDsNCj4gPiArDQo+ID4gKwlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMo ciwgcHJvZF9oZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiArDQo+ID4gKwlfX3J0ZV9y aW5nX3VwZGF0ZV90YWlsKCZyLT5wcm9kLCBwcm9kX2hlYWQsIHByb2RfbmV4dCwgaXNfc3AsIDEp Ow0KPiA+ICtlbmQ6DQo+ID4gKwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+ICsJCSpmcmVl X3NwYWNlID0gZnJlZV9lbnRyaWVzIC0gbjsNCj4gPiArCXJldHVybiBuOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZy b20gdGhlIHJpbmcNCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50 ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4g KyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiArICogQHBhcmFtIGVz aXplDQo+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVz dCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZh bHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ICsgKiAgIHRo ZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhl IG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiArICogQHBhcmFt IGJlaGF2aW9yDQo+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBm aXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+IHJpbmcNCj4gPiArICogICBSVEVfUklOR19R VUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+IGZyb20g cmluZw0KPiA+ICsgKiBAcGFyYW0gaXNfc2MNCj4gPiArICogICBJbmRpY2F0ZXMgd2hldGhlciB0 byB1c2Ugc2luZ2xlIGNvbnN1bWVyIG9yIG11bHRpLWNvbnN1bWVyIGhlYWQNCj4gdXBkYXRlDQo+ ID4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiArICogICByZXR1cm5zIHRoZSBudW1iZXIgb2Yg cmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMNCj4gZmluaXNoZWQN Cj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRl cXVldWVkLg0KPiA+ICsgKiAgICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQs IHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ICtfX3J0ZV9yaW5nX2RvX2RlcXVldWVfZWxl bShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiArCQl1bnNpZ25lZCBp bnQgZXNpemUsIHVuc2lnbmVkIGludCBuLA0KPiA+ICsJCWVudW0gcnRlX3JpbmdfcXVldWVfYmVo YXZpb3IgYmVoYXZpb3IsIHVuc2lnbmVkIGludCBpc19zYywNCj4gPiArCQl1bnNpZ25lZCBpbnQg KmF2YWlsYWJsZSkNCj4gPiArew0KPiA+ICsJdWludDMyX3QgY29uc19oZWFkLCBjb25zX25leHQ7 DQo+ID4gKwl1aW50MzJfdCBlbnRyaWVzOw0KPiA+ICsNCj4gPiArCW4gPSBfX3J0ZV9yaW5nX21v dmVfY29uc19oZWFkKHIsIChpbnQpaXNfc2MsIG4sIGJlaGF2aW9yLA0KPiA+ICsJCQkmY29uc19o ZWFkLCAmY29uc19uZXh0LCAmZW50cmllcyk7DQo+ID4gKwlpZiAobiA9PSAwKQ0KPiA+ICsJCWdv dG8gZW5kOw0KPiA+ICsNCj4gPiArCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBjb25zX2hl YWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ICsNCj4gPiArCV9fcnRlX3JpbmdfdXBkYXRl X3RhaWwoJnItPmNvbnMsIGNvbnNfaGVhZCwgY29uc19uZXh0LCBpc19zYywgMCk7DQo+ID4gKw0K PiA+ICtlbmQ6DQo+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gKwkJKmF2YWlsYWJs ZSA9IGVudHJpZXMgLSBuOw0KPiA+ICsJcmV0dXJuIG47DQo+ID4gK30NCj4gPiArDQo+ID4gKyNl bmRpZiAvKiBfUklOR19FTEVNX1BWVF9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4gYi9saWIvbGlicnRlX3JpbmcvcmluZ19nZW5l cmljX3B2dC5oDQo+ID4gc2ltaWxhcml0eSBpbmRleCA5OCUNCj4gPiByZW5hbWUgZnJvbSBsaWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVf cmluZy9yaW5nX2dlbmVyaWNfcHZ0LmgNCj4gPiBpbmRleCAzN2M2MmI4ZDYuLmZjNDZhMjdiMiAx MDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4g KysrIGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZ2VuZXJpY19wdnQuaA0KPiA+IEBAIC03LDggKzcs OCBAQA0KPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lvbiBmcm9t IEtpcCBNYWN5Lg0KPiA+ICAgKi8NCj4gPg0KPiA+IC0jaWZuZGVmIF9SVEVfUklOR19HRU5FUklD X0hfDQo+ID4gLSNkZWZpbmUgX1JURV9SSU5HX0dFTkVSSUNfSF8NCj4gPiArI2lmbmRlZiBfUklO R19HRU5FUklDX1BWVF9IXw0KPiA+ICsjZGVmaW5lIF9SSU5HX0dFTkVSSUNfUFZUX0hfDQo+ID4N Cj4gPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ICBfX3J0ZV9yaW5nX3Vw ZGF0ZV90YWlsKHN0cnVjdCBydGVfcmluZ19oZWFkdGFpbCAqaHQsIHVpbnQzMl90DQo+ID4gb2xk X3ZhbCwgQEAgLTE3MCw0ICsxNzAsNCBAQCBfX3J0ZV9yaW5nX21vdmVfY29uc19oZWFkKHN0cnVj dA0KPiBydGVfcmluZyAqciwgdW5zaWduZWQgaW50IGlzX3NjLA0KPiA+ICAJcmV0dXJuIG47DQo+ ID4gIH0NCj4gPg0KPiA+IC0jZW5kaWYgLyogX1JURV9SSU5HX0dFTkVSSUNfSF8gKi8NCj4gPiAr I2VuZGlmIC8qIF9SSU5HX0dFTkVSSUNfUFZUX0hfICovDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9s aWJydGVfcmluZy9ydGVfcmluZ19odHNfYzExX21lbS5oDQo+ID4gYi9saWIvbGlicnRlX3Jpbmcv cmluZ19odHNfZWxlbV9wdnQuaA0KPiA+IHNpbWlsYXJpdHkgaW5kZXggNjAlDQo+ID4gcmVuYW1l IGZyb20gbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0c19jMTFfbWVtLmgNCj4gPiByZW5hbWUg dG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4gPiBpbmRleCAxNmU1NGI2 ZmYuLjkyNjg3NTBiMCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3Jpbmdf aHRzX2MxMV9tZW0uaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9yaW5nX2h0c19lbGVtX3B2 dC5oDQo+ID4gQEAgLTcsOCArNyw4IEBADQo+ID4gICAqIFVzZWQgYXMgQlNELTMgTGljZW5zZWQg d2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ID4gICAqLw0KPiA+DQo+ID4gLSNpZm5k ZWYgX1JURV9SSU5HX0hUU19DMTFfTUVNX0hfDQo+ID4gLSNkZWZpbmUgX1JURV9SSU5HX0hUU19D MTFfTUVNX0hfDQo+ID4gKyNpZm5kZWYgX1JJTkdfSFRTX0VMRU1fUFZUX0hfDQo+ID4gKyNkZWZp bmUgX1JJTkdfSFRTX0VMRU1fUFZUX0hfDQo+ID4NCj4gPiAgLyoqDQo+ID4gICAqIEBmaWxlIHJ0 ZV9yaW5nX2h0c19jMTFfbWVtLmgNCj4gPiBAQCAtMTYxLDQgKzE2MSw4NiBAQCBfX3J0ZV9yaW5n X2h0c19tb3ZlX2NvbnNfaGVhZChzdHJ1Y3QgcnRlX3JpbmcNCj4gKnIsIHVuc2lnbmVkIGludCBu dW0sDQo+ID4gIAlyZXR1cm4gbjsNCj4gPiAgfQ0KPiA+DQo+ID4gLSNlbmRpZiAvKiBfUlRFX1JJ TkdfSFRTX0MxMV9NRU1fSF8gKi8NCj4gPiArLyoqDQo+ID4gKyAqIEBpbnRlcm5hbCBFbnF1ZXVl IHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgSFRTIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJh bSByDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICog QHBhcmFtIG9ial90YWJsZQ0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVj dHMuDQo+ID4gKyAqIEBwYXJhbSBlc2l6ZQ0KPiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxl bWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ICsgKiAgIFRo aXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBP dGhlcndpc2UNCj4gPiArICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ICsgKiBA cGFyYW0gbg0KPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJp bmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiArICog ICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVt cyBmcm9tIGENCj4gcmluZw0KPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1 ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gZnJvbSByaW5nDQo+ID4gKyAqIEBwYXJh bSBmcmVlX3NwYWNlDQo+ID4gKyAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVy IHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiArICogQHJldHVybg0KPiA+ ICsgKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiArICogICBJZiBi ZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5 Lg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50 DQo+ID4gK19fcnRlX3JpbmdfZG9faHRzX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIs IGNvbnN0IHZvaWQNCj4gKm9ial90YWJsZSwNCj4gPiArCXVpbnQzMl90IGVzaXplLCB1aW50MzJf dCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ICsJdWludDMy X3QgKmZyZWVfc3BhY2UpDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGZyZWUsIGhlYWQ7DQo+ID4g Kw0KPiA+ICsJbiA9ICBfX3J0ZV9yaW5nX2h0c19tb3ZlX3Byb2RfaGVhZChyLCBuLCBiZWhhdmlv ciwgJmhlYWQsICZmcmVlKTsNCj4gPiArDQo+ID4gKwlpZiAobiAhPSAwKSB7DQo+ID4gKwkJX19y dGVfcmluZ19lbnF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ ICsJCV9fcnRlX3JpbmdfaHRzX3VwZGF0ZV90YWlsKCZyLT5odHNfcHJvZCwgaGVhZCwgbiwgMSk7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiArCQkq ZnJlZV9zcGFjZSA9IGZyZWUgLSBuOw0KPiA+ICsJcmV0dXJuIG47DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0 aGUgSFRTIHJpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBwb2lu dGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4gKyAqIEBwYXJhbSBl c2l6ZQ0KPiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11 c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ICsgKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2FtZSB2 YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBPdGhlcndpc2UNCj4gPiArICogICB0 aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ICsgKiBAcGFyYW0gbg0KPiA+ICsgKiAgIFRo ZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwdWxsIGZyb20gdGhlIHJpbmcuDQo+ID4gKyAqIEBwYXJh bSBiZWhhdmlvcg0KPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBEZXF1ZXVlIGEg Zml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiByaW5nDQo+ID4gKyAqICAgUlRFX1JJTkdf UVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiBmcm9t IHJpbmcNCj4gPiArICogQHBhcmFtIGF2YWlsYWJsZQ0KPiA+ICsgKiAgIHJldHVybnMgdGhlIG51 bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVlIGhhcw0KPiBm aW5pc2hlZA0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgLSBBY3R1YWwgbnVtYmVyIG9mIG9i amVjdHMgZGVxdWV1ZWQuDQo+ID4gKyAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVV RV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gK19fcnRlX3JpbmdfZG9faHRz X2RlcXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiAr CXVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9y IGJlaGF2aW9yLA0KPiA+ICsJdWludDMyX3QgKmF2YWlsYWJsZSkNCj4gPiArew0KPiA+ICsJdWlu dDMyX3QgZW50cmllcywgaGVhZDsNCj4gPiArDQo+ID4gKwluID0gX19ydGVfcmluZ19odHNfbW92 ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0KPiAmZW50cmllcyk7DQo+ID4gKw0K PiA+ICsJaWYgKG4gIT0gMCkgew0KPiA+ICsJCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBo ZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiArCQlfX3J0ZV9yaW5nX2h0c191cGRhdGVf dGFpbCgmci0+aHRzX2NvbnMsIGhlYWQsIG4sIDApOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChhdmFpbGFibGUgIT0gTlVMTCkNCj4gPiArCQkqYXZhaWxhYmxlID0gZW50cmllcyAtIG47DQo+ ID4gKwlyZXR1cm4gbjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9SSU5HX0hUU19F TEVNX1BWVF9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3Jpbmdf cGVla19jMTFfbWVtLmgNCj4gPiBiL2xpYi9saWJydGVfcmluZy9yaW5nX3BlZWtfZWxlbV9wdnQu aA0KPiA+IHNpbWlsYXJpdHkgaW5kZXggNjIlDQo+ID4gcmVuYW1lIGZyb20gbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX3BlZWtfYzExX21lbS5oDQo+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmlu Zy9yaW5nX3BlZWtfZWxlbV9wdnQuaA0KPiA+IGluZGV4IDI4M2M3ZTcwYi4uMWM1N2JjZGQ2IDEw MDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrX2MxMV9tZW0uaA0K PiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9yaW5nX3BlZWtfZWxlbV9wdnQuaA0KPiA+IEBAIC03 LDggKzcsOCBAQA0KPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lv biBmcm9tIEtpcCBNYWN5Lg0KPiA+ICAgKi8NCj4gPg0KPiA+IC0jaWZuZGVmIF9SVEVfUklOR19Q RUVLX0MxMV9NRU1fSF8NCj4gPiAtI2RlZmluZSBfUlRFX1JJTkdfUEVFS19DMTFfTUVNX0hfDQo+ ID4gKyNpZm5kZWYgX1JJTkdfUEVFS19FTEVNX1BWVF9IXw0KPiA+ICsjZGVmaW5lIF9SSU5HX1BF RUtfRUxFTV9QVlRfSF8NCj4gPg0KPiA+ICAvKioNCj4gPiAgICogQGZpbGUgcnRlX3JpbmdfcGVl a19jMTFfbWVtLmgNCj4gPiBAQCAtMTA3LDQgKzEwNyw3MyBAQCBfX3J0ZV9yaW5nX2h0c19zZXRf aGVhZF90YWlsKHN0cnVjdA0KPiBydGVfcmluZ19odHNfaGVhZHRhaWwgKmh0LCB1aW50MzJfdCB0 YWlsLA0KPiA+ICAJX19hdG9taWNfc3RvcmVfbigmaHQtPmh0LnJhdywgcC5yYXcsIF9fQVRPTUlD X1JFTEVBU0UpOyAgfQ0KPiA+DQo+ID4gLSNlbmRpZiAvKiBfUlRFX1JJTkdfUEVFS19DMTFfTUVN X0hfICovDQo+ID4gKy8qKg0KPiA+ICsgKiBAaW50ZXJuYWwgVGhpcyBmdW5jdGlvbiBtb3ZlcyBw cm9kIGhlYWQgdmFsdWUuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGlu ZSB1bnNpZ25lZCBpbnQNCj4gPiArX19ydGVfcmluZ19kb19lbnF1ZXVlX3N0YXJ0KHN0cnVjdCBy dGVfcmluZyAqciwgdWludDMyX3QgbiwNCj4gPiArCQllbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2 aW9yIGJlaGF2aW9yLCB1aW50MzJfdA0KPiAqZnJlZV9zcGFjZSkgew0KPiA+ICsJdWludDMyX3Qg ZnJlZSwgaGVhZCwgbmV4dDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHItPnByb2Quc3luY190eXBl KSB7DQo+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNfU1Q6DQo+ID4gKwkJbiA9IF9fcnRlX3Jpbmdf bW92ZV9wcm9kX2hlYWQociwgUlRFX1JJTkdfU1lOQ19TVCwgbiwNCj4gPiArCQkJYmVoYXZpb3Is ICZoZWFkLCAmbmV4dCwgJmZyZWUpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBSVEVfUklO R19TWU5DX01UX0hUUzoNCj4gPiArCQluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVfcHJvZF9oZWFk KHIsIG4sIGJlaGF2aW9yLA0KPiA+ICsJCQkmaGVhZCwgJmZyZWUpOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiA+ICsJY2FzZSBSVEVfUklOR19TWU5DX01U X1JUUzoNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJLyogdW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxk bid0IGJlIGhlcmUgKi8NCj4gPiArCQlSVEVfQVNTRVJUKDApOw0KPiA+ICsJCW4gPSAwOw0KPiA+ ICsJCWZyZWUgPSAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5V TEwpDQo+ID4gKwkJKmZyZWVfc3BhY2UgPSBmcmVlIC0gbjsNCj4gPiArCXJldHVybiBuOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQGludGVybmFsIFRoaXMgZnVuY3Rpb24gbW92 ZXMgY29ucyBoZWFkIHZhbHVlIGFuZCBjb3BpZXMgdXAgdG8gKm4qDQo+ID4gKyAqIG9iamVjdHMg ZnJvbSB0aGUgcmluZyB0byB0aGUgdXNlciBwcm92aWRlZCBvYmpfdGFibGUuDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiArX19ydGVf cmluZ19kb19kZXF1ZXVlX3N0YXJ0KHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxl LA0KPiA+ICsJdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVf YmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4gKwl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ICt7DQo+ ID4gKwl1aW50MzJfdCBhdmFpbCwgaGVhZCwgbmV4dDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHIt PmNvbnMuc3luY190eXBlKSB7DQo+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNfU1Q6DQo+ID4gKwkJ biA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWQociwgUlRFX1JJTkdfU1lOQ19TVCwgbiwNCj4g PiArCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmF2YWlsKTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9IVFM6DQo+ID4gKwkJbiA9ICBfX3J0ZV9yaW5nX2h0 c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwNCj4gPiArCQkJJmhlYWQsICZhdmFpbCk7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVQ6DQo+ID4gKwljYXNl IFJURV9SSU5HX1NZTkNfTVRfUlRTOg0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQkvKiB1bnN1cHBv cnRlZCBtb2RlLCBzaG91bGRuJ3QgYmUgaGVyZSAqLw0KPiA+ICsJCVJURV9BU1NFUlQoMCk7DQo+ ID4gKwkJbiA9IDA7DQo+ID4gKwkJYXZhaWwgPSAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChuICE9IDApDQo+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90 YWJsZSwgZXNpemUsIG4pOw0KPiA+ICsNCj4gPiArCWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4g PiArCQkqYXZhaWxhYmxlID0gYXZhaWwgLSBuOw0KPiA+ICsJcmV0dXJuIG47DQo+ID4gK30NCj4g PiArDQo+ID4gKyNlbmRpZiAvKiBfUklOR19QRUVLX0VMRU1fUFZUX0hfICovDQo+ID4gZGlmZiAt LWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHNfYzExX21lbS5oDQo+ID4gYi9saWIv bGlicnRlX3JpbmcvcmluZ19ydHNfZWxlbV9wdnQuaA0KPiA+IHNpbWlsYXJpdHkgaW5kZXggNjIl DQo+ID4gcmVuYW1lIGZyb20gbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19jMTFfbWVtLmgN Cj4gPiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfcnRzX2VsZW1fcHZ0LmgNCj4gPiBp bmRleCAzMjdmMjI3OTYuLmNiY2VjNzNlYiAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX3Jp bmcvcnRlX3JpbmdfcnRzX2MxMV9tZW0uaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9yaW5n X3J0c19lbGVtX3B2dC5oDQo+ID4gQEAgLTcsOCArNyw4IEBADQo+ID4gICAqIFVzZWQgYXMgQlNE LTMgTGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ID4gICAqLw0KPiA+ DQo+ID4gLSNpZm5kZWYgX1JURV9SSU5HX1JUU19DMTFfTUVNX0hfDQo+ID4gLSNkZWZpbmUgX1JU RV9SSU5HX1JUU19DMTFfTUVNX0hfDQo+ID4gKyNpZm5kZWYgX1JJTkdfUlRTX0VMRU1fUFZUX0hf DQo+ID4gKyNkZWZpbmUgX1JJTkdfUlRTX0VMRU1fUFZUX0hfDQo+ID4NCj4gPiAgLyoqDQo+ID4g ICAqIEBmaWxlIHJ0ZV9yaW5nX3J0c19jMTFfbWVtLmgNCj4gPiBAQCAtMTc2LDQgKzE3Niw4NiBA QCBfX3J0ZV9yaW5nX3J0c19tb3ZlX2NvbnNfaGVhZChzdHJ1Y3QgcnRlX3JpbmcNCj4gKnIsIHVp bnQzMl90IG51bSwNCj4gPiAgCXJldHVybiBuOw0KPiA+ICB9DQo+ID4NCj4gPiAtI2VuZGlmIC8q IF9SVEVfUklOR19SVFNfQzExX01FTV9IXyAqLw0KPiA+ICsvKioNCj4gPiArICogQGludGVybmFs IEVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSBSVFMgcmluZy4NCj4gPiArICoNCj4gPiAr ICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0K PiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUg b2Ygb2JqZWN0cy4NCj4gPiArICogQHBhcmFtIGVzaXplDQo+ID4gKyAqICAgVGhlIHNpemUgb2Yg cmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4g KyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhl IHJpbmcuIE90aGVyd2lzZQ0KPiA+ICsgKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBp biB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gKyAqIEBwYXJhbSBiZWhhdmlvcg0K PiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVy IG9mIGl0ZW1zIGZyb20gYQ0KPiByaW5nDQo+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFC TEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiBmcm9tIHJpbmcNCj4gPiAr ICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiArICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Ygc3Bh Y2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiA+ICsgKiBAcmV0 dXJuDQo+ID4gKyAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiA+ICsg KiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBv ciBuIG9ubHkuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNp Z25lZCBpbnQNCj4gPiArX19ydGVfcmluZ19kb19ydHNfZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVf cmluZyAqciwgY29uc3Qgdm9pZA0KPiAqb2JqX3RhYmxlLA0KPiA+ICsJdWludDMyX3QgZXNpemUs IHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4g Kwl1aW50MzJfdCAqZnJlZV9zcGFjZSkNCj4gPiArew0KPiA+ICsJdWludDMyX3QgZnJlZSwgaGVh ZDsNCj4gPiArDQo+ID4gKwluID0gIF9fcnRlX3JpbmdfcnRzX21vdmVfcHJvZF9oZWFkKHIsIG4s IGJlaGF2aW9yLCAmaGVhZCwgJmZyZWUpOw0KPiA+ICsNCj4gPiArCWlmIChuICE9IDApIHsNCj4g PiArCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwg bik7DQo+ID4gKwkJX19ydGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19wcm9kKTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+ICsJCSpmcmVl X3NwYWNlID0gZnJlZSAtIG47DQo+ID4gKwlyZXR1cm4gbjsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIEBpbnRlcm5hbCBEZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBS VFMgcmluZy4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHINCj4gPiArICogICBBIHBvaW50ZXIg dG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gKyAq ICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiArICogQHBhcmFtIGVzaXpl DQo+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBi ZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVl IHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ICsgKiAgIHRoZSBy ZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gKyAqIEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51 bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiArICogQHBhcmFtIGJl aGF2aW9yDQo+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhl ZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+IHJpbmcNCj4gPiArICogICBSVEVfUklOR19RVUVV RV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+IGZyb20gcmlu Zw0KPiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gKyAqICAgcmV0dXJucyB0aGUgbnVtYmVy IG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUgaGFzDQo+IGZpbmlz aGVkDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0 cyBkZXF1ZXVlZC4NCj4gPiArICogICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJ WEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiArX19ydGVfcmluZ19kb19ydHNfZGVx dWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ICsJdWlu dDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVo YXZpb3IsDQo+ID4gKwl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJf dCBlbnRyaWVzLCBoZWFkOw0KPiA+ICsNCj4gPiArCW4gPSBfX3J0ZV9yaW5nX3J0c19tb3ZlX2Nv bnNfaGVhZChyLCBuLCBiZWhhdmlvciwgJmhlYWQsDQo+ICZlbnRyaWVzKTsNCj4gPiArDQo+ID4g KwlpZiAobiAhPSAwKSB7DQo+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQs IG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ICsJCV9fcnRlX3JpbmdfcnRzX3VwZGF0ZV90YWls KCZyLT5ydHNfY29ucyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGF2YWlsYWJsZSAhPSBO VUxMKQ0KPiA+ICsJCSphdmFpbGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiArCXJldHVybiBuOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX1JJTkdfUlRTX0VMRU1fUFZUX0hfICovDQo+ ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19lbGVtLmgNCj4gPiBiL2xp Yi9saWJydGVfcmluZy9ydGVfcmluZ19lbGVtLmggaW5kZXggNTczNDRkNDdkLi4xMTliNWMwYjYg MTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ICsr KyBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19lbGVtLmgNCj4gPiBAQCAtMjEsNiArMjEsNyBA QCBleHRlcm4gIkMiIHsNCj4gPiAgI2VuZGlmDQo+ID4NCj4gPiAgI2luY2x1ZGUgPHJ0ZV9yaW5n X2NvcmUuaD4NCj4gPiArI2luY2x1ZGUgPHJpbmdfZWxlbV9wdnQuaD4NCj4gPg0KPiA+ICAvKioN Cj4gPiAgICogQ2FsY3VsYXRlIHRoZSBtZW1vcnkgc2l6ZSBuZWVkZWQgZm9yIGEgcmluZyB3aXRo IGdpdmVuIGVsZW1lbnQNCj4gPiBzaXplIEBAIC0xMDUsMzc5ICsxMDYsNiBAQCBzc2l6ZV90DQo+ IHJ0ZV9yaW5nX2dldF9tZW1zaXplX2VsZW0odW5zaWduZWQNCj4gPiBpbnQgZXNpemUsIHVuc2ln bmVkIGludCBjb3VudCk7ICBzdHJ1Y3QgcnRlX3JpbmcgKnJ0ZV9yaW5nX2NyZWF0ZV9lbGVtKGNv bnN0DQo+IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBlc2l6ZSwNCj4gPiAgCQkJdW5zaWduZWQg aW50IGNvdW50LCBpbnQgc29ja2V0X2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOw0KPiA+DQo+ID4g LXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAtX19ydGVfcmluZ19lbnF1ZXVl X2VsZW1zXzMyKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6ZSwNCj4gPiAt CQl1aW50MzJfdCBpZHgsIGNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiAt ew0KPiA+IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gLQl1aW50MzJfdCAqcmluZyA9ICh1aW50MzJf dCAqKSZyWzFdOw0KPiA+IC0JY29uc3QgdWludDMyX3QgKm9iaiA9IChjb25zdCB1aW50MzJfdCAq KW9ial90YWJsZTsNCj4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gLQkJ Zm9yIChpID0gMDsgaSA8IChuICYgfjB4Nyk7IGkgKz0gOCwgaWR4ICs9IDgpIHsNCj4gPiAtCQkJ cmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+IC0JCQlyaW5nW2lkeCArIDFdID0gb2JqW2kgKyAxXTsN Cj4gPiAtCQkJcmluZ1tpZHggKyAyXSA9IG9ialtpICsgMl07DQo+ID4gLQkJCXJpbmdbaWR4ICsg M10gPSBvYmpbaSArIDNdOw0KPiA+IC0JCQlyaW5nW2lkeCArIDRdID0gb2JqW2kgKyA0XTsNCj4g PiAtCQkJcmluZ1tpZHggKyA1XSA9IG9ialtpICsgNV07DQo+ID4gLQkJCXJpbmdbaWR4ICsgNl0g PSBvYmpbaSArIDZdOw0KPiA+IC0JCQlyaW5nW2lkeCArIDddID0gb2JqW2kgKyA3XTsNCj4gPiAt CQl9DQo+ID4gLQkJc3dpdGNoIChuICYgMHg3KSB7DQo+ID4gLQkJY2FzZSA3Og0KPiA+IC0JCQly aW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+IC0JCWNhc2UgNjoN Cj4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiAt CQljYXNlIDU6DQo+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdo ICovDQo+ID4gLQkJY2FzZSA0Og0KPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBm YWxsdGhyb3VnaCAqLw0KPiA+IC0JCWNhc2UgMzoNCj4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpb aSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiAtCQljYXNlIDI6DQo+ID4gLQkJCXJpbmdbaWR4 KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gLQkJY2FzZSAxOg0KPiA+IC0J CQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+IC0JCX0NCj4g PiAtCX0gZWxzZSB7DQo+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykN Cj4gPiAtCQkJcmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdp bm5pbmcgKi8NCj4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+IC0J CQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gLQl9DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1z XzY0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+IC0JCWNvbnN0 IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiAtew0KPiA+IC0JdW5zaWduZWQgaW50 IGk7DQo+ID4gLQljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiAtCXVpbnQzMl90 IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gLQl1aW50NjRfdCAqcmluZyA9ICh1aW50 NjRfdCAqKSZyWzFdOw0KPiA+IC0JY29uc3QgdW5hbGlnbmVkX3VpbnQ2NF90ICpvYmogPSAoY29u c3QgdW5hbGlnbmVkX3VpbnQ2NF90DQo+ICopb2JqX3RhYmxlOw0KPiA+IC0JaWYgKGxpa2VseShp ZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiAtCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgzKTsgaSAr PSA0LCBpZHggKz0gNCkgew0KPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gLQkJCXJp bmdbaWR4ICsgMV0gPSBvYmpbaSArIDFdOw0KPiA+IC0JCQlyaW5nW2lkeCArIDJdID0gb2JqW2kg KyAyXTsNCj4gPiAtCQkJcmluZ1tpZHggKyAzXSA9IG9ialtpICsgM107DQo+ID4gLQkJfQ0KPiA+ IC0JCXN3aXRjaCAobiAmIDB4Mykgew0KPiA+IC0JCWNhc2UgMzoNCj4gPiAtCQkJcmluZ1tpZHgr K10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiAtCQljYXNlIDI6DQo+ID4gLQkJ CXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gLQkJY2FzZSAx Og0KPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOw0KPiA+IC0JCX0NCj4gPiAtCX0gZWxz ZSB7DQo+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiAtCQkJ cmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8N Cj4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+IC0JCQlyaW5nW2lk eF0gPSBvYmpbaV07DQo+ID4gLQl9DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHZvaWQNCj4gPiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzEyOChzdHJ1 Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHByb2RfaGVhZCwNCj4gPiAtCQljb25zdCB2b2lkICpv YmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gLXsNCj4gPiAtCXVuc2lnbmVkIGludCBpOw0KPiA+ IC0JY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4gLQl1aW50MzJfdCBpZHggPSBw cm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+IC0JcnRlX2ludDEyOF90ICpyaW5nID0gKHJ0ZV9pbnQx MjhfdCAqKSZyWzFdOw0KPiA+IC0JY29uc3QgcnRlX2ludDEyOF90ICpvYmogPSAoY29uc3QgcnRl X2ludDEyOF90ICopb2JqX3RhYmxlOw0KPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkp IHsNCj4gPiAtCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgxKTsgaSArPSAyLCBpZHggKz0gMikN Cj4gPiAtCQkJbWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+IC0JCQkJKGNvbnN0IHZv aWQgKikob2JqICsgaSksIDMyKTsNCj4gPiAtCQlzd2l0Y2ggKG4gJiAweDEpIHsNCj4gPiAtCQlj YXNlIDE6DQo+ID4gLQkJCW1lbWNweSgodm9pZCAqKShyaW5nICsgaWR4KSwNCj4gPiAtCQkJCShj b25zdCB2b2lkICopKG9iaiArIGkpLCAxNik7DQo+ID4gLQkJfQ0KPiA+IC0JfSBlbHNlIHsNCj4g PiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+IC0JCQltZW1jcHko KHZvaWQgKikocmluZyArIGlkeCksDQo+ID4gLQkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwg MTYpOw0KPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiAtCQlmb3IgKGlk eCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+IC0JCQltZW1jcHkoKHZvaWQgKikocmluZyAr IGlkeCksDQo+ID4gLQkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwgMTYpOw0KPiA+IC0JfQ0K PiA+IC19DQo+ID4gLQ0KPiA+IC0vKiB0aGUgYWN0dWFsIGVucXVldWUgb2YgZWxlbWVudHMgb24g dGhlIHJpbmcuDQo+ID4gLSAqIFBsYWNlZCBoZXJlIHNpbmNlIGlkZW50aWNhbCBjb2RlIG5lZWRl ZCBpbiBib3RoDQo+ID4gLSAqIHNpbmdsZSBhbmQgbXVsdGkgcHJvZHVjZXIgZW5xdWV1ZSBmdW5j dGlvbnMuDQo+ID4gLSAqLw0KPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ ID4gLV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtcyhzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90 IHByb2RfaGVhZCwNCj4gPiAtCQljb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IGVzaXpl LCB1aW50MzJfdCBudW0pDQo+ID4gLXsNCj4gPiAtCS8qIDhCIGFuZCAxNkIgY29waWVzIGltcGxl bWVudGVkIGluZGl2aWR1YWxseSB0byByZXRhaW4NCj4gPiAtCSAqIHRoZSBjdXJyZW50IHBlcmZv cm1hbmNlLg0KPiA+IC0JICovDQo+ID4gLQlpZiAoZXNpemUgPT0gOCkNCj4gPiAtCQlfX3J0ZV9y aW5nX2VucXVldWVfZWxlbXNfNjQociwgcHJvZF9oZWFkLCBvYmpfdGFibGUsDQo+IG51bSk7DQo+ ID4gLQllbHNlIGlmIChlc2l6ZSA9PSAxNikNCj4gPiAtCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxl bXNfMTI4KHIsIHByb2RfaGVhZCwgb2JqX3RhYmxlLA0KPiBudW0pOw0KPiA+IC0JZWxzZSB7DQo+ ID4gLQkJdWludDMyX3QgaWR4LCBzY2FsZSwgbnJfaWR4LCBucl9udW0sIG5yX3NpemU7DQo+ID4g LQ0KPiA+IC0JCS8qIE5vcm1hbGl6ZSB0byB1aW50MzJfdCAqLw0KPiA+IC0JCXNjYWxlID0gZXNp emUgLyBzaXplb2YodWludDMyX3QpOw0KPiA+IC0JCW5yX251bSA9IG51bSAqIHNjYWxlOw0KPiA+ IC0JCWlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gLQkJbnJfaWR4ID0gaWR4ICogc2Nh bGU7DQo+ID4gLQkJbnJfc2l6ZSA9IHItPnNpemUgKiBzY2FsZTsNCj4gPiAtCQlfX3J0ZV9yaW5n X2VucXVldWVfZWxlbXNfMzIociwgbnJfc2l6ZSwgbnJfaWR4LA0KPiA+IC0JCQkJb2JqX3RhYmxl LCBucl9udW0pOw0KPiA+IC0JfQ0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB2b2lkDQo+ID4gLV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18zMihzdHJ1Y3Qg cnRlX3JpbmcgKnIsIGNvbnN0IHVpbnQzMl90IHNpemUsDQo+ID4gLQkJdWludDMyX3QgaWR4LCB2 b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gLXsNCj4gPiAtCXVuc2lnbmVkIGludCBp Ow0KPiA+IC0JdWludDMyX3QgKnJpbmcgPSAodWludDMyX3QgKikmclsxXTsNCj4gPiAtCXVpbnQz Ml90ICpvYmogPSAodWludDMyX3QgKilvYmpfdGFibGU7DQo+ID4gLQlpZiAobGlrZWx5KGlkeCAr IG4gPCBzaXplKSkgew0KPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDcpOyBpICs9IDgs IGlkeCArPSA4KSB7DQo+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiAtCQkJb2JqW2kg KyAxXSA9IHJpbmdbaWR4ICsgMV07DQo+ID4gLQkJCW9ialtpICsgMl0gPSByaW5nW2lkeCArIDJd Ow0KPiA+IC0JCQlvYmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4gPiAtCQkJb2JqW2kgKyA0 XSA9IHJpbmdbaWR4ICsgNF07DQo+ID4gLQkJCW9ialtpICsgNV0gPSByaW5nW2lkeCArIDVdOw0K PiA+IC0JCQlvYmpbaSArIDZdID0gcmluZ1tpZHggKyA2XTsNCj4gPiAtCQkJb2JqW2kgKyA3XSA9 IHJpbmdbaWR4ICsgN107DQo+ID4gLQkJfQ0KPiA+IC0JCXN3aXRjaCAobiAmIDB4Nykgew0KPiA+ IC0JCWNhc2UgNzoNCj4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91 Z2ggKi8NCj4gPiAtCQljYXNlIDY6DQo+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8q IGZhbGx0aHJvdWdoICovDQo+ID4gLQkJY2FzZSA1Og0KPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdb aWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+IC0JCWNhc2UgNDoNCj4gPiAtCQkJb2JqW2kr K10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiAtCQljYXNlIDM6DQo+ID4g LQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gLQkJY2Fz ZSAyOg0KPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0K PiA+IC0JCWNhc2UgMToNCj4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRo cm91Z2ggKi8NCj4gPiAtCQl9DQo+ID4gLQl9IGVsc2Ugew0KPiA+IC0JCWZvciAoaSA9IDA7IGlk eCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiAt CQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gLQkJZm9yIChpZHggPSAwOyBpIDwg bjsgaSsrLCBpZHgrKykNCj4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+IC0JfQ0KPiA+ IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gLV9f cnRlX3JpbmdfZGVxdWV1ZV9lbGVtc182NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHBy b2RfaGVhZCwNCj4gPiAtCQl2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gLXsNCj4g PiAtCXVuc2lnbmVkIGludCBpOw0KPiA+IC0JY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7 DQo+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+IC0JdWludDY0 X3QgKnJpbmcgPSAodWludDY0X3QgKikmclsxXTsNCj4gPiAtCXVuYWxpZ25lZF91aW50NjRfdCAq b2JqID0gKHVuYWxpZ25lZF91aW50NjRfdCAqKW9ial90YWJsZTsNCj4gPiAtCWlmIChsaWtlbHko aWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gLQkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Myk7IGkg Kz0gNCwgaWR4ICs9IDQpIHsNCj4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+IC0JCQlv YmpbaSArIDFdID0gcmluZ1tpZHggKyAxXTsNCj4gPiAtCQkJb2JqW2kgKyAyXSA9IHJpbmdbaWR4 ICsgMl07DQo+ID4gLQkJCW9ialtpICsgM10gPSByaW5nW2lkeCArIDNdOw0KPiA+IC0JCX0NCj4g PiAtCQlzd2l0Y2ggKG4gJiAweDMpIHsNCj4gPiAtCQljYXNlIDM6DQo+ID4gLQkJCW9ialtpKytd ID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gLQkJY2FzZSAyOg0KPiA+IC0J CQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+IC0JCWNhc2Ug MToNCj4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4g PiAtCQl9DQo+ID4gLQl9IGVsc2Ugew0KPiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkr KywgaWR4KyspDQo+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiAtCQkvKiBTdGFydCBh dCB0aGUgYmVnaW5uaW5nICovDQo+ID4gLQkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgr KykNCj4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+IC0JfQ0KPiA+IC19DQo+ID4gLQ0K PiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gLV9fcnRlX3JpbmdfZGVx dWV1ZV9lbGVtc18xMjgoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ ID4gLQkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+IC17DQo+ID4gLQl1bnNpZ25l ZCBpbnQgaTsNCj4gPiAtCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXplOw0KPiA+IC0JdWlu dDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiAtCXJ0ZV9pbnQxMjhfdCAqcmlu ZyA9IChydGVfaW50MTI4X3QgKikmclsxXTsNCj4gPiAtCXJ0ZV9pbnQxMjhfdCAqb2JqID0gKHJ0 ZV9pbnQxMjhfdCAqKW9ial90YWJsZTsNCj4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUp KSB7DQo+ID4gLQkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4MSk7IGkgKz0gMiwgaWR4ICs9IDIp DQo+ID4gLQkJCW1lbWNweSgodm9pZCAqKShvYmogKyBpKSwgKHZvaWQgKikocmluZyArIGlkeCks IDMyKTsNCj4gPiAtCQlzd2l0Y2ggKG4gJiAweDEpIHsNCj4gPiAtCQljYXNlIDE6DQo+ID4gLQkJ CW1lbWNweSgodm9pZCAqKShvYmogKyBpKSwgKHZvaWQgKikocmluZyArIGlkeCksIDE2KTsNCj4g PiAtCQl9DQo+ID4gLQl9IGVsc2Ugew0KPiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkr KywgaWR4KyspDQo+ID4gLQkJCW1lbWNweSgodm9pZCAqKShvYmogKyBpKSwgKHZvaWQgKikocmlu ZyArIGlkeCksIDE2KTsNCj4gPiAtCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4g LQkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiAtCQkJbWVtY3B5KCh2b2lk ICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4KSwgMTYpOw0KPiA+IC0JfQ0KPiA+IC19 DQo+ID4gLQ0KPiA+IC0vKiB0aGUgYWN0dWFsIGRlcXVldWUgb2YgZWxlbWVudHMgZnJvbSB0aGUg cmluZy4NCj4gPiAtICogUGxhY2VkIGhlcmUgc2luY2UgaWRlbnRpY2FsIGNvZGUgbmVlZGVkIGlu IGJvdGgNCj4gPiAtICogc2luZ2xlIGFuZCBtdWx0aSBwcm9kdWNlciBlbnF1ZXVlIGZ1bmN0aW9u cy4NCj4gPiAtICovDQo+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiAt X19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgY29u c19oZWFkLA0KPiA+IC0JCXZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgZXNpemUsIHVpbnQzMl90 IG51bSkNCj4gPiAtew0KPiA+IC0JLyogOEIgYW5kIDE2QiBjb3BpZXMgaW1wbGVtZW50ZWQgaW5k aXZpZHVhbGx5IHRvIHJldGFpbg0KPiA+IC0JICogdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UuDQo+ ID4gLQkgKi8NCj4gPiAtCWlmIChlc2l6ZSA9PSA4KQ0KPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1 ZV9lbGVtc182NChyLCBjb25zX2hlYWQsIG9ial90YWJsZSwNCj4gbnVtKTsNCj4gPiAtCWVsc2Ug aWYgKGVzaXplID09IDE2KQ0KPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18xMjgociwg Y29uc19oZWFkLCBvYmpfdGFibGUsDQo+IG51bSk7DQo+ID4gLQllbHNlIHsNCj4gPiAtCQl1aW50 MzJfdCBpZHgsIHNjYWxlLCBucl9pZHgsIG5yX251bSwgbnJfc2l6ZTsNCj4gPiAtDQo+ID4gLQkJ LyogTm9ybWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gLQkJc2NhbGUgPSBlc2l6ZSAvIHNpemVv Zih1aW50MzJfdCk7DQo+ID4gLQkJbnJfbnVtID0gbnVtICogc2NhbGU7DQo+ID4gLQkJaWR4ID0g Y29uc19oZWFkICYgci0+bWFzazsNCj4gPiAtCQlucl9pZHggPSBpZHggKiBzY2FsZTsNCj4gPiAt CQlucl9zaXplID0gci0+c2l6ZSAqIHNjYWxlOw0KPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9l bGVtc18zMihyLCBucl9zaXplLCBucl9pZHgsDQo+ID4gLQkJCQlvYmpfdGFibGUsIG5yX251bSk7 DQo+ID4gLQl9DQo+ID4gLX0NCj4gPiAtDQo+ID4gLS8qIEJldHdlZW4gbG9hZCBhbmQgbG9hZC4g dGhlcmUgbWlnaHQgYmUgY3B1IHJlb3JkZXIgaW4gd2VhayBtb2RlbA0KPiA+IC0gKiAocG93ZXJw Yy9hcm0pLg0KPiA+IC0gKiBUaGVyZSBhcmUgMiBjaG9pY2VzIGZvciB0aGUgdXNlcnMNCj4gPiAt ICogMS51c2Ugcm1iKCkgbWVtb3J5IGJhcnJpZXINCj4gPiAtICogMi51c2Ugb25lLWRpcmVjdGlv biBsb2FkX2FjcXVpcmUvc3RvcmVfcmVsZWFzZSBiYXJyaWVyDQo+ID4gLSAqIEl0IGRlcGVuZHMg b24gcGVyZm9ybWFuY2UgdGVzdCByZXN1bHRzLg0KPiA+IC0gKiBCeSBkZWZhdWx0LCBtb3ZlIGNv bW1vbiBmdW5jdGlvbnMgdG8gcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4gLSAqLw0KPiA+IC0jaWZk ZWYgUlRFX1VTRV9DMTFfTUVNX01PREVMDQo+ID4gLSNpbmNsdWRlICJydGVfcmluZ19jMTFfbWVt LmgiDQo+ID4gLSNlbHNlDQo+ID4gLSNpbmNsdWRlICJydGVfcmluZ19nZW5lcmljLmgiDQo+ID4g LSNlbmRpZg0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVy YWwgb2JqZWN0cyBvbiB0aGUgcmluZw0KPiA+IC0gKg0KPiA+IC0gKiBAcGFyYW0gcg0KPiA+IC0g KiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gLSAqIEBwYXJhbSBvYmpf dGFibGUNCj4gPiAtICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+IC0g KiBAcGFyYW0gZXNpemUNCj4gPiAtICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5 dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiAtICogICBUaGlzIG11c3QgYmUg dGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ ID4gLSAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiAtICogQHBhcmFtIG4NCj4g PiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhl IG9ial90YWJsZS4NCj4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gLSAqICAgUlRFX1JJTkdf UVVFVUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+ IHJpbmcNCj4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55 IGl0ZW1zIGFzIHBvc3NpYmxlDQo+IGZyb20gcmluZw0KPiA+IC0gKiBAcGFyYW0gaXNfc3ANCj4g PiAtICogICBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2Ugc2luZ2xlIHByb2R1Y2VyIG9yIG11bHRp LXByb2R1Y2VyIGhlYWQNCj4gdXBkYXRlDQo+ID4gLSAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4g LSAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJh dGlvbiBoYXMgZmluaXNoZWQNCj4gPiAtICogQHJldHVybg0KPiA+IC0gKiAgIEFjdHVhbCBudW1i ZXIgb2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiAtICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklO R19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+IC0gKi8NCj4gPiAt c3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gLV9fcnRlX3Jpbmdf ZG9fZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZCAqb2JqX3RhYmxl LA0KPiA+IC0JCXVuc2lnbmVkIGludCBlc2l6ZSwgdW5zaWduZWQgaW50IG4sDQo+ID4gLQkJZW51 bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwgdW5zaWduZWQgaW50IGlzX3NwLA0K PiA+IC0JCXVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gPiAtew0KPiA+IC0JdWludDMyX3Qg cHJvZF9oZWFkLCBwcm9kX25leHQ7DQo+ID4gLQl1aW50MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4g LQ0KPiA+IC0JbiA9IF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWQociwgaXNfc3AsIG4sIGJlaGF2 aW9yLA0KPiA+IC0JCQkmcHJvZF9oZWFkLCAmcHJvZF9uZXh0LCAmZnJlZV9lbnRyaWVzKTsNCj4g PiAtCWlmIChuID09IDApDQo+ID4gLQkJZ290byBlbmQ7DQo+ID4gLQ0KPiA+IC0JX19ydGVfcmlu Z19lbnF1ZXVlX2VsZW1zKHIsIHByb2RfaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4g LQ0KPiA+IC0JX19ydGVfcmluZ191cGRhdGVfdGFpbCgmci0+cHJvZCwgcHJvZF9oZWFkLCBwcm9k X25leHQsIGlzX3NwLCAxKTsNCj4gPiAtZW5kOg0KPiA+IC0JaWYgKGZyZWVfc3BhY2UgIT0gTlVM TCkNCj4gPiAtCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmllcyAtIG47DQo+ID4gLQlyZXR1cm4g bjsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqIEBpbnRlcm5hbCBEZXF1ZXVlIHNl dmVyYWwgb2JqZWN0cyBmcm9tIHRoZSByaW5nDQo+ID4gLSAqDQo+ID4gLSAqIEBwYXJhbSByDQo+ ID4gLSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiAtICogQHBhcmFt IG9ial90YWJsZQ0KPiA+IC0gKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwg aW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+IC0gKiAgIFRoaXMgbXVz dCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBPdGhlcndp c2UNCj4gPiAtICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+IC0gKiBAcGFyYW0g bg0KPiA+IC0gKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwdWxsIGZyb20gdGhlIHJpbmcu DQo+ID4gLSAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVE OiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiByaW5nDQo+ID4g LSAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVtcyBhcyBw b3NzaWJsZQ0KPiBmcm9tIHJpbmcNCj4gPiAtICogQHBhcmFtIGlzX3NjDQo+ID4gLSAqICAgSW5k aWNhdGVzIHdoZXRoZXIgdG8gdXNlIHNpbmdsZSBjb25zdW1lciBvciBtdWx0aS1jb25zdW1lciBo ZWFkDQo+IHVwZGF0ZQ0KPiA+IC0gKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gLSAqICAgcmV0dXJu cyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUg aGFzDQo+IGZpbmlzaGVkDQo+ID4gLSAqIEByZXR1cm4NCj4gPiAtICogICAtIEFjdHVhbCBudW1i ZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4gPiAtICogICAgIElmIGJlaGF2aW9yID09IFJURV9S SU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gLSAqLw0KPiA+ IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiAtX19ydGVfcmlu Z19kb19kZXF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ ID4gLQkJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwNCj4gPiAtCQllbnVtIHJ0 ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQgaXNfc2MsDQo+ID4g LQkJdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+ID4gLXsNCj4gPiAtCXVpbnQzMl90IGNvbnNf aGVhZCwgY29uc19uZXh0Ow0KPiA+IC0JdWludDMyX3QgZW50cmllczsNCj4gPiAtDQo+ID4gLQlu ID0gX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChyLCAoaW50KWlzX3NjLCBuLCBiZWhhdmlvciwN Cj4gPiAtCQkJJmNvbnNfaGVhZCwgJmNvbnNfbmV4dCwgJmVudHJpZXMpOw0KPiA+IC0JaWYgKG4g PT0gMCkNCj4gPiAtCQlnb3RvIGVuZDsNCj4gPiAtDQo+ID4gLQlfX3J0ZV9yaW5nX2RlcXVldWVf ZWxlbXMociwgY29uc19oZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiAtDQo+ID4gLQlf X3J0ZV9yaW5nX3VwZGF0ZV90YWlsKCZyLT5jb25zLCBjb25zX2hlYWQsIGNvbnNfbmV4dCwgaXNf c2MsIDApOw0KPiA+IC0NCj4gPiAtZW5kOg0KPiA+IC0JaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0K PiA+IC0JCSphdmFpbGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiAtCXJldHVybiBuOw0KPiA+IC19 DQo+ID4gLQ0KPiA+ICAvKioNCj4gPiAgICogRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhl IHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZlKS4NCj4gPiAgICoNCj4gPiBkaWZmIC0tZ2l0IGEv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5oDQo+ID4gYi9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmdfaHRzLmggaW5kZXggMzU5YjE1NzcxLi5iZGJkYWZjOWYgMTAwNjQ0DQo+ID4gLS0tIGEv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5oDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5n L3J0ZV9yaW5nX2h0cy5oDQo+ID4gQEAgLTI5LDg5ICsyOSw3IEBADQo+ID4gIGV4dGVybiAiQyIg ew0KPiA+ICAjZW5kaWYNCj4gPg0KPiA+IC0jaW5jbHVkZSA8cnRlX3JpbmdfaHRzX2MxMV9tZW0u aD4NCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0gKiBAaW50ZXJuYWwgRW5xdWV1ZSBzZXZlcmFsIG9i amVjdHMgb24gdGhlIEhUUyByaW5nLg0KPiA+IC0gKg0KPiA+IC0gKiBAcGFyYW0gcg0KPiA+IC0g KiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gLSAqIEBwYXJhbSBvYmpf dGFibGUNCj4gPiAtICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+IC0g KiBAcGFyYW0gZXNpemUNCj4gPiAtICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5 dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiAtICogICBUaGlzIG11c3QgYmUg dGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ ID4gLSAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiAtICogQHBhcmFtIG4NCj4g PiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhl IG9ial90YWJsZS4NCj4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gLSAqICAgUlRFX1JJTkdf UVVFVUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+ IHJpbmcNCj4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBtYW55 IGl0ZW1zIGFzIHBvc3NpYmxlDQo+IGZyb20gcmluZw0KPiA+IC0gKiBAcGFyYW0gZnJlZV9zcGFj ZQ0KPiA+IC0gKiAgIHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1 ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkDQo+ID4gLSAqIEByZXR1cm4NCj4gPiAtICogICBBY3R1 YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gLSAqICAgSWYgYmVoYXZpb3IgPT0g UlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiAtICov DQo+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+IC1fX3J0 ZV9yaW5nX2RvX2h0c19lbnF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lk DQo+ICpvYmpfdGFibGUsDQo+ID4gLQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBy dGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwNCj4gPiAtCXVpbnQzMl90ICpmcmVlX3Nw YWNlKQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+IC0NCj4gPiAtCW4g PSAgX19ydGVfcmluZ19odHNfbW92ZV9wcm9kX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLCAm ZnJlZSk7DQo+ID4gLQ0KPiA+IC0JaWYgKG4gIT0gMCkgew0KPiA+IC0JCV9fcnRlX3JpbmdfZW5x dWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiAtCQlfX3J0ZV9y aW5nX2h0c191cGRhdGVfdGFpbCgmci0+aHRzX3Byb2QsIGhlYWQsIG4sIDEpOw0KPiA+IC0JfQ0K PiA+IC0NCj4gPiAtCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gLQkJKmZyZWVfc3BhY2Ug PSBmcmVlIC0gbjsNCj4gPiAtCXJldHVybiBuOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC0vKioNCj4g PiAtICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIEhUUyByaW5n Lg0KPiA+IC0gKg0KPiA+IC0gKiBAcGFyYW0gcg0KPiA+IC0gKiAgIEEgcG9pbnRlciB0byB0aGUg cmluZyBzdHJ1Y3R1cmUuDQo+ID4gLSAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiAtICogICBBIHBv aW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+IC0gKiBAcGFyYW0gZXNpemUNCj4gPiAt ICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVs dGlwbGUgb2YgNC4NCj4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3 aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gLSAqICAgdGhlIHJlc3VsdHMg YXJlIHVuZGVmaW5lZC4NCj4gPiAtICogQHBhcmFtIG4NCj4gPiAtICogICBUaGUgbnVtYmVyIG9m IG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSByaW5nLg0KPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3IN Cj4gPiAtICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVxdWV1ZSBhIGZpeGVkIG51bWJl ciBvZiBpdGVtcyBmcm9tIGENCj4gcmluZw0KPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklB QkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gZnJvbSByaW5nDQo+ID4g LSAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiAtICogICByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVt YWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMNCj4gZmluaXNoZWQNCj4g PiAtICogQHJldHVybg0KPiA+IC0gKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVl dWVkLg0KPiA+IC0gKiAgICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRo aXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiAtICovDQo+ID4gLXN0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+IC1fX3J0ZV9yaW5nX2RvX2h0c19kZXF1ZXVlX2Vs ZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4gLQl1aW50MzJfdCBl c2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwN Cj4gPiAtCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gLXsNCj4gPiAtCXVpbnQzMl90IGVudHJp ZXMsIGhlYWQ7DQo+ID4gLQ0KPiA+IC0JbiA9IF9fcnRlX3JpbmdfaHRzX21vdmVfY29uc19oZWFk KHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwNCj4gJmVudHJpZXMpOw0KPiA+IC0NCj4gPiAtCWlmIChu ICE9IDApIHsNCj4gPiAtCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3Rh YmxlLCBlc2l6ZSwgbik7DQo+ID4gLQkJX19ydGVfcmluZ19odHNfdXBkYXRlX3RhaWwoJnItPmh0 c19jb25zLCBoZWFkLCBuLCAwKTsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlpZiAoYXZhaWxhYmxl ICE9IE5VTEwpDQo+ID4gLQkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+IC0JcmV0dXJu IG47DQo+ID4gLX0NCj4gPiArI2luY2x1ZGUgPHJpbmdfaHRzX2VsZW1fcHZ0Lmg+DQo+ID4NCj4g PiAgLyoqDQo+ID4gICAqIEVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSBIVFMgcmluZyAo bXVsdGktcHJvZHVjZXJzIHNhZmUpLg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jpbmcv cnRlX3JpbmdfcGVlay5oDQo+ID4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVlay5oIGlu ZGV4IDQ1ZjcwN2RjNy4uMGRkNDAyYmU0IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfcmlu Zy9ydGVfcmluZ19wZWVrLmgNCj4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVl ay5oDQo+ID4gQEAgLTQ4LDM5ICs0OCw3IEBADQo+ID4gIGV4dGVybiAiQyIgew0KPiA+ICAjZW5k aWYNCj4gPg0KPiA+IC0jaW5jbHVkZSA8cnRlX3JpbmdfcGVla19jMTFfbWVtLmg+DQo+ID4gLQ0K PiA+IC0vKioNCj4gPiAtICogQGludGVybmFsIFRoaXMgZnVuY3Rpb24gbW92ZXMgcHJvZCBoZWFk IHZhbHVlLg0KPiA+IC0gKi8NCj4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWdu ZWQgaW50DQo+ID4gLV9fcnRlX3JpbmdfZG9fZW5xdWV1ZV9zdGFydChzdHJ1Y3QgcnRlX3Jpbmcg KnIsIHVpbnQzMl90IG4sDQo+ID4gLQkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhh dmlvciwgdWludDMyX3QNCj4gKmZyZWVfc3BhY2UpDQo+ID4gLXsNCj4gPiAtCXVpbnQzMl90IGZy ZWUsIGhlYWQsIG5leHQ7DQo+ID4gLQ0KPiA+IC0Jc3dpdGNoIChyLT5wcm9kLnN5bmNfdHlwZSkg ew0KPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+IC0JCW4gPSBfX3J0ZV9yaW5nX21v dmVfcHJvZF9oZWFkKHIsIFJURV9SSU5HX1NZTkNfU1QsIG4sDQo+ID4gLQkJCWJlaGF2aW9yLCAm aGVhZCwgJm5leHQsICZmcmVlKTsNCj4gPiAtCQlicmVhazsNCj4gPiAtCWNhc2UgUlRFX1JJTkdf U1lOQ19NVF9IVFM6DQo+ID4gLQkJbiA9ICBfX3J0ZV9yaW5nX2h0c19tb3ZlX3Byb2RfaGVhZChy LCBuLCBiZWhhdmlvciwNCj4gPiAtCQkJJmhlYWQsICZmcmVlKTsNCj4gPiAtCQlicmVhazsNCj4g PiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVDoNCj4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9S VFM6DQo+ID4gLQlkZWZhdWx0Og0KPiA+IC0JCS8qIHVuc3VwcG9ydGVkIG1vZGUsIHNob3VsZG4n dCBiZSBoZXJlICovDQo+ID4gLQkJUlRFX0FTU0VSVCgwKTsNCj4gPiAtCQluID0gMDsNCj4gPiAt CQlmcmVlID0gMDsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxM KQ0KPiA+IC0JCSpmcmVlX3NwYWNlID0gZnJlZSAtIG47DQo+ID4gLQlyZXR1cm4gbjsNCj4gPiAt fQ0KPiA+ICsjaW5jbHVkZSA8cmluZ19wZWVrX2VsZW1fcHZ0Lmg+DQo+ID4NCj4gPiAgLyoqDQo+ ID4gICAqIFN0YXJ0IHRvIGVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSByaW5nLg0KPiA+ IEBAIC0yNDgsNDMgKzIxNiw2IEBAIHJ0ZV9yaW5nX2VucXVldWVfZmluaXNoKHN0cnVjdCBydGVf cmluZyAqciwgdm9pZCAqDQo+IGNvbnN0ICpvYmpfdGFibGUsDQo+ID4gIAlydGVfcmluZ19lbnF1 ZXVlX2VsZW1fZmluaXNoKHIsIG9ial90YWJsZSwgc2l6ZW9mKHVpbnRwdHJfdCksIG4pOyAgfQ0K PiA+DQo+ID4gLS8qKg0KPiA+IC0gKiBAaW50ZXJuYWwgVGhpcyBmdW5jdGlvbiBtb3ZlcyBjb25z IGhlYWQgdmFsdWUgYW5kIGNvcGllcyB1cCB0byAqbioNCj4gPiAtICogb2JqZWN0cyBmcm9tIHRo ZSByaW5nIHRvIHRoZSB1c2VyIHByb3ZpZGVkIG9ial90YWJsZS4NCj4gPiAtICovDQo+ID4gLXN0 YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+IC1fX3J0ZV9yaW5nX2Rv X2RlcXVldWVfc3RhcnQoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4g LQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv ciBiZWhhdmlvciwNCj4gPiAtCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gLXsNCj4gPiAtCXVp bnQzMl90IGF2YWlsLCBoZWFkLCBuZXh0Ow0KPiA+IC0NCj4gPiAtCXN3aXRjaCAoci0+Y29ucy5z eW5jX3R5cGUpIHsNCj4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19TVDoNCj4gPiAtCQluID0gX19y dGVfcmluZ19tb3ZlX2NvbnNfaGVhZChyLCBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+IC0JCQli ZWhhdmlvciwgJmhlYWQsICZuZXh0LCAmYXZhaWwpOw0KPiA+IC0JCWJyZWFrOw0KPiA+IC0JY2Fz ZSBSVEVfUklOR19TWU5DX01UX0hUUzoNCj4gPiAtCQluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVf Y29uc19oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+IC0JCQkmaGVhZCwgJmF2YWlsKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVDoNCj4gPiAtCWNhc2UgUlRFX1JJ TkdfU1lOQ19NVF9SVFM6DQo+ID4gLQlkZWZhdWx0Og0KPiA+IC0JCS8qIHVuc3VwcG9ydGVkIG1v ZGUsIHNob3VsZG4ndCBiZSBoZXJlICovDQo+ID4gLQkJUlRFX0FTU0VSVCgwKTsNCj4gPiAtCQlu ID0gMDsNCj4gPiAtCQlhdmFpbCA9IDA7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKG4gIT0g MCkNCj4gPiAtCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBl c2l6ZSwgbik7DQo+ID4gLQ0KPiA+IC0JaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+IC0JCSph dmFpbGFibGUgPSBhdmFpbCAtIG47DQo+ID4gLQlyZXR1cm4gbjsNCj4gPiAtfQ0KPiA+IC0NCj4g PiAgLyoqDQo+ID4gICAqIFN0YXJ0IHRvIGRlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhl IHJpbmcuDQo+ID4gICAqIE5vdGUgdGhhdCB1c2VyIGhhcyB0byBjYWxsIGFwcHJvcHJpYXRlIGRl cXVldWVfZmluaXNoKCkgZGlmZiAtLWdpdA0KPiA+IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n X3BlZWtfemMuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaA0KPiA+ IGluZGV4IGNiM2JiZDA2Ny4uYmM4MjUyYTE4IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVf cmluZy9ydGVfcmluZ19wZWVrX3pjLmgNCj4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcnRlX3Jp bmdfcGVla196Yy5oDQo+ID4gQEAgLTcyLDcgKzcyLDcgQEANCj4gPiAgZXh0ZXJuICJDIiB7DQo+ ID4gICNlbmRpZg0KPiA+DQo+ID4gLSNpbmNsdWRlIDxydGVfcmluZ19wZWVrX2MxMV9tZW0uaD4N Cj4gPiArI2luY2x1ZGUgPHJpbmdfcGVla19lbGVtX3B2dC5oPg0KPiA+DQo+ID4gIC8qKg0KPiA+ ICAgKiBSaW5nIHplcm8tY29weSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuDQo+ID4gZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHMuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yaW5n L3J0ZV9yaW5nX3J0cy5oIGluZGV4IGFmYzEyYWJlMi4uODNkOTkwM2UyIDEwMDY0NA0KPiA+IC0t LSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHMuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVf cmluZy9ydGVfcmluZ19ydHMuaA0KPiA+IEBAIC01Niw4OSArNTYsNyBAQA0KPiA+ICBleHRlcm4g IkMiIHsNCj4gPiAgI2VuZGlmDQo+ID4NCj4gPiAtI2luY2x1ZGUgPHJ0ZV9yaW5nX3J0c19jMTFf bWVtLmg+DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICogQGludGVybmFsIEVucXVldWUgc2V2ZXJh bCBvYmplY3RzIG9uIHRoZSBSVFMgcmluZy4NCj4gPiAtICoNCj4gPiAtICogQHBhcmFtIHINCj4g PiAtICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+IC0gKiBAcGFyYW0g b2JqX3RhYmxlDQo+ID4gLSAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4g PiAtICogQHBhcmFtIGVzaXplDQo+ID4gLSAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBp biBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gLSAqICAgVGhpcyBtdXN0 IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lz ZQ0KPiA+IC0gKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gLSAqIEBwYXJhbSBu DQo+ID4gLSAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9t IHRoZSBvYmpfdGFibGUuDQo+ID4gLSAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+IC0gKiAgIFJURV9S SU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20g YQ0KPiByaW5nDQo+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVldWUgYXMg bWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiBmcm9tIHJpbmcNCj4gPiAtICogQHBhcmFtIGZyZWVf c3BhY2UNCj4gPiAtICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVu cXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiA+IC0gKiBAcmV0dXJuDQo+ID4gLSAqICAg QWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiA+IC0gKiAgIElmIGJlaGF2aW9y ID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4g LSAqLw0KPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiAt X19ydGVfcmluZ19kb19ydHNfZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qg dm9pZA0KPiAqb2JqX3RhYmxlLA0KPiA+IC0JdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVu dW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4gLQl1aW50MzJfdCAqZnJl ZV9zcGFjZSkNCj4gPiAtew0KPiA+IC0JdWludDMyX3QgZnJlZSwgaGVhZDsNCj4gPiAtDQo+ID4g LQluID0gIF9fcnRlX3JpbmdfcnRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVh ZCwgJmZyZWUpOw0KPiA+IC0NCj4gPiAtCWlmIChuICE9IDApIHsNCj4gPiAtCQlfX3J0ZV9yaW5n X2VucXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gLQkJX19y dGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19wcm9kKTsNCj4gPiAtCX0NCj4gPiAtDQo+ ID4gLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+IC0JCSpmcmVlX3NwYWNlID0gZnJlZSAt IG47DQo+ID4gLQlyZXR1cm4gbjsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqIEBp bnRlcm5hbCBEZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBSVFMgcmluZy4NCj4gPiAt ICoNCj4gPiAtICogQHBhcmFtIHINCj4gPiAtICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3Ry dWN0dXJlLg0KPiA+IC0gKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gLSAqICAgQSBwb2ludGVyIHRv IGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiAtICogQHBhcmFtIGVzaXplDQo+ID4gLSAqICAgVGhl IHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9m IDQuDQo+ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3Jl YXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+IC0gKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRl ZmluZWQuDQo+ID4gLSAqIEBwYXJhbSBuDQo+ID4gLSAqICAgVGhlIG51bWJlciBvZiBvYmplY3Rz IHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gLSAq ICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRl bXMgZnJvbSBhDQo+IHJpbmcNCj4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVx dWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+IGZyb20gcmluZw0KPiA+IC0gKiBAcGFy YW0gYXZhaWxhYmxlDQo+ID4gLSAqICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBy aW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUgaGFzDQo+IGZpbmlzaGVkDQo+ID4gLSAqIEBy ZXR1cm4NCj4gPiAtICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4g PiAtICogICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwg YmUgMCBvciBuIG9ubHkuDQo+ID4gLSAqLw0KPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGlu ZSB1bnNpZ25lZCBpbnQNCj4gPiAtX19ydGVfcmluZ19kb19ydHNfZGVxdWV1ZV9lbGVtKHN0cnVj dCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+IC0JdWludDMyX3QgZXNpemUsIHVp bnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4gLQl1 aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCBlbnRyaWVzLCBoZWFk Ow0KPiA+IC0NCj4gPiAtCW4gPSBfX3J0ZV9yaW5nX3J0c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBi ZWhhdmlvciwgJmhlYWQsDQo+ICZlbnRyaWVzKTsNCj4gPiAtDQo+ID4gLQlpZiAobiAhPSAwKSB7 DQo+ID4gLQkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNp emUsIG4pOw0KPiA+IC0JCV9fcnRlX3JpbmdfcnRzX3VwZGF0ZV90YWlsKCZyLT5ydHNfY29ucyk7 DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+IC0JCSph dmFpbGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiAtCXJldHVybiBuOw0KPiA+IC19DQo+ID4gKyNp bmNsdWRlIDxyaW5nX3J0c19lbGVtX3B2dC5oPg0KPiA+DQo+ID4gIC8qKg0KPiA+ICAgKiBFbnF1 ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZl KS4NCj4gPiAtLQ0KPiA+IDIuMTcuMQ0KDQo=