From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smarthost2.atos.net (smtppost.atos.net [193.56.114.177]) by sourceware.org (Postfix) with ESMTPS id 527F9394FC35 for ; Thu, 17 Mar 2022 15:01:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 527F9394FC35 X-IronPort-AV: E=Sophos;i="5.90,188,1643670000"; d="scan'208,223";a="327973111" X-MGA-submission: =?us-ascii?q?MDFLkGjJqyqS8nkj4Y11KYKpIZ3X5tixGgcJwL?= =?us-ascii?q?gFDgUfNiRp/63NxlM9m0ord8pdB16zigSx0Vzrkwmo/UN+X6Jfe+6DPb?= =?us-ascii?q?hl4l4HobgjRTeufA2d/ogta/1MZyaHDLm2Uydc4QQ6Rzsoez2M4UTR+9?= =?us-ascii?q?rs?= Received: from mail.sis.atos.net (HELO GITEXCPRDMB13.ww931.my-it-solutions.net) ([10.89.28.143]) by smarthost2.atos.net with ESMTP/TLS/AES256-GCM-SHA384; 17 Mar 2022 16:01:40 +0100 Received: from GITEXCPRDMB14.ww931.my-it-solutions.net (10.89.28.144) by GITEXCPRDMB13.ww931.my-it-solutions.net (10.89.28.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18; Thu, 17 Mar 2022 16:01:39 +0100 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (172.16.214.168) by GITEXCPRDMB14.ww931.my-it-solutions.net (10.89.28.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.18 via Frontend Transport; Thu, 17 Mar 2022 16:01:39 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CkpdTDD7khW6E60qog1Csy1K+ANs4iDEbn4CDR9GcPwC8N8UCDHMzDdqa/ufAfgjjdFG6TxupdAAcCS6cTz2L2fYl5WEWGVICAgedGYpQHtFP9IcgqX7hskeXkvjhpY4cjCczihX8pd3vCtKtD1shZA0vK9Spf7hC0XFaGnkpBzsfB8XpARzk1hPxKt+Uw4VebjWly8jcJerjgq6zP8ZNek5g1kkeqFeaHIOAT56rk+8T98lGhatM6eRmAGPuJwsvuCk8Cx0e+IbGMGglaXZlXMJ0lPrm7n8dS2jKIAVXpIKvqNfHp9BXaMl4qYP+FyWXq/Z1ph/bZEU+EHm0J7LfA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Krzru/mws4Ae6XGd9W7msyXMoHE0TkRnzPDfuxv+s/4=; b=h3o/B0XGAV/PgSaO/EP/cwP4khE42CiNxzrRd4J2JnZ18vYZybDNgUqK1rGkkD11WpyR8W1HjzWBdsPKdUStBU/CrII+3v5Rb6d0lrBr/rjlFWJ5zNTXWTwo0qrD4xP6iCUEr+puFcKsrTCeKS3T5otb/+WMXKU4cM3qG2qdYol65HMTKq2NkNbsI6oadJwCC0YdbENWOdR2ikpLt/v0OgNMyDa8OQCRimYO4OdhhT4bmpQQZf+5N+g5fWzAiaOmmeVe0KDDbOdYSH8xH6KeXNT1zyZ5O1d9/dytSGpP74R8rjma/CwYh5hOgd7ng7fMtL1MnhYDb7YcbydAMNFrTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atos.net; dmarc=pass action=none header.from=atos.net; dkim=pass header.d=atos.net; arc=none Received: from PA4PR02MB6686.eurprd02.prod.outlook.com (2603:10a6:102:ff::14) by AM0PR02MB4370.eurprd02.prod.outlook.com (2603:10a6:208:f8::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Thu, 17 Mar 2022 15:01:38 +0000 Received: from PA4PR02MB6686.eurprd02.prod.outlook.com ([fe80::985a:b393:d9c:9379]) by PA4PR02MB6686.eurprd02.prod.outlook.com ([fe80::985a:b393:d9c:9379%4]) with mapi id 15.20.5081.017; Thu, 17 Mar 2022 15:01:38 +0000 From: "CHIGOT, CLEMENT" To: "binutils@sourceware.org" CC: Kavana N Bhat , Ayappan P2 , "pro@helflym.eu" Subject: [PATCH 2/2] xcoff: implement linker relaxation Thread-Topic: [PATCH 2/2] xcoff: implement linker relaxation Thread-Index: AQHYOgviOLDYW7kYWEyUDJB3QbeZ6g== Date: Thu, 17 Mar 2022 15:01:37 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_Enabled=True; MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_SiteId=33440fc6-b7c7-412c-bb73-0e70b0198d5a; MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_SetDate=2022-03-17T15:01:37.664Z; MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_Name=Atos For Internal Use - All Employees; MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_ContentBits=0; MSIP_Label_e463cba9-5f6c-478d-9329-7b2295e4e8ed_Method=Standard; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0653a1b0-2648-4a61-3fed-08da08270964 x-ms-traffictypediagnostic: AM0PR02MB4370:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LuhHWU84d5PanMPJM5BK7k74HxAT1dEvFsfX4XJkwsTY0SZzg5qYyaFGuDx0dSDhg0fE3qJZ9prI51F1UMdRVP0cGYONEThc5Gus5s1mVLQcpgn8HP8FI7rs2Ec1spi89Qay2DoCVnDGKOv0PmIb++Okef2+yPOsOOzQ/YfLRV4j/cY4aAZmoT2h5utqufisUP+9vWxYMwCkyBA8qDr/MMcDS2RKtH43Gjc8d4KAiPZNYhY+7awffiSUKsuWWaBUIxKsRfkbob5qWCgzq6tOle8UPsufoxyleSQ47490vJyEx7OinsPMmj6Z70ZwpXS/wJQJe23H99CoCWGRh2je4m0HKMZmxwowFzk+vM1JGohqVxkXpPxHPB9PdD4coW2cv5JycRGexHziVWdEEJbwfwrAxIoN2HZesodtMu0Yqvk1v9CZIz+aZN4ke20a11qTTo8oZlNw2gnMkMM2N37GaE6uyxdJ8ckSmcPpu4Hkq6rSBH6ZvGK7yJeWZmDWI6C2cZkXBR2id7BrWSVuNCmEU18fj3BTuQFpj1oh+AEuShpljt62iuKM/G1eJ5NGfEBIg8fxyTy096YvmkQcaqrQwjZmuyWJ8rNSqHrwJ1aFhoav6xGTBPExmj7kTQFjS638QkVS6Sg4+2l0AsDWulsK5ZS81KMPZGD/rEbtvXWrcPir80DBhe9Pw2P0MQvcEXikMEtbScJWOy4L09hEfX0Z3g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA4PR02MB6686.eurprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(55016003)(8936002)(6916009)(54906003)(2906002)(4326008)(38070700005)(8676002)(186003)(26005)(52536014)(99936003)(86362001)(71200400001)(316002)(122000001)(82960400001)(38100700002)(64756008)(76116006)(91956017)(66556008)(5660300002)(83380400001)(66446008)(66946007)(66476007)(33656002)(9686003)(508600001)(7696005)(6506007); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?6em/qJNXERLnCc+o5dUIkFAGYDsIvjvMNZSHtYPI1o37IZ5Js4hLbJQfLz?= =?iso-8859-1?Q?Lh11448aUFd+FPftuHqVLy7APteA1IV9vNsNpZd7bwGRfpn5l2i2iPS/Zd?= =?iso-8859-1?Q?hmyYVu8EyAJ3CC9XfU0qzAPw3NX1eC4ngLLaqqielhJYc6Vfpd/JkmNfFM?= =?iso-8859-1?Q?z2dYwWvzsGDEY0tPNQx/jdQW5iFXsX9s/ihqtuAGCiOsLq4/PGh4oayBwO?= =?iso-8859-1?Q?FPLlAm+PesjobL1q8SOw/pcV+/+BxvmCMK8PvreV3r6aW6N9L68SNm1QKr?= =?iso-8859-1?Q?ETv56jUdp4UkN9i4jKxjBKYrprEa7lI0NYfjTT4jBvKrqaXHYyxGrTdrpw?= =?iso-8859-1?Q?HyVtNZviHu2ZnQiX3m3UHduQu8jOhH4/Hs0lH71oT4DTpxKAH40iKcOm45?= =?iso-8859-1?Q?FYBL6CF7J9fKSNTLfNJ9k06Jr93nday8Fuv63FBG4rqVLeqz6/TDyK4G5u?= =?iso-8859-1?Q?5W3st1BRBAxaq1lyG6iTUc5MucDuEZ0tfXuvg/7lgp2azozRgVBigUmUwa?= =?iso-8859-1?Q?qfgrDqNfopgIwcV+3weWFDpVHFbiatmVGKA3/sOxhC6Qkh/xxblBQ/OkFG?= =?iso-8859-1?Q?QP7oojxGrRI3IwICSfxYVwqe50Hcrd0dNpzNFdvQVoroKysSMUwzuq/7aM?= =?iso-8859-1?Q?OGZ1jLoiSEUq+U7wej/qQm83gbd7FeW/iTV46IHWOusj0mNE6sC5AQo+4U?= =?iso-8859-1?Q?Km1WHoiZuykccq9MquZ2u8ghFJAMFQFjRZVlxJHV3zLnLhe4GQf8xGOVtF?= =?iso-8859-1?Q?1fTCv4ymD3HlDKJaVEgHz952L/4CxTCQ7a9mV/u7RjIyEGNyKJ4c+icmTt?= =?iso-8859-1?Q?BrWY2uSREdoS28tVmQLIAZR3Gp2sj5lSWcd+JNpnZXaYyg1hwW4YwDfHC3?= =?iso-8859-1?Q?HRbqdUo8XmauD0CWUzPBrv4zJyV0qsySrYJLpoUvlUM6pGaGRnJQYZEAhR?= =?iso-8859-1?Q?PrK+G1Q0pS7thswRADzmi3zch7eJNlpCkPvBbQxYdDr5f8wEIEARbH7LFu?= =?iso-8859-1?Q?ewHnKEA+x1LaNWCGfbqi57ssZ8dWbzpVjt6u0Id6nRvBzoq94EpTzba+pS?= =?iso-8859-1?Q?w11H+xtZOBWz1f6sdauOkTv1GCYjhJXKHQljzlPLk6GtdxgQWdylmz52pU?= =?iso-8859-1?Q?bG/SwznYg30rmd5VLgU2coOANVyJjxygtMDBTdb3tGcCEhK9HcvUSVLxF/?= =?iso-8859-1?Q?8v+//eLkV9GYYtJgjlp16+fLo6fwlGvxga1XUafyv9an1+IRwPHaC+AqC2?= =?iso-8859-1?Q?rCCJy65NFF4YII0uBy6WfOjt5OS8kBaHbI2/bsKIYTzwwM9XEqRs4URnVA?= =?iso-8859-1?Q?ZGDAiT4fY9ZnwnUe5LY76aEnZBcfxa6FKmKT9BMGoof02YhZACeYv7LTVY?= =?iso-8859-1?Q?kgEdcDvI3FZGnroqMqZnOd/UIxLEM71OcxMqq04BtU6GdIRN0tMEvQfWj5?= =?iso-8859-1?Q?2zm5Vkqtk8ejPlKnNbu4RVYbbz9ThujUYYgaB9qyuznKuQ3ewoykllGi7E?= =?iso-8859-1?Q?NJO4kyJcJn501IQO7SVbyK?= Content-Type: multipart/mixed; boundary="_002_PA4PR02MB6686E4F68E95C662C60E3FBBEA129PA4PR02MB6686eurp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PA4PR02MB6686.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0653a1b0-2648-4a61-3fed-08da08270964 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Mar 2022 15:01:37.9563 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 33440fc6-b7c7-412c-bb73-0e70b0198d5a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QMMb17jtqHKiU+iopE9+NSUMu/DMCsCgY/k1uoulEoiM79i5Lg6daYNdrH0S0A+U1wdbzjxAqv7Ap81pAGI/SQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR02MB4370 X-OriginatorOrg: atos.net X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Mar 2022 15:01:46 -0000 --_002_PA4PR02MB6686E4F68E95C662C60E3FBBEA129PA4PR02MB6686eurp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This patch enables a first part of the linker relaxation in=0A= order to fix unreachable branches in large binaries.=0A= It has been tested by compiling gcc. However, the exact=0A= maximum branch offset (1<<25) could not be tested as other=0A= problems are appearing. However, the generation of stubs=0A= when considering that the maximum offset is (1<<24) is=0A= working fine and able to fully compile gcc. This is simply=0A= generating more stubs than actually needed.=0A= =0A= Note that as I'll stop working for AIX at this end of this=0A= month. Thus, I hope we'll have the time to merge it before.=0A= Moreover, Kavana and Ayappan will retrieve my work and =0A= knowledge on Binutils for AIX. Thus, they will be able to submit=0A= patches if anything goes wrong after the merge. I'm also adding=0A= my personal mail in order to answer questions but I won't have=0A= access to AIX anymore. =0A= =0A= =0A= bfd/ChangeLog:=0A= =0A= * coff-rs6000.c (xcoff_reloc_type_noop): Add info argument.=0A= (xcoff_reloc_type_fail): Likewise.=0A= (xcoff_reloc_type_pos): Likewise.=0A= (xcoff_reloc_type_neg): Likewise.=0A= (xcoff_reloc_type_rel): Likewise.=0A= (xcoff_reloc_type_toc): Likewise.=0A= (xcoff_reloc_type_ba): Likewise.=0A= (xcoff_reloc_type_crel): Likewise.=0A= (xcoff_reloc_type_tls): Likewise.=0A= (xcoff_reloc_type_br): Add stub handler.=0A= (xcoff_ppc_relocate_section): Add info to=0A= xcoff_calculate_relocation.=0A= (xcoff_stub_indirect_call_code): New constant.=0A= (xcoff_stub_shared_call_code): Likewise.=0A= (bfd_xcoff_backend_data): Add stub code fields.=0A= (bfd_pmac_xcoff_backend_data): Likewise.=0A= * coff64-rs6000.c (xcoff64_reloc_type_br): Add stub handler.=0A= (xcoff64_ppc_relocate_section): Add info to=0A= xcoff64_calculate_relocation.=0A= (xcoff64_stub_indirect_call_code): New constant.=0A= (xcoff64_stub_shared_call_code): Likewise.=0A= (bfd_xcoff_backend_data): Add stub code fields.=0A= (bfd_xcoff_aix5_backend_data): Likewise.=0A= * libxcoff.h (struct xcoff_backend_data_rec): Add stub fields.=0A= (bfd_xcoff_stub_indirect_call_code): New define.=0A= (bfd_xcoff_stub_indirect_call_size): New define.=0A= (bfd_xcoff_stub_shared_call_code): New define.=0A= (bfd_xcoff_stub_shared_call_size): New define.=0A= (xcoff_reloc_function): Add info argument.=0A= (enum xcoff_stub_type): New enum.=0A= (struct xcoff_stub_hash_entry): New structure.=0A= * xcofflink.c (struct xcoff_link_hash_table): Add stub hash=0A= table and params fields.=0A= (xcoff_stub_hash_entry): New define.=0A= (xcoff_stub_hash_lookup): New define.=0A= (stub_hash_newfunc): New function.=0A= (_bfd_xcoff_bfd_link_hash_table_free): Free the new stub hash=0A= table.=0A= (_bfd_xcoff_bfd_link_hash_table_create): Create the new stub=0A= hash table.=0A= (xcoff_link_add_symbols): Save rawsize for XTY_SD.=0A= (bfd_xcoff_link_init): New function.=0A= (xcoff_stub_csect_name): New function.=0A= (xcoff_stub_get_csect_in_range): New function.=0A= (xcoff_stub_name): New function.=0A= (bfd_xcoff_get_stub_entry): New function.=0A= (bfd_xcoff_type_of_stub): New function.=0A= (xcoff_add_stub): New function.=0A= (xcoff_build_one_stub): New function.=0A= (bfd_xcoff_size_stubs): New function.=0A= (bfd_xcoff_build_stubs): New function.=0A= (xcoff_stub_create_relocations): New function.=0A= (xcoff_link_input_bfd): Adapt relocations to stub.=0A= (xcoff_write_global_symbol): Adapt to new TOC entries generated=0A= for stubs.=0A= (_bfd_xcoff_bfd_final_link): Handle stub file.=0A= * xcofflink.h (struct bfd_xcoff_link_params): New structure.=0A= =0A= ld/ChangeLog:=0A= =0A= * emultempl/aix.em (params): New variable.=0A= (stub_file): New variable.=0A= (xcoff_add_stub_section): New function.=0A= (xcoff_layout_sections_again): New function=0A= (hook_in_stub): New function.=0A= (_after_allocation): Add stub creation.=0A= (_create_output_section_statements): Allocate stub file and=0A= pass params to backend.=0A= =0A= =0A= =0A= --_002_PA4PR02MB6686E4F68E95C662C60E3FBBEA129PA4PR02MB6686eurp_ Content-Type: application/octet-stream; name="0002-xcoff-implement-linker-relaxation.patch" Content-Description: 0002-xcoff-implement-linker-relaxation.patch Content-Disposition: attachment; filename="0002-xcoff-implement-linker-relaxation.patch"; size=56995; creation-date="Thu, 17 Mar 2022 14:47:33 GMT"; modification-date="Thu, 17 Mar 2022 14:47:33 GMT" Content-Transfer-Encoding: base64 RnJvbSA3N2JjYmY2ODVhYjRlNmQwOGY3MmY1ODZmNTI1NTJkOGIwNTcwMzExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Q2w9QzM9QTltZW50PTIwQ2hpZ290Pz0gPGNs ZW1lbnQuY2hpZ290QGF0b3MubmV0PgpEYXRlOiBUaHUsIDE3IE1hciAyMDIyIDEwOjI0OjU1ICsw MTAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIHhjb2ZmOiBpbXBsZW1lbnQgbGlua2VyIHJlbGF4YXRp b24KClRoaXMgcGF0Y2ggZW5hYmxlcyBhIGZpcnN0IHBhcnQgb2YgdGhlIGxpbmtlciByZWxheGF0 aW9uIGluCm9yZGVyIHRvIGZpeCB1bnJlYWNoYWJsZSBicmFuY2hlcyBpbiBsYXJnZSBiaW5hcmll cy4KSXQgaGFzIGJlZW4gdGVzdGVkIGJ5IGNvbXBpbGluZyBnY2MuIEhvd2V2ZXIsIHRoZSBleGFj dAptYXhpbXVtIGJyYW5jaCBvZmZzZXQgKDE8PDI1KSBjb3VsZCBub3QgYmUgdGVzdGVkIGFzIG90 aGVyCnByb2JsZW1zIGFyZSBhcHBlYXJpbmcuIEhvd2V2ZXIsIHRoZSBnZW5lcmF0aW9uIG9mIHN0 dWJzCndoZW4gY29uc2lkZXJpbmcgdGhhdCB0aGUgbWF4aW11bSBvZmZzZXQgaXMgKDE8PDI0KSBp cwp3b3JraW5nIGZpbmUgYW5kIGFibGUgdG8gZnVsbHkgY29tcGlsZSBnY2MuIFRoaXMgaXMgc2lt cGx5CmdlbmVyYXRpbmcgbW9yZSBzdHVicyB0aGFuIGFjdHVhbGx5IG5lZWRlZC4KCmJmZC9DaGFu Z2VMb2c6CgoJKiBjb2ZmLXJzNjAwMC5jICh4Y29mZl9yZWxvY190eXBlX25vb3ApOiBBZGQgaW5m byBhcmd1bWVudC4KCSh4Y29mZl9yZWxvY190eXBlX2ZhaWwpOiBMaWtld2lzZS4KCSh4Y29mZl9y ZWxvY190eXBlX3Bvcyk6IExpa2V3aXNlLgoJKHhjb2ZmX3JlbG9jX3R5cGVfbmVnKTogTGlrZXdp c2UuCgkoeGNvZmZfcmVsb2NfdHlwZV9yZWwpOiBMaWtld2lzZS4KCSh4Y29mZl9yZWxvY190eXBl X3RvYyk6IExpa2V3aXNlLgoJKHhjb2ZmX3JlbG9jX3R5cGVfYmEpOiBMaWtld2lzZS4KCSh4Y29m Zl9yZWxvY190eXBlX2NyZWwpOiBMaWtld2lzZS4KCSh4Y29mZl9yZWxvY190eXBlX3Rscyk6IExp a2V3aXNlLgoJKHhjb2ZmX3JlbG9jX3R5cGVfYnIpOiBBZGQgc3R1YiBoYW5kbGVyLgoJKHhjb2Zm X3BwY19yZWxvY2F0ZV9zZWN0aW9uKTogQWRkIGluZm8gdG8KCXhjb2ZmX2NhbGN1bGF0ZV9yZWxv Y2F0aW9uLgoJKHhjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9jb2RlKTogTmV3IGNvbnN0YW50LgoJ KHhjb2ZmX3N0dWJfc2hhcmVkX2NhbGxfY29kZSk6IExpa2V3aXNlLgoJKGJmZF94Y29mZl9iYWNr ZW5kX2RhdGEpOiBBZGQgc3R1YiBjb2RlIGZpZWxkcy4KCShiZmRfcG1hY194Y29mZl9iYWNrZW5k X2RhdGEpOiBMaWtld2lzZS4KCSogY29mZjY0LXJzNjAwMC5jICh4Y29mZjY0X3JlbG9jX3R5cGVf YnIpOiBBZGQgc3R1YiBoYW5kbGVyLgoJKHhjb2ZmNjRfcHBjX3JlbG9jYXRlX3NlY3Rpb24pOiBB ZGQgaW5mbyB0bwoJeGNvZmY2NF9jYWxjdWxhdGVfcmVsb2NhdGlvbi4KCSh4Y29mZjY0X3N0dWJf aW5kaXJlY3RfY2FsbF9jb2RlKTogTmV3IGNvbnN0YW50LgoJKHhjb2ZmNjRfc3R1Yl9zaGFyZWRf Y2FsbF9jb2RlKTogTGlrZXdpc2UuCgkoYmZkX3hjb2ZmX2JhY2tlbmRfZGF0YSk6IEFkZCBzdHVi IGNvZGUgZmllbGRzLgoJKGJmZF94Y29mZl9haXg1X2JhY2tlbmRfZGF0YSk6IExpa2V3aXNlLgoJ KiBsaWJ4Y29mZi5oIChzdHJ1Y3QgeGNvZmZfYmFja2VuZF9kYXRhX3JlYyk6IEFkZCBzdHViIGZp ZWxkcy4KCShiZmRfeGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsX2NvZGUpOiBOZXcgZGVmaW5lLgoJ KGJmZF94Y29mZl9zdHViX2luZGlyZWN0X2NhbGxfc2l6ZSk6IE5ldyBkZWZpbmUuCgkoYmZkX3hj b2ZmX3N0dWJfc2hhcmVkX2NhbGxfY29kZSk6IE5ldyBkZWZpbmUuCgkoYmZkX3hjb2ZmX3N0dWJf c2hhcmVkX2NhbGxfc2l6ZSk6IE5ldyBkZWZpbmUuCgkoeGNvZmZfcmVsb2NfZnVuY3Rpb24pOiBB ZGQgaW5mbyBhcmd1bWVudC4KCShlbnVtIHhjb2ZmX3N0dWJfdHlwZSk6IE5ldyBlbnVtLgoJKHN0 cnVjdCB4Y29mZl9zdHViX2hhc2hfZW50cnkpOiBOZXcgc3RydWN0dXJlLgoJKiB4Y29mZmxpbmsu YyAoc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF90YWJsZSk6IEFkZCBzdHViIGhhc2gKCXRhYmxlIGFu ZCBwYXJhbXMgZmllbGRzLgoJKHhjb2ZmX3N0dWJfaGFzaF9lbnRyeSk6IE5ldyBkZWZpbmUuCgko eGNvZmZfc3R1Yl9oYXNoX2xvb2t1cCk6IE5ldyBkZWZpbmUuCgkoc3R1Yl9oYXNoX25ld2Z1bmMp OiBOZXcgZnVuY3Rpb24uCgkoX2JmZF94Y29mZl9iZmRfbGlua19oYXNoX3RhYmxlX2ZyZWUpOiBG cmVlIHRoZSBuZXcgc3R1YiBoYXNoCgl0YWJsZS4KCShfYmZkX3hjb2ZmX2JmZF9saW5rX2hhc2hf dGFibGVfY3JlYXRlKTogQ3JlYXRlIHRoZSBuZXcgc3R1YgoJaGFzaCB0YWJsZS4KCSh4Y29mZl9s aW5rX2FkZF9zeW1ib2xzKTogU2F2ZSByYXdzaXplIGZvciBYVFlfU0QuCgkoYmZkX3hjb2ZmX2xp bmtfaW5pdCk6IE5ldyBmdW5jdGlvbi4KCSh4Y29mZl9zdHViX2NzZWN0X25hbWUpOiBOZXcgZnVu Y3Rpb24uCgkoeGNvZmZfc3R1Yl9nZXRfY3NlY3RfaW5fcmFuZ2UpOiBOZXcgZnVuY3Rpb24uCgko eGNvZmZfc3R1Yl9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGJmZF94Y29mZl9nZXRfc3R1Yl9lbnRy eSk6IE5ldyBmdW5jdGlvbi4KCShiZmRfeGNvZmZfdHlwZV9vZl9zdHViKTogTmV3IGZ1bmN0aW9u LgoJKHhjb2ZmX2FkZF9zdHViKTogTmV3IGZ1bmN0aW9uLgoJKHhjb2ZmX2J1aWxkX29uZV9zdHVi KTogTmV3IGZ1bmN0aW9uLgoJKGJmZF94Y29mZl9zaXplX3N0dWJzKTogTmV3IGZ1bmN0aW9uLgoJ KGJmZF94Y29mZl9idWlsZF9zdHVicyk6IE5ldyBmdW5jdGlvbi4KCSh4Y29mZl9zdHViX2NyZWF0 ZV9yZWxvY2F0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCSh4Y29mZl9saW5rX2lucHV0X2JmZCk6IEFk YXB0IHJlbG9jYXRpb25zIHRvIHN0dWIuCgkoeGNvZmZfd3JpdGVfZ2xvYmFsX3N5bWJvbCk6IEFk YXB0IHRvIG5ldyBUT0MgZW50cmllcyBnZW5lcmF0ZWQKCWZvciBzdHVicy4KCShfYmZkX3hjb2Zm X2JmZF9maW5hbF9saW5rKTogSGFuZGxlIHN0dWIgZmlsZS4KCSogeGNvZmZsaW5rLmggKHN0cnVj dCBiZmRfeGNvZmZfbGlua19wYXJhbXMpOiBOZXcgc3RydWN0dXJlLgoKbGQvQ2hhbmdlTG9nOgoK CSogZW11bHRlbXBsL2FpeC5lbSAocGFyYW1zKTogTmV3IHZhcmlhYmxlLgoJKHN0dWJfZmlsZSk6 IE5ldyB2YXJpYWJsZS4KCSh4Y29mZl9hZGRfc3R1Yl9zZWN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJ KHhjb2ZmX2xheW91dF9zZWN0aW9uc19hZ2Fpbik6IE5ldyBmdW5jdGlvbgoJKGhvb2tfaW5fc3R1 Yik6IE5ldyBmdW5jdGlvbi4KCShfYWZ0ZXJfYWxsb2NhdGlvbik6IEFkZCBzdHViIGNyZWF0aW9u LgoJKF9jcmVhdGVfb3V0cHV0X3NlY3Rpb25fc3RhdGVtZW50cyk6IEFsbG9jYXRlIHN0dWIgZmls ZSBhbmQKCXBhc3MgcGFyYW1zIHRvIGJhY2tlbmQuCi0tLQogYmZkL2NvZmYtcnM2MDAwLmMgICB8 ICA5OSArKysrLQogYmZkL2NvZmY2NC1yczYwMDAuYyB8ICA2NiArKystCiBiZmQvbGlieGNvZmYu aCAgICAgIHwgIDYzICsrLQogYmZkL3hjb2ZmbGluay5jICAgICB8IDk0MCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogYmZkL3hjb2ZmbGluay5oICAgICB8ICAx NyArCiBsZC9lbXVsdGVtcGwvYWl4LmVtIHwgMTkwICsrKysrKysrLQogNiBmaWxlcyBjaGFuZ2Vk LCAxMzQyIGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2JmZC9j b2ZmLXJzNjAwMC5jIGIvYmZkL2NvZmYtcnM2MDAwLmMKaW5kZXggODY1NmRmZGI0YzQuLjg4MTkx ODdhYjQyIDEwMDY0NAotLS0gYS9iZmQvY29mZi1yczYwMDAuYworKysgYi9iZmQvY29mZi1yczYw MDAuYwpAQCAtMjkzNyw3ICsyOTM3LDggQEAgeGNvZmZfcmVsb2NfdHlwZV9ub29wIChiZmQgKmlu cHV0X2JmZCBBVFRSSUJVVEVfVU5VU0VELAogCQkgICAgICAgYmZkX3ZtYSB2YWwgQVRUUklCVVRF X1VOVVNFRCwKIAkJICAgICAgIGJmZF92bWEgYWRkZW5kIEFUVFJJQlVURV9VTlVTRUQsCiAJCSAg ICAgICBiZmRfdm1hICpyZWxvY2F0aW9uIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgICAgICBiZmRf Ynl0ZSAqY29udGVudHMgQVRUUklCVVRFX1VOVVNFRCkKKwkJICAgICAgIGJmZF9ieXRlICpjb250 ZW50cyBBVFRSSUJVVEVfVU5VU0VELAorCQkgICAgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmlu Zm8gQVRUUklCVVRFX1VOVVNFRCkKIHsKICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yOTUyLDcgKzI5 NTMsOCBAQCB4Y29mZl9yZWxvY190eXBlX2ZhaWwgKGJmZCAqaW5wdXRfYmZkLAogCQkgICAgICAg YmZkX3ZtYSB2YWwgQVRUUklCVVRFX1VOVVNFRCwKIAkJICAgICAgIGJmZF92bWEgYWRkZW5kIEFU VFJJQlVURV9VTlVTRUQsCiAJCSAgICAgICBiZmRfdm1hICpyZWxvY2F0aW9uIEFUVFJJQlVURV9V TlVTRUQsCi0JCSAgICAgICBiZmRfYnl0ZSAqY29udGVudHMgQVRUUklCVVRFX1VOVVNFRCkKKwkJ ICAgICAgIGJmZF9ieXRlICpjb250ZW50cyBBVFRSSUJVVEVfVU5VU0VELAorCQkgICAgICAgc3Ry dWN0IGJmZF9saW5rX2luZm8gKmluZm8gQVRUUklCVVRFX1VOVVNFRCkKIHsKICAgX2JmZF9lcnJv cl9oYW5kbGVyCiAgICAgLyogeGdldHRleHQ6IGMtZm9ybWF0ICovCkBAIC0yOTcyLDcgKzI5NzQs OCBAQCB4Y29mZl9yZWxvY190eXBlX3BvcyAoYmZkICppbnB1dF9iZmQgQVRUUklCVVRFX1VOVVNF RCwKIAkJICAgICAgYmZkX3ZtYSB2YWwsCiAJCSAgICAgIGJmZF92bWEgYWRkZW5kLAogCQkgICAg ICBiZmRfdm1hICpyZWxvY2F0aW9uLAotCQkgICAgICBiZmRfYnl0ZSAqY29udGVudHMgQVRUUklC VVRFX1VOVVNFRCkKKwkJICAgICAgYmZkX2J5dGUgKmNvbnRlbnRzIEFUVFJJQlVURV9VTlVTRUQs CisJCSAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvIEFUVFJJQlVURV9VTlVTRUQpCiB7 CiAgICpyZWxvY2F0aW9uID0gdmFsICsgYWRkZW5kOwogICByZXR1cm4gdHJ1ZTsKQEAgLTI5ODgs NyArMjk5MSw4IEBAIHhjb2ZmX3JlbG9jX3R5cGVfbmVnIChiZmQgKmlucHV0X2JmZCBBVFRSSUJV VEVfVU5VU0VELAogCQkgICAgICBiZmRfdm1hIHZhbCwKIAkJICAgICAgYmZkX3ZtYSBhZGRlbmQs CiAJCSAgICAgIGJmZF92bWEgKnJlbG9jYXRpb24sCi0JCSAgICAgIGJmZF9ieXRlICpjb250ZW50 cyBBVFRSSUJVVEVfVU5VU0VEKQorCQkgICAgICBiZmRfYnl0ZSAqY29udGVudHMgQVRUUklCVVRF X1VOVVNFRCwKKwkJICAgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8gQVRUUklCVVRFX1VO VVNFRCkKIHsKICAgKnJlbG9jYXRpb24gPSAtIHZhbCAtIGFkZGVuZDsKICAgcmV0dXJuIHRydWU7 CkBAIC0zMDA0LDcgKzMwMDgsOCBAQCB4Y29mZl9yZWxvY190eXBlX3JlbCAoYmZkICppbnB1dF9i ZmQgQVRUUklCVVRFX1VOVVNFRCwKIAkJICAgICAgYmZkX3ZtYSB2YWwsCiAJCSAgICAgIGJmZF92 bWEgYWRkZW5kLAogCQkgICAgICBiZmRfdm1hICpyZWxvY2F0aW9uLAotCQkgICAgICBiZmRfYnl0 ZSAqY29udGVudHMgQVRUUklCVVRFX1VOVVNFRCkKKwkJICAgICAgYmZkX2J5dGUgKmNvbnRlbnRz IEFUVFJJQlVURV9VTlVTRUQsCisJCSAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvIEFU VFJJQlVURV9VTlVTRUQpCiB7CiAgIGhvd3RvLT5wY19yZWxhdGl2ZSA9IHRydWU7CiAKQEAgLTMw MjcsNyArMzAzMiw4IEBAIHhjb2ZmX3JlbG9jX3R5cGVfdG9jIChiZmQgKmlucHV0X2JmZCwKIAkJ ICAgICAgYmZkX3ZtYSB2YWwsCiAJCSAgICAgIGJmZF92bWEgYWRkZW5kIEFUVFJJQlVURV9VTlVT RUQsCiAJCSAgICAgIGJmZF92bWEgKnJlbG9jYXRpb24sCi0JCSAgICAgIGJmZF9ieXRlICpjb250 ZW50cyBBVFRSSUJVVEVfVU5VU0VEKQorCQkgICAgICBiZmRfYnl0ZSAqY29udGVudHMgQVRUUklC VVRFX1VOVVNFRCwKKwkJICAgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8gQVRUUklCVVRF X1VOVVNFRCkKIHsKICAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqaDsKIApAQCAtMzA3 Niw3ICszMDgyLDggQEAgeGNvZmZfcmVsb2NfdHlwZV9iYSAoYmZkICppbnB1dF9iZmQgQVRUUklC VVRFX1VOVVNFRCwKIAkJICAgICBiZmRfdm1hIHZhbCwKIAkJICAgICBiZmRfdm1hIGFkZGVuZCwK IAkJICAgICBiZmRfdm1hICpyZWxvY2F0aW9uLAotCQkgICAgIGJmZF9ieXRlICpjb250ZW50cyBB VFRSSUJVVEVfVU5VU0VEKQorCQkgICAgIGJmZF9ieXRlICpjb250ZW50cyBBVFRSSUJVVEVfVU5V U0VELAorCQkgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvIEFUVFJJQlVURV9VTlVTRUQp CiB7CiAgIGhvd3RvLT5zcmNfbWFzayAmPSB+MzsKICAgaG93dG8tPmRzdF9tYXNrID0gaG93dG8t PnNyY19tYXNrOwpAQCAtMzA5NiwxMCArMzEwMywxMyBAQCB4Y29mZl9yZWxvY190eXBlX2JyIChi ZmQgKmlucHV0X2JmZCwKIAkJICAgICBiZmRfdm1hIHZhbCwKIAkJICAgICBiZmRfdm1hIGFkZGVu ZCwKIAkJICAgICBiZmRfdm1hICpyZWxvY2F0aW9uLAotCQkgICAgIGJmZF9ieXRlICpjb250ZW50 cykKKwkJICAgICBiZmRfYnl0ZSAqY29udGVudHMsCisJCSAgICAgc3RydWN0IGJmZF9saW5rX2lu Zm8gKmluZm8pCiB7CiAgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmg7CiAgIGJmZF92 bWEgc2VjdGlvbl9vZmZzZXQ7CisgIHN0cnVjdCB4Y29mZl9zdHViX2hhc2hfZW50cnkgKnN0dWJf ZW50cnkgPSBOVUxMOworICBlbnVtIHhjb2ZmX3N0dWJfdHlwZSBzdHViX3R5cGU7CiAKICAgaWYg KDAgPiByZWwtPnJfc3ltbmR4KQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNTMsNiArMzE2Mywy NyBAQCB4Y29mZl9yZWxvY190eXBlX2JyIChiZmQgKmlucHV0X2JmZCwKICAgICAgIGhvd3RvLT5j b21wbGFpbl9vbl9vdmVyZmxvdyA9IGNvbXBsYWluX292ZXJmbG93X2RvbnQ7CiAgICAgfQogCisg IC8qIENoZWNrIGlmIGEgc3R1YiBpcyBuZWVkZWQuICAqLworICBzdHViX3R5cGUgPSBiZmRfeGNv ZmZfdHlwZV9vZl9zdHViIChpbnB1dF9zZWN0aW9uLCByZWwsIHZhbCwgaCk7CisgIGlmIChzdHVi X3R5cGUgIT0geGNvZmZfc3R1Yl9ub25lKQorICAgIHsKKyAgICAgIGFzZWN0aW9uICpzdHViX2Nz ZWN0OworCisgICAgICBzdHViX2VudHJ5ID0gYmZkX3hjb2ZmX2dldF9zdHViX2VudHJ5IChpbnB1 dF9zZWN0aW9uLCBoLCBpbmZvKTsKKyAgICAgIGlmIChzdHViX2VudHJ5ID09IE5VTEwpCisJewor CSAgX2JmZF9lcnJvcl9oYW5kbGVyIChfKCJVbmFibGUgdG8gZmluZCB0aGUgc3R1YiBlbnRyeSB0 YXJnZXRpbmcgJXMiKSwKKwkJCSAgICAgIGgtPnJvb3Qucm9vdC5zdHJpbmcpOworCSAgYmZkX3Nl dF9lcnJvciAoYmZkX2Vycm9yX2JhZF92YWx1ZSk7CisJICByZXR1cm4gZmFsc2U7CisJfQorCisg ICAgICBzdHViX2NzZWN0ID0gc3R1Yl9lbnRyeS0+aGNzZWN0LT5yb290LnUuZGVmLnNlY3Rpb247 CisgICAgICB2YWwgPSAoc3R1Yl9lbnRyeS0+c3R1Yl9vZmZzZXQKKwkgICAgICsgc3R1Yl9jc2Vj dC0+b3V0cHV0X3NlY3Rpb24tPnZtYQorCSAgICAgKyBzdHViX2NzZWN0LT5vdXRwdXRfb2Zmc2V0 KTsKKyAgICB9CisKICAgLyogVGhlIG9yaWdpbmFsIFBDLXJlbGF0aXZlIHJlbG9jYXRpb24gaXMg Ymlhc2VkIGJ5IC1yX3ZhZGRyLCBzbyBhZGRpbmcKICAgICAgdGhlIHZhbHVlIGJlbG93IHdpbGwg Z2l2ZSB0aGUgYWJzb2x1dGUgdGFyZ2V0IGFkZHJlc3MuICAqLwogICAqcmVsb2NhdGlvbiA9IHZh bCArIGFkZGVuZCArIHJlbC0+cl92YWRkcjsKQEAgLTMyMDIsNyArMzIzMyw4IEBAIHhjb2ZmX3Jl bG9jX3R5cGVfY3JlbCAoYmZkICppbnB1dF9iZmQgQVRUUklCVVRFX1VOVVNFRCwKIAkJICAgICAg IGJmZF92bWEgdmFsIEFUVFJJQlVURV9VTlVTRUQsCiAJCSAgICAgICBiZmRfdm1hIGFkZGVuZCwK IAkJICAgICAgIGJmZF92bWEgKnJlbG9jYXRpb24sCi0JCSAgICAgICBiZmRfYnl0ZSAqY29udGVu dHMgQVRUUklCVVRFX1VOVVNFRCkKKwkJICAgICAgIGJmZF9ieXRlICpjb250ZW50cyBBVFRSSUJV VEVfVU5VU0VELAorCQkgICAgICAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8gQVRUUklCVVRF X1VOVVNFRCkKIHsKICAgaG93dG8tPnBjX3JlbGF0aXZlID0gdHJ1ZTsKICAgaG93dG8tPnNyY19t YXNrICY9IH4zOwpAQCAtMzIyNyw3ICszMjU5LDggQEAgeGNvZmZfcmVsb2NfdHlwZV90bHMgKGJm ZCAqaW5wdXRfYmZkIEFUVFJJQlVURV9VTlVTRUQsCiAJCSAgICAgIGJmZF92bWEgdmFsLAogCQkg ICAgICBiZmRfdm1hIGFkZGVuZCwKIAkJICAgICAgYmZkX3ZtYSAqcmVsb2NhdGlvbiwKLQkJICAg ICAgYmZkX2J5dGUgKmNvbnRlbnRzIEFUVFJJQlVURV9VTlVTRUQpCisJCSAgICAgIGJmZF9ieXRl ICpjb250ZW50cyBBVFRSSUJVVEVfVU5VU0VELAorCQkgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqaW5mbyBBVFRSSUJVVEVfVU5VU0VEKQogewogICBzdHJ1Y3QgeGNvZmZfbGlua19oYXNoX2Vu dHJ5ICpoOwogCkBAIC0zNzYzLDcgKzM3OTYsNyBAQCB4Y29mZl9wcGNfcmVsb2NhdGVfc2VjdGlv biAoYmZkICpvdXRwdXRfYmZkLAogICAgICAgaWYgKHJlbC0+cl90eXBlID49IFhDT0ZGX01BWF9D QUxDVUxBVEVfUkVMT0NBVElPTgogCSAgfHwgISgoKnhjb2ZmX2NhbGN1bGF0ZV9yZWxvY2F0aW9u W3JlbC0+cl90eXBlXSkKIAkgICAgICAgKGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbiwgb3V0cHV0 X2JmZCwgcmVsLCBzeW0sICZob3d0bywgdmFsLAotCQlhZGRlbmQsICZyZWxvY2F0aW9uLCBjb250 ZW50cykpKQorCQlhZGRlbmQsICZyZWxvY2F0aW9uLCBjb250ZW50cywgaW5mbykpKQogCXJldHVy biBmYWxzZTsKIAogICAgICAgLyogYWRkcmVzcyAqLwpAQCAtNDI4MSw2ICs0MzE0LDM0IEBAIEhP V1RPICgwLAkJCS8qIHR5cGUgKi8KICAgICAgICAweGZmZmZmZmZmLAkJLyogZHN0X21hc2sgKi8K ICAgICAgICBmYWxzZSk7CQkJLyogcGNyZWxfb2Zmc2V0ICovCiAKKy8qIEluZGlyZWN0IGNhbGwg c3R1YgorICAgVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGNvZGUgbXVzdCBiZSBtb2RpZmllZCBieSBm aWxsaW5nIGluCisgICB0aGUgY29ycmVjdCBUT0Mgb2Zmc2V0LiAgKi8KKworc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGxvbmcgeGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsX2NvZGVbNF0gPQorICB7Cisg ICAgMHg4MTgyMDAwMCwJLyogbHd6IHIxMiwwKHIyKSAqLworICAgIDB4ODAwYzAwMDAsCS8qIGx3 eiByMCwwKHIxMikgKi8KKyAgICAweDdjMDkwM2E2LAkvKiBtdGN0ciByMCAqLworICAgIDB4NGU4 MDA0MjAsCS8qIGJjdHIgKi8KKyAgfTsKKworLyogIFNoYXJlZCBjYWxsIHN0dWIKKyAgICBUaGUg Zmlyc3Qgd29yZCBvZiB0aGUgY29kZSBtdXN0IGJlIG1vZGlmaWVkIGJ5IGZpbGxpbmcgaW4KKyAg ICB0aGUgY29ycmVjdCBUT0Mgb2Zmc2V0LgorICAgIFRoaXMgaXMgZXhhY3RseSBhcyB0aGUgZ2xp bmsgY29kZSBidXQgd2l0aG91dCB0aGUgdHJhY2ViYWNrLAorICAgIGFzIGl0IHdvbid0IGJlIGFu IGluZGVwZW5kZW50IGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcg eGNvZmZfc3R1Yl9zaGFyZWRfY2FsbF9jb2RlWzZdID0KKyAgeworICAgIDB4ODE4MjAwMDAsCS8q IGx3eiByMTIsMChyMikgKi8KKyAgICAweDkwNDEwMDE0LAkvKiBzdHcgcjIsMjAocjEpICovCisg ICAgMHg4MDBjMDAwMCwJLyogbHd6IHIwLDAocjEyKSAqLworICAgIDB4ODA0YzAwMDQsCS8qIGx3 eiByMiw0KHIxMikgKi8KKyAgICAweDdjMDkwM2E2LAkvKiBtdGN0ciByMCAqLworICAgIDB4NGU4 MDA0MjAsCS8qIGJjdHIgKi8KKyAgfTsKKwogLyogIGdsaW5rCiAKICAgIFRoZSBmaXJzdCB3b3Jk IG9mIGdsb2JhbCBsaW5rYWdlIGNvZGUgbXVzdCBiZSBtb2RpZmllZCBieSBmaWxsaW5nIGluCkBA IC00NDk3LDYgKzQ1NTgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4Y29mZl9iYWNrZW5kX2Rh dGFfcmVjIGJmZF94Y29mZl9iYWNrZW5kX2RhdGEgPQogICAgIC8qIHJ0aW5pdCAqLwogICAgIDY0 LAkJCQkvKiBfeGNvZmZfcnRpbml0X3NpemUgKi8KICAgICB4Y29mZl9nZW5lcmF0ZV9ydGluaXQs CisKKyAgICAvKiBTdHViIGluZGlyZWN0IGNhbGwuICAqLworICAgICZ4Y29mZl9zdHViX2luZGly ZWN0X2NhbGxfY29kZVswXSwKKyAgICAxNiwJCQkJLyogX3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2Fs bF9zaXplICovCisKKyAgICAvKiBTdHViIHNoYXJlZCBjYWxsLiAgKi8KKyAgICAmeGNvZmZfc3R1 Yl9zaGFyZWRfY2FsbF9jb2RlWzBdLAorICAgIDI0LAkJCQkvKiBfeGNvZmZfc3R1Yl9zaGFyZWRf Y2FsbF9zaXplICovCiAgIH07CiAKIC8qIFRoZSB0cmFuc2ZlciB2ZWN0b3IgdGhhdCBsZWFkcyB0 aGUgb3V0c2lkZSB3b3JsZCB0byBhbGwgb2YgdGhlIGFib3ZlLiAgKi8KQEAgLTQ2NzksNiArNDc0 OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhjb2ZmX2JhY2tlbmRfZGF0YV9yZWMgYmZkX3Bt YWNfeGNvZmZfYmFja2VuZF9kYXRhID0KICAgICAvKiBydGluaXQgKi8KICAgICAwLAkJCQkvKiBf eGNvZmZfcnRpbml0X3NpemUgKi8KICAgICB4Y29mZl9nZW5lcmF0ZV9ydGluaXQsCisKKyAgICAv KiBTdHViIGluZGlyZWN0IGNhbGwuICAqLworICAgICZ4Y29mZl9zdHViX2luZGlyZWN0X2NhbGxf Y29kZVswXSwKKyAgICAxNiwJCQkJLyogX3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9zaXplICov CisKKyAgICAvKiBTdHViIHNoYXJlZCBjYWxsLiAgKi8KKyAgICAmeGNvZmZfc3R1Yl9zaGFyZWRf Y2FsbF9jb2RlWzBdLAorICAgIDI0LAkJCQkvKiBfeGNvZmZfc3R1Yl9zaGFyZWRfY2FsbF9zaXpl ICovCiAgIH07CiAKIC8qIFRoZSB0cmFuc2ZlciB2ZWN0b3IgdGhhdCBsZWFkcyB0aGUgb3V0c2lk ZSB3b3JsZCB0byBhbGwgb2YgdGhlIGFib3ZlLiAgKi8KZGlmZiAtLWdpdCBhL2JmZC9jb2ZmNjQt cnM2MDAwLmMgYi9iZmQvY29mZjY0LXJzNjAwMC5jCmluZGV4IDk1YWJiYjllOTU3Li4yZjgwNzdh ZTZhMiAxMDA2NDQKLS0tIGEvYmZkL2NvZmY2NC1yczYwMDAuYworKysgYi9iZmQvY29mZjY0LXJz NjAwMC5jCkBAIC03NzgsMTAgKzc3OCwxMyBAQCB4Y29mZjY0X3JlbG9jX3R5cGVfYnIgKGJmZCAq aW5wdXRfYmZkLAogCQkgICAgICAgYmZkX3ZtYSB2YWwsCiAJCSAgICAgICBiZmRfdm1hIGFkZGVu ZCwKIAkJICAgICAgIGJmZF92bWEgKnJlbG9jYXRpb24sCi0JCSAgICAgICBiZmRfYnl0ZSAqY29u dGVudHMpCisJCSAgICAgICBiZmRfYnl0ZSAqY29udGVudHMsCisJCSAgICAgICBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqaW5mbykKIHsKICAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqaDsK ICAgYmZkX3ZtYSBzZWN0aW9uX29mZnNldDsKKyAgc3RydWN0IHhjb2ZmX3N0dWJfaGFzaF9lbnRy eSAqc3R1Yl9lbnRyeSA9IE5VTEw7CisgIGVudW0geGNvZmZfc3R1Yl90eXBlIHN0dWJfdHlwZTsK IAogICBpZiAoMCA+IHJlbC0+cl9zeW1uZHgpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODMzLDYg KzgzNiwyNyBAQCB4Y29mZjY0X3JlbG9jX3R5cGVfYnIgKGJmZCAqaW5wdXRfYmZkLAogICAgICAg aG93dG8tPmNvbXBsYWluX29uX292ZXJmbG93ID0gY29tcGxhaW5fb3ZlcmZsb3dfZG9udDsKICAg ICB9CiAKKyAgLyogQ2hlY2sgaWYgYSBzdHViIGlzIG5lZWRlZC4gICovCisgIHN0dWJfdHlwZSA9 IGJmZF94Y29mZl90eXBlX29mX3N0dWIgKGlucHV0X3NlY3Rpb24sIHJlbCwgdmFsLCBoKTsKKyAg aWYgKHN0dWJfdHlwZSAhPSB4Y29mZl9zdHViX25vbmUpCisgICAgeworICAgICAgYXNlY3Rpb24g KnN0dWJfY3NlY3Q7CisKKyAgICAgIHN0dWJfZW50cnkgPSBiZmRfeGNvZmZfZ2V0X3N0dWJfZW50 cnkgKGlucHV0X3NlY3Rpb24sIGgsIGluZm8pOworICAgICAgaWYgKHN0dWJfZW50cnkgPT0gTlVM TCkKKwl7CisJICBfYmZkX2Vycm9yX2hhbmRsZXIgKF8oIlVuYWJsZSB0byBmaW5kIHRoZSBzdHVi IGVudHJ5IHRhcmdldGluZyAlcyIpLAorCQkJICAgICAgaC0+cm9vdC5yb290LnN0cmluZyk7CisJ ICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfYmFkX3ZhbHVlKTsKKwkgIHJldHVybiBmYWxzZTsK Kwl9CisKKyAgICAgIHN0dWJfY3NlY3QgPSBzdHViX2VudHJ5LT5oY3NlY3QtPnJvb3QudS5kZWYu c2VjdGlvbjsKKyAgICAgIHZhbCA9IChzdHViX2VudHJ5LT5zdHViX29mZnNldAorCSAgICAgKyBz dHViX2NzZWN0LT5vdXRwdXRfc2VjdGlvbi0+dm1hCisJICAgICArIHN0dWJfY3NlY3QtPm91dHB1 dF9vZmZzZXQpOworICAgIH0KKwogICAvKiBUaGUgb3JpZ2luYWwgUEMtcmVsYXRpdmUgcmVsb2Nh dGlvbiBpcyBiaWFzZWQgYnkgLXJfdmFkZHIsIHNvIGFkZGluZwogICAgICB0aGUgdmFsdWUgYmVs b3cgd2lsbCBnaXZlIHRoZSBhYnNvbHV0ZSB0YXJnZXQgYWRkcmVzcy4gICovCiAgICpyZWxvY2F0 aW9uID0gdmFsICsgYWRkZW5kICsgcmVsLT5yX3ZhZGRyOwpAQCAtMTY0NSw3ICsxNjY5LDcgQEAg eGNvZmY2NF9wcGNfcmVsb2NhdGVfc2VjdGlvbiAoYmZkICpvdXRwdXRfYmZkLAogICAgICAgaWYg KHJlbC0+cl90eXBlID49IFhDT0ZGX01BWF9DQUxDVUxBVEVfUkVMT0NBVElPTgogCSAgfHwgISgo Knhjb2ZmNjRfY2FsY3VsYXRlX3JlbG9jYXRpb25bcmVsLT5yX3R5cGVdKQogCSAgICAgIChpbnB1 dF9iZmQsIGlucHV0X3NlY3Rpb24sIG91dHB1dF9iZmQsIHJlbCwgc3ltLCAmaG93dG8sIHZhbCwK LQkgICAgICAgYWRkZW5kLCAmcmVsb2NhdGlvbiwgY29udGVudHMpKSkKKwkgICAgICAgYWRkZW5k LCAmcmVsb2NhdGlvbiwgY29udGVudHMsIGluZm8pKSkKIAlyZXR1cm4gZmFsc2U7CiAKICAgICAg IC8qIGFkZHJlc3MgKi8KQEAgLTIzODYsMTIgKzI0MTAsMzIgQEAgSE9XVE8gKDAsCQkJLyogdHlw ZSAqLwogICAgICAgIE1JTlVTX09ORSwJCS8qIGRzdF9tYXNrICovCiAgICAgICAgZmFsc2UpOwkJ CS8qIHBjcmVsX29mZnNldCAqLwogCisvKiBJbmRpcmVjdCBjYWxsIHN0dWIgKi8KK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBsb25nIHhjb2ZmNjRfc3R1Yl9pbmRpcmVjdF9jYWxsX2NvZGVbNF0gPQor ICB7CisgICAgMHhlOTgyMDAwMCwJLyogbGQgcjEyLDAocjIpICovCisgICAgMHhlODBjMDAwMCwJ LyogbGQgcjAsMChyMTIpICovCisgICAgMHg3YzA5MDNhNiwJLyogbXRjdHIgcjAgKi8KKyAgICAw eDRlODAwNDIwLAkvKiBiY3RyICovCisgIH07CisKKy8qIFNoYXJlZCBjYWxsIHN0dWIgKi8KK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHhjb2ZmNjRfc3R1Yl9zaGFyZWRfY2FsbF9jb2RlWzZd ID0KKyAgeworICAgIDB4ZTk4MjAwMDAsCS8qIGxkIHIxMiwwKHIyKSAqLworICAgIDB4Zjg0MTAw MjgsCS8qIHN0ZCByMiw0MChyMSkgKi8KKyAgICAweGU4MGMwMDAwLAkvKiBsZCByMCwwKHIxMikg Ki8KKyAgICAweGU4NGMwMDA4LAkvKiBsZCByMiw4KHIxMikgKi8KKyAgICAweDdjMDkwM2E2LAkv KiBtdGN0ciByMCAqLworICAgIDB4NGU4MDA0MjAsCS8qIGJjdHIgKi8KKyAgfTsKKwogc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGxvbmcgeGNvZmY2NF9nbGlua19jb2RlWzEwXSA9CiB7CiAgIDB4ZTk4 MjAwMDAsCS8qIGxkIHIxMiwwKHIyKSAqLwogICAweGY4NDEwMDI4LAkvKiBzdGQgcjIsNDAocjEp ICovCiAgIDB4ZTgwYzAwMDAsCS8qIGxkIHIwLDAocjEyKSAqLwotICAweGU4NGMwMDA4LAkvKiBs ZCByMCw4KHIxMikgKi8KKyAgMHhlODRjMDAwOCwJLyogbGQgcjIsOChyMTIpICovCiAgIDB4N2Mw OTAzYTYsCS8qIG10Y3RyIHIwICovCiAgIDB4NGU4MDA0MjAsCS8qIGJjdHIgKi8KICAgMHgwMDAw MDAwMCwJLyogc3RhcnQgb2YgdHJhY2ViYWNrIHRhYmxlICovCkBAIC0yNDk1LDYgKzI1MzksMTQg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4Y29mZl9iYWNrZW5kX2RhdGFfcmVjIGJmZF94Y29mZl9i YWNrZW5kX2RhdGEgPQogICAgIC8qIHJ0aW5pdC4gICovCiAgICAgODgsCQkJCS8qIF94Y29mZl9y dGluaXRfc2l6ZSAqLwogICAgIHhjb2ZmNjRfZ2VuZXJhdGVfcnRpbml0LAorCisgICAgLyogU3R1 YiBpbmRpcmVjdCBjYWxsLiAgKi8KKyAgICAmeGNvZmY2NF9zdHViX2luZGlyZWN0X2NhbGxfY29k ZVswXSwKKyAgICAxNiwJCQkJLyogX3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9zaXplICovCisK KyAgICAvKiBTdHViIHNoYXJlZCBjYWxsLiAgKi8KKyAgICAmeGNvZmY2NF9zdHViX3NoYXJlZF9j YWxsX2NvZGVbMF0sCisgICAgMjQsCQkJCS8qIF94Y29mZl9zdHViX3NoYXJlZF9jYWxsX3NpemUg Ki8KICAgfTsKIAogLyogVGhlIHRyYW5zZmVyIHZlY3RvciB0aGF0IGxlYWRzIHRoZSBvdXRzaWRl IHdvcmxkIHRvIGFsbCBvZiB0aGUgYWJvdmUuICAqLwpAQCAtMjc1OSw2ICsyODExLDE0IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgeGNvZmZfYmFja2VuZF9kYXRhX3JlYyBiZmRfeGNvZmZfYWl4NV9i YWNrZW5kX2RhdGEgPQogICAgIC8qIHJ0aW5pdC4gICovCiAgICAgODgsCQkJCS8qIF94Y29mZl9y dGluaXRfc2l6ZSAqLwogICAgIHhjb2ZmNjRfZ2VuZXJhdGVfcnRpbml0LAorCisgICAgLyogU3R1 YiBpbmRpcmVjdCBjYWxsLiAgKi8KKyAgICAmeGNvZmY2NF9zdHViX2luZGlyZWN0X2NhbGxfY29k ZVswXSwKKyAgICAxNiwJCQkJLyogX3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9zaXplICovCisK KyAgICAvKiBTdHViIHNoYXJlZCBjYWxsLiAgKi8KKyAgICAmeGNvZmY2NF9zdHViX3NoYXJlZF9j YWxsX2NvZGVbMF0sCisgICAgMjQsCQkJCS8qIF94Y29mZl9zdHViX3NoYXJlZF9jYWxsX3NpemUg Ki8KICAgfTsKIAogLyogVGhlIHRyYW5zZmVyIHZlY3RvciB0aGF0IGxlYWRzIHRoZSBvdXRzaWRl IHdvcmxkIHRvIGFsbCBvZiB0aGUgYWJvdmUuICAqLwpkaWZmIC0tZ2l0IGEvYmZkL2xpYnhjb2Zm LmggYi9iZmQvbGlieGNvZmYuaAppbmRleCAyYTcxZWU1ODUxYS4uYzZhZDZkYzJjNGEgMTAwNjQ0 Ci0tLSBhL2JmZC9saWJ4Y29mZi5oCisrKyBiL2JmZC9saWJ4Y29mZi5oCkBAIC05OSw2ICs5OSwx NSBAQCBzdHJ1Y3QgeGNvZmZfYmFja2VuZF9kYXRhX3JlYwogICB1bnNpZ25lZCBpbnQgX3hjb2Zm X3J0aW5pdF9zaXplOwogICBib29sICgqX3hjb2ZmX2dlbmVyYXRlX3J0aW5pdCkKICAgICAoYmZk ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBib29sKTsKKworICAvKiBTdHVicyBjb2Rl IGdlbmVyYXRpb24uCisgICAgIFRoZSBjb2RlIHBhcnQgaXMgYW4gYXJyYXkgd2hpY2ggbWlnaHQg bmVlZCB0byBiZSBtb2RpZmllZCBieQorICAgICBzb21lIHJlbG9jYXRpb25zLgorICAgICBUaGUg c2l6ZSBpcyBpbiBieXRlcy4gICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKl94Y29mZl9zdHVi X2luZGlyZWN0X2NhbGxfY29kZTsKKyAgdW5zaWduZWQgbG9uZyBfeGNvZmZfc3R1Yl9pbmRpcmVj dF9jYWxsX3NpemU7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKl94Y29mZl9zdHViX3NoYXJlZF9j YWxsX2NvZGU7CisgIHVuc2lnbmVkIGxvbmcgX3hjb2ZmX3N0dWJfc2hhcmVkX2NhbGxfc2l6ZTsK IH07CiAKIC8qIExvb2sgdXAgYW4gZW50cnkgaW4gYW4gWENPRkYgbGluayBoYXNoIHRhYmxlLiAg Ki8KQEAgLTE4NSw2ICsxOTQsMTEgQEAgc3RydWN0IHhjb2ZmX2JhY2tlbmRfZGF0YV9yZWMKICNk ZWZpbmUgYmZkX3hjb2ZmX2dsaW5rX2NvZGUoYSwgYikgICAoKHhjb2ZmX2JhY2tlbmQgKGEpLT5f eGNvZmZfZ2xpbmtfY29kZVsoYildKSkKICNkZWZpbmUgYmZkX3hjb2ZmX2dsaW5rX2NvZGVfc2l6 ZShhKSAoKHhjb2ZmX2JhY2tlbmQgKGEpLT5feGNvZmZfZ2xpbmtfc2l6ZSkpCiAKKyNkZWZpbmUg YmZkX3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9jb2RlKGEsIGIpICAgKCh4Y29mZl9iYWNrZW5k IChhKS0+X3hjb2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9jb2RlWyhiKV0pKQorI2RlZmluZSBiZmRf eGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsX3NpemUoYSkgKCh4Y29mZl9iYWNrZW5kIChhKS0+X3hj b2ZmX3N0dWJfaW5kaXJlY3RfY2FsbF9zaXplKSkKKyNkZWZpbmUgYmZkX3hjb2ZmX3N0dWJfc2hh cmVkX2NhbGxfY29kZShhLCBiKSAgICgoeGNvZmZfYmFja2VuZCAoYSktPl94Y29mZl9zdHViX3No YXJlZF9jYWxsX2NvZGVbKGIpXSkpCisjZGVmaW5lIGJmZF94Y29mZl9zdHViX3NoYXJlZF9jYWxs X3NpemUoYSkgKCh4Y29mZl9iYWNrZW5kIChhKS0+X3hjb2ZmX3N0dWJfc2hhcmVkX2NhbGxfc2l6 ZSkpCisKIC8qIENoZWNrIGZvciB0aGUgbWFnaWMgbnVtYmVyIFU4MDNYVE9DTUFHSUMgb3IgVTY0 X1RPQ01BR0lDIGZvciA2NCBiaXQKICAgIHRhcmdldHMuICAqLwogI2RlZmluZSBiZmRfeGNvZmZf aXNfeGNvZmY2NChhKSBcCkBAIC0yMTEsMTEgKzIyNSwxMiBAQCBzdHJ1Y3QgeGNvZmZfYmFja2Vu ZF9kYXRhX3JlYwogI2RlZmluZSBOX09ORVMobikgKCgoKChiZmRfdm1hKSAxIDw8ICgobikgLSAx KSkgLSAxKSA8PCAxKSB8IDEpCiAKIHR5cGVkZWYgYm9vbCB4Y29mZl9yZWxvY19mdW5jdGlvbiAo YmZkICosIGFzZWN0aW9uICosIGJmZCAqLAotCQkJCQkgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAq LAotCQkJCQkgIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgKiwKLQkJCQkJICBzdHJ1Y3QgcmVsb2Nf aG93dG9fc3RydWN0ICosCi0JCQkJCSAgYmZkX3ZtYSwgYmZkX3ZtYSwKLQkJCQkJICBiZmRfdm1h ICosIGJmZF9ieXRlICopOworCQkJCSAgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqLAorCQkJCSAg IHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgKiwKKwkJCQkgICBzdHJ1Y3QgcmVsb2NfaG93dG9fc3Ry dWN0ICosCisJCQkJICAgYmZkX3ZtYSwgYmZkX3ZtYSwKKwkJCQkgICBiZmRfdm1hICosIGJmZF9i eXRlICosCisJCQkJICAgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CiAKIHR5cGVkZWYgYm9vbCB4 Y29mZl9jb21wbGFpbl9mdW5jdGlvbiAoYmZkICosIGJmZF92bWEsIGJmZF92bWEsCiAJCQkJCSAg ICAgc3RydWN0IHJlbG9jX2hvd3RvX3N0cnVjdCAqKTsKQEAgLTI2MSw0ICsyNzYsNDIgQEAgc3Ry dWN0IHhjb2ZmX2R3c2VjdF9uYW1lIHsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGNvZmZfZHdzZWN0 X25hbWUKICAgeGNvZmZfZHdzZWN0X25hbWVzW1hDT0ZGX0RXU0VDVF9OQlJfTkFNRVNdOwogCisv KiBTdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyBuZWVkZWQgYnkgYmFja2VuZCBpbiBvcmRlciB0byBo YW5kbGUKKyAgIHN0dWJzIGNyZWF0ZWQgaW4geGNvZmZsaW5rLmMuICAqLworCitlbnVtIHhjb2Zm X3N0dWJfdHlwZQorICB7CisgICAgeGNvZmZfc3R1Yl9ub25lLAorICAgIHhjb2ZmX3N0dWJfaW5k aXJlY3RfY2FsbCwKKyAgICB4Y29mZl9zdHViX3NoYXJlZF9jYWxsCisgIH07CisKK3N0cnVjdCB4 Y29mZl9zdHViX2hhc2hfZW50cnkKK3sKKyAgLyogQmFzZSBoYXNoIHRhYmxlIGVudHJ5IHN0cnVj dHVyZS4gICovCisgIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSByb290OworCisgIGVudW0geGNvZmZf c3R1Yl90eXBlIHN0dWJfdHlwZTsKKworICAvKiBUaGUgaGFzaCB0YWJsZSBlbnRyeSBvZiB0aGUg c3R1YidzIGNzZWN0LiAgKi8KKyAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqaGNzZWN0 OworCisgIC8qIE9mZnNldCBpbiB0aGUgc3R1YidzIGNzZWN0LiAgKi8KKyAgYmZkX3ZtYSBzdHVi X29mZnNldDsKKworICAvKiBUaGUgdGFyZ2V0J3Mgc2VjdGlvbi4gICovCisgIGFzZWN0aW9uICp0 YXJnZXRfc2VjdGlvbjsKKworICAvKiBUaGUgdGFyZ2V0J3MgaGFzaCB0YWJsZSBlbnRyeS4gICov CisgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmh0YXJnZXQ7Cit9OworCisKK2V4dGVy biBlbnVtIHhjb2ZmX3N0dWJfdHlwZSBiZmRfeGNvZmZfdHlwZV9vZl9zdHViCisgIChhc2VjdGlv biAqLCBjb25zdCBzdHJ1Y3QgaW50ZXJuYWxfcmVsb2MgKiwgYmZkX3ZtYSwKKyAgIHN0cnVjdCB4 Y29mZl9saW5rX2hhc2hfZW50cnkgKik7CisKK2V4dGVybiBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNo X2VudHJ5ICpiZmRfeGNvZmZfZ2V0X3N0dWJfZW50cnkKKyAgKGFzZWN0aW9uICosIHN0cnVjdCB4 Y29mZl9saW5rX2hhc2hfZW50cnkgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CisKICNlbmRp ZiAvKiBMSUJYQ09GRl9IICovCmRpZmYgLS1naXQgYS9iZmQveGNvZmZsaW5rLmMgYi9iZmQveGNv ZmZsaW5rLmMKaW5kZXggNmQ0YWJkZDFlZGEuLjZkYmNkMjk5Yjg4IDEwMDY0NAotLS0gYS9iZmQv eGNvZmZsaW5rLmMKKysrIGIvYmZkL3hjb2ZmbGluay5jCkBAIC05Myw2ICs5MywxMiBAQCBzdHJ1 Y3QgeGNvZmZfbGlua19oYXNoX3RhYmxlCiB7CiAgIHN0cnVjdCBiZmRfbGlua19oYXNoX3RhYmxl IHJvb3Q7CiAKKyAgLyogVGhlIHN0dWIgaGFzaCB0YWJsZS4gICovCisgIHN0cnVjdCBiZmRfaGFz aF90YWJsZSBzdHViX2hhc2hfdGFibGU7CisKKyAgLyogSW5mbyBwYXNzZWQgYnkgdGhlIGxpbmtl ci4gICovCisgIHN0cnVjdCBiZmRfeGNvZmZfbGlua19wYXJhbXMgKnBhcmFtczsKKwogICAvKiBU aGUgLmRlYnVnIHN0cmluZyBoYXNoIHRhYmxlLiAgV2UgbmVlZCB0byBjb21wdXRlIHRoaXMgd2hp bGUKICAgICAgcmVhZGluZyB0aGUgaW5wdXQgZmlsZXMsIHNvIHRoYXQgd2Uga25vdyBob3cgbGFy Z2UgdGhlIC5kZWJ1ZwogICAgICBzZWN0aW9uIHdpbGwgYmUgYmVmb3JlIHdlIGFzc2lnbiBzZWN0 aW9uIHBvc2l0aW9ucy4gICovCkBAIC0xOTMsNiArMTk5LDEzIEBAIHN0cnVjdCB4Y29mZl9maW5h bF9saW5rX2luZm8KICAgYmZkX2J5dGUgKmV4dGVybmFsX3JlbG9jczsKIH07CiAKKyNkZWZpbmUg eGNvZmZfc3R1Yl9oYXNoX2VudHJ5KGVudCkJCVwKKyAgKChzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNo X2VudHJ5ICopKGVudCkpCisKKyNkZWZpbmUgeGNvZmZfc3R1Yl9oYXNoX2xvb2t1cCh0YWJsZSwg c3RyaW5nLCBjcmVhdGUsIGNvcHkpCVwKKyAgKChzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5 ICopCQkJCVwKKyAgIGJmZF9oYXNoX2xvb2t1cCAoKHRhYmxlKSwgKHN0cmluZyksIChjcmVhdGUp LCAoY29weSkpKQorCiBzdGF0aWMgYm9vbCB4Y29mZl9tYXJrIChzdHJ1Y3QgYmZkX2xpbmtfaW5m byAqLCBhc2VjdGlvbiAqKTsKIAogDApAQCAtNTI5LDYgKzU0Miw0MSBAQCB4Y29mZl9nZXRfYXJj aGl2ZV9pbmZvIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywgYmZkICphcmNoaXZlKQogICBy ZXR1cm4gZW50cnlwOwogfQogDAorCisvKiBJbml0aWFsaXplIGFuIGVudHJ5IGluIHRoZSBzdHVi IGhhc2ggdGFibGUuICAqLworc3RhdGljIHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAqCitzdHViX2hh c2hfbmV3ZnVuYyAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICplbnRyeSwKKwkJICAgc3RydWN0IGJm ZF9oYXNoX3RhYmxlICp0YWJsZSwKKwkJICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworICAvKiBB bGxvY2F0ZSB0aGUgc3RydWN0dXJlIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIGFsbG9jYXRl ZCBieSBhCisgICAgIHN1YmNsYXNzLiAgKi8KKyAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgewor ICAgICAgZW50cnkgPSBiZmRfaGFzaF9hbGxvY2F0ZSAodGFibGUsCisJCQkJIHNpemVvZiAoc3Ry dWN0IHhjb2ZmX3N0dWJfaGFzaF9lbnRyeSkpOworICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJ cmV0dXJuIGVudHJ5OworICAgIH0KKworICAvKiBDYWxsIHRoZSBhbGxvY2F0aW9uIG1ldGhvZCBv ZiB0aGUgc3VwZXJjbGFzcy4gICovCisgIGVudHJ5ID0gYmZkX2hhc2hfbmV3ZnVuYyAoZW50cnks IHRhYmxlLCBzdHJpbmcpOworICBpZiAoZW50cnkgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdHJ1 Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpoc2g7CisKKyAgICAgIC8qIEluaXRpYWxpemUgdGhl IGxvY2FsIGZpZWxkcy4gICovCisgICAgICBoc2ggPSAoc3RydWN0IHhjb2ZmX3N0dWJfaGFzaF9l bnRyeSAqKSBlbnRyeTsKKyAgICAgIGhzaC0+c3R1Yl90eXBlID0geGNvZmZfc3R1Yl9ub25lOwor ICAgICAgaHNoLT5oY3NlY3QgPSBOVUxMOworICAgICAgaHNoLT5zdHViX29mZnNldCA9IDA7Cisg ICAgICBoc2gtPnRhcmdldF9zZWN0aW9uID0gTlVMTDsKKyAgICAgIGhzaC0+aHRhcmdldCA9IE5V TEw7CisgICAgfQorCisgIHJldHVybiBlbnRyeTsKK30KKwogLyogUm91dGluZSB0byBjcmVhdGUg YW4gZW50cnkgaW4gYW4gWENPRkYgbGluayBoYXNoIHRhYmxlLiAgKi8KIAogc3RhdGljIHN0cnVj dCBiZmRfaGFzaF9lbnRyeSAqCkBAIC01NzcsNiArNjI1LDggQEAgX2JmZF94Y29mZl9iZmRfbGlu a19oYXNoX3RhYmxlX2ZyZWUgKGJmZCAqb2JmZCkKICAgICBodGFiX2RlbGV0ZSAocmV0LT5hcmNo aXZlX2luZm8pOwogICBpZiAocmV0LT5kZWJ1Z19zdHJ0YWIpCiAgICAgX2JmZF9zdHJpbmd0YWJf ZnJlZSAocmV0LT5kZWJ1Z19zdHJ0YWIpOworCisgIGJmZF9oYXNoX3RhYmxlX2ZyZWUgKCZyZXQt PnN0dWJfaGFzaF90YWJsZSk7CiAgIF9iZmRfZ2VuZXJpY19saW5rX2hhc2hfdGFibGVfZnJlZSAo b2JmZCk7CiB9CiAKQEAgLTU5OSw2ICs2NDksMTQgQEAgX2JmZF94Y29mZl9iZmRfbGlua19oYXNo X3RhYmxlX2NyZWF0ZSAoYmZkICphYmZkKQogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisg IC8qIEluaXQgdGhlIHN0dWIgaGFzaCB0YWJsZSB0b28uICAqLworICBpZiAoIWJmZF9oYXNoX3Rh YmxlX2luaXQgKCZyZXQtPnN0dWJfaGFzaF90YWJsZSwgc3R1Yl9oYXNoX25ld2Z1bmMsCisJCQkg ICAgc2l6ZW9mIChzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5KSkpCisgICAgeworICAgICAg X2JmZF94Y29mZl9iZmRfbGlua19oYXNoX3RhYmxlX2ZyZWUgKGFiZmQpOworICAgICAgcmV0dXJu IE5VTEw7CisgICAgfQorCiAgIGlzeGNvZmY2NCA9IGJmZF9jb2ZmX2RlYnVnX3N0cmluZ19wcmVm aXhfbGVuZ3RoIChhYmZkKSA9PSA0OwogCiAgIHJldC0+ZGVidWdfc3RydGFiID0gX2JmZF94Y29m Zl9zdHJpbmd0YWJfaW5pdCAoaXN4Y29mZjY0KTsKQEAgLTE3MzgsNiArMTc5Niw3IEBAIHhjb2Zm X2xpbmtfYWRkX3N5bWJvbHMgKGJmZCAqYWJmZCwgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8p CiAJCQkgICAgICArIHN5bS5uX3ZhbHVlCiAJCQkgICAgICAtIGVuY2xvc2luZy0+dm1hKTsKIAkg ICAgY3NlY3QtPnNpemUgPSBhdXgueF9jc2VjdC54X3Njbmxlbi5sOworCSAgICBjc2VjdC0+cmF3 c2l6ZSA9IGF1eC54X2NzZWN0Lnhfc2NubGVuLmw7CiAJICAgIGNzZWN0LT5mbGFncyB8PSBTRUNf QUxMT0MgfCBTRUNfTE9BRCB8IFNFQ19IQVNfQ09OVEVOVFM7CiAJICAgIGNzZWN0LT5hbGlnbm1l bnRfcG93ZXIgPSBTTVRZUF9BTElHTiAoYXV4LnhfY3NlY3QueF9zbXR5cCk7CiAKQEAgLTMxNTks NiArMzIxOCwxNyBAQCB4Y29mZl9zd2VlcCAoc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pCiAg ICAgfQogfQogCisvKiBJbml0aWFsaXplIHRoZSBiYWNrLWVuZCB3aXRoIGxpbmtlciBpbmZvcy4g ICovCisKK2Jvb2wKK2JmZF94Y29mZl9saW5rX2luaXQgKHN0cnVjdCBiZmRfbGlua19pbmZvICpp bmZvLAorCQkgICAgIHN0cnVjdCBiZmRfeGNvZmZfbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKyAg eGNvZmZfaGFzaF90YWJsZSAoaW5mbyktPnBhcmFtcyA9IHBhcmFtczsKKworICByZXR1cm4gdHJ1 ZTsKK30KKwogLyogUmVjb3JkIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBzZXQuICBUaGlz IGlzIHVzZWQgdG8gb3V0cHV0IHRoZQogICAgY29ycmVjdCBjc2VjdCBsZW5ndGguICAqLwogCkBA IC00MjE4LDYgKzQyODgsNzUwIEBAIGJmZF94Y29mZl9saW5rX2dlbmVyYXRlX3J0aW5pdCAoYmZk ICphYmZkLAogICByZXR1cm4gdHJ1ZTsKIH0KIAwKKworLyogTGlua2VyIHN0dWJzLgorICAgVGhl IHN0dWJzIHdpbGwgYmUgZ2F0aGVyZWQgaW4gc3R1YiBjc2VjdHMgbmFtZWQgIkBGSVgnbnVtYmVy JyIuCisgICBBIG5ldyBjc2VjdCB3aWxsIGJlIGNyZWF0ZWQgYnkgeGNvZmZfc3R1Yl9nZXRfY3Nl Y3RfaW5fcmFuZ2UsCisgICBldmVyeXRpbWUgYSByZWxvY2F0aW9uIGNhbm5vdCByZWFjaCBpdHMg dGFyZ2V0IGFuZCBpdHMgc2VjdGlvbgorICAgaXMgdG9vIGZhciBmcm9tIHRoZSBvdGhlcnMgc3R1 YiBjc2VjdHMuCisgICBUaGUgc3R1YnMgd2lsbCBzaW1wbHkgYmUgY29kZSBnZW5lcmF0ZWQgaW5z aWRlIHRoZXNlIHN0dWIKKyAgIGNzZWN0cy4gIEluIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSBzeW1i b2wgdGFibGUsIG9ubHkgdGhlIHN5bWJvbHMKKyAgIGZvciB0aGUgc3R1YiBjc2VjdHMgYXJlIHdy aXR0ZW4uCisKKyAgIEFzIHRoZSBjb2RlIGlzIGRlcGVuZGVudCBvZiB0aGUgYXJjaGl0ZWN0dXJl LCBpdCdzIGRlZmluZWQKKyAgIGluIHRoZSBiYWNrZW5kLgorCisgICB4Y29mZl9zdHViX2luZGly ZWN0X2NhbGw6CisgICBVc2VkIHdoZW4gYSAyNCBiaXQgYnJhbmNoIGNhbm5vdCByZWFjaCBpdHMg ZGVzdGluYXRpb24gYW5kIHRoYXQKKyAgIHRoaXMgZGVzdGluYXRpb24gaXNuJ3QgYSBnbG9iYWwg bGlua2FnZSBzeW1ib2wuCisKKyAgIHhjb2ZmX3N0dWJfc2hhcmVkX2NhbGw6CisgICBBcyBhYm92 ZSBidXQgd2hlbiBpdCdzIGEgZ2xvYmFsIGxpbmthZ2Ugc3ltYm9sLgorICAgVGhlIG1haW4gZGlm ZmVyZW5jZSBiZWluZyB0aGF0IGl0IGRvZXNuJ3QgYnJhbmNoIHRvIHRoZSBnbG9iYWwKKyAgIGxp bmthZ2Ugc3ltYm9sIHdoaWNoIHdpbGwgdGhlbiBjYWxsIHRoZSBzaGFyZWQgbGlicmFyeS4gIEl0 CisgICBkaXJlY3RseSBjYWxsIGl0IHNhdmluZyB0aGUgVE9DLgorCisgICBUT0RPOiAtYmJpZ3Rv YyBvcHRpb24gc2hvdWxkIGJlIGFibGUgdG8gYmUgaW1wbGVtZW50ZWQgdXNpbmcKKyAgIHRoaXMg c3R1YnMuICAqLworCisvKiBHZXQgdGhlIG5hbWUgb2YgYSBjc2VjdCB3aGljaCB3aWxsIGNvbnRh aW4gc3R1YnMuCisgICBJdCBoYXMgdGhlIHNhbWUgcGF0dGVybiBhcyBBSVggbGlua2VyOiBARklY Im51bWJlciIuICAqLworc3RhdGljIGNoYXIgKiB4Y29mZl9zdHViX2NzZWN0X25hbWUgKHVuc2ln bmVkIGludCBuKQoreworICBjaGFyIGJ1Zls2XTsKKyAgc2l6ZV90IGxlbjsKKyAgY2hhciAqY3Nl Y3RfbmFtZTsKKworICAvKiBGb3Igbm93LCBhbGxvdyAib25seSIgMTAwMDAwMCBzdHViIGNzZWN0 cy4gICovCisgIGlmIChuID49IDEwMDAwMDApCisgICAgeworICAgICAgQkZEX0ZBSUwoKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBzcHJpbnRmIChidWYsICIlZCIsIG4pOworICBs ZW4gPSA0ICsgc3RybGVuIChidWYpICsgMTsKKworICBjc2VjdF9uYW1lID0gYmZkX21hbGxvYyAo bGVuKTsKKyAgaWYgKGNzZWN0X25hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgc3By aW50ZiAoY3NlY3RfbmFtZSwgIkBGSVglZCIsIG4pOworCisgIHJldHVybiBjc2VjdF9uYW1lOwor fQorCisvKiBSZXR1cm4gYSBzdHViIHNlY3Rpb24gd2hpY2ggY2FuIGJlIHJlYWNoIHdpdGggYSBz aW5nbGUgYnJhbmNoCisgICBmcm9tIFNFQ1RJT04uICBDUkVBVEUgbWVhbnMgdGhhdCBjcmVhdGlu ZyBhIGNzZWN0IGlzIGFsbG93ZWQuICAqLworc3RhdGljIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hf ZW50cnkgKgoreGNvZmZfc3R1Yl9nZXRfY3NlY3RfaW5fcmFuZ2UgKGFzZWN0aW9uICpzZWN0aW9u LAorCQkJICAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvLAorCQkJICAgICAgIGJvb2wg Y3JlYXRlKQoreworICBzdHJ1Y3QgeGNvZmZfbGlua19oYXNoX3RhYmxlICpodGFiID0geGNvZmZf aGFzaF90YWJsZSAoaW5mbyk7CisgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmNzZWN0 X2VudHJ5OworICBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqYmggPSBOVUxMOworICBhc2Vj dGlvbiAqY3NlY3Q7CisgIHVuc2lnbmVkIGludCBpdDsKKyAgY2hhciAqY3NlY3RfbmFtZTsKKwor ICAvKiBTZWFyY2ggZm9yIGEgY3NlY3QgaW4gcmFuZ2UuICAqLworICBmb3IgKGNzZWN0ID0gaHRh Yi0+cGFyYW1zLT5zdHViX2JmZC0+c2VjdGlvbnMsIGl0ID0gMDsKKyAgICAgICBjc2VjdCAhPSBO VUxMOworICAgICAgIGNzZWN0ID0gY3NlY3QtPm5leHQsIGl0KyspCisgICAgeworICAgICAgLyog QSBjc2VjdCBpcyBpbiByYW5nZSBpZiBldmVyeXRoaW5nIGluc3RydWN0aW9ucyBpbiBTRUNUSU9O CisgICAgICAgICBjYW4gYnJhbmNoIHRvIGV2ZXJ5IHN0dWJzIGluIHRoZSBzdHViIGNzZWN0LiAg VGhpcyBjYW4KKwkgYmUgc2ltcGxpZnkgYnkgc2F5aW5nIHRoYXQgdGhlIGZpcnN0IGVudHJ5IG9m IGVhY2ggc2VjdGlvbnMKKwkgKGllIHRoZSB2bWEgb2YgdGhpcyBzZWN0aW9uKSBjYW4gcmVhY2gg dGhlIGxhc3QgZW50cnkgb2YgdGhlCisJIHN0dWIgY3NlY3QgKGllIHRoZSB2bWEgb2YgdGhlIGNz ZWN0ICsgaXRzIHNpemUpLgorICAgICAgICAgSG93ZXZlciwgYXMgdGhlIHN0dWIgY3NlY3QgbWln aHQgYmUgZ3Jvd2luZyBpdHMgc2l6ZSBpc24ndAorICAgICAgICAgZml4ZWQuICBUaHVzLCB0aGUg bGFzdCBlbnRyeSBvZiBTRUNUSU9OIG1pZ2h0IG5vdCBiZSBhYmxlCisgICAgICAgICB0byByZWFj aCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIHN0dWIgY3NlY3QgYW55bW9yZS4KKyAgICAgICAgIElm IHRoaXMgY2FzZSBoYXBwZW5zLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiB3aWxsIGJlCisgICAg ICAgICBmYWxzZSBkdXJpbmcgdGhlIG5leHQgcGFzcyBvZiBiZmRfeGNvZmZfc2l6ZV9zdHVicyBh bmQKKyAgICAgICAgIGFub3RoZXIgY3NlY3Qgd2lsbCBiZSB1c2VkLgorICAgICAgICAgVGhpcyBt ZWFucyB3ZSBtaWdodCBjcmVhdGUgbW9yZSBzdHVicyB0aGFuIG5lZWRlZC4gICovCisgICAgICBi ZmRfdm1hIGNzZWN0X3ZtYSwgc2VjdGlvbl92bWE7CisgICAgICBiZmRfdm1hIGNzZWN0X2xhc3Rf dm1hLCBzZWN0aW9uX2xhc3Rfdm1hOworCisgICAgICBjc2VjdF92bWEgPSAoY3NlY3QtPm91dHB1 dF9zZWN0aW9uLT52bWEKKwkJCSsgY3NlY3QtPm91dHB1dF9vZmZzZXQpOworICAgICAgY3NlY3Rf bGFzdF92bWEgPSAoY3NlY3QtPm91dHB1dF9zZWN0aW9uLT52bWEKKwkJCSsgY3NlY3QtPm91dHB1 dF9vZmZzZXQKKwkJCSsgY3NlY3QtPnNpemUpOworICAgICAgc2VjdGlvbl92bWEgPSAoc2VjdGlv bi0+b3V0cHV0X3NlY3Rpb24tPnZtYQorCQkgICAgICsgc2VjdGlvbi0+b3V0cHV0X29mZnNldCk7 CisgICAgICBzZWN0aW9uX2xhc3Rfdm1hID0gKHNlY3Rpb24tPm91dHB1dF9zZWN0aW9uLT52bWEK KwkJICAgICArIHNlY3Rpb24tPm91dHB1dF9vZmZzZXQKKwkJICAgICArIHNlY3Rpb24tPnNpemUp OworCisgICAgICBpZiAoY3NlY3RfbGFzdF92bWEgLSBzZWN0aW9uX3ZtYSArICgxIDw8IDI1KSA8 IDIgKiAoMSA8PCAyNSkKKwkgICYmIHNlY3Rpb25fbGFzdF92bWEgLSBjc2VjdF92bWEgKyAoMSA8 PCAyNSkgPCAyICogKDEgPDwgMjUpKQorCWJyZWFrOworICAgIH0KKworICBpZiAoIWNyZWF0ZSAm JiBjc2VjdCA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGNzZWN0X25hbWUgPSB4Y29m Zl9zdHViX2NzZWN0X25hbWUgKGl0KTsKKyAgaWYgKCFjc2VjdF9uYW1lKQorICAgIHJldHVybiBO VUxMOworCisgIC8qIEEgc3R1YiBjc2VjdCBhbHJlYWR5IGV4aXN0cywgZ2V0IGl0cyBlbnRyeS4g ICovCisgIGlmIChjc2VjdCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNzZWN0X2VudHJ5ID0geGNv ZmZfbGlua19oYXNoX2xvb2t1cCAoaHRhYiwgY3NlY3RfbmFtZSwgZmFsc2UsIGZhbHNlLCB0cnVl KTsKKyAgICAgIGZyZWUoY3NlY3RfbmFtZSk7CisgICAgICByZXR1cm4gY3NlY3RfZW50cnk7Cisg ICAgfQorCisgIC8qIENyZWF0ZSB0aGUgY3NlY3QgYW5kIGl0cyBzeW1ib2wuICAqLworICBjc2Vj dCA9ICgqaHRhYi0+cGFyYW1zLT5hZGRfc3R1Yl9zZWN0aW9uKSAoIi5wciIsIHNlY3Rpb24pOwor ICBpZiAoIWNzZWN0KQorICAgIHsKKyAgICAgIGZyZWUoY3NlY3RfbmFtZSk7CisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisKKyAgY3NlY3QtPmFsaWdubWVudF9wb3dlciA9IDI7CisgIGNzZWN0 LT5nY19tYXJrID0gMTsKKyAgY3NlY3QtPnJlbG9jX2NvdW50ID0gMDsKKworICAvKiBXZSBuZWVk IHRvIGFzc29jaWF0ZSBhIFZNQSB0byB0aGlzIG5ldyBjc2VjdC4gIE90aGVyd2lzZSwKKyAgICAg b3VyICJpbiByYW5nZSIgYWxnb3JpdGhtIHdvbid0IGZpbmQgaXQgZm9yIHRoZSBuZXh0IHN0dWIu CisgICAgIEFuZCBhcyB3ZSB3aWxsIGJlIGFkZGluZyB0aGlzIHN0dWIgc2VjdGlvbiBqdXN0IGFm dGVyIHRoZQorICAgICBTRUNUSU9OLCB3ZSBrbm93IGl0cyBhZGRyZXNzLiAgKi8KKyAgY3NlY3Qt Pm91dHB1dF9vZmZzZXQgPSBCRkRfQUxJR04gKHNlY3Rpb24tPm91dHB1dF9vZmZzZXQgKyBzZWN0 aW9uLT5zaXplLAorCQkJCSAgICA0KTsKKworICBpZiAoIV9iZmRfZ2VuZXJpY19saW5rX2FkZF9v bmVfc3ltYm9sIChpbmZvLCBodGFiLT5wYXJhbXMtPnN0dWJfYmZkLAorCQkJCQkgY3NlY3RfbmFt ZSwgQlNGX0dMT0JBTCwgY3NlY3QsIDAsCisJCQkJCSBOVUxMLCB0cnVlLCB0cnVlLCAmYmgpKQor ICAgIHsKKyAgICAgIGZyZWUoY3NlY3RfbmFtZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9 CisKKyAgY3NlY3RfZW50cnkgPSAoc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqKWJoOwor ICBjc2VjdF9lbnRyeS0+c21jbGFzID0gWE1DX1BSOworICBjc2VjdF9lbnRyeS0+ZmxhZ3MgPSBY Q09GRl9NQVJLIHwgWENPRkZfREVGX1JFR1VMQVI7CisKKyAgZnJlZShjc2VjdF9uYW1lKTsKKyAg cmV0dXJuIGNzZWN0X2VudHJ5OworfQorCisKKy8qIEJ1aWxkIGEgbmFtZSBmb3IgYW4gZW50cnkg aW4gdGhlIHN0dWIgaGFzaCB0YWJsZS4gICovCitzdGF0aWMgY2hhciAqCit4Y29mZl9zdHViX25h bWUgKGNvbnN0IHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmgsCisJCSBjb25zdCBzdHJ1 Y3QgeGNvZmZfbGlua19oYXNoX2VudHJ5ICpoY3NlY3QpCit7CisgIGNoYXIgKnN0dWJfbmFtZTsK KyAgc2l6ZV90IGxlbjsKKworICBpZiAoaCkKKyAgICB7CisgICAgICAvKiBUaGUgbmFtZSBvZiBh IHN0dWIgaXMgYmFzZWQgb24gaXRzIHN0dWIgY3NlY3QgYW5kIHRoZQorCSBzeW1ib2wgaXQgd2Fu dHMgdG8gcmVhY2guICBJdCBsb29rcyBsaWtlOiAiLkBGSVgwLnRyYW1wLmYiLgorCSBXaGVuIHRo ZSBzdHViIHRhcmdldHMgYSBmdW5jdGlvbiwgdGhlIGxhc3QgZG90IG9mICIudHJhbXAuIgorCSBp cyByZW1vdmVkIHRvIGF2b2lkIGhhdmluZyB0d28gZG90LiAgKi8KKyAgICAgIGxlbiA9ICgxICsg NgorCSAgICAgKyBzdHJsZW4gKGhjc2VjdC0+cm9vdC5yb290LnN0cmluZykKKwkgICAgICsgc3Ry bGVuIChoLT5yb290LnJvb3Quc3RyaW5nKQorCSAgICAgKyAxKTsKKyAgICAgIGlmIChoLT5yb290 LnJvb3Quc3RyaW5nWzBdICE9ICcuJykKKwlsZW4rKzsKKworICAgICAgc3R1Yl9uYW1lID0gYmZk X21hbGxvYyAobGVuKTsKKyAgICAgIGlmIChzdHViX25hbWUgPT0gTlVMTCkKKwlyZXR1cm4gc3R1 Yl9uYW1lOworCisgICAgICBpZiAoaC0+cm9vdC5yb290LnN0cmluZ1swXSA9PSAnLicpCisJc3By aW50ZiAoc3R1Yl9uYW1lLCAiLiVzLnRyYW1wJXMiLAorCQkgaGNzZWN0LT5yb290LnJvb3Quc3Ry aW5nLAorCQkgaC0+cm9vdC5yb290LnN0cmluZyk7CisgICAgICBlbHNlCisJc3ByaW50ZiAoc3R1 Yl9uYW1lLCAiLiVzLnRyYW1wLiVzIiwKKwkJIGhjc2VjdC0+cm9vdC5yb290LnN0cmluZywKKwkJ IGgtPnJvb3Qucm9vdC5zdHJpbmcpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEJGRF9G QUlMKCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIHN0dWJfbmFtZTsK K30KKworLyogTG9vayB1cCBhbiBlbnRyeSBpbiB0aGUgc3R1YiBoYXNoLiAgKi8KK3N0cnVjdCB4 Y29mZl9zdHViX2hhc2hfZW50cnkgKgorYmZkX3hjb2ZmX2dldF9zdHViX2VudHJ5IChhc2VjdGlv biAqc2VjdGlvbiwKKwkJCSAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqaCwKKwkJCSAg c3RydWN0IGJmZF9saW5rX2luZm8gKmluZm8pCit7CisgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hf dGFibGUgKmh0YWIgPSB4Y29mZl9oYXNoX3RhYmxlIChpbmZvKTsKKyAgc3RydWN0IHhjb2ZmX2xp bmtfaGFzaF9lbnRyeSAqaGNzZWN0OworICBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpo c3R1YjsKKyAgY2hhciAqc3R1Yl9uYW1lOworCisgIGhjc2VjdCA9IHhjb2ZmX3N0dWJfZ2V0X2Nz ZWN0X2luX3JhbmdlIChzZWN0aW9uLCBpbmZvLCBmYWxzZSk7CisgIGlmICghaGNzZWN0KQorICAg IHJldHVybiBOVUxMOworCisgIHN0dWJfbmFtZSA9IHhjb2ZmX3N0dWJfbmFtZSAoaCwgaGNzZWN0 KTsKKyAgaWYgKHN0dWJfbmFtZSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGhzdHVi ID0geGNvZmZfc3R1Yl9oYXNoX2xvb2t1cCAoJmh0YWItPnN0dWJfaGFzaF90YWJsZSwKKwkJCQkg IHN0dWJfbmFtZSwgZmFsc2UsIGZhbHNlKTsKKworICBmcmVlIChzdHViX25hbWUpOworICByZXR1 cm4gaHN0dWI7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBzeW1ib2wgdGFyZ2V0ZWQgYnkgSVJFTCBp cyByZWFjaGFibGUuCisgICBSZXR1cm4gdGhlIHR5cGUgb2Ygc3R1YiBuZWVkZWQgb3RoZXJ3aXNl LiAgKi8KK2VudW0geGNvZmZfc3R1Yl90eXBlCitiZmRfeGNvZmZfdHlwZV9vZl9zdHViIChhc2Vj dGlvbiAqc2VjLAorCQkJY29uc3Qgc3RydWN0IGludGVybmFsX3JlbG9jICppcmVsLAorCQkJYmZk X3ZtYSBkZXN0aW5hdGlvbiwKKwkJCXN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmgpCit7 CisgIGJmZF92bWEgbG9jYXRpb24sIG9mZnNldCwgbWF4X29mZnNldDsKKworICBzd2l0Y2ggKGly ZWwtPnJfdHlwZSkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiB4Y29mZl9zdHVi X25vbmU7CisKKyAgICBjYXNlIFJfQlI6CisgICAgY2FzZSBSX1JCUjoKKyAgICAgIGxvY2F0aW9u ID0gKHNlYy0+b3V0cHV0X3NlY3Rpb24tPnZtYQorCQkgICsgc2VjLT5vdXRwdXRfb2Zmc2V0CisJ CSAgKyBpcmVsLT5yX3ZhZGRyCisJCSAgLSBzZWMtPnZtYSk7CisKKyAgICAgIG1heF9vZmZzZXQg PSAxIDw8IDI1IDsKKworICAgICAgb2Zmc2V0ID0gZGVzdGluYXRpb24gLSBsb2NhdGlvbjsKKwor ICAgICAgaWYgKG9mZnNldCArIG1heF9vZmZzZXQgPCAyICogbWF4X29mZnNldCkKKwlyZXR1cm4g eGNvZmZfc3R1Yl9ub25lOworCisgICAgICAvKiBBIHN0dWIgaXMgbmVlZGVkLiAgTm93LCBjaGVj ayB0aGF0IHdlIGNhbiBtYWtlIG9uZS4gICovCisgICAgICBpZiAoaCAhPSBOVUxMCisJICAmJiBo LT5kZXNjcmlwdG9yICE9IE5VTEwpCisJeworCSAgLyogTm90IHN1cmUgaG93IHRvIGhhbmRsZSB0 aGlzIGNhc2UuIEZvciBub3csIHNraXAgaXQuICovCisJICBpZiAoYmZkX2lzX2Fic19zZWN0aW9u IChoLT5yb290LnUuZGVmLnNlY3Rpb24pKQorCSAgICByZXR1cm4geGNvZmZfc3R1Yl9ub25lOwor CisJICBpZiAoaC0+c21jbGFzID09IFhNQ19HTCkKKwkgICAgcmV0dXJuIHhjb2ZmX3N0dWJfc2hh cmVkX2NhbGw7CisJICBlbHNlCisJICAgIHJldHVybiB4Y29mZl9zdHViX2luZGlyZWN0X2NhbGw7 CisJfQorICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiB4Y29mZl9zdHViX25vbmU7Cit9 CisKKy8qIEFkZCBhIG5ldyBzdHViIGVudHJ5IHRvIHRoZSBzdHViIGhhc2guICBOb3QgYWxsIGZp ZWxkcyBvZiB0aGUgbmV3CisgICBzdHViIGVudHJ5IGFyZSBpbml0aWFsaXNlZC4gICovCitzdGF0 aWMgc3RydWN0IHhjb2ZmX3N0dWJfaGFzaF9lbnRyeSAqCit4Y29mZl9hZGRfc3R1YiAoY29uc3Qg Y2hhciAqc3R1Yl9uYW1lLAorCQlzdHJ1Y3QgeGNvZmZfbGlua19oYXNoX2VudHJ5ICpoc3R1Yl9j c2VjdCwKKwkJc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF9lbnRyeSAqaHRhcmdldCwKKwkJc3RydWN0 IGJmZF9saW5rX2luZm8gKmluZm8sCisJCWVudW0geGNvZmZfc3R1Yl90eXBlIHN0dWJfdHlwZSkK K3sKKyAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF90YWJsZSAqaHRhYiA9IHhjb2ZmX2hhc2hfdGFi bGUgKGluZm8pOworICBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpoc3R1YjsKKyAgYmZk X3ZtYSBzdHViX29mZnNldDsKKyAgYXNlY3Rpb24gKnN0dWJfY3NlY3Q7CisKKyAgc3R1Yl9jc2Vj dCA9IGhzdHViX2NzZWN0LT5yb290LnUuZGVmLnNlY3Rpb247CisgIHN0dWJfb2Zmc2V0ID0gc3R1 Yl9jc2VjdC0+c2l6ZTsKKworICAvKiBVcGRhdGUgdGhlIHJlbG9jYXRpb24gY291bnRlciBhbmQg dGhlIHNpemUgb2YKKyAgICAgdGhlIGNvbnRhaW5pbmcgY3NlY3QuICBUaGUgc2l6ZSBpcyBuZWVk ZWQgZm9yCisgICAgIHRoZSBhbGdvcml0aG0gaW4geGNvZmZfc3R1Yl9nZXRfY3NlY3RfaW5fcmFu Z2UuICAqLworICBzd2l0Y2ggKHN0dWJfdHlwZSkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICAg IEJGRF9GQUlMICgpOworICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjYXNlIHhjb2ZmX3N0dWJf aW5kaXJlY3RfY2FsbDoKKyAgICAgIHN0dWJfY3NlY3QtPnJlbG9jX2NvdW50Kys7CisgICAgICBz dHViX2NzZWN0LT5zaXplICs9IGJmZF94Y29mZl9zdHViX2luZGlyZWN0X2NhbGxfc2l6ZSAoaW5m by0+b3V0cHV0X2JmZCk7CisJYnJlYWs7CisKKyAgICBjYXNlIHhjb2ZmX3N0dWJfc2hhcmVkX2Nh bGw6CisgICAgICBzdHViX2NzZWN0LT5yZWxvY19jb3VudCsrOworICAgICAgc3R1Yl9jc2VjdC0+ c2l6ZSArPSBiZmRfeGNvZmZfc3R1Yl9zaGFyZWRfY2FsbF9zaXplIChpbmZvLT5vdXRwdXRfYmZk KTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAvKiBDcmVhdGUgdGhlIHN0dWIgZW50cnkuICAq LworICBoc3R1YiA9IHhjb2ZmX3N0dWJfaGFzaF9sb29rdXAgKCZodGFiLT5zdHViX2hhc2hfdGFi bGUsIHN0dWJfbmFtZSwKKwkJCQkgICAgICAgdHJ1ZSwgdHJ1ZSk7CisgIGlmIChoc3R1YiA9PSBO VUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGhzdHViLT5odGFyZ2V0ID0gaHRhcmdldDsKKyAg aHN0dWItPnN0dWJfb2Zmc2V0ID0gc3R1Yl9vZmZzZXQ7CisKKyAgLyogRm9yIGluZGlyZWN0IGNh bGwgb3Igc2hhcmVkIGNhbGwsIHRoZSByZWxvY2F0aW9ucyBhcmUgYWdhaW5zdAorICAgICB0aGUg dGFyZ2V0IGRlc2NyaXB0b3IuICBJdHMgdG9jIGVudHJ5IHdpbGwgYmUgdXNlZC4gICovCisgIGlm IChzdHViX3R5cGUgPT0geGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsCisgICAgICB8fCBzdHViX3R5 cGUgPT0geGNvZmZfc3R1Yl9zaGFyZWRfY2FsbCkKKyAgICB7CisgICAgICBzdHJ1Y3QgeGNvZmZf bGlua19oYXNoX2VudHJ5ICpoZHMgPSBodGFyZ2V0LT5kZXNjcmlwdG9yOworICAgICAgYXNlY3Rp b24gKmhkc19zZWN0aW9uID0gaGRzLT5yb290LnUuZGVmLnNlY3Rpb247CisKKyAgICAgIGhzdHVi LT5odGFyZ2V0ID0gaGRzOworCisgICAgICAvKiBJZiB0aGUgc3ltYm9sIGhhdmVuJ3QgYmVlbiBt YXJrZWQsIGl0cyBzZWN0aW9uIG1pZ2h0IGhhdmUKKwkgaXRzIHNpemUgYW5kIGl0cyByZWxvY2F0 aW9uIGNvdW50IGJlZW4gZGVsZXRlZCBieSB4Y29mZl9zd2VlcC4KKwkgUmVzdG9yZSBpdC4gICov CisgICAgICBpZiAoKGhkcy0+ZmxhZ3MgJiBYQ09GRl9NQVJLKSA9PSAwKQorCXsKKwkgIGlmICho ZHNfc2VjdGlvbi0+c2l6ZSA9PSAwCisJICAgICAgJiYgaGRzX3NlY3Rpb24tPnJlbG9jX2NvdW50 ID09IDAKKwkgICAgICAmJiBoZHNfc2VjdGlvbi0+cmF3c2l6ZSAhPSAwKQorCSAgICB7CisJICAg ICAgaGRzX3NlY3Rpb24tPnNpemUgPSBoZHNfc2VjdGlvbi0+cmF3c2l6ZTsKKwkgICAgICAvKiBB bHdheXMgdHdvIHJlbG9jYXRpb25zIGZvciBhIFhNQ19EUyBzeW1ib2wuICAqLworCSAgICAgIGhk c19zZWN0aW9uLT5yZWxvY19jb3VudCA9IDI7CisJICAgIH0KKworCSAgLyogTWFyayB0aGUgc2Vj dGlvbiBhbmQgdGhlIHN5bWJvbC4gICovCisJICBpZiAoIXhjb2ZmX21hcmsgKGluZm8sIGhkc19z ZWN0aW9uKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorCisgICAgICAvKiBBZGQgYSBUT0MgZW50 cnkgZm9yIHRoZSBkZXNjcmlwdG9yIGlmIG5vbiBleGlzdHMuICAqLworICAgICAgaWYgKGhkcy0+ dG9jX3NlY3Rpb24gPT0gTlVMTCkKKwl7CisJICBpbnQgYnl0ZV9zaXplOworCisJICBpZiAoYmZk X3hjb2ZmX2lzX3hjb2ZmNjQgKGluZm8tPm91dHB1dF9iZmQpKQorCSAgICBieXRlX3NpemUgPSA4 OworCSAgZWxzZSBpZiAoYmZkX3hjb2ZmX2lzX3hjb2ZmMzIgKGluZm8tPm91dHB1dF9iZmQpKQor CSAgICBieXRlX3NpemUgPSA0OworCSAgZWxzZQorCSAgICByZXR1cm4gTlVMTDsKKworCSAgLyog QWxsb2NhdGUgcm9vbSBpbiB0aGUgZmFsbGJhY2sgVE9DIHNlY3Rpb24uICAqLworCSAgaGRzLT50 b2Nfc2VjdGlvbiA9IHhjb2ZmX2hhc2hfdGFibGUgKGluZm8pLT50b2Nfc2VjdGlvbjsKKwkgIGhk cy0+dS50b2Nfb2Zmc2V0ID0gaGRzLT50b2Nfc2VjdGlvbi0+c2l6ZTsKKwkgIGhkcy0+dG9jX3Nl Y3Rpb24tPnNpemUgKz0gYnl0ZV9zaXplOworCSAgaWYgKCF4Y29mZl9tYXJrIChpbmZvLCBoZHMt PnRvY19zZWN0aW9uKSkKKwkgICAgcmV0dXJuIE5VTEw7CisKKwkgIC8qIFVwZGF0ZSByZWxvY2F0 aW9uIGNvdW50ZXJzIGZvciBhIHN0YXRpYyBhbmQgZHluYW1pYworCSAgICAgUl9UT0MgcmVsb2Nh dGlvbi4gICovCisJICArK2hkcy0+dG9jX3NlY3Rpb24tPnJlbG9jX2NvdW50OworCSAgKytodGFi LT5sZGluZm8ubGRyZWxfY291bnQ7CisKKwkgIC8qIFNldCB0aGUgaW5kZXggdG8gLTIgdG8gZm9y Y2UgdGhpcyBzeW1ib2wgdG8KKwkgICAgIGdldCB3cml0dGVuIG91dC4gICovCisJICBoZHMtPmlu ZHggPSAtMjsKKwkgIGhkcy0+ZmxhZ3MgfD0gWENPRkZfU0VUX1RPQzsKKwl9CisgICAgfQorCisg IHJldHVybiBoc3R1YjsKK30KKworc3RhdGljIGJvb2wKK3hjb2ZmX2J1aWxkX29uZV9zdHViIChz dHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmdlbl9lbnRyeSwgdm9pZCAqaW5fYXJnKQoreworICBzdHJ1 Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpoc3R1YgorICAgID0gKHN0cnVjdCB4Y29mZl9zdHVi X2hhc2hfZW50cnkgKikgZ2VuX2VudHJ5OworCisgIGJmZCAqc3R1Yl9iZmQ7CisgIGJmZCAqb3V0 cHV0X2JmZDsKKyAgc3RydWN0IGJmZF9saW5rX2luZm8gKmluZm87CisgIGJmZF9ieXRlICpsb2M7 CisgIGJmZF9ieXRlICpwOworICB1bnNpZ25lZCBpbnQgaTsKKworICBpbmZvID0gKHN0cnVjdCBi ZmRfbGlua19pbmZvICopIGluX2FyZzsKKyAgc3R1Yl9iZmQgPSB4Y29mZl9oYXNoX3RhYmxlIChp bmZvKS0+cGFyYW1zLT5zdHViX2JmZDsKKyAgb3V0cHV0X2JmZCA9IGluZm8tPm91dHB1dF9iZmQ7 CisKKyAgLyogRmFpbCBpZiB0aGUgdGFyZ2V0IHNlY3Rpb24gY291bGQgbm90IGJlIGFzc2lnbmVk IHRvIGFuIG91dHB1dAorICAgICBzZWN0aW9uLiAgVGhlIHVzZXIgc2hvdWxkIGZpeCBoaXMgbGlu a2VyIHNjcmlwdC4gICovCisgIGlmIChoc3R1Yi0+dGFyZ2V0X3NlY3Rpb24gIT0gTlVMTAorICAg ICAgJiYgaHN0dWItPnRhcmdldF9zZWN0aW9uLT5vdXRwdXRfc2VjdGlvbiA9PSBOVUxMCisgICAg ICAmJiBpbmZvLT5ub25fY29udGlndW91c19yZWdpb25zKQorICAgIGluZm8tPmNhbGxiYWNrcy0+ ZWluZm8gKF8oIiVGJVA6IENvdWxkIG5vdCBhc3NpZ24gJyVwQScgdG8gYW4gb3V0cHV0IHNlY3Rp b24uICIKKwkJCSAgICAgICJSZXRyeSB3aXRob3V0IC0tZW5hYmxlLW5vbi1jb250aWd1b3VzLXJl Z2lvbnMuXG4iKSwKKwkJCSAgICBoc3R1Yi0+dGFyZ2V0X3NlY3Rpb24pOworCisgIGxvYyA9ICho c3R1Yi0+aGNzZWN0LT5yb290LnUuZGVmLnNlY3Rpb24tPmNvbnRlbnRzCisJICsgaHN0dWItPnN0 dWJfb2Zmc2V0KTsKKyAgcCA9IGxvYzsKKworICBzd2l0Y2ggKGhzdHViLT5zdHViX3R5cGUpCisg ICAgeworICAgIGNhc2UgeGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsOgorICAgICAgQkZEX0FTU0VS VCAoaHN0dWItPmh0YXJnZXQtPnRvY19zZWN0aW9uICE9IE5VTEwpOworICAgICAgLyogVGhlIGZp cnN0IGluc3RydWN0aW9uIGluIHRoZSBzdHViIGNvZGUgbmVlZHMgdG8gYmUKKwkgY29va2VkIHRv IGhvbGQgdGhlIGNvcnJlY3Qgb2Zmc2V0IGluIHRoZSB0b2MuICBJdCB3aWxsCisgICAgICAgICBi ZSBmaWxsZWQgYnkgeGNvZmZfc3R1Yl9jcmVhdGVfcmVsb2NhdGlvbnMuICAqLworICAgICAgZm9y IChpID0gMDsgaSA8IGJmZF94Y29mZl9zdHViX2luZGlyZWN0X2NhbGxfc2l6ZShvdXRwdXRfYmZk KSAvIDQ7IGkrKykKKwliZmRfcHV0XzMyIChzdHViX2JmZCwKKwkJICAgIChiZmRfdm1hKSBiZmRf eGNvZmZfc3R1Yl9pbmRpcmVjdF9jYWxsX2NvZGUob3V0cHV0X2JmZCwgaSksCisJCSAgICAmcFs0 ICogaV0pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHhjb2ZmX3N0dWJfc2hhcmVkX2NhbGw6 CisgICAgICBCRkRfQVNTRVJUIChoc3R1Yi0+aHRhcmdldC0+dG9jX3NlY3Rpb24gIT0gTlVMTCk7 CisgICAgICAvKiBUaGUgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGdsaW5rIGNvZGUgbmVlZHMg dG8gYmUKKwkgY29va2VkIHRvIGhvbGQgdGhlIGNvcnJlY3Qgb2Zmc2V0IGluIHRoZSB0b2MuICBJ dCB3aWxsCisgICAgICAgICBiZSBmaWxsZWQgYnkgeGNvZmZfc3R1Yl9jcmVhdGVfcmVsb2NhdGlv bnMuICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGJmZF94Y29mZl9zdHViX3NoYXJlZF9jYWxs X3NpemUob3V0cHV0X2JmZCkgLyA0OyBpKyspCisJYmZkX3B1dF8zMiAoc3R1Yl9iZmQsCisJCSAg ICAoYmZkX3ZtYSkgYmZkX3hjb2ZmX3N0dWJfc2hhcmVkX2NhbGxfY29kZShvdXRwdXRfYmZkLCBp KSwKKwkJICAgICZwWzQgKiBpXSk7CisKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg ICAgIEJGRF9GQUlMICgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgcmV0dXJuIHRy dWU7Cit9CisKKy8qIENoZWNrIHJlbG9jYXRpb25zIGFuZCBhZGRzIHN0dWJzIGlmIG5lZWRlZC4g ICovCisKK2Jvb2wKK2JmZF94Y29mZl9zaXplX3N0dWJzIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAq aW5mbykKK3sKKyAgc3RydWN0IHhjb2ZmX2xpbmtfaGFzaF90YWJsZSAqaHRhYiA9IHhjb2ZmX2hh c2hfdGFibGUgKGluZm8pOworICBzdHJ1Y3QgeGNvZmZfbG9hZGVyX2luZm8gKmxkaW5mbyA9ICYo aHRhYi0+bGRpbmZvKTsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBiZmQgKmlucHV0X2Jm ZDsKKyAgICAgIGJvb2wgc3R1Yl9jaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgIGZvciAoaW5wdXRf YmZkID0gaW5mby0+aW5wdXRfYmZkczsKKwkgICBpbnB1dF9iZmQgIT0gTlVMTDsKKwkgICBpbnB1 dF9iZmQgPSBpbnB1dF9iZmQtPmxpbmsubmV4dCkKKwl7CisJICBhc2VjdGlvbiAqc2VjdGlvbjsK KwkgIGJmZF9zaXplX3R5cGUgc3ltY291bnQ7CisJICBiZmRfc2l6ZV90eXBlIHN5bWVzejsKKwkg IGJmZF9ieXRlICplc3ltczsKKworCSAgaWYgKGJmZF9nZXRfZmxhdm91ciAoaW5wdXRfYmZkKSAh PSBiZmRfdGFyZ2V0X3hjb2ZmX2ZsYXZvdXIpCisJICAgIGNvbnRpbnVlOworCisJICBzeW1jb3Vu dCA9IG9ial9yYXdfc3ltZW50X2NvdW50IChpbnB1dF9iZmQpOworCSAgaWYgKCFzeW1jb3VudCkK KwkgICAgY29udGludWU7CisJICBzeW1lc3ogPSBiZmRfY29mZl9zeW1lc3ogKGlucHV0X2JmZCk7 CisJICBlc3ltcyA9IChiZmRfYnl0ZSAqKSBvYmpfY29mZl9leHRlcm5hbF9zeW1zIChpbnB1dF9i ZmQpOworCisJICAvKiBXYWxrIG92ZXIgZWFjaCBzZWN0aW9uIGF0dGFjaGVkIHRvIHRoZSBpbnB1 dCBiZmQuICAqLworCSAgZm9yIChzZWN0aW9uID0gaW5wdXRfYmZkLT5zZWN0aW9uczsKKwkgICAg ICAgc2VjdGlvbiAhPSBOVUxMOworCSAgICAgICBzZWN0aW9uID0gc2VjdGlvbi0+bmV4dCkKKwkg ICAgeworCSAgICAgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqaW50ZXJuYWxfcmVsb2NzOworCSAg ICAgIHN0cnVjdCBpbnRlcm5hbF9yZWxvYyAqaXJlbCwgKmlyZWxlbmQ7CisKKwkgICAgICAvKiBJ ZiB0aGVyZSBhcmVuJ3QgYW55IHJlbG9jcywgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbW9yZQorCQkg dG8gZG8uICAqLworCSAgICAgIGlmICgoc2VjdGlvbi0+ZmxhZ3MgJiBTRUNfUkVMT0MpID09IDAK KwkJICB8fCBzZWN0aW9uLT5yZWxvY19jb3VudCA9PSAwKQorCQljb250aW51ZTsKKworCSAgICAg IC8qIElmIHRoaXMgc2VjdGlvbiBpcyBhIGxpbmstb25jZSBzZWN0aW9uIHRoYXQgd2lsbCBiZQor CQkgZGlzY2FyZGVkLCB0aGVuIGRvbid0IGNyZWF0ZSBhbnkgc3R1YnMuICAqLworCSAgICAgIGlm IChzZWN0aW9uLT5vdXRwdXRfc2VjdGlvbiA9PSBOVUxMCisJCSAgfHwgc2VjdGlvbi0+b3V0cHV0 X3NlY3Rpb24tPm93bmVyICE9IGluZm8tPm91dHB1dF9iZmQpCisJCWNvbnRpbnVlOworCisJICAg ICAgLyogVGhpcyBzZWN0aW9uIGhhdmUgYmVlbiBnYXJiYWdlLWNvbGxlY3RlZC4gICovCisJICAg ICAgaWYgKHNlY3Rpb24tPmdjX21hcmsgPT0gMCkKKwkJY29udGludWU7CisKKwkgICAgICAvKiBS ZWFkIGluIHRoZSByZWxvY3MuICAqLworCSAgICAgIGludGVybmFsX3JlbG9jcyA9ICh4Y29mZl9y ZWFkX2ludGVybmFsX3JlbG9jcworCQkJCSAoaW5wdXRfYmZkLCBzZWN0aW9uLCB0cnVlLCBOVUxM LAorCQkJCSAgZmFsc2UsIE5VTEwpKTsKKwkgICAgICBpZiAoaW50ZXJuYWxfcmVsb2NzID09IE5V TEwpCisJCWdvdG8gZXJyb3JfcmV0OworCisJICAgICAgaXJlbCA9IGludGVybmFsX3JlbG9jczsK KwkgICAgICBpcmVsZW5kID0gaXJlbCArIHNlY3Rpb24tPnJlbG9jX2NvdW50OworCSAgICAgIGZv ciAoOyBpcmVsIDwgaXJlbGVuZDsgaXJlbCsrKQorCQl7CisJCSAgZW51bSB4Y29mZl9zdHViX3R5 cGUgc3R1Yl90eXBlOworCQkgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmhzeW0gPSBO VUxMOworCQkgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmhzdHViX2NzZWN0ID0gTlVM TDsKKwkJICBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpoc3R1YiA9IE5VTEw7CisJCSAg YXNlY3Rpb24gKnN5bV9zZWM7CisJCSAgYmZkX3ZtYSBzeW1fdmFsdWU7CisJCSAgYmZkX3ZtYSBk ZXN0aW5hdGlvbjsKKwkJICBjaGFyICpzdHViX25hbWU7CisKKwkJICBpZiAoaXJlbC0+cl9zeW1u ZHggPT0gLTEpCisJCSAgICBjb250aW51ZTsKKworCQkgIHN3aXRjaCAoaXJlbC0+cl90eXBlKQor CQkgICAgeworCQkgICAgZGVmYXVsdDoKKwkJICAgICAgY29udGludWU7CisKKwkJICAgIGNhc2Ug Ul9CUjoKKwkJICAgIGNhc2UgUl9SQlI6CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCisJCSAg LyogUmV0cmlldmUgdGFyZ2V0ZWQgc3ltYm9sIGFkZHJlc3MgKi8KKwkJICBoc3ltID0gb2JqX3hj b2ZmX3N5bV9oYXNoZXMgKGlucHV0X2JmZClbaXJlbC0+cl9zeW1uZHhdOworCQkgIGlmIChoc3lt ID09IE5VTEwpCisJCSAgICB7CisJCSAgICAgIHN0cnVjdCBpbnRlcm5hbF9zeW1lbnQgc3ltOwor CQkgICAgICBpZiAoKGxvbmcgdW5zaWduZWQgaW50KWlyZWwtPnJfc3ltbmR4ID4gc3ltY291bnQp CisJCQl7CisJCQkgIEJGRF9GQUlMKCk7CisJCQkgIGdvdG8gZXJyb3JfcmV0OworCQkJfQorCisJ CSAgICAgIGJmZF9jb2ZmX3N3YXBfc3ltX2luIChpbnB1dF9iZmQsCisJCQkJCSAgICAodm9pZCAq KSBlc3ltcyArIGlyZWwtPnJfc3ltbmR4ICogc3ltZXN6LAorCQkJCQkgICAgKHZvaWQgKikgJnN5 bSk7CisKKwkJICAgICAgc3ltX3NlYyA9IHhjb2ZmX2RhdGEgKGlucHV0X2JmZCktPmNzZWN0c1tp cmVsLT5yX3N5bW5keF07CisJCSAgICAgIHN5bV92YWx1ZSA9IHN5bS5uX3ZhbHVlIC0gc3ltX3Nl Yy0+dm1hOworCisJCSAgICAgIGRlc3RpbmF0aW9uID0gKHN5bV92YWx1ZQorCQkJCSAgICAgKyBz eW1fc2VjLT5vdXRwdXRfc2VjdGlvbi0+dm1hCisJCQkJICAgICArIHN5bV9zZWMtPm91dHB1dF9v ZmZzZXQpOworCQkgICAgfQorCQkgIGVsc2UgaWYgKGhzeW0tPnJvb3QudHlwZSA9PSBiZmRfbGlu a19oYXNoX2RlZmluZWQKKwkJCSAgIHx8IGhzeW0tPnJvb3QudHlwZSA9PSBiZmRfbGlua19oYXNo X2RlZndlYWspCisJCSAgICB7CisJCSAgICAgIHN5bV9zZWMgPSBoc3ltLT5yb290LnUuZGVmLnNl Y3Rpb247CisJCSAgICAgIHN5bV92YWx1ZSA9IGhzeW0tPnJvb3QudS5kZWYudmFsdWU7CisJCSAg ICAgIGRlc3RpbmF0aW9uID0gKHN5bV92YWx1ZQorCQkJCSAgICAgKyBzeW1fc2VjLT5vdXRwdXRf c2VjdGlvbi0+dm1hCisJCQkJICAgICArIHN5bV9zZWMtPm91dHB1dF9vZmZzZXQpOworCQkgICAg fQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX2Jh ZF92YWx1ZSk7CisJCSAgICAgIGdvdG8gZXJyb3JfcmV0OworCQkgICAgfQorCisJCSAgLyogSSdt IG5vdCBzdXJlIGhvdyB0byBoYW5kbGUgdGhpcyBjYXNlLiBTa2lwIGl0IGZvciBub3cuICAqLwor CQkgIGlmIChiZmRfaXNfYWJzX3NlY3Rpb24gKHN5bV9zZWMpKQorCQkgICAgY29udGludWU7CisK KwkJICBzdHViX3R5cGUgPSBiZmRfeGNvZmZfdHlwZV9vZl9zdHViIChzZWN0aW9uLCBpcmVsLCBk ZXN0aW5hdGlvbiwgaHN5bSk7CisKKwkJICBpZiAoc3R1Yl90eXBlID09IHhjb2ZmX3N0dWJfbm9u ZSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgLyogR2V0IGEgc3R1YiBjc2VjdCBpbiByYW5jaC4g ICovCisJCSAgaHN0dWJfY3NlY3QgPSB4Y29mZl9zdHViX2dldF9jc2VjdF9pbl9yYW5nZSAoc2Vj dGlvbiwgaW5mbywgdHJ1ZSk7CisJCSAgaWYgKCFoc3R1Yl9jc2VjdCkKKwkJICAgIHsKKwkJICAg ICAgLyogeGdldHRleHQ6Yy1mb3JtYXQgKi8KKwkJICAgICAgX2JmZF9lcnJvcl9oYW5kbGVyIChf KCIlcEI6IFVuYWJsZSB0byBmaW5kIGEgc3R1YiBjc2VjdCBpbiByYW5nZSIKKwkJCQkJICAgICJv ZiByZWxvY2F0aW9uIGF0ICUjIiBQUkl4NjQgIiB0YXJnZXRpbmciCisJCQkJCSAgICAiJyVzJyIp LAorCQkJCQkgIHNlY3Rpb24tPm93bmVyLCBpcmVsLT5yX3ZhZGRyLAorCQkJCQkgIGhzeW0tPnJv b3Qucm9vdC5zdHJpbmcpOworCQkgICAgICBnb3RvIGVycm9yX3JldDsKKwkJICAgIH0KKworCQkg IC8qIEdldCB0aGUgbmFtZSBvZiB0aGlzIHN0dWIuICAqLworCQkgIHN0dWJfbmFtZSA9IHhjb2Zm X3N0dWJfbmFtZSAoaHN5bSwgaHN0dWJfY3NlY3QpOworCQkgIGlmICghc3R1Yl9uYW1lKQorCQkg ICAgZ290byBlcnJvcl9yZXQ7CisKKwkJICBoc3R1YiA9IHhjb2ZmX3N0dWJfaGFzaF9sb29rdXAg KCYoeGNvZmZfaGFzaF90YWJsZSAoaW5mbyktPnN0dWJfaGFzaF90YWJsZSksCisJCQkJCQkgICAg ICAgc3R1Yl9uYW1lLCBmYWxzZSwgZmFsc2UpOworCisJCSAgLyogQSBzdHViIGVudHJ5IGluc2lk ZSB0aGUgaW4gcmFuZ2UgY3NlY3QgYWxyZWFkeSBleGlzdHMuICAqLworCQkgIGlmIChoc3R1YiAh PSBOVUxMKQorCQkgICAgeworCQkgICAgICBmcmVlIChzdHViX25hbWUpOworCQkgICAgICBjb250 aW51ZTsKKwkJICAgIH0KKworCQkgIHN0dWJfY2hhbmdlZCA9IHRydWU7CisKKwkJICBoc3R1YiA9 IHhjb2ZmX2FkZF9zdHViIChzdHViX25hbWUsIGhzdHViX2NzZWN0LCBoc3ltLCBpbmZvLCBzdHVi X3R5cGUpOworCQkgIGlmIChoc3R1YiA9PSBOVUxMKQorCQkgICAgeworCQkgICAgICBmcmVlIChz dHViX25hbWUpOworCQkgICAgICAvKiB4Z2V0dGV4dDpjLWZvcm1hdCAqLworCQkgICAgICBfYmZk X2Vycm9yX2hhbmRsZXIgKF8oIiVwQjogQ2Fubm90IGNyZWF0ZSBzdHViIGVudHJ5ICclcyciKSwK KwkJCQkJICBzZWN0aW9uLT5vd25lciwgc3R1Yl9uYW1lKTsKKwkJICAgICAgZ290byBlcnJvcl9y ZXQ7CisJCSAgICB9CisKKwkJICBoc3R1Yi0+c3R1Yl90eXBlID0gc3R1Yl90eXBlOworCQkgIGhz dHViLT5oY3NlY3QgPSBoc3R1Yl9jc2VjdDsKKwkJICBoc3R1Yi0+dGFyZ2V0X3NlY3Rpb24gPSBz eW1fc2VjOworCQkgIGZyZWUgKHN0dWJfbmFtZSk7CisJCX0KKwkgICAgfQorCX0KKworICAgICAg aWYgKCFzdHViX2NoYW5nZWQpCisJYnJlYWs7CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgc2l6ZSBv ZiB0aGUgbG9hZGVyLiAgKi8KKyAgICAgIGlmICh4Y29mZl9oYXNoX3RhYmxlIChpbmZvKS0+bG9h ZGVyX3NlY3Rpb24KKwkgICYmICF4Y29mZl9zaXplX2xvYWRlcl9zZWN0aW9uIChsZGluZm8pKQor CWdvdG8gZXJyb3JfcmV0OworCisgICAgICAvKiBBc2sgdGhlIGxpbmtlciB0byBkbyBpdHMgc3R1 ZmYuICAqLworICAgICAgKCpodGFiLT5wYXJhbXMtPmxheW91dF9zZWN0aW9uc19hZ2FpbikgKCk7 CisKKyAgICB9CisgIHJldHVybiB0cnVlOworCisgZXJyb3JfcmV0OgorICBiZmRfc2V0X2Vycm9y IChiZmRfZXJyb3JfYmFkX3ZhbHVlKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sCitiZmRf eGNvZmZfYnVpbGRfc3R1YnMgKHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQoreworICBzdHJ1 Y3QgeGNvZmZfbGlua19oYXNoX3RhYmxlICpodGFiID0geGNvZmZfaGFzaF90YWJsZSAoaW5mbyk7 CisgIGFzZWN0aW9uICpzdHViX3NlYzsKKworICBmb3IgKHN0dWJfc2VjID0gaHRhYi0+cGFyYW1z LT5zdHViX2JmZC0+c2VjdGlvbnM7CisgICAgICAgc3R1Yl9zZWMgIT0gTlVMTDsKKyAgICAgICBz dHViX3NlYyA9IHN0dWJfc2VjLT5uZXh0KQorICAgIHsKKyAgICAgIGJmZF9zaXplX3R5cGUgc2l6 ZTsKKworICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIGxpbmtlciBzdHVicy4g ICovCisgICAgICBzaXplID0gc3R1Yl9zZWMtPnNpemU7CisgICAgICBzdHViX3NlYy0+Y29udGVu dHMgPSBiZmRfemFsbG9jIChodGFiLT5wYXJhbXMtPnN0dWJfYmZkLCBzaXplKTsKKyAgICAgIGlm IChzdHViX3NlYy0+Y29udGVudHMgPT0gTlVMTCAmJiBzaXplICE9IDApCisJcmV0dXJuIGZhbHNl OworCisgICAgfQorCisgIC8qIEJ1aWxkIHRoZSBzdHVicyBhcyBkaXJlY3RlZCBieSB0aGUgc3R1 YiBoYXNoIHRhYmxlLiAgKi8KKyAgYmZkX2hhc2hfdHJhdmVyc2UgKCZodGFiLT5zdHViX2hhc2hf dGFibGUsIHhjb2ZmX2J1aWxkX29uZV9zdHViLCBpbmZvKTsKKyAgcmV0dXJuIHRydWU7Cit9CisK Ky8qIENyZWF0ZSBhbmQgYXBwbHkgcmVsb2NhdGlvbnMgbWFkZSBieSBhIHN0dWIgZW50cnkuICAq Lworc3RhdGljIGJvb2wKK3hjb2ZmX3N0dWJfY3JlYXRlX3JlbG9jYXRpb25zIChzdHJ1Y3QgYmZk X2hhc2hfZW50cnkgKmJoLCB2b2lkICogaW5mKQoreworICBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNo X2VudHJ5ICpoc3R1YgorICAgID0gKHN0cnVjdCB4Y29mZl9zdHViX2hhc2hfZW50cnkgKikgYmg7 CisgIHN0cnVjdCB4Y29mZl9maW5hbF9saW5rX2luZm8gKmZsaW5mbworICAgID0gKHN0cnVjdCB4 Y29mZl9maW5hbF9saW5rX2luZm8gKikgaW5mOworCisgIGJmZCAqb3V0cHV0X2JmZDsKKyAgc3Ry dWN0IGludGVybmFsX3JlbG9jICppcmVsOworICBzdHJ1Y3QgeGNvZmZfbGlua19oYXNoX2VudHJ5 ICoqcmVsX2hhc2g7CisgIHN0cnVjdCB4Y29mZl9saW5rX2hhc2hfZW50cnkgKmh0YXJnZXQ7Cisg IGFzZWN0aW9uICpzZWMsICpvc2VjOworICBiZmRfdm1hIG9mZjsKKyAgYmZkX2J5dGUgKnA7CisK KyAgaHRhcmdldCA9IGhzdHViLT5odGFyZ2V0OworICBzZWMgPSBoc3R1Yi0+aGNzZWN0LT5yb290 LnUuZGVmLnNlY3Rpb247CisgIG9zZWMgPSBzZWMtPm91dHB1dF9zZWN0aW9uOworCisgIGlyZWwg PSAoZmxpbmZvLT5zZWN0aW9uX2luZm9bb3NlYy0+dGFyZ2V0X2luZGV4XS5yZWxvY3MKKwkgICsg b3NlYy0+cmVsb2NfY291bnQpOworICByZWxfaGFzaCA9IChmbGluZm8tPnNlY3Rpb25faW5mb1tv c2VjLT50YXJnZXRfaW5kZXhdLnJlbF9oYXNoZXMKKwkgICAgICArIG9zZWMtPm91dHB1dF9zZWN0 aW9uLT5yZWxvY19jb3VudCk7CisgICpyZWxfaGFzaCA9IE5VTEw7CisgIG91dHB1dF9iZmQgPSBm bGluZm8tPm91dHB1dF9iZmQ7CisKKyAgaXJlbC0+cl9zeW1uZHggPSBodGFyZ2V0LT5pbmR4Owor ICBpcmVsLT5yX3ZhZGRyID0gKG9zZWMtPnZtYQorCQkgICArIHNlYy0+b3V0cHV0X29mZnNldAor CQkgICArIGhzdHViLT5oY3NlY3QtPnJvb3QudS5kZWYudmFsdWUKKwkJICAgKyBoc3R1Yi0+c3R1 Yl9vZmZzZXQpOworCisgIHAgPSAoc2VjLT5jb250ZW50cworICAgICAgICsgaHN0dWItPnN0dWJf b2Zmc2V0KTsKKworICBzd2l0Y2ggKGhzdHViLT5zdHViX3R5cGUpCisgICAgeworICAgIGRlZmF1 bHQ6CisgICAgICBCRkRfRkFJTCAoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgLyog VGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIHRoaXMgc3R1YiBjb2RlIG5lZWQKKyAgICAgICAgIGEg Ul9UT0MgcmVsb2NhdGlvbi4gICovCisgICAgY2FzZSB4Y29mZl9zdHViX2luZGlyZWN0X2NhbGw6 CisgICAgY2FzZSB4Y29mZl9zdHViX3NoYXJlZF9jYWxsOgorICAgICAgaXJlbC0+cl9zaXplID0g MHhmOworICAgICAgaXJlbC0+cl90eXBlID0gUl9UT0M7CisKKyAgICAgIC8qIFJldHJpZXZlIHRo ZSB0b2Mgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgd2hpY2ggaXMKKwkgYSBmdW5jdGlvbiBkZXNjcmlw dG9yLiAgKi8KKyAgICAgIEJGRF9BU1NFUlQgKGh0YXJnZXQtPnRvY19zZWN0aW9uICE9IE5VTEwp OworICAgICAgaWYgKChodGFyZ2V0LT5mbGFncyAmIFhDT0ZGX1NFVF9UT0MpICE9IDApCisJb2Zm ID0gaHN0dWItPmh0YXJnZXQtPnUudG9jX29mZnNldDsKKyAgICAgIGVsc2UKKwlvZmYgPSAoaHRh cmdldC0+dG9jX3NlY3Rpb24tPm91dHB1dF9zZWN0aW9uLT52bWEKKwkgICAgICAgKyBodGFyZ2V0 LT50b2Nfc2VjdGlvbi0+b3V0cHV0X29mZnNldAorCSAgICAgICAtIHhjb2ZmX2RhdGEgKGZsaW5m by0+b3V0cHV0X2JmZCktPnRvYyk7CisgICAgICBpZiAoKG9mZiAmIDB4ZmZmZikgIT0gb2ZmKQor CXsKKwkgIF9iZmRfZXJyb3JfaGFuZGxlcgorCSAgICAoXygiVE9DIG92ZXJmbG93IGR1cmluZyBz dHViIGdlbmVyYXRpb247IHRyeSAtbW1pbmltYWwtdG9jICIKKwkgICAgICAgIndoZW4gY29tcGls aW5nIikpOworCSAgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX2ZpbGVfdG9vX2JpZyk7CisJICBy ZXR1cm4gZmFsc2U7CisJfQorCisgICAgICBiZmRfcHV0XzE2IChvdXRwdXRfYmZkLCBvZmYgJiAw eGZmZmYsIHArMik7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgKytvc2VjLT5yZWxvY19jb3Vu dDsKKyAgcmV0dXJuIHRydWU7Cit9CisKKwogLyogUmV0dXJuIHRoZSBzZWN0aW9uIHRoYXQgZGVm aW5lcyBILiAgUmV0dXJuIG51bGwgaWYgbm8gc2VjdGlvbiBkb2VzLiAgKi8KIAogc3RhdGljIGFz ZWN0aW9uICoKQEAgLTUwNDksOCArNTg2Myw2IEBAIHhjb2ZmX2xpbmtfaW5wdXRfYmZkIChzdHJ1 Y3QgeGNvZmZfZmluYWxfbGlua19pbmZvICpmbGluZm8sCiAKIAkgICAgICAvKiBBZGp1c3QgdGhl IHJlbG9jIGFkZHJlc3MgYW5kIHN5bWJvbCBpbmRleC4gICovCiAKLQkgICAgICBpcmVsLT5yX3Zh ZGRyICs9IG9mZnNldDsKLQogCSAgICAgIHJfc3ltbmR4ID0gaXJlbC0+cl9zeW1uZHg7CiAKIAkg ICAgICBpZiAocl9zeW1uZHggPT0gLTEpCkBAIC01MDU4LDggKzU4NzAsNDggQEAgeGNvZmZfbGlu a19pbnB1dF9iZmQgKHN0cnVjdCB4Y29mZl9maW5hbF9saW5rX2luZm8gKmZsaW5mbywKIAkgICAg ICBlbHNlCiAJCWggPSBvYmpfeGNvZmZfc3ltX2hhc2hlcyAoaW5wdXRfYmZkKVtyX3N5bW5keF07 CiAKKwkgICAgICAvKiBJbiBjYXNlIG9mIGEgUl9CUiBvciBSX1JCUiwgY2hhbmdlIHRoZSB0YXJn ZXQgaWYKKwkJIGEgc3R1YiBpcyBiZWluZyBjYWxsZWQuICAqLworCSAgICAgIGlmIChoICE9IE5V TEwKKwkJICAmJiAoaXJlbC0+cl90eXBlID09IFJfQlIKKwkJICAgICAgfHwgaXJlbC0+cl90eXBl ID09IFJfUkJSKSkKKwkJeworCQkgIGFzZWN0aW9uICpzeW1fc2VjOworCQkgIGJmZF92bWEgZGVz dDsKKwkJICBzdHJ1Y3QgeGNvZmZfc3R1Yl9oYXNoX2VudHJ5ICpoc3R1YiA9IE5VTEw7CisJCSAg ZW51bSB4Y29mZl9zdHViX3R5cGUgc3R1Yl90eXBlOworCisJCSAgaWYgKGgtPnJvb3QudHlwZSA9 PSBiZmRfbGlua19oYXNoX2RlZmluZWQKKwkJICAgICAgfHwgaC0+cm9vdC50eXBlID09IGJmZF9s aW5rX2hhc2hfZGVmd2VhaykKKwkJICAgIHsKKwkJICAgICAgc3ltX3NlYyA9IGgtPnJvb3QudS5k ZWYuc2VjdGlvbjsKKwkJICAgICAgZGVzdCA9IChoLT5yb290LnUuZGVmLnZhbHVlCisJCQkgICAg ICArIHN5bV9zZWMtPm91dHB1dF9zZWN0aW9uLT52bWEKKwkJCSAgICAgICsgc3ltX3NlYy0+b3V0 cHV0X29mZnNldCk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBCRkRfRkFJ TCAoKTsKKwkJICAgICAgZ290byBlcnJfb3V0OworCQkgICAgfQorCisJCSAgc3R1Yl90eXBlID0g YmZkX3hjb2ZmX3R5cGVfb2Zfc3R1YiAobywgaXJlbCwgZGVzdCwgaCk7CisJCSAgaWYgKHN0dWJf dHlwZSAhPSB4Y29mZl9zdHViX25vbmUpCisJCSAgICB7CisJCSAgICAgIGhzdHViID0gYmZkX3hj b2ZmX2dldF9zdHViX2VudHJ5IChvLCBoLCBmbGluZm8tPmluZm8pOworCQkgICAgICBpZiAoaHN0 dWIgPT0gTlVMTCkKKwkJCWdvdG8gZXJyX291dDsKKworCQkgICAgICBoID0gaHN0dWItPmhjc2Vj dDsKKwkJICAgIH0KKworCQl9CisKKwkgICAgICBpcmVsLT5yX3ZhZGRyICs9IG9mZnNldDsKKwog CSAgICAgIGlmIChyX3N5bW5keCAhPSAtMSAmJiBmbGluZm8tPmluZm8tPnN0cmlwICE9IHN0cmlw X2FsbCkKIAkJeworCiAJCSAgaWYgKGggIT0gTlVMTAogCQkgICAgICAmJiBoLT5zbWNsYXMgIT0g WE1DX1RECiAJCSAgICAgICYmIChpcmVsLT5yX3R5cGUgPT0gUl9UT0MKQEAgLTU1NzQsOCArNjQy Niw2IEBAIHhjb2ZmX3dyaXRlX2dsb2JhbF9zeW1ib2wgKHN0cnVjdCBiZmRfaGFzaF9lbnRyeSAq YmgsIHZvaWQgKiBpbmYpCiAJICBpcmVsLT5yX3N5bW5keCA9IG9ial9yYXdfc3ltZW50X2NvdW50 IChvdXRwdXRfYmZkKTsKIAl9CiAKLSAgICAgIEJGRF9BU1NFUlQgKGgtPmxkaW5keCA+PSAwKTsK LQogICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgYXV4IHVuaW9uIGhlcmUgaW5zdGVhZCBvZiBjbG9z ZXIgdG8gd2hlbiBpdCBpcwogCSB3cml0dGVuIG91dCBiZWxvdyBiZWNhdXNlIHRoZSBsZW5ndGgg b2YgdGhlIGNzZWN0IGRlcGVuZHMgb24KIAkgd2hldGhlciB0aGUgb3V0cHV0IGlzIDMyIG9yIDY0 IGJpdC4gICovCkBAIC01NjA3LDkgKzY0NTcsNDMgQEAgeGNvZmZfd3JpdGVfZ2xvYmFsX3N5bWJv bCAoc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpiaCwgdm9pZCAqIGluZikKICAgICAgIGZsaW5mby0+ c2VjdGlvbl9pbmZvW29pbmR4XS5yZWxfaGFzaGVzW29zZWMtPnJlbG9jX2NvdW50XSA9IE5VTEw7 CiAgICAgICArK29zZWMtPnJlbG9jX2NvdW50OwogCi0gICAgICBpZiAoIXhjb2ZmX2NyZWF0ZV9s ZHJlbCAob3V0cHV0X2JmZCwgZmxpbmZvLCBvc2VjLAotCQkJICAgICAgIG91dHB1dF9iZmQsIGly ZWwsIE5VTEwsIGgpKQotCXJldHVybiBmYWxzZTsKKyAgICAgIC8qIFRoZXJlIGFyZSB0d28ga2lu ZCBvZiBsaW5rZXItY3JlYXRlZCBUT0MgZW50cnkuCisJIFRoZSBvbmVzIGltcG9ydGluZyB0aGVp ciBzeW1ib2xzIGZyb20gb3V0c2lkZSwgbWFkZSBmb3IgdGhlCisJIGdsb2JhbCBsaW5rYWdlLiAg VGhlc2Ugc3ltYm9scyBoYXZlIFhDT0ZGX0xEUkVMIHNldCBhbmQgb25seQorCSByZXF1aXJlcyBh IGxvYWRlciByZWxvY2F0aW9uIG9uIHRoZWlyIGltcG9ydGVkIHN5bWJvbC4KKwkgT24gdGhlIG90 aGVyIGhhbmQsIHN5bWJvbHMgd2l0aG91dCBYQ09GRl9MRFJFTCBhcmUgVE9DIGVudHJpZXMKKwkg b2YgaW50ZXJuYWwgc3ltYm9scyAobGlrZSBmdW5jdGlvbiBkZXNjcmlwdG9ycyBtYWRlIGZvciBz dHVicykuCisJIFRoZXNlIHN5bWJvbHMgbmVlZHMgYSBsb2FkZXIgcmVsb2NhdGlvbiBvdmVyIC5k YXRhIGFuZCB0aGlzCisJIHJlbG9jYXRpb24gbXVzdCBiZSBhcHBsaWVkLiAgKi8KKworICAgICAg aWYgKChoLT5mbGFncyAmIFhDT0ZGX0xEUkVMKSAhPSAwCisJICAmJiBoLT5sZGluZHggPj0gMCkK Kwl7CisJICBpZiAoIXhjb2ZmX2NyZWF0ZV9sZHJlbCAob3V0cHV0X2JmZCwgZmxpbmZvLCBvc2Vj LAorCQkJCSAgIG91dHB1dF9iZmQsIGlyZWwsIE5VTEwsIGgpKQorCSAgICByZXR1cm4gZmFsc2U7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGJmZF9ieXRlICpwOworCSAgYmZkX3ZtYSB2YWw7CisK KwkgIHAgPSB0b2NzZWMtPmNvbnRlbnRzICsgaC0+dS50b2Nfb2Zmc2V0OworCSAgdmFsID0gKGgt PnJvb3QudS5kZWYudmFsdWUKKwkJICsgaC0+cm9vdC51LmRlZi5zZWN0aW9uLT5vdXRwdXRfc2Vj dGlvbi0+dm1hCisJCSArIGgtPnJvb3QudS5kZWYuc2VjdGlvbi0+b3V0cHV0X29mZnNldCk7CisK KwkgIGlmIChiZmRfeGNvZmZfaXNfeGNvZmY2NCAob3V0cHV0X2JmZCkpCisJICAgIGJmZF9wdXRf NjQgKG91dHB1dF9iZmQsIHZhbCwgcCk7CisJICBlbHNlIGlmIChiZmRfeGNvZmZfaXNfeGNvZmYz MiAob3V0cHV0X2JmZCkpCisJICAgIGJmZF9wdXRfMzIgKG91dHB1dF9iZmQsIHZhbCwgcCk7CisJ ICBlbHNlCisJICAgIHJldHVybiBmYWxzZTsKKworCSAgaWYgKCF4Y29mZl9jcmVhdGVfbGRyZWwg KG91dHB1dF9iZmQsIGZsaW5mbywgb3NlYywKKwkJCQkgICBvdXRwdXRfYmZkLCBpcmVsLCBoLT5y b290LnUuZGVmLnNlY3Rpb24sIGgpKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQogCiAgICAgICAv KiBXZSBuZWVkIHRvIGVtaXQgYSBzeW1ib2wgdG8gZGVmaW5lIGEgY3NlY3Qgd2hpY2ggaG9sZHMK IAkgdGhlIHJlbG9jLiAgKi8KQEAgLTU4MzYsNyArNjcyMCwxMiBAQCB4Y29mZl93cml0ZV9nbG9i YWxfc3ltYm9sIChzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmJoLCB2b2lkICogaW5mKQogICAgICAg aXN5bS5uX3NjbGFzcyA9IENfSElERVhUOwogICAgICAgYXV4LnhfY3NlY3QueF9zbXR5cCA9IFhU WV9TRDsKIAotICAgICAgaWYgKChoLT5mbGFncyAmIFhDT0ZGX0hBU19TSVpFKSAhPSAwKQorICAg ICAgLyogRm9yIHN0dWIgc3ltYm9scywgdGhlIHNlY3Rpb24gYWxyZWFkeSBoYXMgaXRzIGNvcnJl Y3Qgc2l6ZS4gICovCisgICAgICBpZiAoaC0+cm9vdC51LmRlZi5zZWN0aW9uLT5vd25lciA9PSB4 Y29mZl9oYXNoX3RhYmxlIChmbGluZm8tPmluZm8pLT5wYXJhbXMtPnN0dWJfYmZkKQorCXsKKwkg IGF1eC54X2NzZWN0Lnhfc2NubGVuLmwgPSBoLT5yb290LnUuZGVmLnNlY3Rpb24tPnNpemU7CisJ fQorICAgICAgZWxzZSBpZiAoKGgtPmZsYWdzICYgWENPRkZfSEFTX1NJWkUpICE9IDApCiAJewog CSAgZm9yIChsID0geGNvZmZfaGFzaF90YWJsZSAoZmxpbmZvLT5pbmZvKS0+c2l6ZV9saXN0Owog CSAgICAgICBsICE9IE5VTEw7CkBAIC02NDAzLDggKzcyOTIsMjAgQEAgX2JmZF94Y29mZl9iZmRf ZmluYWxfbGluayAoYmZkICphYmZkLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbykKIAkgICAg ICBzdWIgPSBwLT51LmluZGlyZWN0LnNlY3Rpb24tPm93bmVyOwogCSAgICAgIGlmICghIHN1Yi0+ b3V0cHV0X2hhc19iZWd1bikKIAkJewotCQkgIGlmICghIHhjb2ZmX2xpbmtfaW5wdXRfYmZkICgm ZmxpbmZvLCBzdWIpKQotCQkgICAgZ290byBlcnJvcl9yZXR1cm47CisJCSAgaWYgKHN1YiA9PSB4 Y29mZl9oYXNoX3RhYmxlIChpbmZvKS0+cGFyYW1zLT5zdHViX2JmZCkKKwkJICAgIHsKKwkJICAg ICAgY29udGludWU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoISB4 Y29mZl9saW5rX2lucHV0X2JmZCAoJmZsaW5mbywgc3ViKSkKKwkJCXsKKwkJCSAgX2JmZF9lcnJv cl9oYW5kbGVyCisJCQkgICAgKF8oIlVuYWJsZSB0byBsaW5rIGlucHV0IGZpbGU6ICVzIiksIHN1 Yi0+ZmlsZW5hbWUpOworCQkJICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3Jfc29ycnkpOworCQkJ ICBnb3RvIGVycm9yX3JldHVybjsKKwkJCX0KKwkJICAgIH0KIAkJICBzdWItPm91dHB1dF9oYXNf YmVndW4gPSB0cnVlOwogCQl9CiAJICAgIH0KQEAgLTY0NTEsNiArNzM1MiwxMiBAQCBfYmZkX3hj b2ZmX2JmZF9maW5hbF9saW5rIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZv KQogICAgICBpbnB1dCBmaWxlcy4gICovCiAgIGJmZF9oYXNoX3RyYXZlcnNlICgmaW5mby0+aGFz aC0+dGFibGUsIHhjb2ZmX3dyaXRlX2dsb2JhbF9zeW1ib2wsICZmbGluZm8pOwogCisgIC8qIFdy aXRlIG91dCB0aGUgcmVsb2NhdGlvbnMgY3JlYXRlZCBieSBzdHViIGVudHJpZXMuIFRoZSBzeW1i b2xzCisgICAgIHdpbGwgaGF2ZSBiZWVuIGFscmVhZHkgd3JpdHRlbiBieSB4Y29mZl93cml0ZV9n bG9iYWxfc3ltYm9sLiAgKi8KKyAgYmZkX2hhc2hfdHJhdmVyc2UgKCZ4Y29mZl9oYXNoX3RhYmxl KGluZm8pLT5zdHViX2hhc2hfdGFibGUsCisJCSAgICAgeGNvZmZfc3R1Yl9jcmVhdGVfcmVsb2Nh dGlvbnMsCisJCSAgICAgJmZsaW5mbyk7CisKICAgZnJlZSAoZmxpbmZvLm91dHN5bXMpOwogICBm bGluZm8ub3V0c3ltcyA9IE5VTEw7CiAKQEAgLTY1NTEsNiArNzQ1OCwxOSBAQCBfYmZkX3hjb2Zm X2JmZF9maW5hbF9saW5rIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKQog ICAgICAgZmxpbmZvLnNlY3Rpb25faW5mbyA9IE5VTEw7CiAgICAgfQogCisgIC8qIFdyaXRlIG91 dCB0aGUgc3R1YiBzZWN0aW9ucy4gICovCisgIGZvciAobyA9IHhjb2ZmX2hhc2hfdGFibGUgKGlu Zm8pLT5wYXJhbXMtPnN0dWJfYmZkLT5zZWN0aW9uczsKKyAgICAgICBvICE9IE5VTEw7IG8gPSBv LT5uZXh0KQorICAgIHsKKyAgICAgIGlmICgoby0+ZmxhZ3MgJiBTRUNfSEFTX0NPTlRFTlRTKSA9 PSAwCisJICB8fCBvLT5zaXplID09IDApCisJY29udGludWU7CisKKyAgICAgIGlmICghYmZkX3Nl dF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBvLT5vdXRwdXRfc2VjdGlvbiwgby0+Y29udGVudHMs CisJCQkJICAgICAoZmlsZV9wdHIpIG8tPm91dHB1dF9vZmZzZXQsIG8tPnNpemUpKQorCWdvdG8g ZXJyb3JfcmV0dXJuOworICAgIH0KKwogICAvKiBXcml0ZSBvdXQgdGhlIGxvYWRlciBzZWN0aW9u IGNvbnRlbnRzLiAgKi8KICAgbyA9IHhjb2ZmX2hhc2hfdGFibGUgKGluZm8pLT5sb2FkZXJfc2Vj dGlvbjsKICAgaWYgKG8gIT0gTlVMTApkaWZmIC0tZ2l0IGEvYmZkL3hjb2ZmbGluay5oIGIvYmZk L3hjb2ZmbGluay5oCmluZGV4IDkyZmVlYjU4OTU4Li5kNjQ3YmEwYTVkZiAxMDA2NDQKLS0tIGEv YmZkL3hjb2ZmbGluay5oCisrKyBiL2JmZC94Y29mZmxpbmsuaApAQCAtMTgsNiArMTgsMTcgQEAK ICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBC b3N0b24sCiAgICBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwogCisvKiBVc2VkIHRvIHBhc3MgaW5m byBiZXR3ZWVuIGxkIGFuZCBiZmQuICAqLworc3RydWN0IGJmZF94Y29mZl9saW5rX3BhcmFtcwor eworICAvKiBMaW5rZXIgc3R1YiBiZmQuICAqLworICBiZmQgKnN0dWJfYmZkOworCisgIC8qIExp bmtlciBjYWxsLWJhY2tzLiAgKi8KKyAgYXNlY3Rpb24gKiAoKmFkZF9zdHViX3NlY3Rpb24pIChj b25zdCBjaGFyICosIGFzZWN0aW9uICopOworICB2b2lkICgqbGF5b3V0X3NlY3Rpb25zX2FnYWlu KSAodm9pZCk7Cit9OworCiBleHRlcm4gYm9vbCBiZmRfeGNvZmZfc3BsaXRfaW1wb3J0X3BhdGgK ICAgKGJmZCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiopOwog ZXh0ZXJuIGJvb2wgYmZkX3hjb2ZmX3NldF9hcmNoaXZlX2ltcG9ydF9wYXRoCkBAIC00MSwzICs1 Miw5IEBAIGV4dGVybiBib29sIGJmZF94Y29mZl9idWlsZF9keW5hbWljX3NlY3Rpb25zCiAgIChi ZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CiBleHRlcm4gYm9vbCBiZmRfeGNvZmZfbGlu a19nZW5lcmF0ZV9ydGluaXQKICAgKGJmZCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg Ym9vbCk7CitleHRlcm4gYm9vbCBiZmRfeGNvZmZfbGlua19pbml0CisgIChzdHJ1Y3QgYmZkX2xp bmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX3hjb2ZmX2xpbmtfcGFyYW1zICopOworZXh0ZXJuIGJvb2wg YmZkX3hjb2ZmX3NpemVfc3R1YnMKKyAgKHN0cnVjdCBiZmRfbGlua19pbmZvICppbmZvKTsKK2V4 dGVybiBib29sIGJmZF94Y29mZl9idWlsZF9zdHVicworICAoc3RydWN0IGJmZF9saW5rX2luZm8g KmluZm8pOwpkaWZmIC0tZ2l0IGEvbGQvZW11bHRlbXBsL2FpeC5lbSBiL2xkL2VtdWx0ZW1wbC9h aXguZW0KaW5kZXggMzg3OGQ1OGJiMzIuLjM1NWUyYTRmZmZmIDEwMDY0NAotLS0gYS9sZC9lbXVs dGVtcGwvYWl4LmVtCisrKyBiL2xkL2VtdWx0ZW1wbC9haXguZW0KQEAgLTYzLDYgKzYzLDE1IEBA IHN0YXRpYyB2b2lkIGdsZCR7RU1VTEFUSU9OX05BTUV9X2ZyZWUgKHZvaWQgKik7CiBzdGF0aWMg dm9pZCBnbGQke0VNVUxBVElPTl9OQU1FfV9maW5kX3JlbG9jcyAobGFuZ19zdGF0ZW1lbnRfdW5p b25fdHlwZSAqKTsKIHN0YXRpYyB2b2lkIGdsZCR7RU1VTEFUSU9OX05BTUV9X2ZpbmRfZXhwX2Fz c2lnbm1lbnQgKGV0cmVlX3R5cGUgKik7CiAKK3N0YXRpYyBhc2VjdGlvbiAqeGNvZmZfYWRkX3N0 dWJfc2VjdGlvbiAoY29uc3QgY2hhciAqLCBhc2VjdGlvbiAqKTsKK3N0YXRpYyB2b2lkIHhjb2Zm X2xheW91dF9zZWN0aW9uc19hZ2FpbiAodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZkX3hjb2Zm X2xpbmtfcGFyYW1zIHBhcmFtcyA9IHsKKyAgTlVMTCwKKyAgJnhjb2ZmX2FkZF9zdHViX3NlY3Rp b24sCisgICZ4Y29mZl9sYXlvdXRfc2VjdGlvbnNfYWdhaW4KK307CisKIAogLyogVGhlIGZpbGUg YWxpZ25tZW50IHJlcXVpcmVkIGZvciBlYWNoIHNlY3Rpb24uICAqLwogc3RhdGljIHVuc2lnbmVk IGxvbmcgZmlsZV9hbGlnbjsKQEAgLTEzOCw2ICsxNDcsOSBAQCBzdGF0aWMgaW50IHJ0bGQ7CiAv KiBFeHBsaWNpdCBjb21tYW5kIGxpbmUgbGlicmFyeSBwYXRoLCAtYmxpYnBhdGggKi8KIHN0YXRp YyBjaGFyICpjb21tYW5kX2xpbmVfYmxpYnBhdGggPSBOVUxMOwogCisvKiBGYWtlIGlucHV0IGZp bGUgZm9yIHN0dWJzLiAgKi8KK3N0YXRpYyBsYW5nX2lucHV0X3N0YXRlbWVudF90eXBlICpzdHVi X2ZpbGU7CisKIC8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYmVmb3JlIGFueXRoaW5nIGVsc2Ug aXMgZG9uZS4gICovCiAKIHN0YXRpYyB2b2lkCkBAIC0xNTQsNiArMTY2LDcgQEAgZ2xkJHtFTVVM QVRJT05fTkFNRX1fYmVmb3JlX3BhcnNlICh2b2lkKQogCiAgIGxpbmtfaW5mby5pbml0X2Z1bmN0 aW9uID0gTlVMTDsKICAgbGlua19pbmZvLmZpbmlfZnVuY3Rpb24gPSBOVUxMOworCiB9CiAKIC8q IEhhbmRsZSBBSVggc3BlY2lmaWMgb3B0aW9ucy4gICovCkBAIC0xMDA5LDEyICsxMDIyLDE1NyBA QCBnbGQke0VNVUxBVElPTl9OQU1FfV9iZWZvcmVfYWxsb2NhdGlvbiAodm9pZCkKICAgYmVmb3Jl X2FsbG9jYXRpb25fZGVmYXVsdCAoKTsKIH0KIAorc3RydWN0IGhvb2tfc3R1Yl9pbmZvCit7Cisg IGxhbmdfc3RhdGVtZW50X2xpc3RfdHlwZSBhZGQ7CisgIGFzZWN0aW9uICppbnB1dF9zZWN0aW9u OworfTsKKworLyogVHJhdmVyc2UgdGhlIGxpbmtlciB0cmVlIHRvIGZpbmQgdGhlIHNwb3Qgd2hl cmUgdGhlIHN0dWIgZ29lcy4gICovCisKK3N0YXRpYyBib29sCitob29rX2luX3N0dWIgKHN0cnVj dCBob29rX3N0dWJfaW5mbyAqaW5mbywgbGFuZ19zdGF0ZW1lbnRfdW5pb25fdHlwZSAqKmxwKQor eworICBsYW5nX3N0YXRlbWVudF91bmlvbl90eXBlICpsOworICBib29sIHJldDsKKworICBmb3Ig KDsgKGwgPSAqbHApICE9IE5VTEw7IGxwID0gJmwtPmhlYWRlci5uZXh0KQorICAgIHsKKyAgICAg IHN3aXRjaCAobC0+aGVhZGVyLnR5cGUpCisJeworCWNhc2UgbGFuZ19jb25zdHJ1Y3RvcnNfc3Rh dGVtZW50X2VudW06CisJICByZXQgPSBob29rX2luX3N0dWIgKGluZm8sICZjb25zdHJ1Y3Rvcl9s aXN0LmhlYWQpOworCSAgaWYgKHJldCkKKwkgICAgcmV0dXJuIHJldDsKKwkgIGJyZWFrOworCisJ Y2FzZSBsYW5nX291dHB1dF9zZWN0aW9uX3N0YXRlbWVudF9lbnVtOgorCSAgcmV0ID0gaG9va19p bl9zdHViIChpbmZvLAorCQkJICAgICAgJmwtPm91dHB1dF9zZWN0aW9uX3N0YXRlbWVudC5jaGls ZHJlbi5oZWFkKTsKKwkgIGlmIChyZXQpCisJICAgIHJldHVybiByZXQ7CisJICBicmVhazsKKwor CWNhc2UgbGFuZ193aWxkX3N0YXRlbWVudF9lbnVtOgorCSAgcmV0ID0gaG9va19pbl9zdHViIChp bmZvLCAmbC0+d2lsZF9zdGF0ZW1lbnQuY2hpbGRyZW4uaGVhZCk7CisJICBpZiAocmV0KQorCSAg ICByZXR1cm4gcmV0OworCSAgYnJlYWs7CisKKwljYXNlIGxhbmdfZ3JvdXBfc3RhdGVtZW50X2Vu dW06CisJICByZXQgPSBob29rX2luX3N0dWIgKGluZm8sICZsLT5ncm91cF9zdGF0ZW1lbnQuY2hp bGRyZW4uaGVhZCk7CisJICBpZiAocmV0KQorCSAgICByZXR1cm4gcmV0OworCSAgYnJlYWs7CisK KwljYXNlIGxhbmdfaW5wdXRfc2VjdGlvbl9lbnVtOgorCSAgaWYgKGwtPmlucHV0X3NlY3Rpb24u c2VjdGlvbiA9PSBpbmZvLT5pbnB1dF9zZWN0aW9uKQorCSAgICB7CisJICAgICAgLyogV2UndmUg Zm91bmQgb3VyIHNlY3Rpb24uICBJbnNlcnQgdGhlIHN0dWIgaW1tZWRpYXRlbHkKKwkJIGFmdGVy IGl0cyBhc3NvY2lhdGVkIGlucHV0IHNlY3Rpb24uICAqLworCSAgICAgICooaW5mby0+YWRkLnRh aWwpID0gbC0+aGVhZGVyLm5leHQ7CisJICAgICAgbC0+aGVhZGVyLm5leHQgPSBpbmZvLT5hZGQu aGVhZDsKKwkgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIGxh bmdfZGF0YV9zdGF0ZW1lbnRfZW51bToKKwljYXNlIGxhbmdfcmVsb2Nfc3RhdGVtZW50X2VudW06 CisJY2FzZSBsYW5nX29iamVjdF9zeW1ib2xzX3N0YXRlbWVudF9lbnVtOgorCWNhc2UgbGFuZ19v dXRwdXRfc3RhdGVtZW50X2VudW06CisJY2FzZSBsYW5nX3RhcmdldF9zdGF0ZW1lbnRfZW51bToK KwljYXNlIGxhbmdfaW5wdXRfc3RhdGVtZW50X2VudW06CisJY2FzZSBsYW5nX2Fzc2lnbm1lbnRf c3RhdGVtZW50X2VudW06CisJY2FzZSBsYW5nX3BhZGRpbmdfc3RhdGVtZW50X2VudW06CisJY2Fz ZSBsYW5nX2FkZHJlc3Nfc3RhdGVtZW50X2VudW06CisJY2FzZSBsYW5nX2ZpbGxfc3RhdGVtZW50 X2VudW06CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBGQUlMICgpOworCSAgYnJlYWs7CisJ fQorICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBDYWxsLWJhY2sgZm9yIGJmZF94Y29m Zl9saW5rX3JlbG9jYXRpb25zLgorICAgQ3JlYXRlIGEgbmV3IHN0dWIgc2VjdGlvbiwgYW5kIGFy cmFuZ2UgZm9yIGl0IHRvIGJlIGxpbmtlZAorICAgaW1tZWRpYXRlbHkgYmVmb3JlIElOUFVUX1NF Q1RJT04uICAqLworCitzdGF0aWMgYXNlY3Rpb24gKgoreGNvZmZfYWRkX3N0dWJfc2VjdGlvbiAo Y29uc3QgY2hhciAqc3R1Yl9zZWNfbmFtZSwgYXNlY3Rpb24gKmlucHV0X3NlY3Rpb24pCit7Cisg IGFzZWN0aW9uICpzdHViX3NlYzsKKyAgZmxhZ3dvcmQgZmxhZ3M7CisgIGFzZWN0aW9uICpvdXRw dXRfc2VjdGlvbjsKKyAgbGFuZ19vdXRwdXRfc2VjdGlvbl9zdGF0ZW1lbnRfdHlwZSAqb3M7Cisg IHN0cnVjdCBob29rX3N0dWJfaW5mbyBpbmZvOworCisgIGZsYWdzID0gKFNFQ19BTExPQyB8IFNF Q19MT0FEIHwgU0VDX1JFQURPTkxZIHwgU0VDX0NPREUKKwkgICB8IFNFQ19IQVNfQ09OVEVOVFMg fCBTRUNfSU5fTUVNT1JZIHwgU0VDX0tFRVApOworICBzdHViX3NlYyA9IGJmZF9tYWtlX3NlY3Rp b25fYW55d2F5X3dpdGhfZmxhZ3MgKHN0dWJfZmlsZS0+dGhlX2JmZCwKKwkJCQkJCSBzdHViX3Nl Y19uYW1lLCBmbGFncyk7CisgIGlmIChzdHViX3NlYyA9PSBOVUxMKQorICAgIGdvdG8gZXJyX3Jl dDsKKworICBvdXRwdXRfc2VjdGlvbiA9IGlucHV0X3NlY3Rpb24tPm91dHB1dF9zZWN0aW9uOwor ICBvcyA9IGxhbmdfb3V0cHV0X3NlY3Rpb25fZ2V0IChvdXRwdXRfc2VjdGlvbik7CisKKyAgaW5m by5pbnB1dF9zZWN0aW9uID0gaW5wdXRfc2VjdGlvbjsKKyAgbGFuZ19saXN0X2luaXQgKCZpbmZv LmFkZCk7CisgIGxhbmdfYWRkX3NlY3Rpb24gKCZpbmZvLmFkZCwgc3R1Yl9zZWMsIE5VTEwsIE5V TEwsIG9zKTsKKworICBpZiAoaW5mby5hZGQuaGVhZCA9PSBOVUxMKQorICAgIGdvdG8gZXJyX3Jl dDsKKworICBpZiAoaG9va19pbl9zdHViICgmaW5mbywgJm9zLT5jaGlsZHJlbi5oZWFkKSkKKyAg ICByZXR1cm4gc3R1Yl9zZWM7CisKKyBlcnJfcmV0OgorICBlaW5mbyAoXygiJVglUDogY2FuIG5v dCBtYWtlIHN0dWIgc2VjdGlvbjogJUVcbiIpKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEFu b3RoZXIgY2FsbC1iYWNrIGZvciBiZmRfeGNvZmZfbGlua19yZWxvY2F0aW9ucy4gICovCisKK3N0 YXRpYyB2b2lkCit4Y29mZl9sYXlvdXRfc2VjdGlvbnNfYWdhaW4gKHZvaWQpCit7CisgIC8qIElm IHdlIGhhdmUgY2hhbmdlZCBzaXplcyBvZiB0aGUgc3R1YiBzZWN0aW9ucywgdGhlbiB3ZSBuZWVk CisgICAgIHRvIHJlY2FsY3VsYXRlIGFsbCB0aGUgc2VjdGlvbiBvZmZzZXRzLiAgVGhpcyBtYXkg bWVhbiB3ZSBuZWVkIHRvCisgICAgIGFkZCBldmVuIG1vcmUgc3R1YnMuICAqLworICAgbGFuZ19y ZWxheF9zZWN0aW9ucyAodHJ1ZSk7Cit9CisKKy8qIENhbGwgdGhlIGJhY2stZW5kIHRvIHZlcmlm eSByZWxvY2F0aW9ucy4gICovCisKIHN0YXRpYyB2b2lkCiBnbGQke0VNVUxBVElPTl9OQU1FfV9h ZnRlcl9hbGxvY2F0aW9uICh2b2lkKQogeworCisgIC8qIElmIGdlbmVyYXRpbmcgYSByZWxvY2F0 YWJsZSBvdXRwdXQgZmlsZSwgdGhlbiB3ZSBkb24ndCBoYXZlIGFueQorICAgICBzdHVicy4gICov CisgIGlmIChzdHViX2ZpbGUgIT0gTlVMTCAmJiAhYmZkX2xpbmtfcmVsb2NhdGFibGUgKCZsaW5r X2luZm8pKQorICAgIHsKKyAgICAgIC8qIENhbGwgaW50byB0aGUgQkZEIGJhY2tlbmQgdG8gZG8g dGhlIHJlYWwgd29yay4gICovCisgICAgICBpZiAoIWJmZF94Y29mZl9zaXplX3N0dWJzICgmbGlu a19pbmZvKSkKKwllaW5mbyAoXygiJVglUDogY2FuIG5vdCBzaXplIHN0dWIgc2VjdGlvbnM6ICVF XG4iKSk7CisgICAgfQorCiAgIC8qIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIGZp bmFsaXplIHRoZSBkeW5hbWljIHNlY3Rpb25zLiAgKi8KICAgaWYgKCFiZmRfeGNvZmZfYnVpbGRf ZHluYW1pY19zZWN0aW9ucyAobGlua19pbmZvLm91dHB1dF9iZmQsICZsaW5rX2luZm8pKQogICAg IGVpbmZvIChfKCIlRiVQOiBmYWlsZWQgdG8gbGF5b3V0IGR5bmFtaWMgc2VjdGlvbnM6ICVFXG4i KSk7CisKKyAgaWYgKCFiZmRfbGlua19yZWxvY2F0YWJsZSAoJmxpbmtfaW5mbykpCisgICAgewor ICAgICAgLyogTm93IGJ1aWxkIHRoZSBsaW5rZXIgc3R1YnMuICAqLworICAgICAgaWYgKHN0dWJf ZmlsZSAhPSBOVUxMICYmIHN0dWJfZmlsZS0+dGhlX2JmZC0+c2VjdGlvbnMgIT0gTlVMTCkKKwl7 CisJICBpZiAoISBiZmRfeGNvZmZfYnVpbGRfc3R1YnMgKCZsaW5rX2luZm8pKQorCSAgICBlaW5m byAoXygiJVglUDogY2FuIG5vdCBidWlsZCBzdHViczogJUVcbiIpKTsKKwl9CisgICAgfQogfQog CiBzdGF0aWMgY2hhciAqCkBAIC0xNTAzLDExICsxNjYxLDM1IEBAIGZyYWdtZW50IDw8RU9GCiBz dGF0aWMgdm9pZAogZ2xkJHtFTVVMQVRJT05fTkFNRX1fY3JlYXRlX291dHB1dF9zZWN0aW9uX3N0 YXRlbWVudHMgKHZvaWQpCiB7CisgIGlmICgoYmZkX2dldF9mbGF2b3VyIChsaW5rX2luZm8ub3V0 cHV0X2JmZCkgIT0gYmZkX3RhcmdldF94Y29mZl9mbGF2b3VyKSkKKyAgICByZXR1cm47CisKKyAg LyogU3R1YiBmaWxlICovCisgIHN0dWJfZmlsZSA9IGxhbmdfYWRkX2lucHV0X2ZpbGUgKCJsaW5r ZXIgc3R1YnMiLAorCQkJCSAgIGxhbmdfaW5wdXRfZmlsZV9pc19mYWtlX2VudW0sCisJCQkJICAg TlVMTCk7CisgIHN0dWJfZmlsZS0+dGhlX2JmZCA9IGJmZF9jcmVhdGUgKCJsaW5rZXIgc3R1YnMi LCBsaW5rX2luZm8ub3V0cHV0X2JmZCk7CisgIGlmIChzdHViX2ZpbGUtPnRoZV9iZmQgPT0gTlVM TAorICAgICAgfHwgIWJmZF9zZXRfYXJjaF9tYWNoIChzdHViX2ZpbGUtPnRoZV9iZmQsCisJCQkg ICAgIGJmZF9nZXRfYXJjaCAobGlua19pbmZvLm91dHB1dF9iZmQpLAorCQkJICAgICBiZmRfZ2V0 X21hY2ggKGxpbmtfaW5mby5vdXRwdXRfYmZkKSkpCisgICAgeworICAgICAgZWluZm8gKF8oIiVG JVA6IGNhbiBub3QgY3JlYXRlIHN0dWIgQkZEOiAlRVxuIikpOworICAgICAgcmV0dXJuOworICAg IH0KKworICBzdHViX2ZpbGUtPnRoZV9iZmQtPmZsYWdzIHw9IEJGRF9MSU5LRVJfQ1JFQVRFRDsK KyAgbGRsYW5nX2FkZF9maWxlIChzdHViX2ZpbGUpOworICBwYXJhbXMuc3R1Yl9iZmQgPSBzdHVi X2ZpbGUtPnRoZV9iZmQ7CisKKyAgLyogUGFzcyBsaW5rZXIgcGFyYW1zIHRvIHRoZSBiYWNrLWVu ZC4gKi8KKyAgaWYgKCFiZmRfeGNvZmZfbGlua19pbml0ICgmbGlua19pbmZvLCAmcGFyYW1zKSkK KyAgICBlaW5mbyAoXygiJUYlUDogY2FuIG5vdCBpbml0IEJGRDogJUVcbiIpKTsKKwogICAvKiBf X3J0aW5pdCAqLwotICBpZiAoKGJmZF9nZXRfZmxhdm91ciAobGlua19pbmZvLm91dHB1dF9iZmQp ID09IGJmZF90YXJnZXRfeGNvZmZfZmxhdm91cikKLSAgICAgICYmIChsaW5rX2luZm8uaW5pdF9m dW5jdGlvbiAhPSBOVUxMCi0JICB8fCBsaW5rX2luZm8uZmluaV9mdW5jdGlvbiAhPSBOVUxMCi0J ICB8fCBydGxkKSkKKyAgaWYgKGxpbmtfaW5mby5pbml0X2Z1bmN0aW9uICE9IE5VTEwKKyAgICAg IHx8IGxpbmtfaW5mby5maW5pX2Z1bmN0aW9uICE9IE5VTEwKKyAgICAgIHx8IHJ0bGQpCiAgICAg ewogICAgICAgaW5pdGZpbmlfZmlsZSA9IGxhbmdfYWRkX2lucHV0X2ZpbGUgKCJpbml0ZmluaSIs CiAJCQkJCSAgIGxhbmdfaW5wdXRfZmlsZV9pc19maWxlX2VudW0sCi0tIAoyLjMzLjEKCg== --_002_PA4PR02MB6686E4F68E95C662C60E3FBBEA129PA4PR02MB6686eurp_--