Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1otPca-0007xy-G6 for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Nov 2022 08:42:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1otPcZ-0002vW-1p for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Nov 2022 08:42:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1otPcX-0002vM-NR for pgsql-hackers@lists.postgresql.org; Fri, 11 Nov 2022 08:42:42 +0000 Received: from esa4.fujitsucc.c3s2.iphmx.com ([68.232.151.214]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1otPcT-0003Fd-1e for pgsql-hackers@lists.postgresql.org; Fri, 11 Nov 2022 08:42:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1668156156; x=1699692156; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=d5cVOneTxdD6DbHWRX/WAJegujRfsmWGz1eZB9E++No=; b=k+1BLekCZKcT+t+ZY2oq5fvc3TjfDvvkqqj1y+gNVeu7BNgfb9fMyICR uD2Cce50BS8riYQEuSq4x/d7WRCZgQ9mLMt/F11yRen35FV8ZP3wuN+Hy FG2AhfgwGzb7QLa4Px0m4sLD0vQKTyZkeIvOsD5Cfd0ueArl1a0IWwBMR IIGehAZx4xMv3TDPznb3op1f2mwKLOzU+BTnyiJGUEbCShyakFmGQTw7a HrcFqbTxUoVrDGMczdNv5xcoVbQoVZA0uTcKT8Ao7qq+mkiZh7foBw3vl vGzahhi6W9ik7aNfyqG0jNU7dtJW0qldOOnEUGHN3O/CVNzl+AcAQeP/g w==; X-IronPort-AV: E=McAfee;i="6500,9779,10527"; a="77612652" X-IronPort-AV: E=Sophos;i="5.96,156,1665414000"; d="scan'208,223";a="77612652" Received: from mail-os0jpn01lp2106.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.106]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2022 17:42:29 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BdhVabaC4molQu7UXfsZjprLM9XctDD1o0JIn5xsxqZFQYH4IBB558Rhw18L4N4iy6IH15y4VVNVRKpJNA7CqyMX5bsjKcbqLFXrwpPNvP+1tY7c+Rvxn9XdUts1eRg4Jbzti+odBlnGfsrAanK/UiOV4kUUmT0UpegZXHKge5w+9h8tTZ0sqFowK9uK4i8v0VMMvDe9hrxKJCTVuTiiVQcDKsX+qlKJlSyRygZOmOvSBA0eQH13qBAX4ESQt3vHxG2X5n3b2mUv0d0aBtKrsrkfj6DVDljQcecMDcNs++DwTE9LlemlbTpev2CevHWot1QHWD7iLXxDHyhhb3Br0A== 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=79dB76eM+0r9oUe7R9EVM88p4mE0ZC1W8gkujGVej3w=; b=HMswL5QS1cozYG4RJTVBjuvoMxb2L7CiBas5gFOkh2FhznzfytiLE19eei0b0hT9MkldI+t+Z+/Ua7FV7Cz4RIZ/HXL3fInTpLrizQXWzaNA5JP6hYpH8MLdQNmZT2jz1kJJ25NyFCvHIlOcApmhhtJwf/lowE9yBqnIlJHKPkzDzIBdhCZe+01kEll20vrOk0Vug6+mvijdaNjQsWMtzdr/Y1mrelKiYyLCNSCayETTDR/B6j3tSgi8Cgy2AzLRTIk2CoyzAJGtYyfvqfkORFvJSEf8yYbLjuv4qZF7ydB2OURYCfrXbNFkU75252haLC+2xGQtpkQzIc7riqTbJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYCPR01MB5774.jpnprd01.prod.outlook.com (2603:1096:400:44::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Fri, 11 Nov 2022 08:42:26 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd%6]) with mapi id 15.20.5813.013; Fri, 11 Nov 2022 08:42:26 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX5ZKpBKXxeUU2FhEhnmXQum6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCABhztAIAFv4zggABYqoCAABRMQA== Date: Fri, 11 Nov 2022 08:42:25 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9ZmEwMzFhOTYtYTEzNS00OGY5LWE2YmMtMmJjYjNmMzZh?= =?utf-8?B?MjFlO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0xMVQwODozNDoyM1o7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB5716:EE_|TYCPR01MB5774:EE_ x-ms-office365-filtering-correlation-id: 9ff8c2a7-1636-4751-a3bd-08dac3c0a8da x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: HYZGOIDgUhloU6orccYP5oEvfjmzAAa1C9F0XpXp+EJTBE+c9wKSJsHqBuwb5HYbdTQGuMYpByFnNIZmuoVKqJ5FC5zIK7KIWdnYJfSJ3+STjN7561XKo4UzC1SP4Wf7NJrXngRcFiN3pSu/zLwVSABKp28LXGszH+LWFKLOVF1zwJMV7qLserdoSkmUu3EXc46Nq5lJ85kiTDrk5rY2hfybh376kfrvemF1Un8eV4nRfxh+W+z3sMjtnwjvgiZ7QplKrd0jhw7y64MAnhwE3RWhi8p7ecnpbbRtI/4DJml4ym2I8a9tmt2Vyj3RpqmUAKn3Y903CRL+gIWkwo/dM1zhySzkVg3EyXvcMkdo86k5o0+/GD7kcfZ+HiWRZo2GiMe9jXu7oE9yAXZoaKiqLdJUY3pEd6uVjO9JkaDzJN3Xsy54rNmc4mUCBP3LmEL9620Ji55SDxF+r6Mnzfly+frUNcObJXmpvHO8q67IztTa0xXTOBpWyMoIi3tpvCV7fyIz2FORoAQ/Uy3vVHLtbM9voVwBnE67Y8eqwOxP4Agdhkb03ZAhwBFrxELH6HugHXCLr5Sgtm3JUJvhllykeCBJUSBh8lPeMgK0zp2YId0IZ9Ip2q+lq9O+xNGrhqz+Sch87h84V/Lr0HybL+F74iNajv5NKXjComdG0ShMi3NWKb3SeZJZV16iRJzFPBGhUZ2egKbPoDhaTlkPBe9TBP4VCy1ccoTky/bQTO3BvLbjQBxLEeeVdq8fzEKeqQYrvi1XUNXQS3scnta0hoIxHcW12ammJ78z8OnjIUn92+0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(39860400002)(346002)(396003)(366004)(451199015)(1590799012)(1580799009)(2906002)(85182001)(8936002)(5660300002)(52536014)(558084003)(83380400001)(38070700005)(4326008)(8676002)(54906003)(6916009)(33656002)(66476007)(64756008)(66946007)(478600001)(66556008)(55016003)(316002)(66446008)(76116006)(71200400001)(186003)(41300700001)(38100700002)(86362001)(7696005)(122000001)(82960400001)(99936003)(6506007)(9686003)(26005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VHdFcXFyN2gwWFhjZHJQSHlzYnlBelByanBhSzdyek9HRGIrR2F4OUhRalYr?= =?utf-8?B?SlJuVmJUbG1heUxweUdlZnpwNThqZXR3aCtEc3lTYmVNd2wwNXFiL2hYUFVK?= =?utf-8?B?eXZQcFRac2FnQ1BwQnZFeEpSdXRIcFVVZTQxUU5WaE9GZ25iOVcyek9MaFVP?= =?utf-8?B?aWxXQnlkWWhKSVh1SElPZkN4c29MemF6VGVVdjFYMDJvUXNBOERNMmY5bzJk?= =?utf-8?B?L0VLMVFKdmt1YTYvV01xOXJSVW1pYVliYjVaZ1dKOFFmQ1k4QktjYmRpVW9r?= =?utf-8?B?K0d5N216b1pJQ1k1VjJ2VXNIaUhrRXd3a3JKYXBVYzFNcGlzUS9FTTZLN3Zw?= =?utf-8?B?MXYvNVJFS3dGYkx3VS9oODRHam44TGJrV0dIa2plSWhjbkhkOTVFNHliaVlu?= =?utf-8?B?dnFSM3p1TzB3L2FVYk1uaGMwN0o0by9UNmZ5U3pnZHVxRmwxOWVvdVN1ZlMz?= =?utf-8?B?N0ZUbHBLdVNjUVd6VnVNZmtxcFdkOE5PdEVVRDdsT1d6eS9yQWF5eGFwaWU2?= =?utf-8?B?MVUwRkVXTHh0R3ZmOHNVRDJ6eXppUmFrYXlnYzhrYUwyZWxuNmFIakZOZTR5?= =?utf-8?B?NmorVERXMmI3U2Z4Y0ZPemVaTHRzQURjczRqcWVKVUVIdWI3aGVGQlVPUTl5?= =?utf-8?B?d2oydEV6MlhGNU9oSW1hc3NKdGtKSXQrdDlyZ3dqSmtLY3plU21KMklMOHEy?= =?utf-8?B?RjJIU2wvQ0l3SDVXdVA0RHQ5TGkrYmhKYjlTQ25hekQ0RjNyVlVicXJva2x2?= =?utf-8?B?UXJtQUxpSDhDUU5uYW0vVkFkQ0FRaTFXa3pxVEt2eGI1a0l6VXNhWXZ6cks0?= =?utf-8?B?cVhhWnh6Unc4TXo1amNLYUJoV2J1SjI5U2hnNmFYMFQwREh3VFZjdFBORlFC?= =?utf-8?B?eGUrR0dWcGZYbHY0VytNblFBRlZ1YVV6L080VjlVdXJ4Q1JSUVJPOHU0TTBI?= =?utf-8?B?QU4vNHpSYkFPUE9Za2NsRG9iSHhoWFRkckREOVJ3K3lRV2hxSk11VGhlUnRP?= =?utf-8?B?WmlwbGpiZHpYSzVjb01mMkJWcUZSbzRybC82QkwxcElOTXZkQjNNOE9VUGxM?= =?utf-8?B?M2tOQ0V0SkdjMDZjRWh2ZExGMDNmSTFxb2FrTEI2NVBuS2dvWFlUOVh0Q0VQ?= =?utf-8?B?UzNDMDlLYTZaZzQydUtBbDNOSkI0RzYxWStqWVVGTXhmb1pUSDF0R1dhSG5L?= =?utf-8?B?MkNFOUlvVGVJSk13eENOalBmcStubkVRUG81UElPcUZCTzV6aURKbW9IY2ZC?= =?utf-8?B?VTNQSnc5NW02KzhGOVY3UGVVdTVHQ1lwdDgvN0pwNW1pY0pUY0UvWTduT1I3?= =?utf-8?B?ellhVWZWMXYvWjd0dnA4K0hSdzZqaVNZcG5VUHVGLzBxM0E3UXJIM0VPVXlM?= =?utf-8?B?MzEzMytIQk1lUFZOSXB5Wm9zcWNsbWduVERKRmZDV1YyZ3Q2NkQ2N2RRRUhr?= =?utf-8?B?R3BtbU1oRzhrNXdNamJ1ejZLYTM4ZGQ4WjVMRkl4ZDBIMXc3d3BPTW5mWGxo?= =?utf-8?B?dkNKVzNEME94TVQ1MG5WRXpsRWpkTHdIdUMzM2diclhhNHRJaUVIUzI5dGo5?= =?utf-8?B?NHpybkMvcnh0VHVucGl0S3BhcmJCTmNvM1Y4V3o1ejNlaEtrUllhdjhvbVZQ?= =?utf-8?B?blkxMDEzdWpIL01VQm9sU2YreUhxbnpZNkRKS1ArK0R0bGl3T1BSYXNkUFQ5?= =?utf-8?B?N3F4bzJSSHJ6WlN6YjRQQ2puaUNVd3RqanRDa3Z6d2NCSE5tVDhzVE9xSkJG?= =?utf-8?B?a2JiYUtMbWtiNGl0VTVhQ0pYN280c3pXaVNmQytNUE1KOE0yaUtCSGsvS3dM?= =?utf-8?B?SzlIWVNTbFplaVNubzAraUJsUXAyRHdLRFNYYmlsS0JXcklIYVhzeHY2NGlo?= =?utf-8?B?TUZEaXZDTjFTU0dUYzdGeHFCM1JBTU4vMVZDNTlTZEE1WXo2V3ZPQzN4VjFj?= =?utf-8?B?NHNQcDRvVHB0OGhsYTdQcTY4SGQ3MXh4ZUxaQjFjWlZqYVE5ekNJMGtrNnlK?= =?utf-8?B?dGFwekFvRS9sOWs0ZnE0ME9xUTRmMnZubDlzb1BSTUEzMjBOUHZ4dm1NQU02?= =?utf-8?B?SkxteHVmQ2VnNkE1MXlHeVcwUHcxcGNxU1dCZmZscmpOQ250OElad1dXNnVZ?= =?utf-8?Q?mJIm4WyWVvJo4S7kGWW4bI8ax?= Content-Type: multipart/mixed; boundary="_003_OS0PR01MB571628A8975A7A984D45134A94009OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ff8c2a7-1636-4751-a3bd-08dac3c0a8da X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Nov 2022 08:42:25.8823 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sZKLSY86ePegQMbIlKskaFiP2SuaWDcNtdU+fOQyxX1Cue8huk6WW+Sy6JXFwCsGwwlPRJlH06qtG3sRhSkoqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB5774 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_OS0PR01MB571628A8975A7A984D45134A94009OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCkkgbm90aWNlZCBhIENGYm90IGZhaWx1cmUgYW5kIGhlcmUgaXMgdGhlIG5ldyB2ZXJz aW9uIHBhdGNoIHNldCB3aGljaCBzaG91bGQgZml4IHRoYXQuDQpJIGFsc28gcmFuIHBnaW5kZW50 IGFuZCBtYWRlIHNvbWUgY29zbWV0aWMgY2hhbmdlcyBpbiB0aGUgbmV3IHZlcnNpb24gcGF0Y2gu DQoNCkJlc3QgcmVnYXJkcywNCkhvdSB6ag0K --_003_OS0PR01MB571628A8975A7A984D45134A94009OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v46-0002-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v46-0002-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v46-0002-Test-streaming-parallel-option-in-tap-test.patch"; size=81987; creation-date="Fri, 11 Nov 2022 08:38:00 GMT"; modification-date="Fri, 11 Nov 2022 08:42:21 GMT" Content-Transfer-Encoding: base64 RnJvbSBlZTliMjU0ZGEzM2I0ZTMyM2ZkODM0YTAyMjlhZTEyOGJkNGU3MDk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NDYg Mi8yXSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgICAgICAgfCAy MzIgKysrKysrLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3Qu cGwgICAgICB8IDE0MyArKysrLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1f ZGRsLnBsICAgICAgICAgIHwgMjIxICsrKysrKy0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgfCAyMzMgKysrKysrLS0tCiAuLi4vc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCB8IDEzNCArKystLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgICAgfCAzOTQgKysrKysr KysrLS0tLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBs ICAgICB8IDU0MCArKysrKysrKysrKystLS0tLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTUyICsrKysrKwogOSBmaWxlcyBjaGFuZ2Vk LCAxNDA1IGluc2VydGlvbnMoKyksIDY0NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBs CgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IDg1ZDFkZDkuLjAyNTIxOGQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9z dWJzY3JpcHRpb24vbWVzb24uYnVpbGQKQEAgLTM2LDYgKzM2LDcgQEAgdGVzdHMgKz0gewogICAg ICAgJ3QvMDI5X29uX2Vycm9yLnBsJywKICAgICAgICd0LzAzMF9vcmlnaW4ucGwnLAogICAgICAg J3QvMDMxX2NvbHVtbl9saXN0LnBsJywKKyAgICAgICd0LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxf YXBwbHkucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCBjYmFhMzI3Li42NWY0M2YwIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKQEAgLTgsNiArOCwxNDkgQEAgdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0 aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2Ny aWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdl ID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFu ZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9m b3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fw c3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0 cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZv ciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIg dGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBfOworCisJIyBJbnRlcmxlYXZlIGEgcGFpciBv ZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtCIGxpbWl0LgorCW15ICRpbiAg PSAnJzsKKwlteSAkb3V0ID0gJyc7CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCW15ICR0aW1lciA9 IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZh dWx0KTsKKworCW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3Rn cmVzJywgXCRpbiwgXCRvdXQsICR0aW1lciwKKwkJb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCSMg SWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBu ZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVz aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUg REVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZl cmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBw ZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVn MSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vi c2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXIt PmxvZ2ZpbGU7CisKKwkkaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJfTsKKwkkaC0+cHVtcF9u YjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJF R0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkaW4gLj0gcXsKKwlDT01NSVQ7CisJ XHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5leHQgdGVzdCBmYWls LCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRv ZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycp OworCisJIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3Vi IFNFVCAoYmluYXJ5ID0gb24pIik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMg SW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0Ig bGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1 YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDY2Njd8NjY2N3w2NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBk ZWZhdWx0cycpOworCisJIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29s dW1ucyBvbiB0aGUgc3Vic2NyaWJlciwKKwkjIHVwZGF0ZSBwdWJsaXNoZXIsIGFuZCBjaGVjayB0 aGF0IHN1YnNjcmliZXIgcmV0YWlucyB0aGUgZXhwZWN0ZWQKKwkjIHZhbHVlcy4gVGhpcyBpcyB0 byBlbnN1cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKKwkjIHByb3Bl cmx5IGFmdGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6 dGltZXN0YW1wdHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgorCSk7CisKKwkjIENoZWNr IHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vi c2NyaWJlci0+bG9nZmlsZTsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxl bF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSwgY291bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2 NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0 YScpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIp OworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJl c2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9z dWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21l c3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQor CiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxODAsMTAgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0 YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRh cHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBA IC00OSw4MiArMTk2LDI1IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8 MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMg SW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRr QiBsaW1pdC4KLW15ICRpbiAgPSAnJzsKLW15ICRvdXQgPSAnJzsKLQotbXkgJHRpbWVyID0gSVBD OjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQp OwotCi1teSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycs IFwkaW4sIFwkb3V0LCAkdGltZXIsCi0Jb25fZXJyb3Jfc3RvcCA9PiAwKTsKLQotJGluIC49IHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7Ci19OwotJGgtPnB1bXBfbmI7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsK LURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiA1MDAwOwotQ09NTUlUOwotfSk7Ci0KLSRp biAuPSBxewotQ09NTUlUOwotXHEKLX07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRo ZSBuZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQotCi0kbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSwgMCk7CiAKLSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCi0kbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9z dWIgU0VUIChiaW5hcnkgPSBvbikiKTsKLQotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgorKTsKIAotIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29sdW1u cyBvbiB0aGUgc3Vic2NyaWJlciwKLSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQg c3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAotIyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5z dXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCi0jIHByb3Blcmx5IGFm dGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFt cHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKLSk7Ci0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4 dCkiKTsKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFs bGVsLCBiaW5hcnkgPSBvZmYpIik7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVS RSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi CisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8g cmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOwogCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIKLSk7Ci1pcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksCi0JJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOwordGVzdF9zdHJl YW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAK ICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwKaW5kZXggYmMwYTljZC4u MDIwYWQ5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9z dWJ4YWN0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFj dC5wbApAQCAtOCw2ICs4LDk0IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhl IGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3Nm dWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIgY2hlY2tfcGFy YWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxl bCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQgcHJvY2Vzc2lu ZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19wYXJhbGxlbCkK Kwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxfbWVzc2Fn ZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0 IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRlciBzbyB0 aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQKKyMg c3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkg PSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIg aXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3Ry ZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0 IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxs ZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXIt PnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4K Kwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgSW5zZXJ0LCB1 cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4KKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDMsIDUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUg bW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsK KwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDApIHMoaSk7CisJVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0 X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwg MTUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZF UE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLCAyMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDAp IHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOwor CX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxs ZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgxNjY3fDE2Njd8MTY2NyksCisJCSdjaGVj ayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0 cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhl IHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHku CisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25m KCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJ CSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBu b2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4g J2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzEyNSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVz dF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1 Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRh cF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ5LDQxICsxNDEsMjYgQEAgbXkg JHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCA2NGtCIGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcyggICAgMywgIDUwMCkg cyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczE7 Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDUwMSwgIDEwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAgMTUwMCkgcyhpKTsKLVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1 MDEsICAyMDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNB VkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgxNjY3fDE2Njd8MTY2 NyksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBt b2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJl YW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9u X25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04g dGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUsIDEpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlz aGVyLT5zdG9wOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3Ry ZWFtX2RkbC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCmlu ZGV4IDg2NmYxNTEuLmQyY2M0NmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxN19zdHJlYW1fZGRsLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJl YW1fZGRsLnBsCkBAIC04LDYgKzgsMTM4IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hl Y2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVkIHN1 Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIgY2hl Y2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQgcHJv Y2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19wYXJh bGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxf bWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1v biB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRl ciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBh bmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJ bXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJh bGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBhIHNtYWxsIChub24tc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVN TiBjIElOVDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg0 LCBtZDUoNDo6dGV4dCksIC00KTsKKwlDT01NSVQ7CisJfSk7CisKKwkjIElmICJzdHJlYW1pbmci IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjawor CSMgdGhhdCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVz c2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYg KCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVf c3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZy b20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJ IyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg1LCAxMDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJ TlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgMjAwMCkgcyhpKTsK KwlDT01NSVQ7CisJfSk7CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24g d2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMjAwMSwgbWQ1 KDIwMDE6OnRleHQpLCAtMjAwMSwgMioyMDAxKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxV RVMgKDIwMDIsIG1kNSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAwMiwgLTMqMjAwMik7CisJQ09N TUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBj b3VudChlKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjAwMnwxOTk5fDEwMDJ8 MSksCisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcg bW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0 aW9uIHdpdGggRERMIGFuZCBETUwuIE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAorCSMgYWZ0 ZXIgRE1MIHRvIGVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZvciB0 ZXN0X3RhYiBzbyB0aGF0CisJIyB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUg c2NoZW1hIGFnYWluLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMn LCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCksIC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOwor CUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZiBJTlQ7CisJQ09NTUlUOworCX0pOwor CisJIyBBIHNtYWxsIHRyYW5zYWN0aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlz IGp1c3QgdG8gZW5zdXJlIHRoYXQgd2UKKwkjIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byByZWZs ZWN0IHRoZSBsYXN0IGNvbHVtbiBhZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0Kmkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSw1MDA1KSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKwor CSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19w YXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKwor CSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJP TSB0ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSks CisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1p bmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zJworCSk7CisKKwkjIENsZWFudXAgdGhl IHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBx eworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVz dF90YWIgRFJPUCBDT0xVTU4gYywgRFJPUCBDT0xVTU4gZCwgRFJPUCBDT0xVTU4gZSwgRFJPUCBD T0xVTU4gZjsKKwl9KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ CQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiAr MTY5LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFt ZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwpAQCAtNDksNzcgKzE4NSwyNiBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJl c3VsdCwgcXEoMnwwfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2Ny aWJlcicpOwogCi0jIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwg YW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJF R0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNCwgbWQ1KDQ6OnRleHQpLCAtNCk7Ci1DT01NSVQ7Ci19 KTsKLQotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVf c2VyaWVzKDUsIDEwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQg SU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAyMDAwKSBzKGkpOwot Q09NTUlUOwotfSk7Ci0KLSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRo IERETCBhbmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDEsIG1kNSgyMDAxOjp0 ZXh0KSwgLTIwMDEsIDIqMjAwMSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUg SU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAyLCBt ZDUoMjAwMjo6dGV4dCksIC0yMDAyLCAyKjIwMDIsIC0zKjIwMDIpOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNvdW50KGUpIEZST00gdGVzdF90YWIiKTsKLWlz KCRyZXN1bHQsIHFxKDIwMDJ8MTk5OXwxMDAyfDEpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQg dG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWlu IGxvY2FsIGRlZmF1bHRzJwotKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5v ZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIEEgbGFyZ2UgKHN0cmVhbWVkKSB0cmFu c2FjdGlvbiB3aXRoIERETCBhbmQgRE1MLiBPbmUgb2YgdGhlIERETCBpcyBwZXJmb3JtZWQKLSMg YWZ0ZXIgRE1MIHRvIGVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZv ciB0ZXN0X3RhYiBzbyB0aGF0Ci0jIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyB0byBzZW5kIHRo ZSBzY2hlbWEgYWdhaW4uCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMn LCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp LCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDMsNTAwMCkgcyhpKTsKLUFM VEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZiBJTlQ7Ci1DT01NSVQ7Ci19KTsKLQotIyBB IHNtYWxsIHRyYW5zYWN0aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlzIGp1c3Qg dG8gZW5zdXJlIHRoYXQgd2UKLSMgc2VuZCB0aGUgc2NoZW1hIGFnYWluIHRvIHJlZmxlY3QgdGhl IGxhc3QgY29sdW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0LgotJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSwgNCppIEZST00gZ2VuZXJh dGVfc2VyaWVzKDUwMDEsNTAwNSkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoNTAwNXw1MDAyfDQwMDV8MzAwNHw1KSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVk IHRvIHN1YnNjcmliZXIgZm9yIGJvdGggc3RyZWFtaW5nIGFuZCBub24tc3RyZWFtaW5nIHRyYW5z YWN0aW9ucycKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qg dXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiAp OwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VC U0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9kZV9w dWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAk b2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0g JyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2lu ZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2Rl X3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKKwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRu b2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCmluZGV4IDU1MWYxNmQuLjc1MmU3OWEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5w bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQu cGwKQEAgLTgsNiArOCwxNDUgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUg bG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJh bGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs KSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5n IHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdl LywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qg c3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRo ZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBz dHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9 IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBp cyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQg dGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxl bCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgor CSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3Ry ZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo Myw1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJ U0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMzsK KwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIw MDEsMjUwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1MDEsMzAwMCkgcyhp KTsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDApIHMoaSk7CisJU0FWRVBPSU5U IHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxl bF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRy ZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSgyMDAwfDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQg b24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0 ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0 cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIG91dCBvZiBvcmRlcgorCSMgc3Vi dHJhbnNhY3Rpb24gUk9MTEJBQ0tzCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg0MDAxLDQ1MDApIHMoaSk7CisJU0FWRVBP SU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSw1NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDYwMDEsNjUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg3MDAxLDc1MDAp IHMoaSk7CisJUkVMRUFTRSBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDgwMDEsODUwMCkgcyhpKTsKKwlST0xMQkFD SyBUTyBzMTsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIs ICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwKKwkJJ2NoZWNrIHJvbGxi YWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdp dGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9sbGJhY2sKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhp KTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5MDAxLDk1MDApIHMoaSk7CisJU0FWRVBPSU5U IHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJh bGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRy ZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSgyNTAwfDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyJyk7 CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQg dGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNj cmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2Fn ZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMg Q3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFs bG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM2LDYgKzE3NSwxMCBAQCAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFw X3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5n IG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5h bWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ4 LDgxICsxOTEsMjUgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykg RlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwwKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5z YWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLDUwMCkgcyhpKTsKLVNB VkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEwMDEsMTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBz KGkpOwotUk9MTEJBQ0sgVE8gczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsMjUwMCkgcyhpKTsKLVJPTExCQUNL IFRPIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygyNTAxLDMwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDMwMDEsMzUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzNTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkp OwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygk cmVzdWx0LCBxcSgyMDAwfDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJl ZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVm YXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9u IFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1p bmcnOyIKICk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmli ZXIgcmVjZWl2aW5nIG91dCBvZiBvcmRlcgotIyBzdWJ0cmFuc2FjdGlvbiBST0xMQkFDS3MKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNDAwMSw0NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDU1MDApIHMo aSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDYwMDEsNjUwMCkgcyhpKTsKLVNBVkVQT0lOVCBz MzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoNzAwMSw3NTAwKSBzKGkpOwotUkVMRUFTRSBzMjsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODAwMSw4 NTAwKSBzKGkpOwotUk9MTEJBQ0sgVE8gczE7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksCi0JJ2NoZWNrIHJv bGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBs YXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9s bGJhY2sKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJ TjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoODUwMSw5MDAwKSBzKGkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5MDAx LDk1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDk1MDEsMTAwMDApIHMoaSk7Ci1S T0xMQkFDSzsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMjUwMHwwKSwgJ2NoZWNrIHJvbGxiYWNrIHdhcyByZWZsZWN0ZWQgb24gc3Vic2Ny aWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVS IFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5v ZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg IT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQor ICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hh bmdpbmcgU1VCU0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAk bm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAKICRub2RlX3N1YnNjcmliZXItPnN0b3A7 CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAppbmRleCA0ZDdkYTgyLi45ZDY3 OGIzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1Ynhh Y3RfZGRsX2Fib3J0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1f c3VieGFjdF9kZGxfYWJvcnQucGwKQEAgLTksNiArOSw5MSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3Jl OwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2Vy Lgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2Zp bmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlm ICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv JHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxs IHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgor IyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJl YW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVh bWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0cmVh bWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNo ZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxv ZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4K KwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkk bm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBs b2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7 CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9M TEJBQ0tzCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLDUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGMgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhp KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBz MjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMipp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsMTUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3RhYiBBREQgQ09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVf c2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVN TiBjOworCVJPTExCQUNLIFRPIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQ09N TUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3Rh YiIpOworCWlzKCRyZXN1bHQsIHFxKDEwMDB8NTAwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNh dmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09M VU1OIGM7CisJfSk7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7 CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJ ImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9h ZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzEy MiwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUg UFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUg PSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qg dXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VC U0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0 aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0g b24pIgogKTsKQEAgLTQ5LDM1ICsxMzgsMjYgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwwKSwgJ2No ZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBsYXJnZSAo c3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LDUwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJTlQ7Ci1TQVZF UE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAt aSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3Rf dGFiIEFERCBDT0xVTU4gZCBJTlQ7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MDEsMTUwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZSBJTlQ7Ci1T QVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp LCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKLUFM VEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1OIGM7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZS T00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDEwMDB8NTAwKSwKLQknY2hlY2sgcm9sbGJh Y2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29s dW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlz aGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFs bGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQg PSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l JyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVh bWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNh dGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3Ry ZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Ig YXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0 cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsK KwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRleCA3 YTc5N2YzLi40MjY1ZDNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJf dHdvcGhhc2VfY2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdv cGhhc2VfY2FzY2FkZS5wbApAQCAtMTEsNiArMTEsMjM5IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29t cGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZz ZXQsICRzdHJlYW1pbmdfbW9kZSkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAn ZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJ aWYgKCRzdHJlYW1pbmdfbW9kZSBlcSAncGFyYWxsZWwnKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQor CisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0 ZWQgdG8gInN0cmVhbWluZyIgcGFyYW1ldGVyCisjIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1 biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZCBzdHJlYW1pbmc9cGFyYWxsZWwKKyMgY2Fz ZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVf QywgJGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJHN0cmVhbWluZ19tb2RlKSA9CisJICBAXzsKKwor CW15ICRvZmZzZXRfQiA9IDA7CisJbXkgJG9mZnNldF9DID0gMDsKKworCW15ICRvbGRwaWRfQiA9 ICRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkIEZST00g cGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l X0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOworCW15ICRvbGRwaWRfQyA9ICRub2RlX0It PnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9y ZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBz dGF0ZSA9ICdzdHJlYW1pbmcnOyIpOworCisJIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIHN0 cmVhbWluZyBtb2RlCisKKwkkbm9kZV9CLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJ QUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQgorCQlTRVQgKHN0cmVhbWluZyA9ICRzdHJlYW1p bmdfbW9kZSk7Iik7CisJJG5vZGVfQy0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCUFM VEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0MKKwkJU0VUIChzdHJlYW1pbmcgPSAkc3RyZWFtaW5n X21vZGUpIik7CisKKwkjIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlzaCBpbml0aWFsaXph dGlvbgorCisJJG5vZGVfQS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlT RUxFQ1QgcGlkICE9ICRvbGRwaWRfQiBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi CisJKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0 IjsKKwkkbm9kZV9CLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVD VCBwaWQgIT0gJG9sZHBpZF9DIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBs aWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKwkp IG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQiOwor CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAv IENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNh Y3Rpb24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxs IGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyKHMpIGFmdGVyIHRoZSBjb21taXQuCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJh bWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRo YXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIHVzaW5nIGEgcGFyYWxsZWwgYXBw bHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdl cyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJHN0 cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9CLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVf Qi0+cmVsb2FkOworCisJCSRub2RlX0MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAi bG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9DLT5yZWxvYWQ7CisJfQorCisJ IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldF9CID0gLXMg JG5vZGVfQi0+bG9nZmlsZTsKKwkkb2Zmc2V0X0MgPSAtcyAkbm9kZV9DLT5sb2dmaWxlOworCisJ IyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRr QiBsaW1pdC4KKwkjIFRoZW4gMlBDIFBSRVBBUkUKKwkkbm9kZV9BLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJY2hl Y2tfcGFyYWxsZWxfbG9nKCRub2RlX0IsICRvZmZzZXRfQiwgJHN0cmVhbWluZ19tb2RlKTsKKwlj aGVja19wYXJhbGxlbF9sb2coJG5vZGVfQywgJG9mZnNldF9DLCAkc3RyZWFtaW5nX21vZGUpOwor CisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJl cihzKQorCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOworCSRy ZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3Ry YW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyAyUEMgQ09NTUlU CisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVf Qik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hlY2sg dGhhdCB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0 ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo MzMzNHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQg b24gc3Vic2NyaWJlciBCLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRzJwor CSk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlz KCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhh dmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQywgYW5kIGV4dHJhIGNvbHVtbnMgaGF2ZSBsb2Nh bCBkZWZhdWx0cycKKwkpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgZW5k ZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK KwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3Jp YmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3Vs dCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDJyk7CisK KwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIHdp dGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8gU0FWRVBPSU5ULgorCSMgMC4gQ2xlYW51cCBmcm9tIHBy ZXZpb3VzIHRlc3QgbGVhdmluZyBvbmx5IDIgcm93cy4KKwkjIDEuIEluc2VydCBvbmUgbW9yZSBy b3cuCisJIyAyLiBSZWNvcmQgYSBTQVZFUE9JTlQuCisJIyAzLiBEYXRhIGlzIHN0cmVhbWVkIHVz aW5nIDJQQy4KKwkjIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUgc3Ry ZWFtZWQgaW5zZXJ0cy4KKwkjIDUuIFRoZW4gQ09NTUlUIFBSRVBBUkVELgorCSMKKwkjIEV4cGVj dCBkYXRhIGFmdGVyIHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dz ICg9IDIgb3JpZ2luYWwgKyAxIGZyb20gc3RlcCAxKS4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3Mg KGRlbGV0ZSB3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhl IHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXRfQiA9IC1zICRub2RlX0ItPmxv Z2ZpbGU7CisJJG9mZnNldF9DID0gLXMgJG5vZGVfQy0+bG9nZmlsZTsKKworCSMgMlBDIFBSRVBB UkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQKKwkkbm9kZV9BLT5zYWZlX3Bz cWwoCisJCSdwb3N0Z3JlcycsICIKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoOTk5OSwgJ2Zvb2JhcicpOworCQlTQVZFUE9JTlQgc3BfaW5uZXI7CisJCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwor CQlST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BfaW5uZXI7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J291dGVyJzsKKwkJIik7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0Ip OworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwljaGVja19wYXJh bGxlbF9sb2coJG5vZGVfQiwgJG9mZnNldF9CLCAkc3RyZWFtaW5nX21vZGUpOworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9DLCAkb2Zmc2V0X0MsICRzdHJlYW1pbmdfbW9kZSk7CisKKwkjIGNo ZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJl c3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAk bm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQKKwkkbm9kZV9BLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAnb3V0ZXInOyIpOworCisJJG5v ZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMg ZW5kZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK KwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIg QicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBx cSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyBjaGVj ayBpbnNlcnRzIGFyZSB2aXNpYmxlIGF0IHN1YnNjcmliZXIocykuCisJIyBBbGwgdGhlIHN0cmVh bWVkIGRhdGEgKHByaW9yIHRvIHRoZSBTQVZFUE9JTlQpIHNob3VsZCBiZSByb2xsZWQgYmFjay4K KwkjICg5OTk5LCAnZm9vYmFyJykgc2hvdWxkIGJlIGNvbW1pdHRlZC4KKwkkcmVzdWx0ID0gJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNv bW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRu b2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90 YWI7Iik7CisJaXMoJHJlc3VsdCwgcXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBv biBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7 Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBz dWJzY3JpYmVyIEMnKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7CisJaXMoJHJlc3VsdCwgcXEo MyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMg Q2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwkkbm9kZV9BLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVf Qyk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkc3RyZWFtaW5nX21vZGUg ZXEgJ3BhcmFsbGVsJykKKwl7CisJCSRub2RlX0ItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfQi0+cmVsb2FkOwor CisJCSRub2RlX0MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNz YWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfQy0+cmVsb2FkOworCX0KK30KKwogIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cCBhIGNhc2NhZGUgb2YgcHViL3N1YiBub2Rl cy4KICMgbm9kZV9BIC0+IG5vZGVfQiAtPiBub2RlX0MKQEAgLTI2MCwxNjAgKzQ5MywxNSBAQCBp cygkcmVzdWx0LCBxcSgyMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3Jp YmVyIEMnKTsKICMgMlBDICsgU1RSRUFNSU5HIFRFU1RTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCi1teSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgIgot CVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiKTsKLW15ICRvbGRw aWRfQyA9ICRub2RlX0ItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBu YW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotCi0jIFNldHVwIGxvZ2ljYWwgcmVw bGljYXRpb24gKHN0cmVhbWluZyA9IG9uKQotCi0kbm9kZV9CLT5zYWZlX3BzcWwoCi0JJ3Bvc3Rn cmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0IKLQlTRVQgKHN0cmVhbWluZyA9 IG9uKTsiKTsKLSRub2RlX0MtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JQUxURVIgU1VC U0NSSVBUSU9OIHRhcF9zdWJfQwotCVNFVCAoc3RyZWFtaW5nID0gb24pIik7Ci0KLSMgV2FpdCBm b3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uCi0KLSRub2RlX0EtPnBvbGxf cXVlcnlfdW50aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRpbWVkIG91dCB3aGls ZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKLSRub2RlX0ItPnBvbGxfcXVlcnlfdW50 aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9DIEZST00gcGdfc3Rh dF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5n IGZvciBhcHBseSB0byByZXN0YXJ0IjsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAxLiBEYXRhIGlzIHN0 cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJl ZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlcihzKSBh ZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIElu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgotIyBUaGVuIDJQQyBQUkVQQVJFCi0kbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVz JywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFi IFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJl ZF90YWInO30pOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5v ZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX0EsICRub2RlX0Is ICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICdvbicpOwogCi0jIGNoZWNrIHRoZSB0 cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0K LSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2Ny aWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfQS0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkIG9uIHN1 YnNjcmliZXIocykKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIp OwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQ QyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEIsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUg bG9jYWwgZGVmYXVsdHMnCi0pOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0 ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQywgYW5kIGV4dHJhIGNvbHVt bnMgaGF2ZSBsb2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0 YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3Rz OyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQs IHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0j IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgd2l0aCBh IG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQuCi0jIDAuIENsZWFudXAgZnJvbSBwcmV2aW91 cyB0ZXN0IGxlYXZpbmcgb25seSAyIHJvd3MuCi0jIDEuIEluc2VydCBvbmUgbW9yZSByb3cuCi0j IDIuIFJlY29yZCBhIFNBVkVQT0lOVC4KLSMgMy4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMu Ci0jIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUgc3RyZWFtZWQgaW5z ZXJ0cy4KLSMgNS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCBkYXRhIGFmdGVy IHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dzICg9IDIgb3JpZ2lu YWwgKyAxIGZyb20gc3RlcCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQot IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChkZWxldGUgd2lsbCBi ZSByZXBsaWNhdGVkKQotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVk IFJPTExCQUNLIFRPIFNBVkVQT0lOVAotJG5vZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs ICIKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTksICdmb29iYXIn KTsKLQlTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVJPTExCQUNLIFRPIFNBVkVQT0lOVCBz cF9pbm5lcjsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7Ci0JIik7Ci0KLSRub2RlX0Et PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lX0MpOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBwcmVwYXJlZCBv biBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1 bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0k cmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNh Y3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5v ZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ291dGVyJzsiKTsK LQotJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRl IGlzIGVuZGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwot aXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEIn KTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0 cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyBjaGVjayBpbnNlcnRz IGFyZSB2aXNpYmxlIGF0IHN1YnNjcmliZXIocykuCi0jIEFsbCB0aGUgc3RyZWFtZWQgZGF0YSAo cHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNrLgotIyAoOTk5OSwg J2Zvb2JhcicpIHNob3VsZCBiZSBjb21taXR0ZWQuCi0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIg PSAnZm9vYmFyJzsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHBy ZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKLWlzKCRyZXN1bHQs IHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7Ci0k cmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKLWlzKCRyZXN1bHQsIHFxKDEp LCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7Ci0kcmVzdWx0 ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZXN0X3RhYjsiKTsKLWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNl bnQgb24gc3Vic2NyaWJlciBDJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X3N0cmVhbWluZygkbm9kZV9BLCAkbm9k ZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAncGFyYWxsZWwnKTsKIAogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhlIGNsZWFudXAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCmluZGV4IDli NDU0MTAuLjgyYjVlNmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190 d29waGFzZV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbApAQCAtOCw2ICs4LDMwOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisj IENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3Vi IGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAk aXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVk IHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkaXNf cGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvJHBhcmFs bGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBj b21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJh bWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9 b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZwor eworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNf cGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCisJ IyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgorCSMgMi4gVGhlbiBk byBjb21taXQgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQg b24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCisJIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVk IGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNh Y3Rpb24gd2FzIHByZXBhcmVkIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2Ug aGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBi dW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJ fQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9 IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGNoZWNrIHRoYXQgMlBDIGdldHMg cmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkg cyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJF IFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2Rl X3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rp b24gZ2V0cyBjb21taXR0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMz MzR8MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9u IHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9M TEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdo aWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVk IHVzaW5nIDJQQy4KKwkjIDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCisJIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4 Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAy OyIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRh dGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMp ID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJ IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmli ZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMg MlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoMnwyfDIpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNr LCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cycKKwkpOworCisJJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKwkjIENoZWNrIHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVk IHByb3Blcmx5IG9uIGNyYXNoIHJlc3RhcnQuCisJIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkjIDIuIFRoZW4gc2Vy dmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCSMg My4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJz Y3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIE5vdGU6IGJvdGggcHVibGlzaGVyIGFu ZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9m ZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAw MCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIp ID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQ QVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0 ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdGFy dDsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFy ZWRfdGFiJzsiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlCisJJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8 MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1 YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsK KworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0 aGUgUFJFUEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMg ZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVy LgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAzLiBBIHNpbmdsZSByb3cg SU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCisJIyA0LiBUaGVuIGRv IGEgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0IHRoZSAyUEMgZGF0YSByb2xscyBi YWNrIGxlYXZpbmcgb25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmliZXIKKwkjICh0aGUgb3JpZ2lu YWwgMiArIGluc2VydGVkIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor CSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxF VEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmli ZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dm aWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8g ZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkn cG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBp biBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVw YXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5v dyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQ QyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5z ZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0 ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24g c3Vic2NyaWJlciwKKwkjIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBz dGlsbCB3YXMgcmVwbGljYXRlZAorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5 OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzfDN8MyksCisJCSdjaGVjayB0 aGUgb3V0c2lkZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CisKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3Ry YW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZv cmUgQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93 cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJl YW1lZCB1c2luZyAyUEMuCisJIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2gg aXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCisJIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgor CSMKKwkjIEV4cGVjdCAyUEMgZGF0YSArIHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3Jp YmVyCisJIyAodGhlIDMzMzQgKyBpbnNlcnRlZCAxID0gMzMzNSkuCisJIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3Ig MiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJ IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRu b2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRl bGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2Qo YSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJ UFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xv Zygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0 aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwg J3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEg ZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rp b24pCisJIyBOb3RlOiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBz byBtYWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKKwkk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zvb2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBn ZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNXwz MzM1fDMzMzUpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lkZSBp bnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBh cmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0 dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIGEgPiAyOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwp CisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywK KwkJCSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CisJfQorfQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNldHVw CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC00OCw2ICszNTAsMTAgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgIgogCUNSRUFURSBTVUJTQ1JJUFRJ T04gdGFwX3N1YgpAQCAtNjQsMjM2ICszNzAsMzAgQEAgbXkgJHR3b3BoYXNlX3F1ZXJ5ID0KICRu b2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHR3b3BoYXNlX3F1 ZXJ5KQogICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRv IGVuYWJsZSB0d29waGFzZSI7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMg Q2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcgotIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwogbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0g OTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdjaGVjayBpbml0 aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KLSMg MS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KLSMgMi4gVGhlbiBkbyBj b21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1 YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgMCk7CiAKLSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNhdGVkIHRvIHN1 YnNjcmliZXIKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNl ZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBh cmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBz dWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0K LSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsi KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1 bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21t aXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNp bmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBs aWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwot JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDAp LCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJF UEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJl cGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMu Ci0jIDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgotIwotIyBFeHBlY3QgZGF0YSByb2xscyBiYWNr IGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3Mg KHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2Vy dCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0 LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsK LQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIp IFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwogCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0cmFuc2FjdGlv biBnZXRzIGFib3J0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0J IlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291 bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMnwyfDIpLAotCSdS b3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ssIGxlYXZpbmcgb25seSB0aGUgb3Jp Z2luYWwgMiByb3dzJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7 Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJl cicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENoZWNrIHRoYXQgMlBD IENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVkIHByb3Blcmx5IG9uIGNyYXNoIHJlc3RhcnQuCi0j IDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2 NGtCIGxpbWl0LgotIyAyLiBUaGVuIHNlcnZlciBjcmFzaGVzIGJlZm9yZSB0aGUgMlBDIHRyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZC4KLSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRo ZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRh IGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIE5v dGU6IGJvdGggcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQ REFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfc3Vic2NyaWJlci0+c3RvcCgnaW1tZWRp YXRlJyk7Ci0kbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwotCi0kbm9kZV9wdWJs aXNoZXItPnN0YXJ0OwotJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7Ci0KLSMgY29tbWl0IHBvc3Qg dGhlIHJlc3RhcnQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNP TU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxl Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMg aGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMg RG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQu Ci0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0 ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCi0jIDMu IEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4K LSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgotIwotIyBFeHBlY3QgdGhlIDJQQyBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgotIyAo dGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxs IGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0 aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQg cmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90 ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJl IHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDk5OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0k bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJF RCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBv biBzdWJzY3JpYmVyLAotIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMg c3RpbGwgd2FzIHJlcGxpY2F0ZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5 OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoM3wzfDMpLCAnY2hlY2sgdGhlIG91 dHNpZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwotCi0kcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBDT01NSVQg UFJFUEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJl IHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAy UEMuCi0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUg UFJFUEFSRS4KLSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IDJQ QyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmliZXIKLSMgKHRoZSAzMzM0 ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot Ci0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVw bGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFu ZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQg KG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3RlOiB0aGUg MlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBp bnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwogCi0j IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMzMzNXwzMzM1fDMzMzUpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2Vs bCBhcyBvdXRzaWRlIGluc2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4 dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Ciskbm9kZV9wdWJsaXNoZXIt PnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l JyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQg d2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJ UFRJT04iOwogCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSwgMSk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgY2hlY2sgYWxsIHRo ZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFt aW5nX3BhcmFsbGVsX2FwcGx5LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N0cmVh bWluZ19wYXJhbGxlbF9hcHBseS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xMGVmZDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X3N0cmVhbWluZ19wYXJhbGxlbF9hcHBseS5wbApAQCAtMCwwICsxLDE1MiBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVz dCBmb3IgZGVhZGxvY2sgaW4gc3RyZWFtaW5nIG1vZGUgInBhcmFsbGVsIiBpbiBsb2dpY2FsIHJl cGxpY2F0aW9uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworbXkgJG9mZnNldCA9IDA7CisKKyMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCitteSAk bm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hl cicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwn KTsKKyRub2RlX3B1Ymxpc2hlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJJ2xv Z2ljYWxfZGVjb2Rpbmdfd29ya19tZW0gPSA2NGtCJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0 OworCisjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmli ZXItPmluaXQ7CisKKyMgQ2hlY2sgaWYgYW55IHN0cmVhbWluZyBjaHVua3MgYXJlIGFwcGxpZWQg dXNpbmcgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gV2UKKyMgaGF2ZSB0byBsb29rIGZvciB0 aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZSBsb2cKKyMg dmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisKKyRub2RlX3N1YnNjcmliZXItPnN0 YXJ0OworCisjIFNldHVwIHN0cnVjdHVyZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWIgKGEgaW50KSIpOwor CisjIFNldHVwIHN0cnVjdHVyZSBvbiBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RhYiAoYSBpbnQpIik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRF WCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlv bgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBk Ym5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CisKK215 ICRhcHBuYW1lID0gJ3RhcF9zdWInOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdw b3N0Z3JlcycsICIKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIKKwlDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScKKwlQVUJMSUNBVElP TiB0YXBfcHViCisJV0lUSCAoc3RyZWFtaW5nID0gcGFyYWxsZWwsIGNvcHlfZGF0YSA9IGZhbHNl KSIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisj IEludGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0 a0IgbGltaXQuCitteSAkaW4gID0gJyc7CitteSAkb3V0ID0gJyc7CisKK215ICR0aW1lciA9IElQ Qzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0 KTsKKworbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn LCBcJGluLCBcJG91dCwgJHRpbWVyLAorCW9uX2Vycm9yX3N0b3AgPT4gMCk7CisKKyMgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorIyBDb25maXJtIGlmIGEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFsbGVsIGFwcGx5CisjIHdvcmtlciBjYW4gYmUgZGV0 ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMo aSk7Cit9OworJGgtPnB1bXBfbmI7CisKKyMgRW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBleGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1hbmQgYmVmb3JlIHRoZQorIyBsZWFkZXIg d29ya2VyLgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtB LVowLTldKzopPyBhcHBsaWVkIFswLTldKyBjaGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsv LAorCSRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdGVzdF90YWIgdmFsdWVzKDEpIik7CisKKyRpbiAuPSBxeworQ09NTUlUOwor XHEKK307CiskaC0+ZmluaXNoOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJ cXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRsb2NrIGRldGVjdGVkLywKKwkkb2Zmc2V0KTsK KworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jr cy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCBp ZHhfdGFiIik7CisKKyMgV2FpdCBmb3IgdGhpcyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUg YXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2VyLgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworbXkgJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIiKTsKK2lz KCRyZXN1bHQsIHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIg ZHJvcHBpbmcgaW5kZXgnKTsKKworIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJv bm1lbnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUg VEFCTEUgdGVzdF90YWIiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7CisKKyMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorIyBDb25maXJtIGlmIGEgZGVhZGxvY2sgYmV0d2VlbiB0d28gcGFyYWxsZWwgYXBw bHkgd29ya2VycyBjYW4gYmUgZGV0ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBD aGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7Cit9Owor JGgtPnB1bXBfbmI7CisKKyMgRW5zdXJlIHRoYXQgdGhlIGZpcnN0IHBhcmFsbGVsIGFwcGx5IHdv cmtlciBleGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1hbmQKKyMgYmVmb3JlIHRoZSBzZWNvbmQgb25l LgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtBLVowLTld KzopPyBhcHBsaWVkIFswLTldKyBjaGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsvLAorCSRv ZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhp KSIpOworCiskaW4gLj0gcXsKK0NPTU1JVDsKK1xxCit9OworJGgtPmZpbmlzaDsKKworJG5vZGVf c3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFk bG9jayBkZXRlY3RlZC8sCisJJG9mZnNldCk7CisKKyMgRHJvcCB0aGUgdW5pcXVlIGluZGV4IG9u IHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4X3RhYiIpOworCisjIFdhaXQgZm9yIHRoaXMg c3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4K KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyRyZXN1bHQg PQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfdGFiIik7CitpcygkcmVzdWx0LCBxcSgxMDAwMCksICdkYXRhIHJlcGxp Y2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zdG9wOworJG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK LS0gCjIuNy4yLndpbmRvd3MuMQoK --_003_OS0PR01MB571628A8975A7A984D45134A94009OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v46-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v46-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v46-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=205991; creation-date="Fri, 11 Nov 2022 08:38:00 GMT"; modification-date="Fri, 11 Nov 2022 08:42:24 GMT" Content-Transfer-Encoding: base64 RnJvbSBmZTljMWJhYzQ3ZDY0NDc2ZmVhNjAwYzFiNWViZWFhMTJhMmViODI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY0NiAxLzJdIFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IHBhcmFs bGVsCiB3b3JrZXJzCgpDdXJyZW50bHksIGZvciBsYXJnZSB0cmFuc2FjdGlvbnMsIHRoZSBwdWJs aXNoZXIgc2VuZHMgdGhlIGRhdGEgaW4gbXVsdGlwbGUKc3RyZWFtcyAoY2hhbmdlcyBkaXZpZGVk IGludG8gY2h1bmtzIGRlcGVuZGluZyB1cG9uIGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0pLAph bmQgdGhlbiBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLCB0aGUgYXBwbHkgd29ya2VyIHdyaXRlcyB0 aGUgY2hhbmdlcyBpbnRvCnRlbXBvcmFyeSBmaWxlcyBhbmQgb25jZSBpdCByZWNlaXZlcyB0aGUg Y29tbWl0LCBpdCByZWFkcyBmcm9tIHRob3NlIGZpbGVzIGFuZAphcHBsaWVzIHRoZSBlbnRpcmUg dHJhbnNhY3Rpb24uIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHN1Y2gKdHJhbnNhY3Rp b25zLCB3ZSBjYW4gaW5zdGVhZCBhbGxvdyB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHBhcmFsbGVs IHdvcmtlcnMuCgpJbiB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgcGFyYWxsZWwgYXBw bHkgd29ya2VyIChpZiBhdmFpbGFibGUpIGFzCnNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJl YW0gaXMgcmVjZWl2ZWQgYW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwKc2VuZCBjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlcgp3aWxsIGRpcmVjdGx5IGFwcGx5IHRoZSBjaGFuZ2UgaW5zdGVhZCBvZiB3cml0 aW5nIGl0IHRvIHRlbXBvcmFyeSBmaWxlcy4gV2UKa2VlcCB0aGlzIHdvcmtlciBhc3NpZ25lZCB0 aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFsc28gd2FpdApmb3Ig dGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3Jk ZXJpbmcgYW5kIGF2b2lkcwp3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZXMgaW4gbW9z dCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0byBzcGlsbCBpZgp0aGVyZSBpcyBubyB3b3JrZXIgYXZh aWxhYmxlLgoKVGhpcyBwYXRjaCBhbHNvIGV4dGVuZHMgdGhlIFNVQlNDUklQVElPTiAnc3RyZWFt aW5nJyBwYXJhbWV0ZXIgc28gdGhhdCB0aGUgdXNlcgpjYW4gY29udHJvbCB3aGV0aGVyIHRvIGFw cGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gaW4gYSBwYXJhbGxlbCBhcHBseQp3b3JrZXIg b3Igc3BpbGwgdGhlIGNoYW5nZSB0byBkaXNrLiBUaGUgdXNlciBjYW4gc2V0IHRoZSBzdHJlYW1p bmcgcGFyYW1ldGVyIHRvCidvbi9vZmYnLCAncGFyYWxsZWwnLiBUaGUgcGFyYW1ldGVyIHZhbHVl ICdwYXJhbGxlbCcgbWVhbnMgdGhlIHN0cmVhbWluZyB3aWxsCmJlIGFwcGxpZWQgdmlhIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLCBpZiBhdmFpbGFibGUuIFRoZSBwYXJhbWV0ZXIgdmFsdWUKJ29u JyBtZWFucyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgc3BpbGxlZCB0byBkaXNr LiBUaGUgZGVmYXVsdCB2YWx1ZQppcyAnb2ZmJyAoc2FtZSBhcyBjdXJyZW50IGJlaGF2aW91ciku CgpJbiBhZGRpdGlvbiwgdGhlIHBhdGNoIGV4dGVuZHMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g U1RSRUFNX0FCT1JUIG1lc3NhZ2Ugc28KdGhhdCBhYm9ydF90aW1lIGFuZCBhYm9ydF9sc24gY2Fu IGFsc28gYmUgc2VudCB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlCnJlcGxpY2F0aW9u IG9yaWdpbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2hlbiB0aGUgc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGlzCmFib3J0ZWQuIEJlY2F1c2UgdGhpcyBtZXNzYWdlIGV4dGVuc2lvbiBpcyBuZWVk ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbApzdHJlYW1pbmcsIHBhcmFsbGVsIHN0cmVhbWluZyBpcyBu b3Qgc3VwcG9ydGVkIGZvciBwdWJsaWNhdGlvbnMgb24gc2VydmVycyA8ClBHMTYuCi0tLQogZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICst CiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICAgICAg IHwgICAyMSArLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAyOSArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9u LnNnbWwgICAgICAgICAgfCAgIDI0ICstCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hhY3QuYyAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgICAgICAgICAgICB8ICAgNjYgKy0KIHNyYy9iYWNrZW5kL2xpYnBx L3BxbXEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIC4uLi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICAgICAgIHwgICAgNiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsK IC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICAgIHwgMTQ0 MCArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgICAgICB8ICAyMTAgKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL21lc29uLmJ1aWxkICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICAgICAgICAgfCAgIDIzICstCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgICAgICAgICAgICB8ICAgMzcgKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgIHwgICAxMCArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyAgICAgICAgfCAgIDI0ICst CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgICAgICB8IDEy MTMgKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bn b3V0cHV0LmMgICAgICAgIHwgICAyMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3Np Z25hbC5jICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s bWdyLmMgICAgICAgICAgICAgICAgICAgIHwgICA0NSArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudC5jICAgICAgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgICAgICAgfCAgIDEyICsKIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSAgICAgIHwgICAgMSArCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYg Ky0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyMSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCAgICAgICAgICAg ICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmggICAg ICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmggICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90 by5oICAgICAgICAgICAgIHwgICAyOCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHdvcmtlci5oICAgICAgICAgICAgfCAgICA4ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29y aWdpbi5oICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgICAgICB8ICAgIDcgKy0KIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgICAgICAgfCAgMjA4ICsrLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1 ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxNyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICAgICAg ICAgICAgIHwgICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5v dXQgICAgICAgICB8ICAgNDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5z cWwgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIDQ5IGZpbGVzIGNoYW5nZWQsIDMzMjkgaW5z ZXJ0aW9ucygrKSwgMzU4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dt bAppbmRleCAwMGY4MzNkLi5jNTc2OWRhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtNzg5MiwxMSArNzg5 MiwxNiBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0 OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogCiAgICAgIDxyb3c+CiAgICAgICA8ZW50 cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRp b24iPgotICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJzdHJlYW08L3N0cnVjdGZpZWxkPiA8dHlwZT5i b29sPC90eXBlPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJzdHJlYW08L3N0cnVjdGZpZWxkPiA8 dHlwZT5jaGFyPC90eXBlPgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgSWYg dHJ1ZSwgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGFsbG93IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVz cwotICAgICAgIHRyYW5zYWN0aW9ucworICAgICAgIENvbnRyb2xzIGhvdyB0byBoYW5kbGUgdGhl IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnM6CisgICAgICAgPGxpdGVyYWw+ ZjwvbGl0ZXJhbD4gPSBkaXNhbGxvdyBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rp b25zLAorICAgICAgIDxsaXRlcmFsPnQ8L2xpdGVyYWw+ID0gc3BpbGwgdGhlIGNoYW5nZXMgb2Yg aW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHRvCisgICAgICAgZGlzayBhbmQgYXBwbHkgYXQgb25j ZSBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHRoZQorICAgICAgIHB1Ymxp c2hlciwKKyAgICAgICA8bGl0ZXJhbD5wPC9saXRlcmFsPiA9IGFwcGx5IGNoYW5nZXMgZGlyZWN0 bHkgdXNpbmcgYSBwYXJhbGxlbCBhcHBseQorICAgICAgIHdvcmtlciBpZiBhdmFpbGFibGUgKHNh bWUgYXMgJ3QnIGlmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUpCiAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCA1NTllYjg5Li5hNmFhMWFjIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sCkBAIC00OTQ4LDcgKzQ5NDgsOCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgogICAgICAgICBTcGVjaWZpZXMgbWF4aW11bSBudW1i ZXIgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzLiBUaGlzIGluY2x1ZGVzCi0gICAgICAg IGJvdGggYXBwbHkgd29ya2VycyBhbmQgdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtlcnMuCisg ICAgICAgIGxlYWRlciBhcHBseSB3b3JrZXJzLCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBhbmQg dGFibGUgc3luY2hyb25pemF0aW9uCisgICAgICAgIHdvcmtlcnMuCiAgICAgICAgPC9wYXJhPgog ICAgICAgIDxwYXJhPgogICAgICAgICBMb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlcnMgYXJlIHRh a2VuIGZyb20gdGhlIHBvb2wgZGVmaW5lZCBieQpAQCAtNDk4OCw2ICs0OTg5LDMxIEBAIEFOWSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRy eT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXBhcmFsbGVsLWFwcGx5LXdvcmtl cnMtcGVyLXN1YnNjcmlwdGlvbiIgeHJlZmxhYmVsPSJtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vy c19wZXJfc3Vic2NyaXB0aW9uIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9wYXJhbGxlbF9h cHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90 eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X3Bh cmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgTWF4aW11bSBudW1i ZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBwZXIgc3Vic2NyaXB0aW9uLiBUaGlzCisgICAg ICAgIHBhcmFtZXRlciBjb250cm9scyB0aGUgYW1vdW50IG9mIHBhcmFsbGVsaXNtIGZvciBzdHJl YW1pbmcgb2YKKyAgICAgICAgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHdpdGggc3Vic2NyaXB0 aW9uIHBhcmFtZXRlcgorICAgICAgICA8bGl0ZXJhbD5zdHJlYW1pbmcgPSBwYXJhbGxlbDwvbGl0 ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUgcG9vbCBkZWZpbmVkIGJ5CisgICAg ICAgIDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+Lgor ICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUg aXMgMi4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZQorICAgICAgICA8Zmls ZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyIGNv bW1hbmQKKyAgICAgICAgbGluZS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3NlY3Qy PgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIv ZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCBmODc1NjM4Li5mMzY2 NzEwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE0OTcsNiArMTQ5 NywxNiBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24g b3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgbWlnaHQgbm90IHZpb2xhdGUgYW55 IGNvbnN0cmFpbnQuICBUaGlzIGNhbiBlYXNpbHkgbWFrZSB0aGUgc3Vic2NyaWJlcgogICAgaW5j b25zaXN0ZW50LgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIHRoZSBzdHJlYW1pbmcg bW9kZSBpcyA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4sIHRoZSBmaW5pc2ggTFNOIG9mCisg ICBmYWlsZWQgdHJhbnNhY3Rpb25zIG1heSBub3QgYmUgbG9nZ2VkLiBJbiB0aGF0IGNhc2UsIGl0 IG1heSBiZSBuZWNlc3NhcnkgdG8KKyAgIGNoYW5nZSB0aGUgc3RyZWFtaW5nIG1vZGUgdG8gPGxp dGVyYWw+b248L2xpdGVyYWw+IG9yIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4gYW5kCisgICBjYXVz ZSB0aGUgc2FtZSBjb25mbGljdHMgYWdhaW4gc28gdGhlIGZpbmlzaCBMU04gb2YgdGhlIGZhaWxl ZCB0cmFuc2FjdGlvbiB3aWxsCisgICBiZSB3cml0dGVuIHRvIHRoZSBzZXJ2ZXIgbG9nLiBGb3Ig dGhlIHVzYWdlIG9mIGZpbmlzaCBMU04sIHBsZWFzZSByZWZlciB0byA8bGluaworICAgbGlua2Vu ZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4u CisgICBTS0lQPC9jb21tYW5kPjwvbGluaz4uCisgIDwvcGFyYT4KICA8L3NlY3QxPgogCiAgPHNl Y3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXJlc3RyaWN0aW9ucyI+CkBAIC0xNjc4LDcgKzE2 ODgsOCBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24g b3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgc3Vic2NyaXB0aW9uLiAgQSBkaXNh YmxlZCBzdWJzY3JpcHRpb24gb3IgYSBjcmFzaGVkIHN1YnNjcmlwdGlvbiB3aWxsIGhhdmUKICAg IHplcm8gcm93cyBpbiB0aGlzIHZpZXcuICBJZiB0aGUgaW5pdGlhbCBkYXRhIHN5bmNocm9uaXph dGlvbiBvZiBhbnkKICAgIHRhYmxlIGlzIGluIHByb2dyZXNzLCB0aGVyZSB3aWxsIGJlIGFkZGl0 aW9uYWwgd29ya2VycyBmb3IgdGhlIHRhYmxlcwotICAgYmVpbmcgc3luY2hyb25pemVkLgorICAg YmVpbmcgc3luY2hyb25pemVkLiBNb3Jlb3ZlciwgaWYgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlv biBpcyBhcHBsaWVkIGluCisgICBwYXJhbGxlbCwgdGhlcmUgd2lsbCBiZSBhZGRpdGlvbmFsIHdv cmtlcnMuCiAgIDwvcGFyYT4KICA8L3NlY3QxPgogCkBAIC0xNzg0LDggKzE3OTUsMTIgQEAgQ09O VEVYVDogIHByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdf MTYzOTUiIGR1cmluZyAiSU5TRVIKICAgIHRvIHRoZSBzdWJzY3JpYmVyLCBwbHVzIHNvbWUgcmVz ZXJ2ZSBmb3IgdGFibGUgc3luY2hyb25pemF0aW9uLgogICAgPHZhcm5hbWU+bWF4X2xvZ2ljYWxf cmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4gbXVzdCBiZSBzZXQgdG8gYXQgbGVhc3QKICAg IHRoZSBudW1iZXIgb2Ygc3Vic2NyaXB0aW9ucywgYWdhaW4gcGx1cyBzb21lIHJlc2VydmUgZm9y IHRoZSB0YWJsZQotICAgc3luY2hyb25pemF0aW9uLiAgQWRkaXRpb25hbGx5IHRoZSA8dmFybmFt ZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4KLSAgIG1heSBuZWVkIHRvIGJlIGFkanVz dGVkIHRvIGFjY29tbW9kYXRlIGZvciByZXBsaWNhdGlvbiB3b3JrZXJzLCBhdCBsZWFzdAorICAg c3luY2hyb25pemF0aW9uLiBJZiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciA8bGl0ZXJhbD5z dHJlYW1pbmc8L2xpdGVyYWw+CisgICBpcyBzZXQgdG8gPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVy YWw+LAorICAgPGxpdGVyYWw+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvbGl0ZXJh bD4gc2hvdWxkIGJlIGluY3JlYXNlZAorICAgYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVkIG51bWJl ciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAgQWRkaXRpb25hbGx5IHRoZQorICAgPHZhcm5h bWU+bWF4X3dvcmtlcl9wcm9jZXNzZXM8L3Zhcm5hbWU+IG1heSBuZWVkIHRvIGJlIGFkanVzdGVk IHRvCisgICBhY2NvbW1vZGF0ZSBmb3IgcmVwbGljYXRpb24gd29ya2VycywgYXQgbGVhc3QKICAg ICg8dmFybmFtZT5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPgogICAg KyA8bGl0ZXJhbD4xPC9saXRlcmFsPikuICBOb3RlIHRoYXQgc29tZSBleHRlbnNpb25zIGFuZCBw YXJhbGxlbCBxdWVyaWVzCiAgICBhbHNvIHRha2Ugd29ya2VyIHNsb3RzIGZyb20gPHZhcm5hbWU+ bWF4X3dvcmtlcl9wcm9jZXNzZXM8L3Zhcm5hbWU+LgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggZTVk NjIyZC4uNTYwMGY1YyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0xODUxLDYgKzE4NTEsMTEgQEAg cG9zdGdyZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6 MzQgICAwOjAwIHBvc3RncmVzOiBzZXIKICAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGFjcXVpcmUg YW4gYWR2aXNvcnkgdXNlciBsb2NrLjwvZW50cnk+CiAgICAgIDwvcm93PgogICAgICA8cm93Pgor ICAgICAgPGVudHJ5PjxsaXRlcmFsPmFwcGx5dHJhbnNhY3Rpb248L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGFjcXVpcmUgYWNxdWlyZSBhIGxvY2sgb24gYSByZW1v dGUgdHJhbnNhY3Rpb24gYmVpbmcKKyAgICAgIGFwcGxpZWQgb24gdGhlIHN1YnNjcmliZXIgc2lk ZS48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJh bD5leHRlbmQ8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGV4dGVu ZCBhIHJlbGF0aW9uLjwvZW50cnk+CiAgICAgIDwvcm93PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCA1ZmRk NDI5Li5jNmEwZTgwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzEwMiw3ICszMTAyLDcgQEAgcHNxbCAi ZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVN OyIKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUHJvdG9jb2wgdmVyc2lv bi4gQ3VycmVudGx5IHZlcnNpb25zIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCA8bGl0ZXJhbD4yPC9s aXRlcmFsPiwKLSAgICAgICBhbmQgPGxpdGVyYWw+MzwvbGl0ZXJhbD4gYXJlIHN1cHBvcnRlZC4K KyAgICAgICA8bGl0ZXJhbD4zPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPjQ8L2xpdGVyYWw+IGFy ZSBzdXBwb3J0ZWQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAgICBWZXJzaW9u IDxsaXRlcmFsPjI8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lv biAxNApAQCAtMzExMiw2ICszMTEyLDExIEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNh dGlvbj1kYXRhYmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgVmVyc2lvbiA8bGl0 ZXJhbD4zPC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTUK ICAgICAgICBhbmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtaW5nIG9mIHR3by1waGFzZSBj b21taXRzLgogICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVmVyc2lvbiA8bGl0 ZXJhbD40PC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTYK KyAgICAgICBhbmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtcyBvZiBsYXJnZSBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAgICAgICBiZSBhcHBsaWVkIGluIHBhcmFsbGVsLgorICAg ICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC02 ODgyLDYgKzY4ODcsMjggQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFi YXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlz dGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgICA8dGVybT5JbnQ2NCAoWExvZ1JlY1B0cik8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSBMU04gb2YgdGhlIGFib3J0LiBUaGlzIGZpZWxk IGlzIGF2YWlsYWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICAgICA0LgorICAgICAg ICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChUaW1lc3RhbXBUeik8L3Rl cm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFib3J0IHRp bWVzdGFtcCBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSB2YWx1ZSBpcyBpbiBudW1iZXIKKyAgICAg ICAgIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZSBQb3N0Z3JlU1FMIGVwb2NoICgyMDAwLTAxLTAxKS4g VGhpcyBmaWVsZCBpcworICAgICAgICAgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZlcnNpb24g NC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJs aXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRp b24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4 IGY5YTE3NzYuLmYxNzNhMDkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1 YnNjcmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlv bi5zZ21sCkBAIC0yMjgsMTMgKzIyOCwyOSBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICAg ICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRl cm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pPC90 ZXJtPgorICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5l bnVtPC90eXBlPik8L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgIDxwYXJhPgog ICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgb2YgaW4tcHJv Z3Jlc3MgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAgQnkg ZGVmYXVsdCwgYWxsIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGFyZSBmdWxseSBkZWNvZGVkIG9u IHRoZSBwdWJsaXNoZXIgYW5kIG9ubHkgdGhlbiBzZW50IHRvIHRoZQotICAgICAgICAgIHN1YnNj cmliZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgICBmb3IgdGhpcyBzdWJzY3JpcHRpb24uICBUaGUg ZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LAorICAgICAgICAgIG1lYW5p bmcgYWxsIHRyYW5zYWN0aW9ucyBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFu ZCBvbmx5CisgICAgICAgICAgdGhlbiBzZW50IHRvIHRoZSBzdWJzY3JpYmVyIGFzIGEgd2hvbGUu CisgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0 byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRoZSBpbmNvbWluZyBjaGFuZ2VzIGFyZSB3cml0dGVu IHRvCisgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgb25seSBhZnRl ciB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAgICAgICBjb21taXR0ZWQgb24gdGhlIHB1Ymxpc2hl ciBhbmQgcmVjZWl2ZWQgYnkgdGhlIHN1YnNjcmliZXIuCisgICAgICAgICA8L3BhcmE+CisKKyAg ICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0 ZXJhbD4sIGluY29taW5nIGNoYW5nZXMgYXJlIGRpcmVjdGx5CisgICAgICAgICAgYXBwbGllZCB2 aWEgb25lIG9mIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBpZiBhdmFpbGFibGUuIElmIG5v CisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVh bWluZyB0cmFuc2FjdGlvbnMgdGhlbgorICAgICAgICAgIHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVu IHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbGllZCBhZnRlciB0aGUKKyAgICAgICAgICB0cmFu c2FjdGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5zIGluIGEK KyAgICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSBy ZW1vdGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICBtaWdodCBub3QgYmUgcmVwb3J0ZWQgaW4gdGhl IHNlcnZlciBsb2cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg ICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdz LnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggN2M3MTZmZS4uYzM4 M2NiNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMTM2MSw4ICsxMzYxLDkgQEAKICAgICAg ICA8bGl0ZXJhbD52aXJ0dWFseGlkPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5zcGVjdG9r ZW48L2xpdGVyYWw+LAogICAgICAgIDxsaXRlcmFsPm9iamVjdDwvbGl0ZXJhbD4sCi0gICAgICAg PGxpdGVyYWw+dXNlcmxvY2s8L2xpdGVyYWw+LCBvcgotICAgICAgIDxsaXRlcmFsPmFkdmlzb3J5 PC9saXRlcmFsPi4KKyAgICAgICA8bGl0ZXJhbD51c2VybG9jazwvbGl0ZXJhbD4sCisgICAgICAg PGxpdGVyYWw+YWR2aXNvcnk8L2xpdGVyYWw+IG9yCisgICAgICAgPGxpdGVyYWw+YXBwbHl0cmFu c2FjdGlvbjwvbGl0ZXJhbD4uCiAgICAgICAgKFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9IndhaXQt ZXZlbnQtbG9jay10YWJsZSIvPi4pCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggODgzZDZjMC4uZTYzNDQ5NiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtMTcxMiw2ICsxNzEyLDcgQEAgUmVjb3JkVHJhbnNh Y3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkKIAlpbnQJCQluY2hpbGRyZW47CiAJVHJhbnNhY3Rp b25JZCAqY2hpbGRyZW47CiAJVGltZXN0YW1wVHogeGFjdF90aW1lOworCWJvb2wJCXJlcGxvcmln aW47CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgYmVlbiBhc3NpZ25lZCBhbiBYSUQsIG5vYm9k eSB3aWxsIGNhcmUgd2hldGhlciB3ZSBhYm9ydGVkCkBAIC0xNzQyLDYgKzE3NDMsMTMgQEAgUmVj b3JkVHJhbnNhY3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkKIAkJZWxvZyhQQU5JQywgImNhbm5v dCBhYm9ydCB0cmFuc2FjdGlvbiAldSwgaXQgd2FzIGFscmVhZHkgY29tbWl0dGVkIiwKIAkJCSB4 aWQpOwogCisJLyoKKwkgKiBBcmUgd2UgdXNpbmcgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbnMgZmVh dHVyZT8gIE9yLCBpbiBvdGhlciB3b3JkcywgYXJlCisJICogd2UgcmVwbGF5aW5nIHJlbW90ZSBh Y3Rpb25zPworCSAqLworCXJlcGxvcmlnaW4gPSAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAh PSBJbnZhbGlkUmVwT3JpZ2luSWQgJiYKKwkJCQkgIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4g IT0gRG9Ob3RSZXBsaWNhdGVJZCk7CisKIAkvKiBGZXRjaCB0aGUgZGF0YSB3ZSBuZWVkIGZvciB0 aGUgYWJvcnQgcmVjb3JkICovCiAJbnJlbHMgPSBzbWdyR2V0UGVuZGluZ0RlbGV0ZXMoZmFsc2Us ICZyZWxzKTsKIAluY2hpbGRyZW4gPSB4YWN0R2V0Q29tbWl0dGVkQ2hpbGRyZW4oJmNoaWxkcmVu KTsKQEAgLTE3NjUsNiArMTc3MywxMSBAQCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNT dWJYYWN0KQogCQkJCQkgICBNeVhhY3RGbGFncywgSW52YWxpZFRyYW5zYWN0aW9uSWQsCiAJCQkJ CSAgIE5VTEwpOwogCisJaWYgKHJlcGxvcmlnaW4pCisJCS8qIE1vdmUgTFNOcyBmb3J3YXJkIGZv ciB0aGlzIHJlcGxpY2F0aW9uIG9yaWdpbiAqLworCQlyZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5j ZShyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiwKKwkJCQkJCQkJICAgWGFjdExhc3RSZWNF bmQpOworCiAJLyoKIAkgKiBSZXBvcnQgdGhlIGxhdGVzdCBhc3luYyBhYm9ydCBMU04sIHNvIHRo YXQgdGhlIFdBTCB3cml0ZXIga25vd3MgdG8KIAkgKiBmbHVzaCB0aGlzIGFib3J0LiBUaGVyZSdz IG5vdGhpbmcgdG8gYmUgZ2FpbmVkIGJ5IGRlbGF5aW5nIHRoaXMsIHNpbmNlCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggZjBjZWMyYS4uMWNhMDUzMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtODQsNyArODQsNyBAQCB0eXBl ZGVmIHN0cnVjdCBTdWJPcHRzCiAJYm9vbAkJY29weV9kYXRhOwogCWJvb2wJCXJlZnJlc2g7CiAJ Ym9vbAkJYmluYXJ5OwotCWJvb2wJCXN0cmVhbWluZzsKKwljaGFyCQlzdHJlYW1pbmc7CiAJYm9v bAkJdHdvcGhhc2U7CiAJYm9vbAkJZGlzYWJsZW9uZXJyOwogCWNoYXIJICAgKm9yaWdpbjsKQEAg LTEwMCw2ICsxMDAsNjIgQEAgc3RhdGljIHZvaWQgY2hlY2tfZHVwbGljYXRlc19pbl9wdWJsaXN0 KExpc3QgKnB1Ymxpc3QsIERhdHVtICpkYXR1bXMpOwogc3RhdGljIExpc3QgKm1lcmdlX3B1Ymxp Y2F0aW9ucyhMaXN0ICpvbGRwdWJsaXN0LCBMaXN0ICpuZXdwdWJsaXN0LCBib29sIGFkZHB1Yiwg Y29uc3QgY2hhciAqc3VibmFtZSk7CiBzdGF0aWMgdm9pZCBSZXBvcnRTbG90Q29ubmVjdGlvbkVy cm9yKExpc3QgKnJzdGF0ZXMsIE9pZCBzdWJpZCwgY2hhciAqc2xvdG5hbWUsIGNoYXIgKmVycik7 CiAKKy8qCisgKiBFeHRyYWN0IHRoZSBzdHJlYW1pbmcgbW9kZSB2YWx1ZSBmcm9tIGEgRGVmRWxl bS4gIFRoaXMgaXMgbGlrZQorICogZGVmR2V0Qm9vbGVhbigpIGJ1dCBhbHNvIGFjY2VwdHMgdGhl IHNwZWNpYWwgdmFsdWUgb2YgInBhcmFsbGVsIi4KKyAqLworY2hhcgorZGVmR2V0U3RyZWFtaW5n TW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoKKwkgKiBJZiBubyBwYXJhbWV0ZXIgdmFsdWUgZ2l2 ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQuCisJICovCisJaWYgKGRlZi0+YXJnID09IE5VTEwp CisJCXJldHVybiBTVUJTVFJFQU1fT047CisKKwkvKgorCSAqIEFsbG93IDAsIDEsICJmYWxzZSIs ICJ0cnVlIiwgIm9mZiIsICJvbiIgb3IgInBhcmFsbGVsIi4KKwkgKi8KKwlzd2l0Y2ggKG5vZGVU YWcoZGVmLT5hcmcpKQorCXsKKwkJY2FzZSBUX0ludGVnZXI6CisJCQlzd2l0Y2ggKGludFZhbChk ZWYtPmFyZykpCisJCQl7CisJCQkJY2FzZSAwOgorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX09GRjsK KwkJCQljYXNlIDE6CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJZGVmYXVsdDoKKwkJ CQkJLyogb3RoZXJ3aXNlLCBlcnJvciBvdXQgYmVsb3cgKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQljaGFyCSAgICpzdmFsID0gZGVmR2V0U3Ry aW5nKGRlZik7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBzZXQgb2Ygc3RyaW5ncyBhY2NlcHRlZCBo ZXJlIHNob3VsZCBtYXRjaCB1cCB3aXRoIHRoZQorCQkJCSAqIGdyYW1tYXIncyBvcHRfYm9vbGVh bl9vcl9zdHJpbmcgcHJvZHVjdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGdfc3RyY2FzZWNtcChz dmFsLCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwgIm9mZiIpID09 IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fT0ZGOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2 YWwsICJ0cnVlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWwsICJvbiIpID09IDAp CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwg InBhcmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9QQVJBTExFTDsKKwkJCX0K KwkJCWJyZWFrOworCX0KKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCisJCQkgZXJybXNnKCIlcyByZXF1aXJlcyBhIEJvb2xlYW4gdmFsdWUgb3Ig XCJwYXJhbGxlbFwiIiwKKwkJCQkJZGVmLT5kZWZuYW1lKSkpOworCXJldHVybiBTVUJTVFJFQU1f T0ZGOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQogCiAvKgogICogQ29tbW9uIG9wdGlv biBwYXJzaW5nIGZ1bmN0aW9uIGZvciBDUkVBVEUgYW5kIEFMVEVSIFNVQlNDUklQVElPTiBjb21t YW5kcy4KQEAgLTEzOCw3ICsxOTQsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJz ZVN0YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAlpZiAoSXNTZXQoc3VwcG9ydGVk X29wdHMsIFNVQk9QVF9CSU5BUlkpKQogCQlvcHRzLT5iaW5hcnkgPSBmYWxzZTsKIAlpZiAoSXNT ZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQotCQlvcHRzLT5zdHJlYW1pbmcg PSBmYWxzZTsKKwkJb3B0cy0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAlpZiAoSXNTZXQo c3VwcG9ydGVkX29wdHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50d29waGFz ZSA9IGZhbHNlOwogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FCTEVfT05f RVJSKSkKQEAgLTI0MSw3ICsyOTcsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJz ZVN0YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZsaWN0aW5n RGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VC T1BUX1NUUkVBTUlORzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwp OworCQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0K IAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJ ewpAQCAtNjI5LDcgKzY4NSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3Rh dGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdfc3Vic2Ny aXB0aW9uX3N1Ym93bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2YWx1ZXNb QW51bV9wZ19zdWJzY3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMu ZW5hYmxlZCk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAtIDFdID0g Qm9vbEdldERhdHVtKG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25f c3Vic3RyZWFtIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShvcHRzLnN0 cmVhbWluZyk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUg LSAxXSA9CiAJCUNoYXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lDQUxSRVBf VFdPUEhBU0VfU1RBVEVfUEVORElORyA6CkBAIC0xMDk4LDcgKzExNTQsNyBAQCBBbHRlclN1YnNj cmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwK IAkJCQlpZiAoSXNTZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCiAJ CQkJewogCQkJCQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPQot CQkJCQkJQm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXREYXR1bShv cHRzLnN0cmVhbWluZyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0 cmVhbSAtIDFdID0gdHJ1ZTsKIAkJCQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBx L3BxbXEuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYwppbmRleCA0ZDA0MTVlLi42Mzk4NDVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKKysrIGIvc3JjL2JhY2tlbmQv bGlicHEvcHFtcS5jCkBAIC0xMywxMSArMTMsMTMgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5o IgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFtcS5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIApAQCAtMTYyLDkgKzE2NCwxOSBAQCBtcV9wdXRt ZXNzYWdlKGNoYXIgbXNndHlwZSwgY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKIAkJcmVzdWx0 ID0gc2htX21xX3NlbmR2KHBxX21xX2hhbmRsZSwgaW92LCAyLCB0cnVlLCB0cnVlKTsKIAogCQlp ZiAocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCAhPSAwKQotCQkJU2VuZFByb2NTaWduYWwocHFf bXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKLQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FH RSwKLQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJeworCQkJ aWYgKElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIoKSkKKwkJCQlTZW5kUHJvY1NpZ25hbChw cV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQ TFlfTUVTU0FHRSwKKwkJCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7 CisJCQllbHNlCisJCQl7CisJCQkJQXNzZXJ0KElzUGFyYWxsZWxXb3JrZXIoKSk7CisJCQkJU2Vu ZFByb2NTaWduYWwocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKKwkJCQkJCQkgICBQUk9DU0lH X1BBUkFMTEVMX01FU1NBR0UsCisJCQkJCQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tl bmRfaWQpOworCQkJfQorCQl9CiAKIAkJaWYgKHJlc3VsdCAhPSBTSE1fTVFfV09VTERfQkxPQ0sp CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAwZDcyZGUyLi4yZGZh OWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xMjgsNiArMTI4LDkgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdAogCX0sCiAJewogCQkiQXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3Jr ZXJNYWluCisJfSwKKwl7CisJCSJQYXJhbGxlbEFwcGx5V29ya2VyTWFpbiIsIFBhcmFsbGVsQXBw bHlXb3JrZXJNYWluCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwppbmRleCA3ZjY5N2Iw Li4yMjVkYTgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJl Y2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s aWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtNDQzLDkgKzQ0Myw5IEBAIGxp YnBxcmN2X3N0YXJ0c3RyZWFtaW5nKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJYXBwZW5kU3Ry aW5nSW5mbygmY21kLCAicHJvdG9fdmVyc2lvbiAnJXUnIiwKIAkJCQkJCSBvcHRpb25zLT5wcm90 by5sb2dpY2FsLnByb3RvX3ZlcnNpb24pOwogCi0JCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2Fs LnN0cmVhbWluZyAmJgotCQkJUFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pID49IDE0 MDAwMCkKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgc3RyZWFtaW5nICdvbici KTsKKwkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cikKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmNtZCwgIiwgc3RyZWFtaW5nICclcyciLAorCQkJCQkJCSBvcHRpb25zLT5w cm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIpOwogCiAJCWlmIChvcHRpb25zLT5wcm90by5sb2dp Y2FsLnR3b3BoYXNlICYmCiAJCQlQUXNlcnZlclZlcnNpb24oY29ubi0+c3RyZWFtQ29ubikgPj0g MTUwMDAwKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRl MmZkZS4uMmRjMjVlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxl CkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9C SlMgPSBcCisJYXBwbHlwYXJhbGxlbHdvcmtlci5vIFwKIAlkZWNvZGUubyBcCiAJbGF1bmNoZXIu byBcCiAJbG9naWNhbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYzlkNTY0MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0wLDAgKzEsMTQ0MCBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMgU3VwcG9ydCByb3V0aW5lcyBm b3IgYXBwbHlpbmcgeGFjdCBieSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIElERU5USUZJQ0FUSU9OIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlw YXJhbGxlbHdvcmtlci5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRoYXQg YXJlIGludGVuZGVkIHRvIHN1cHBvcnQgc2V0dGluZyB1cCwgdXNpbmcsCisgKiBhbmQgdGVhcmlu ZyBkb3duIGEgUGFyYWxsZWxBcHBseVdvcmtlckluZm8uCisgKgorICogUmVmZXIgdG8gdGhlIGNv bW1lbnRzIGluIHRoZSBmaWxlIGhlYWRlciBvZiBsb2dpY2FsL3dvcmtlci5jIHRvIHNlZSBtb3Jl CisgKiBpbmZvcm1hdGlvbiBhYm91dCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICoKKyAqIERl YWRsb2NrLWRldGVjdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTaW5jZSB0aGUgZGF0 YWJhc2Ugc3RydWN0dXJlIChzY2hlbWEgb2Ygc3Vic2NyaXB0aW9uIHRhYmxlcywgZXRjLikgb2YK KyAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBtYXkgYmUgZGlmZmVyZW50LgorICoKKyAqIFdo ZW4gdGhlIGZvbGxvd2luZyB0aHJlZSBzY2VuYXJpb3Mgb2NjdXIsIGEgZGVhZGxvY2sgb2NjdXJz LgorICoKKyAqIFN1cHBvc2UgYSBzdWJzY3JpYmVkIHRhYmxlIGRvZXMgbm90IGhhdmUgYSB1bmlx dWUga2V5IG9uIHRoZSBwdWJsaXNoZXIgYW5kCisgKiBoYXMgYSB1bmlxdWUga2V5IG9uIHRoZSBz dWJzY3JpYmVyLgorICoKKyAqIDEpIERlYWRsb2NrIGJldHdlZW4gdGhlIGxlYWRlciBhcHBseSB3 b3JrZXIgYW5kIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisgKgorICogVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciAoUEEpIGlzIGV4ZWN1dGluZyBUWC0xIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdv cmtlcgorICogKExBKSBpcyBleGVjdXRpbmcgVFgtMiBjb25jdXJyZW50bHkgb24gdGhlIHN1YnNj cmliZXIuIE5vdywgTEEgaXMgd2FpdGluZworICogZm9yIFBBIGJlY2F1c2Ugb2YgdGhlIHVuaXF1 ZSBrZXkgb2YgdGhlIHN1YnNjcmliZWQgdGFibGUgd2hpbGUgUEEgaXMgd2FpdGluZworICogZm9y IExBIHRvIHNlbmQgZnVydGhlciBtZXNzYWdlcy4KKyAqCisgKiBJbiBvcmRlciBmb3IgbG1nciB0 byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBMQSBhY3F1aXJlIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZQor ICogcmVtb3RlIHRyYW5zYWN0aW9uIChieSBwYXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbSgpKSBh bmQgaGF2ZSBQQSB3YWl0IG9uIHRoZQorICogbG9jayBiZWZvcmUgdHJ5aW5nIHRvIHJlY2VpdmUg bWVzc2FnZXMuIEluIG90aGVyIHdvcmRzLCBMQSBhY3F1aXJlcyB0aGUgbG9jaworICogYmVmb3Jl IHNlbmRpbmcgU1RSRUFNX1NUT1AgYW5kIHJlbGVhc2VzIGl0IGlmIGFscmVhZHkgYWNxdWlyZWQg YmVmb3JlCisgKiBzZW5kaW5nIFNUUkVBTV9TVEFSVCwgU1RSRUFNX1BSRVBBUkUgYW5kIFNUUkVB TV9DT01NSVQuIEZvciBQQSwgaXQgYWx3YXlzCisgKiBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2Nr IGFmdGVyIHByb2Nlc3NpbmcgU1RSRUFNX1NUT1AgYW5kIHRoZW4gcmVsZWFzZQorICogaW1tZWRp YXRlbHkgYWZ0ZXIgYWNxdWlyaW5nIGl0LiBUaGF0IHdheSwgd2hlbiBQQSBpcyB3YWl0aW5nIGZv ciBMQSwgd2UgY2FuCisgKiBoYXZlIGEgd2FpdC1lZGdlIGZyb20gUEEgdG8gTEEgaW4gbG1nciwg d2hpY2ggd2lsbCBtYWtlIGEgZGVhZGxvY2sgaW4gbG1ncgorICogbGlrZToKKyAqCisgKiBMQSAo d2FpdGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5kZXgpIC0+IFBBICh3 YWl0aW5nIHRvCisgKiBhY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24p IC0+IExBCisgKgorICogMikgRGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VycworICoKKyAqIFRoaXMgc2NlbmFyaW8gaXMgc2lt aWxhciB0byB0aGUgZmlyc3QgY2FzZSBidXQgVFgtMSBhbmQgVFgtMiBhcmUgZXhlY3V0ZWQgYnkK KyAqIHR3byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIChQQS0xIGFuZCBQQS0yIHJlc3BlY3RpdmVs eSkuIEluIHRoaXMgc2NlbmFyaW8sCisgKiBQQS0yIGlzIHdhaXRpbmcgZm9yIFBBLTEgdG8gY29t cGxldGUgaXRzIHRyYW5zYWN0aW9uIHdoaWxlIFBBLTEgaXMgd2FpdGluZworICogZm9yIHN1YnNl cXVlbnQgaW5wdXQgZnJvbSBMQS4gQWxzbywgTEEgaXMgd2FpdGluZyBmb3IgUEEtMiB0byBjb21w bGV0ZSBpdHMKKyAqIHRyYW5zYWN0aW9uIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjb21taXQg b3JkZXIuIFRoZXJlIGlzIGEgZGVhZGxvY2sgYW1vbmcKKyAqIHRocmVlIHByb2Nlc3Nlcy4KKyAq CisgKiBJbiBvcmRlciBmb3IgbG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBQQSBhY3F1aXJl IGEgc2Vzc2lvbiBsb2NrIG9uIHRoZQorICogdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBhbmQg aGF2ZSBMQSB3YWl0IG9uIHRoZSBsb2NrIGJlZm9yZSBwcm9jZWVkaW5nIGluCisgKiB0cmFuc2Fj dGlvbiBmaW5pc2ggY29tbWFuZHMuIFRoYXQgd2F5LCB3ZSBjYW4gaGF2ZSBhIHdhaXQtZWRnZSBm cm9tIExBIHRvIFBBCisgKiBpbiBsbWdyLCB3aGljaCB3aWxsIG1ha2UgYSBkZWFkbG9jayBpbiBs bWdyIGxpa2U6CisgKgorICogTEEgKHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jYWwgdHJhbnNh Y3Rpb24gbG9jaykgLT4gUEExICh3YWl0aW5nIHRvCisgKiBhY3F1aXJlIHRoZSBsb2NrIG9uIHRo ZSB1bmlxdWUgaW5kZXgpIC0+IFBBMiAod2FpdGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIG9uCisg KiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uKSAtPiBMQQorICoKKyAqIE9uZSBtaWdodCB0aGluayB3 ZSBjYW4gdXNlIFhhY3RMb2NrVGFibGVXYWl0KCksIGJ1dCBYYWN0TG9ja1RhYmxlV2FpdCgpCisg KiBjb25zaWRlcnMgUFJFUEFSRUQgVFJBTlNBQ1RJT04gYXMgc3RpbGwgaW4gcHJvZ3Jlc3Mgd2hp Y2ggbWVhbnMgdGhlIGxvY2sKKyAqIHdvbid0IGJlIHJlbGVhc2VkIGV2ZW4gaWYgdGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBwcmVwYXJlZCB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogMykgZGVh ZGxvY2sgd2hlbiB0aGUgc2htX21xIGJ1ZmZlciBpcyBmdWxsCisgKgorICogVGhlIHNjZW5hcmlv IHdoZXJlIExBIGhhcyB0byB3YWl0IGlzIHdoZW4gdGhlIHNobV9tcSBidWZmZXIgaXMgZnVsbC4g SW4gdGhlCisgKiBhYm92ZSBzY2VuYXJpbyAoaWUuIFBBLTEgYW5kIFBBLTIgYXJlIGV4ZWN1dGlu ZyB0cmFuc2FjdGlvbnMgY29uY3VycmVudGx5KSwKKyAqIGlmIHRoZSBzaG1fbXEgYnVmZmVyIGJl dHdlZW4gTEEgYW5kIFBBLTIgaXMgZnVsbCwgTEEgaGFzIHRvIHdhaXQgdG8gc2VuZAorICogbWVz c2FnZXMsIGFuZCB0aGlzIHdhaXQgZG9lc24ndCBhcHBlYXIgaW4gbG1nci4KKyAqCisgKiBUbyBy ZXNvbHZlIHRoaXMgaXNzdWUsIHdlIHVzZSBub24tYmxvY2tpbmcgd3JpdGUgYW5kIHdhaXQgd2l0 aCBhIHRpbWVvdXQuIElmCisgKiB0aW1lb3V0IGlzIGV4Y2VlZGVkLCB0aGUgTEEgd2lsbCB3cml0 ZSB0byBmaWxlIGFuZCBpbmRpY2F0ZSBQQS0yIHRoYXQgaXQKKyAqIG5lZWRzIHRvIHJlYWQgZmls ZSBmb3IgcmVtYWluaW5nIG1lc3NhZ2VzLiBUaGVuIExBIHdpbGwgc3RhcnQgd2FpdGluZyBmb3IK KyAqIGNvbW1pdCB3aGljaCB3aWxsIGRldGVjdCBkZWFkbG9jayBpZiBhbnkuIChTZWUgcGFyYWxs ZWxfYXBwbHlfc2VuZF9kYXRhKCkKKyAqIGFuZCB0eXBlZGVmIGVudW0gVHJhbnNBcHBseUFjdGlv bikKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKKyNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCisjaW5j bHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0 bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hl ci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9vcmlnaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRp bHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxz L3Jlc293bmVyLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworI2RlZmluZSBQR19M T0dJQ0FMX0FQUExZX1NITV9NQUdJQyAweDc4N2NhMDY3CisKKy8qCisgKiBEU00ga2V5cyBmb3Ig cGFyYWxsZWwgYXBwbHkgd29ya2VyLiAgVW5saWtlIG90aGVyIHBhcmFsbGVsIGV4ZWN1dGlvbiBj b2RlLAorICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBEU00ga2V5cyBjb25m bGljdGluZyB3aXRoIHBsYW5fbm9kZV9pZCB3ZQorICogY2FuIHVzZSBzbWFsbCBpbnRlZ2Vycy4K KyAqLworI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVECQkxCisjZGVmaW5lIFBBUkFM TEVMX0FQUExZX0tFWV9NUQkJCTIKKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9SX1FV RVVFCTMKKworLyogUXVldWUgc2l6ZSBvZiBEU00sIDE2IE1CIGZvciBub3cuICovCisjZGVmaW5l IERTTV9RVUVVRV9TSVpFCSgxNiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogRXJyb3IgcXVldWUg c2l6ZSBvZiBEU00uIEl0IGlzIGRlc2lyYWJsZSB0byBtYWtlIGl0IGxhcmdlIGVub3VnaCB0aGF0 IGEKKyAqIHR5cGljYWwgRXJyb3JSZXNwb25zZSBjYW4gYmUgc2VudCB3aXRob3V0IGJsb2NraW5n LiAgVGhhdCB3YXksIGEgd29ya2VyIHRoYXQKKyAqIGVycm9ycyBvdXQgY2FuIHdyaXRlIHRoZSB3 aG9sZSBtZXNzYWdlIGludG8gdGhlIHF1ZXVlIGFuZCB0ZXJtaW5hdGUgd2l0aG91dAorICogd2Fp dGluZyBmb3IgdGhlIHVzZXIgYmFja2VuZC4KKyAqLworI2RlZmluZSBEU01fRVJST1JfUVVFVUVf U0laRQkJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgZmllbGRzIGluIGVh Y2ggbWVzc2FnZSByZWNlaXZlZCBieSB0aGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcjogc3Rh cnRfbHNuLCBlbmRfbHNuIGFuZCBzZW5kX3RpbWUuIEJlY2F1c2Ugd2UgaGF2ZSB1cGRhdGVkIHRo ZXNlCisgKiBzdGF0aXN0aWNzIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLCB3ZSBjYW4gaWdu b3JlIHRoZXNlIGZpZWxkcyBpbiB0aGUKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoc2VlIGZ1 bmN0aW9uIExvZ2ljYWxSZXBBcHBseUxvb3ApLgorICovCisjZGVmaW5lIFNJWkVfU1RBVFNfTUVT U0FHRSAoMiAqIHNpemVvZihYTG9nUmVjUHRyKSArIHNpemVvZihUaW1lc3RhbXBUeikpCisKKy8q CisgKiBIYXNoIHRhYmxlIGVudHJ5IHRvIG1hcCB4aWQgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBzdGF0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5 Cit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CQkJLyogSGFzaCBrZXkgLS0gbXVzdCBiZSBmaXJzdCAq LworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKK30gUGFyYWxsZWxBcHBseVdvcmtl ckVudHJ5OworCisvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXJzIGhhc2ggdGFibGUgKGluaXRpYWxp emVkIG9uIGZpcnN0IHVzZSkuICovCitzdGF0aWMgSFRBQiAqUGFyYWxsZWxBcHBseVdvcmtlcnNI YXNoID0gTlVMTDsKKworLyoKKyAqIEEgbGlzdCB0byBtYWludGFpbiB0aGUgYWN0aXZlIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMuIFRoZSBpbmZvcm1hdGlvbiBmb3IKKyAqIHRoZSBuZXcgd29ya2Vy IGlzIGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIHN1Y2Nlc3NmdWxseSBsYXVuY2hpbmcgaXQuIFRo ZQorICogbGlzdCBlbnRyeSBpcyByZW1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9u IGlmIHRoZXJlIGFyZSBhbHJlYWR5CisgKiBlbm91Z2ggd29ya2VycyBpbiB0aGUgd29ya2VyIHBv b2wuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIKKyAqIHBvb2wsIHNlZSBj b21tZW50cyBhdG9wIHdvcmtlci5jLgorICovCitzdGF0aWMgTGlzdCAqUGFyYWxsZWxBcHBseVdv cmtlcnNMaXN0ID0gTklMOworCisvKgorICogSW5mb3JtYXRpb24gc2hhcmVkIGJldHdlZW4gbGVh ZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCitQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVkID0gTlVMTDsKKworLyoKKyAqIElz IHRoZXJlIGEgbWVzc2FnZSBzZW50IGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aGljaCB3ZSBu ZWVkIHRvIHJlY2VpdmU/CisgKi8KK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbEFwcGx5 TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworLyoKKyAqIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGFwcGx5aW5nIHRoZQorICogY3VycmVu dCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEl0IGlzIHVzZWQgdG8gc2F2ZSB0aGUgY29zdCBvZiBz ZWFyY2hpbmcgdGhlCisgKiBoYXNoIHRhYmxlIHdoZW4gYXBwbHlpbmcgdGhlIGNoYW5nZXMgYmV0 d2VlbiBTVFJFQU1fU1RBUlQgYW5kIFNUUkVBTV9TVE9QLgorICovCitQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CisKKy8qIEEgbGlzdCB0byBtYWlu dGFpbiBzdWJ0cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KK0xpc3QJICAgKnN1YnhhY3RsaXN0ID0g TklMOworCitzdGF0aWMgYm9vbCBwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQoVHJhbnNhY3Rpb25J ZCB4aWQpOworc3RhdGljIGJvb2wgcGFyYWxsZWxfYXBwbHlfc2V0dXBfZHNtKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnBh cmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcih2b2lkKTsKK3N0YXRpYyBQYXJhbGxlbFRyYW5zU3Rh dGUgcGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCk7CitzdGF0aWMgdm9pZCBwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X3N0 YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJCQkJCSAgIFBh cmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlKTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiBp dCBpcyBPSyB0byBzdGFydCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgZmFsc2Ugb3RoZXJ3aXNl LgorICovCitzdGF0aWMgYm9vbAorcGFyYWxsZWxfYXBwbHlfY2FuX3N0YXJ0KFRyYW5zYWN0aW9u SWQgeGlkKQoreworCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIg aWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QKKwkgKiB1c2luZyBwYXJhbGxlbCBzdHJlYW1pbmcg bW9kZSwgb3IgaWYgdGhlIHB1Ymxpc2hlciBkb2VzIG5vdCBzdXBwb3J0CisJICogcGFyYWxsZWwg YXBwbHkuCisJICovCisJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5KQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbmx5IGxlYWRlciBhcHBseSB3b3JrZXJzIGNhbiBzdGFy dCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCWlmICghYW1fbGVhZGVyX2FwcGx5X3dvcmtl cigpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgbmV3IHBhcmFs bGVsIHdvcmtlciBpZiB1c2VyIGhhcyBzZXQgc2tpcGxzbiBhcyBpdCdzCisJICogcG9zc2libGUg dGhhdCB1c2VyIHdhbnQgdG8gc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBGb3IKKwkg KiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24sIHdlIG5lZWQgdG8gc3BpbGwgdGhlIHRyYW5zYWN0aW9u IHRvIGRpc2sgc28gdGhhdAorCSAqIHdlIGNhbiBnZXQgdGhlIGxhc3QgTFNOIG9mIHRoZSB0cmFu c2FjdGlvbiB0byBqdWRnZSB3aGV0aGVyIHRvIHNraXAKKwkgKiBiZWZvcmUgc3RhcnRpbmcgdG8g YXBwbHkgdGhlIGNoYW5nZS4KKwkgKi8KKwlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQoTXlTdWJz Y3JpcHRpb24tPnNraXBsc24pKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEZvciBzdHJl YW1pbmcgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxl bAorCSAqIGFwcGx5IHdvcmtlciwgd2UgY2Fubm90IGRlY2lkZSB3aGV0aGVyIHRvIGFwcGx5IHRo ZSBjaGFuZ2UgZm9yIGEKKwkgKiByZWxhdGlvbiB0aGF0IGlzIG5vdCBpbiB0aGUgUkVBRFkgc3Rh dGUgKHNlZQorCSAqIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdvbid0IGtu b3cgcmVtb3RlX2ZpbmFsX2xzbiBieSB0aGF0CisJICogdGltZS4gU28sIHdlIGRvbid0IHN0YXJ0 IHRoZSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAo IUFsbFRhYmxlc3luY3NSZWFkeSgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFN0YXJ0IGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRoYXQgd2lsbCBiZSB1 c2VkIGZvciB0aGUgc3BlY2lmaWVkIHhpZC4KKyAqCisgKiBJZiBhIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBpcyBmb3VuZCBidXQgbm90IGluIHVzZSB0aGVuIHJlLXVzZSBpdCwgb3RoZXJ3aXNlCisg KiBzdGFydCBhIGZyZXNoIG9uZS4gQ2FjaGUgdGhlIHdvcmtlciBpbmZvcm1hdGlvbiBpbiBQYXJh bGxlbEFwcGx5V29ya2Vyc0hhc2gKKyAqIGtleWVkIGJ5IHRoZSBzcGVjaWZpZWQgeGlkLgorICov Cit2b2lkCitwYXJhbGxlbF9hcHBseV9zdGFydF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpCit7 CisJYm9vbAkJZm91bmQ7CisJTGlzdENlbGwgICAqbGM7CisJUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvID0gTlVMTDsKKwlQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJ aWYgKCFwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQoeGlkKSkKKwkJcmV0dXJuOworCisJLyogRmly c3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGFwcGx5IHdvcmtlcnMgaGFzaHRhYmxlLiAqLwor CWlmIChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVMTCkKKwl7CisJCUhBU0hDVEwJCWN0 bDsKKworCQlNZW1TZXQoJmN0bCwgMCwgc2l6ZW9mKGN0bCkpOworCQljdGwua2V5c2l6ZSA9IHNp emVvZihUcmFuc2FjdGlvbklkKTsKKwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihQYXJhbGxlbEFw cGx5V29ya2VyRW50cnkpOworCQljdGwuaGN4dCA9IEFwcGx5Q29udGV4dDsKKworCQlQYXJhbGxl bEFwcGx5V29ya2Vyc0hhc2ggPSBoYXNoX2NyZWF0ZSgibG9naWNhbCBhcHBseSB3b3JrZXJzIGhh c2giLAorCQkJCQkJCQkJCQkgICAxNiwgJmN0bCwKKwkJCQkJCQkJCQkJICAgSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyB8IEhBU0hfQ09OVEVYVCk7CisJfQorCisJLyogVHJ5IHRvIGdldCBhIGZyZWUg cGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCWZvcmVhY2gobGMsIFBhcmFsbGVsQXBwbHlXb3Jr ZXJzTGlzdCkKKwl7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp0bXBfd2luZm87CisKKwkJ dG1wX3dpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChsYyk7CisKKwkJ LyogQ2hlY2sgaWYgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSB3b3JrZXIgaGFzIGZpbmlzaGVkLiAq LworCQlpZiAocGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXIodG1wX3dpbmZvLCB0bXBfd2luZm8t PnNoYXJlZC0+eGlkLCBmYWxzZSkpCisJCXsKKwkJCS8qCisJCQkgKiBDbGVhbiB1cCB0aGUgd29y a2VyIGluZm9ybWF0aW9uIGlmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKwkJCSAqIGhhcyBi ZWVuIHN0b3BwZWQuCisJCQkgKi8KKwkJCVBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IGZvcmVh Y2hfZGVsZXRlX2N1cnJlbnQoUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LCBsYyk7CisJCQlwYXJh bGxlbF9hcHBseV9mcmVlX3dvcmtlcl9pbmZvKHRtcF93aW5mbyk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWlmICghdG1wX3dpbmZvLT5pbl91c2UpCisJCXsKKwkJCXdpbmZvID0gdG1wX3dpbmZv OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAod2luZm8gPT0gTlVMTCkKKwl7CisJCS8qIFRy eSB0byBzdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJCXdpbmZvID0gcGFy YWxsZWxfYXBwbHlfc2V0dXBfd29ya2VyKCk7CisKKwkJaWYgKHdpbmZvID09IE5VTEwpCisJCQly ZXR1cm47CisJfQorCisJLyogQ3JlYXRlIGVudHJ5IGZvciByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24u ICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQs IEhBU0hfRU5URVIsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCQllbG9nKEVSUk9SLCAiaGFzaCB0 YWJsZSBjb3JydXB0ZWQiKTsKKworCS8qIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBhcmVhLiAq LworCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCXdpbmZvLT5zaGFy ZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXdpbmZvLT5zaGFyZWQt PnhpZCA9IHhpZDsKKwl3aW5mby0+c2hhcmVkLT5maWxlc2V0X3N0YXRlID0gTEVBREVSX0ZJTEVT RVRfVU5LTk9XTjsKKwlTcGluTG9ja1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwor CXdpbmZvLT5pbl91c2UgPSB0cnVlOworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNl OworCWVudHJ5LT53aW5mbyA9IHdpbmZvOworCWVudHJ5LT54aWQgPSB4aWQ7Cit9CisKKy8qCisg KiBGaW5kIHRoZSBhc3NpZ25lZCB3b3JrZXIgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiwgaWYg YW55LgorICovCitQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqCitwYXJhbGxlbF9hcHBseV9maW5k X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlib29sCQlmb3VuZDsKKwlQYXJhbGxlbEFw cGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVM TCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZXR1cm4gdGhlIGNhY2hlZCBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaWYgdmFsaWQuICovCisJaWYgKHN0cmVhbV9hcHBseV93b3JrZXIgIT0gTlVMTCkK KwkJcmV0dXJuIHN0cmVhbV9hcHBseV93b3JrZXI7CisKKwkvKgorCSAqIEZpbmQgZW50cnkgZm9y IHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4KKwkgKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFs bGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3Vu ZCkKKwl7CisJCUFzc2VydChlbnRyeS0+d2luZm8tPmluX3VzZSk7CisKKwkJcmV0dXJuIGVudHJ5 LT53aW5mbzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUgYW5kIGNsZWFudXAg dGhlCisgKiBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcy4gU3RvcCB0aGUgd29yayBpZiB0 aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4KKyAqIHRoZSBwb29sIG9yIHRoZSBsZWFkZXIgYXBw bHkgd29ya2VyIHNlcmlhbGl6ZWQgcGFydCBvZiB0aGUgdHJhbnNhY3Rpb24gZGF0YQorICogdG8g YSBmaWxlIGR1ZSB0byBzZW5kIHRpbWVvdXQuCisgKgorICogWFhYIERhdGEgY291bGQgYmUgcGFy dGlhbGx5IHdyaXR0ZW4gdG8gdGhlIHF1ZXVlIGR1ZSB0byBzZW5kIHRpbWVvdXQgYW5kCisgKiB0 aGVyZSBpcyBubyB3YXkgdG8gY2xlYW4gdGhlIHF1ZXVlIG90aGVyIHRoYW4gcmVzZW5kaW5nIHRo ZSBtZXNzYWdlIHVudGlsIGl0CisgKiBzdWNjZWVkcy4gVG8gYXZvaWQgY29tcGxleGl0eSwgd2Ug ZGlyZWN0bHkgc3RvcCB0aGUgd29ya2VyIGluIHRoaXMgY2FzZS4KKyAqCisgKiBJZiB0aGUgd29y a2VyIGlzIHN0b3BwZWQgYW5kIGZyZWVfd29ya2VyX2luZm8gaXMgdHJ1ZSwgdGhlIHdvcmtlcgor ICogaW5mb3JtYXRpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBhcmFsbGVsQXBwbHlXb3Jr ZXJzTGlzdCBhbmQgdGhlIG1lbW9yeQorICogb2YgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgZnJl ZWQuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHdvcmtlciBpcyBzdG9wcGVkLCBmYWxzZSBv dGhlcndpc2UuCisgKgorICogRG8gbm90aGluZyBpZiB0aGUgd29ya2VyIGlzIG5vdCBiZWluZyB1 c2VkLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIgcG9vbCwg c2VlIGNvbW1lbnRzIGF0b3Agd29ya2VyLmMuCisgKi8KK2Jvb2wKK3BhcmFsbGVsX2FwcGx5X2Zy ZWVfd29ya2VyKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4 aWQsCisJCQkJCQkgICBib29sIGZyZWVfd29ya2VyX2luZm8pCit7CisJaW50CQkJbmFwcGx5d29y a2VyczsKKworCUFzc2VydCghYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpOworCisJaWYgKCF3 aW5mby0+aW5fdXNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIERvbid0IGZyZWUgdGhl IHdvcmtlciBpZiB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIHdvcmtlciBpcyBzdGlsbCBpbgorCSAq IHByb2dyZXNzLiBUaGlzIGNvdWxkIGhhcHBlbiBhcyB3ZSBkb24ndCB3YWl0IGZvciB0cmFuc2Fj dGlvbiByb2xsYmFjaworCSAqIHRvIGZpbmlzaC4KKwkgKi8KKwlpZiAocGFyYWxsZWxfYXBwbHlf Z2V0X3hhY3Rfc3RhdGUod2luZm8tPnNoYXJlZCkgIT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQp CisJCXJldHVybiBmYWxzZTsKKworCWlmICghaGFzaF9zZWFyY2goUGFyYWxsZWxBcHBseVdvcmtl cnNIYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgTlVMTCkpCisJCWVsb2coRVJST1IsICJoYXNoIHRh YmxlIGNvcnJ1cHRlZCIpOworCisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywg TFdfU0hBUkVEKTsKKwluYXBwbHl3b3JrZXJzID0gbG9naWNhbHJlcF9wYXJhbGxlbF9hcHBseV93 b3JrZXJfY291bnQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCk7CisJTFdMb2NrUmVsZWFzZShM b2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFs aXplZCBjaGFuZ2VzLiAqLworCWlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpCisJCXN0cmVh bV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkvKgor CSAqIFN0b3AgdGhlIHdvcmtlciBpZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHBv b2wgb3IgdGhlIGxlYWRlcgorCSAqIGFwcGx5IHdvcmtlciBzZXJpYWxpemVkIHBhcnQgb2YgdGhl IHRyYW5zYWN0aW9uIGRhdGEgdG8gYSBmaWxlIGR1ZSB0bworCSAqIHNlbmQgdGltZW91dC4KKwkg Ki8KKwlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzIHx8CisJCW5hcHBseXdvcmtlcnMgPiAo bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiAvIDIpKQorCXsKKwkJ aW50CQkJc2xvdF9ubzsKKwkJdWludDE2CQlnZW5lcmF0aW9uOworCisJCS8qCisJCSAqIERldGFj aCB0aGUgZXJyb3IgcXVldWUgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIKKwkJICogdG8gcHJldmVudCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBmcm9tIHJlY2Vp dmluZyB0aGUgd29ya2VyCisJCSAqIHRlcm1pbmF0aW9uIG1lc3NhZ2Ugd2hpY2ggd2lsbCBjYXVz ZSB0aGUgbGVhZGVyIHRvIGV4aXQuCisJCSAqLworCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJv cl9tcV9oYW5kbGUpOworCQl3aW5mby0+ZXJyb3JfbXFfaGFuZGxlID0gTlVMTDsKKworCQlTcGlu TG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJc2xvdF9ubyA9IHdpbmZvLT5z aGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm87CisJCWdlbmVyYXRpb24gPSB3aW5mby0+ c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOworCQlTcGluTG9ja1JlbGVhc2Uo JndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Ns b3Qoc2xvdF9ubywgZ2VuZXJhdGlvbik7CisKKwkJaWYgKGZyZWVfd29ya2VyX2luZm8pCisJCXsK KwkJCVBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IGxpc3RfZGVsZXRlX3B0cihQYXJhbGxlbEFw cGx5V29ya2Vyc0xpc3QsCisJCQkJCQkJCQkJCQkJICAgd2luZm8pOworCisJCQlwYXJhbGxlbF9h cHBseV9mcmVlX3dvcmtlcl9pbmZvKHdpbmZvKTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0K KworCXdpbmZvLT5pbl91c2UgPSBmYWxzZTsKKwl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSBm YWxzZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyogRnJlZSB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGluZm9ybWF0aW9uLiAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXJf aW5mbyhQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7CisJQXNzZXJ0KHdpbmZvKTsK KworCWlmICh3aW5mby0+bXFfaGFuZGxlICE9IE5VTEwpCisJCXNobV9tcV9kZXRhY2god2luZm8t Pm1xX2hhbmRsZSk7CisKKwlpZiAod2luZm8tPmVycm9yX21xX2hhbmRsZSAhPSBOVUxMKQorCQlz aG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpOworCisJaWYgKHdpbmZvLT5kc21f c2VnICE9IE5VTEwpCisJCWRzbV9kZXRhY2god2luZm8tPmRzbV9zZWcpOworCisJcGZyZWUod2lu Zm8pOworfQorCisvKgorICogUmVwbGF5IHRoZSBzcG9vbGVkIG1lc3NhZ2VzIGluIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgaWYgbGVhZGVyIGFwcGx5CisgKiB3b3JrZXIgaGFzIGZpbmlzaGVk IHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitwYXJh bGxlbF9hcHBseV9zcG9vbGVkX21lc3NhZ2VzKHZvaWQpCit7CisJTGVhZGVyRmlsZVNldFN0YXRl IGZpbGVzZXRfc3RhdGU7CisKKwkvKgorCSAqIENoZWNrIGlmIGNoYW5nZXMgaGF2ZSBiZWVuIHNl cmlhbGl6ZWQgdG8gZGlzay4gaWYgc28sIHJlYWQgYW5kIGFwcGx5CisJICogdGhlbS4KKwkgKi8K KwlTcGluTG9ja0FjcXVpcmUoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKwlmaWxlc2V0X3N0 YXRlID0gTXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldF9zdGF0ZTsKKwlTcGluTG9ja1JlbGVhc2Uo Jk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKworCS8qCisJICogQWNxdWlyZSB0aGUgc3RyZWFt IGxvY2sgaWYgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgaXMgc2VyaWFsaXppbmcKKwkgKiBjaGFu Z2VzIHRvIHRoZSBmaWxlLCBiZWNhdXNlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBu byBsb25nZXIKKwkgKiBoYXZlIGEgY2hhbmNlIHRvIHJlY2VpdmUgYSBTVFJFQU1fU1RPUCBhbmQg YWNxdWlyZSB0aGUgbG9jayB1bnRpbCB0aGUKKwkgKiBsZWFkZXIgc2VyaWFsaXplIGFsbCBjaGFu Z2VzIHRvIHRoZSBmaWxlLgorCSAqLworCWlmIChmaWxlc2V0X3N0YXRlID09IExFQURFUl9GSUxF U0VUX0JVU1kpCisJeworCQlwYXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hh cmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXBhcmFsbGVsX2FwcGx5X3VubG9ja19zdHJl YW0oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKwllbHNlIGlm IChmaWxlc2V0X3N0YXRlID09IExFQURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUpCisJeworCQlhcHBs eV9zcG9vbGVkX21lc3NhZ2VzKCZNeVBhcmFsbGVsU2hhcmVkLT5maWxlc2V0LAorCQkJCQkJCSAg IE15UGFyYWxsZWxTaGFyZWQtPnhpZCwKKwkJCQkJCQkgICBJbnZhbGlkWExvZ1JlY1B0cik7CisJ CXBhcmFsbGVsX2FwcGx5X3NldF9maWxlc2V0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIExFQURF Ul9GSUxFU0VUX1VOS05PV04pOworCX0KK30KKworLyogUGFyYWxsZWwgYXBwbHkgd29ya2VyIG1h aW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Aoc2htX21x X2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQgc2htcV9yZXM7CisJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBDdXJyZW50TWVt b3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUgQXBwbHlNZXNzYWdlQ29udGV4dCB3aGlj aCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9uCisJICogcHJvdG9jb2wgbWVzc2Fn ZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEFw cGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3NhZ2VDb250ZXh0IiwKKwkJCQkJCQkJ CQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBQdXNoIGFwcGx5IGVycm9y IGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZpbGxlZCB3aGlsZSBhcHBseWluZwor CSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gYXBwbHlfZXJyb3Jf Y2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwor CWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwlmb3IgKDs7KQorCXsKKwkJ dm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CisKKwkJLyogRW5zdXJlIHdlIGFyZSByZWFkaW5nIHRoZSBkYXRhIGludG8gb3VyIG1lbW9yeSBj b250ZXh0LiAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlNZXNzYWdlQ29udGV4dCk7 CisKKwkJc2htcV9yZXMgPSBzaG1fbXFfcmVjZWl2ZShtcWgsICZsZW4sICZkYXRhLCB0cnVlKTsK KworCQlpZiAoc2htcV9yZXMgPT0gU0hNX01RX1NVQ0NFU1MpCisJCXsKKwkJCVN0cmluZ0luZm9E YXRhIHM7CisJCQlpbnQJCQljOworCisJCQlpZiAobGVuID09IDApCisJCQkJYnJlYWs7CisKKwkJ CXMuY3Vyc29yID0gMDsKKwkJCXMubWF4bGVuID0gLTE7CisJCQlzLmRhdGEgPSAoY2hhciAqKSBk YXRhOworCQkJcy5sZW4gPSBsZW47CisKKwkJCS8qCisJCQkgKiBUaGUgZmlyc3QgYnl0ZSBvZiBt ZXNzYWdlcyBzZW50IGZyb20gbGVhZGVyIGFwcGx5IHdvcmtlciB0bworCQkJICogcGFyYWxsZWwg YXBwbHkgd29ya2VycyBjYW4gb25seSBiZSAndycuCisJCQkgKi8KKwkJCWMgPSBwcV9nZXRtc2di eXRlKCZzKTsKKwkJCWlmIChjICE9ICd3JykKKwkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBt ZXNzYWdlIFwiJWNcIiIsIGMpOworCisJCQkvKgorCQkJICogSWdub3JlIHN0YXRpc3RpY3MgZmll bGRzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgdGhlIGxlYWRlcgorCQkJICogYXBwbHkgd29y a2VyLgorCQkJICovCisJCQlzLmN1cnNvciArPSBTSVpFX1NUQVRTX01FU1NBR0U7CisKKwkJCWFw cGx5X2Rpc3BhdGNoKCZzKTsKKworCQkJTWVtb3J5Q29udGV4dFJlc2V0KEFwcGx5TWVzc2FnZUNv bnRleHQpOworCQl9CisJCWVsc2UgaWYgKHNobXFfcmVzID09IFNITV9NUV9XT1VMRF9CTE9DSykK KwkJeworCQkJaW50CQkJcmM7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3Nwb29sZWRfbWVzc2FnZXMo KTsKKworCQkJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIElmIHdlIGRpZG4ndCBnZXQgYW55IHRyYW5zYWN0aW9ucyBmb3IgYSB3aGlsZSB0aGVyZSBt aWdodAorCQkJCSAqIGJlIHVuY29uc3VtZWQgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGluIHRoZSBx dWV1ZSwgY29uc3VtZQorCQkJCSAqIHRoZW0gbm93LgorCQkJCSAqLworCQkJCUFjY2VwdEludmFs aWRhdGlvbk1lc3NhZ2VzKCk7CisJCQkJbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOworCQkJ fQorCisJCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29udGV4dCk7CisJCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCQkJLyogV2FpdCBmb3IgbW9yZSB3b3JrLiAq LworCQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICAgMTAwMEwsCisJCQkJCQkg ICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTik7CisKKwkJCWlmIChyYyAm IFdMX0xBVENIX1NFVCkKKwkJCXsKKwkJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisJCQl9CisKKwkJCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQor CQkJeworCQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJCQlQcm9jZXNzQ29uZmln RmlsZShQR0NfU0lHSFVQKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChzaG1x X3JlcyA9PSBTSE1fTVFfREVUQUNIRUQpOworCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVy cm1zZygibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIikpKTsKKwkJ fQorCX0KKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjay4gKi8KKwllcnJvcl9jb250 ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3h0KTsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciB0cmllcyB0byByZWFkIGZyb20gb3VyIGVycm9yIHF1ZXVlIG9uZSBtb3JlCisgKiB0aW1lLiBU aGlzIGd1YXJkcyBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHdlIGV4aXQgdW5jbGVhbmx5IHdpdGhv dXQgc2VuZGluZworICogYW4gRXJyb3JSZXNwb25zZSwgZm9yIGV4YW1wbGUgYmVjYXVzZSBzb21l IGNvZGUgY2FsbHMgcHJvY19leGl0IGRpcmVjdGx5LgorICovCitzdGF0aWMgdm9pZAorcGFyYWxs ZWxfYXBwbHlfc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlTZW5kUHJvY1NpZ25h bChNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQsCisJCQkJICAgUFJPQ1NJR19Q QVJBTExFTF9BUFBMWV9NRVNTQUdFLAorCQkJCSAgIEludmFsaWRCYWNrZW5kSWQpOworCisJZHNt X2RldGFjaCgoZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQb2ludGVyKGFyZykpOworfQorCisvKgor ICogUGFyYWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5IHBvaW50LgorICovCit2b2lkCitQYXJhbGxl bEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwlQYXJhbGxlbEFwcGx5V29ya2Vy U2hhcmVkICpzaGFyZWQ7CisJZHNtX2hhbmRsZQloYW5kbGU7CisJZHNtX3NlZ21lbnQgKnNlZzsK KwlzaG1fdG9jICAgICp0b2M7CisJc2htX21xCSAgICptcTsKKwlzaG1fbXFfaGFuZGxlICptcWg7 CisJc2htX21xX2hhbmRsZSAqZXJyb3JfbXFoOworCVJlcE9yaWdpbklkIG9yaWdpbmlkOworCWlu dAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3JpZ2lu bmFtZVtOQU1FREFUQUxFTl07CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcuICovCisJcHFz aWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChT SUdURVJNLCBkaWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoK KwkgKiBBdHRhY2ggdG8gdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciB0aGUg cGFyYWxsZWwgYXBwbHksIGFuZAorCSAqIGZpbmQgaXRzIHRhYmxlIG9mIGNvbnRlbnRzLgorCSAq CisJICogTGlrZSBwYXJhbGxlbCBxdWVyeSwgd2UgZG9uJ3QgbmVlZCByZXNvdXJjZSBvd25lciBi eSB0aGlzIHRpbWUuIFNlZQorCSAqIFBhcmFsbGVsV29ya2VyTWFpbi4KKwkgKi8KKwltZW1jcHko JmhhbmRsZSwgTXlCZ3dvcmtlckVudHJ5LT5iZ3dfZXh0cmEsIHNpemVvZihkc21faGFuZGxlKSk7 CisJc2VnID0gZHNtX2F0dGFjaChoYW5kbGUpOworCWlmIChzZWcgPT0gTlVMTCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ1bmFibGUgdG8gbWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9y eSBzZWdtZW50IikpKTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNoKFBHX0xPR0lDQUxfQVBQTFlf U0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZykpOworCWlmICh0b2MgPT0gTlVMTCkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJF UkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJiYWQgbWFnaWMgbnVtYmVyIGluIGR5bmFt aWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCWJlZm9yZV9zaG1lbV9leGl0KHBhcmFs bGVsX2FwcGx5X3NodXRkb3duLCBQb2ludGVyR2V0RGF0dW0oc2VnKSk7CisKKwkvKiBMb29rIHVw IHRoZSBzaGFyZWQgaW5mb3JtYXRpb24uICovCisJc2hhcmVkID0gc2htX3RvY19sb29rdXAodG9j LCBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVELCBmYWxzZSk7CisJTXlQYXJhbGxlbFNoYXJlZCA9 IHNoYXJlZDsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBtZXNzYWdlIHF1ZXVlLgorCSAqLwor CW1xID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfTVEsIGZhbHNlKTsK KwlzaG1fbXFfc2V0X3JlY2VpdmVyKG1xLCBNeVByb2MpOworCW1xaCA9IHNobV9tcV9hdHRhY2go bXEsIHNlZywgTlVMTCk7CisKKwkvKgorCSAqIFByaW1hcnkgaW5pdGlhbGl6YXRpb24gaXMgY29t cGxldGUuIE5vdywgd2UgY2FuIGF0dGFjaCB0byBvdXIgc2xvdC4KKwkgKiBUaGlzIGlzIHRvIGVu c3VyZSB0aGF0IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGRvZXMgbm90IHdyaXRlIGRhdGEgdG8K KwkgKiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcXVldWUuCisJICovCisJbG9naWNhbHJlcF93 b3JrZXJfYXR0YWNoKHdvcmtlcl9zbG90KTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQYXJhbGxl bFNoYXJlZC0+bXV0ZXgpOworCU15UGFyYWxsZWxTaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dl bmVyYXRpb24gPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmdlbmVyYXRpb247CisJTXlQYXJhbGxlbFNo YXJlZC0+bG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubyA9IHdvcmtlcl9zbG90OworCVNwaW5Mb2Nr UmVsZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworCisJLyoKKwkgKiBBdHRhY2ggdG8g dGhlIGVycm9yIHF1ZXVlLgorCSAqLworCW1xID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExF TF9BUFBMWV9LRVlfRVJST1JfUVVFVUUsIGZhbHNlKTsKKwlzaG1fbXFfc2V0X3NlbmRlcihtcSwg TXlQcm9jKTsKKwllcnJvcl9tcWggPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJ cHFfcmVkaXJlY3RfdG9fc2htX21xKHNlZywgZXJyb3JfbXFoKTsKKwlwcV9zZXRfcGFyYWxsZWxf bGVhZGVyKE15TG9naWNhbFJlcFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCwKKwkJCQkJCSAgIElu dmFsaWRCYWNrZW5kSWQpOworCisJTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9 IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQorCQlNeUxvZ2ljYWxSZXBXb3Jr ZXItPnJlcGx5X3RpbWUgPSAwOworCisJSW5pdGlhbGl6ZUFwcGx5V29ya2VyKCk7CisKKwkvKiBT ZXR1cCByZXBsaWNhdGlvbiBvcmlnaW4gdHJhY2tpbmcuICovCisJU3RhcnRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwlSZXBsaWNhdGlvbk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE15U3Vic2NyaXB0 aW9uLT5vaWQsIEludmFsaWRPaWQsCisJCQkJCQkJCQkgICBvcmlnaW5uYW1lLCBzaXplb2Yob3Jp Z2lubmFtZSkpOworCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUsIHRy dWUpOworCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCisJCW9yaWdpbmlkID0gcmVwbG9yaWdp bl9jcmVhdGUob3JpZ2lubmFtZSk7CisKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZG9lc24ndCBuZWVkIHRvIG1vbm9wb2xpemUgdGhpcyByZXBsaWNhdGlvbgorCSAqIG9yaWdp biB3aGljaCB3YXMgYWxyZWFkeSBhY3F1aXJlZCBieSBpdHMgbGVhZGVyIHByb2Nlc3MuCisJICov CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCBNeUxvZ2ljYWxSZXBXb3JrZXIt PmFwcGx5X2xlYWRlcl9waWQpOworCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5p ZDsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogU2V0dXAgY2FsbGJh Y2sgZm9yIHN5c2NhY2hlIHNvIHRoYXQgd2Uga25vdyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzIGlu CisJICogdGhlIHN1YnNjcmlwdGlvbiByZWxhdGlvbiBzdGF0ZS4KKwkgKi8KKwlDYWNoZVJlZ2lz dGVyU3lzY2FjaGVDYWxsYmFjayhTVUJTQ1JJUFRJT05SRUxNQVAsCisJCQkJCQkJCSAgaW52YWxp ZGF0ZV9zeW5jaW5nX3RhYmxlX3N0YXRlcywKKwkJCQkJCQkJICAoRGF0dW0pIDApOworCisJLyoK KwkgKiBBbGxvY2F0ZSB0aGUgb3JpZ2luIG5hbWUgaW4gYSBsb25nLWxpdmVkIGNvbnRleHQgZm9y IGVycm9yIGNvbnRleHQKKwkgKiBtZXNzYWdlLgorCSAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNr X2FyZy5vcmlnaW5fbmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0LAorCQkJ CQkJCQkJCQkJCQkJICAgb3JpZ2lubmFtZSk7CisKKwlMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Ao bXFoKTsKKworCXByb2NfZXhpdCgwKTsKK30KKworLyoKKyAqIEhhbmRsZSByZWNlaXB0IG9mIGFu IGludGVycnVwdCBpbmRpY2F0aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1lc3NhZ2UuCisg KgorICogTm90ZTogdGhpcyBpcyBjYWxsZWQgd2l0aGluIGEgc2lnbmFsIGhhbmRsZXIhICBBbGwg d2UgY2FuIGRvIGlzIHNldCBhIGZsYWcKKyAqIHRoYXQgd2lsbCBjYXVzZSB0aGUgbmV4dCBDSEVD S19GT1JfSU5URVJSVVBUUygpIHRvIGludm9rZQorICogSGFuZGxlUGFyYWxsZWxBcHBseU1lc3Nh Z2VzKCkuCisgKi8KK3ZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZv aWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQ ZW5kaW5nID0gdHJ1ZTsKKwlTZXRMYXRjaChNeUxhdGNoKTsKK30KKworLyoKKyAqIEhhbmRsZSBh IHNpbmdsZSBwcm90b2NvbCBtZXNzYWdlIHJlY2VpdmVkIGZyb20gYSBzaW5nbGUgcGFyYWxsZWwg YXBwbHkKKyAqIHdvcmtlci4KKyAqLworc3RhdGljIHZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlN ZXNzYWdlKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU3RyaW5nSW5mbyBtc2cpCit7 CisJY2hhcgkJbXNndHlwZTsKKworCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKG1zZyk7CisKKwlz d2l0Y2ggKG1zZ3R5cGUpCisJeworCQljYXNlICdFJzoJCQkJLyogRXJyb3JSZXNwb25zZSAqLwor CQkJeworCQkJCUVycm9yRGF0YQllZGF0YTsKKworCQkJCS8qIFBhcnNlIEVycm9yUmVzcG9uc2Uu ICovCisJCQkJcHFfcGFyc2VfZXJyb3Jub3RpY2UobXNnLCAmZWRhdGEpOworCisJCQkJLyogRGVh dGggb2YgYSB3b3JrZXIgaXNuJ3QgZW5vdWdoIGp1c3RpZmljYXRpb24gZm9yIHN1aWNpZGUuICov CisJCQkJZWRhdGEuZWxldmVsID0gTWluKGVkYXRhLmVsZXZlbCwgRVJST1IpOworCisJCQkJLyoK KwkJCQkgKiBJZiBkZXNpcmVkLCBhZGQgYSBjb250ZXh0IGxpbmUgdG8gc2hvdyB0aGF0IHRoaXMg aXMgYQorCQkJCSAqIG1lc3NhZ2UgcHJvcGFnYXRlZCBmcm9tIGEgcGFyYWxsZWwgYXBwbHkgd29y a2VyLiBPdGhlcndpc2UsCisJCQkJICogaXQgY2FuIHNvbWV0aW1lcyBiZSBjb25mdXNpbmcgdG8g dW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5CisJCQkJICogaGFwcGVuZWQuCisJCQkJICovCisJCQkJ aWYgKGVkYXRhLmNvbnRleHQpCisJCQkJCWVkYXRhLmNvbnRleHQgPSBwc3ByaW50ZigiJXNcbiVz IiwgZWRhdGEuY29udGV4dCwKKwkJCQkJCQkJCQkJIF8oInBhcmFsbGVsIGFwcGx5IHdvcmtlciIp KTsKKwkJCQllbHNlCisJCQkJCWVkYXRhLmNvbnRleHQgPSBwc3RyZHVwKF8oInBhcmFsbGVsIGFw cGx5IHdvcmtlciIpKTsKKworCQkJCS8qCisJCQkJICogQ29udGV4dCBiZXlvbmQgdGhhdCBzaG91 bGQgdXNlIHRoZSBlcnJvciBjb250ZXh0IGNhbGxiYWNrcworCQkJCSAqIHRoYXQgd2VyZSBpbiBl ZmZlY3QgaW4gTG9naWNhbFJlcEFwcGx5TG9vcCgpLgorCQkJCSAqLworCQkJCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrOworCisJCQkJVGhyb3dFcnJvckRh dGEoJmVkYXRhKTsKKworCQkJCS8qIFNob3VsZCBub3QgcmVhY2ggaGVyZSBhZnRlciByZXRocm93 aW5nIGFuIGVycm9yLiAqLworCQkJCUFzc2VydChmYWxzZSk7CisJCQl9CisKKwkJCS8qCisJCQkg KiBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGFib3V0IE5vdGljZVJlc3BvbnNlIGFuZAorCQkJ ICogTm90aWZ5UmVzcG9uc2UgYXMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGRvZXNu J3QgbmVlZAorCQkJICogdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCQkJICovCisJ CWNhc2UgJ04nOgorCQljYXNlICdBJzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBtZXNzYWdlIHR5cGUgcmVjZWl2ZWQgZnJvbSBwYXJhbGxlbCBh cHBseSB3b3JrZXI6ICVjIChtZXNzYWdlIGxlbmd0aCAlZCBieXRlcykiLAorCQkJCSBtc2d0eXBl LCBtc2ctPmxlbik7CisJfQorfQorCisvKgorICogSGFuZGxlIGFueSBxdWV1ZWQgcHJvdG9jb2wg bWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICovCit2b2lk CitIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXModm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlzdGF0aWMgTWVtb3J5Q29udGV4dCBocGFt X2NvbnRleHQgPSBOVUxMOworCisJLyoKKwkgKiBUaGlzIGlzIGludm9rZWQgZnJvbSBQcm9jZXNz SW50ZXJydXB0cygpLCBhbmQgc2luY2Ugc29tZSBvZiB0aGUKKwkgKiBmdW5jdGlvbnMgaXQgY2Fs bHMgY29udGFpbiBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB0aGVyZSBpcyBhIHBvdGVudGlhbAor CSAqIGZvciByZWN1cnNpdmUgY2FsbHMgaWYgbW9yZSBzaWduYWxzIGFyZSByZWNlaXZlZCB3aGls ZSB0aGlzIHJ1bnMuICBJdCdzCisJICogdW5jbGVhciB0aGF0IHJlY3Vyc2l2ZSBlbnRyeSB3b3Vs ZCBiZSBzYWZlLCBhbmQgaXQgZG9lc24ndCBzZWVtIHVzZWZ1bAorCSAqIGV2ZW4gaWYgaXQgaXMg c2FmZSwgc28gbGV0J3MgYmxvY2sgaW50ZXJydXB0cyB1bnRpbCBkb25lLgorCSAqLworCUhPTERf SU5URVJSVVBUUygpOworCisJLyoKKwkgKiBNb3Jlb3ZlciwgQ3VycmVudE1lbW9yeUNvbnRleHQg bWlnaHQgYmUgcG9pbnRpbmcgYWxtb3N0IGFueXdoZXJlLiAgV2UKKwkgKiBkb24ndCB3YW50IHRv IHJpc2sgbGVha2luZyBkYXRhIGludG8gbG9uZy1saXZlZCBjb250ZXh0cywgc28gbGV0J3MgZG8K KwkgKiBvdXIgd29yayBoZXJlIGluIGEgcHJpdmF0ZSBjb250ZXh0IHRoYXQgd2UgY2FuIHJlc2V0 IG9uIGVhY2ggdXNlLgorCSAqLworCWlmIChocGFtX2NvbnRleHQgPT0gTlVMTCkJLyogZmlyc3Qg dGltZSB0aHJvdWdoPyAqLworCQlocGFtX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUo VG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJICJIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2Fn ZXMiLAorCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJZWxzZQorCQlNZW1v cnlDb250ZXh0UmVzZXQoaHBhbV9jb250ZXh0KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oaHBhbV9jb250ZXh0KTsKKworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGlu ZyA9IGZhbHNlOworCisJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0KQorCXsK KwkJc2htX21xX3Jlc3VsdCByZXM7CisJCVNpemUJCW5ieXRlczsKKwkJdm9pZAkgICAqZGF0YTsK KwkJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCXJlcyA9IHNobV9tcV9yZWNlaXZlKHdpbmZvLT5lcnJvcl9t cV9oYW5kbGUsICZuYnl0ZXMsICZkYXRhLCB0cnVlKTsKKworCQlpZiAocmVzID09IFNITV9NUV9X T1VMRF9CTE9DSykKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChyZXMgPT0gU0hNX01RX1NVQ0NF U1MpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIG1zZzsKKworCQkJaW5pdFN0cmluZ0luZm8oJm1z Zyk7CisJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZtc2csIGRhdGEsIG5ieXRlcyk7CisJCQlI YW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZSh3aW5mbywgJm1zZyk7CisJCQlwZnJlZShtc2cuZGF0 YSk7CisJCX0KKwkJZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3Qg Y29ubmVjdGlvbiB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpKTsKKwl9CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBNaWdodCBhcyB3ZWxsIGNsZWFy IHRoZSBjb250ZXh0IG9uIG91ciB3YXkgb3V0ICovCisJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1f Y29udGV4dCk7CisKKwlSRVNVTUVfSU5URVJSVVBUUygpOworfQorCisvKgorICogU2V0IHVwIGEg ZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29udHJv bCByZWdpb24gdGhhdCBjb250YWlucyBhIGZpeGVkLXNpemUgd29ya2VyIGluZm8KKyAqIChQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkKSwgYSBtZXNzYWdlIHF1ZXVlLCBhbmQgYW4gZXJyb3IgcXVl dWUuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCisg Ki8KK3N0YXRpYyBib29sCitwYXJhbGxlbF9hcHBseV9zZXR1cF9kc20oUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvKQoreworCXNobV90b2NfZXN0aW1hdG9yIGU7CisJU2l6ZQkJc2Vnc2l6 ZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlQYXJhbGxlbEFwcGx5 V29ya2VyU2hhcmVkICpzaGFyZWQ7CisJc2htX21xCSAgICptcTsKKwlTaXplCQlxdWV1ZV9zaXpl ID0gRFNNX1FVRVVFX1NJWkU7CisJU2l6ZQkJZXJyb3JfcXVldWVfc2l6ZSA9IERTTV9FUlJPUl9R VUVVRV9TSVpFOworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdl IG5lZWQuCisJICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8g aW5zZXJ0IHBhZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3Rp bWF0ZSBlYWNoIGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8g cmVnaXN0ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB0d28gb3RoZXIKKwkgKiBr ZXlzIHRvIHRyYWNrIHRoZSBsb2NhdGlvbnMgb2YgdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHRoZSBl cnJvciBtZXNzYWdlCisJICogcXVldWUuCisJICovCisJc2htX3RvY19pbml0aWFsaXplX2VzdGlt YXRvcigmZSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgc2l6ZW9mKFBhcmFsbGVsQXBw bHlXb3JrZXJTaGFyZWQpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXpl KTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBlcnJvcl9xdWV1ZV9zaXplKTsKKworCXNo bV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMyk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUo JmUpOworCisJLyogQ3JlYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlz aCBhIHRhYmxlIG9mIGNvbnRlbnRzLiAqLworCXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3Rp bWF0ZSgmZSksIDApOworCWlmIChzZWcgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJdG9j ID0gc2htX3RvY19jcmVhdGUoUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50 X2FkZHJlc3Moc2VnKSwKKwkJCQkJCSBzZWdzaXplKTsKKworCS8qIFNldCB1cCB0aGUgaGVhZGVy IHJlZ2lvbi4gKi8KKwlzaGFyZWQgPSBzaG1fdG9jX2FsbG9jYXRlKHRvYywgc2l6ZW9mKFBhcmFs bGVsQXBwbHlXb3JrZXJTaGFyZWQpKTsKKwlTcGluTG9ja0luaXQoJnNoYXJlZC0+bXV0ZXgpOwor CisJc2hhcmVkLT54YWN0X3N0YXRlID0gUEFSQUxMRUxfVFJBTlNfVU5LTk9XTjsKKwlwZ19hdG9t aWNfaW5pdF91MzIoJihzaGFyZWQtPnBlbmRpbmdfbWVzc2FnZV9jb3VudCksIDApOworCisJc2ht X3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVELCBzaGFyZWQpOworCisJ LyogU2V0IHVwIG1lc3NhZ2UgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBzaG1fbXFf Y3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBxdWV1ZV9zaXplKSwgcXVldWVfc2l6ZSk7CisJ c2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfTVEsIG1xKTsKKwlzaG1fbXFf c2V0X3NlbmRlcihtcSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0aGUgcXVldWUuICovCisJd2lu Zm8tPm1xX2hhbmRsZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwkvKiBTZXQg dXAgZXJyb3IgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBzaG1fbXFfY3JlYXRlKHNo bV90b2NfYWxsb2NhdGUodG9jLCBlcnJvcl9xdWV1ZV9zaXplKSwKKwkJCQkJICAgZXJyb3JfcXVl dWVfc2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfRVJST1Jf UVVFVUUsIG1xKTsKKwlzaG1fbXFfc2V0X3JlY2VpdmVyKG1xLCBNeVByb2MpOworCisJLyogQXR0 YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+ZXJyb3JfbXFfaGFuZGxlID0gc2htX21xX2F0dGFj aChtcSwgc2VnLCBOVUxMKTsKKworCS8qIFJldHVybiByZXN1bHRzIHRvIGNhbGxlci4gKi8KKwl3 aW5mby0+ZHNtX3NlZyA9IHNlZzsKKwl3aW5mby0+c2hhcmVkID0gc2hhcmVkOworCisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBTdGFydCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgcHJvY2VzcyBh bmQgYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSBmb3IgaXQuCisgKi8KK3N0YXRpYyBQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqCitwYXJhbGxlbF9hcHBseV9zZXR1cF93b3JrZXIodm9pZCkKK3sKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJYm9vbAkJbGF1bmNoZWQ7CisJUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKndpbmZvOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhBcHBseUNvbnRleHQpOworCisJd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikg cGFsbG9jMChzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlckluZm8pKTsKKworCS8qIFNldHVwIHNo YXJlZCBtZW1vcnkuICovCisJaWYgKCFwYXJhbGxlbF9hcHBseV9zZXR1cF9kc20od2luZm8pKQor CXsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQlwZnJlZSh3aW5mbyk7 CisKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbGF1bmNoZWQgPSBsb2dpY2FscmVwX3dvcmtlcl9s YXVuY2goTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0aW9u LT5vaWQsCisJCQkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQkJCQkJTXlMb2dp Y2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJSW52YWxpZE9pZCwKKwkJCQkJCQkJCQlk c21fc2VnbWVudF9oYW5kbGUod2luZm8tPmRzbV9zZWcpKTsKKworCWlmIChsYXVuY2hlZCkKKwl7 CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IGxhcHBlbmQoUGFyYWxsZWxBcHBseVdvcmtl cnNMaXN0LCB3aW5mbyk7CisJfQorCWVsc2UKKwl7CisJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29y a2VyX2luZm8od2luZm8pOworCisJCXdpbmZvID0gTlVMTDsKKwl9CisKKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gd2luZm87Cit9CisKKy8qCisgKiBTZW5k IHRoZSBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHZpYSBzaGFy ZWQtbWVtb3J5CisgKiBxdWV1ZS4KKyAqCisgKiBXaGVuIHNlbmRpbmcgZGF0YSB0aW1lcyBvdXQs IGRhdGEgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGRpc2suIEFuZCB0aGUKKyAqIGN1cnJlbnQgc3Ry ZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgZW50ZXIgUEFSVElBTF9TRVJJQUxJWkUgbW9kZSwgd2hp Y2ggbWVhbnMKKyAqIHRoYXQgc3Vic2VxdWVudCBkYXRhIHdpbGwgYWxzbyBiZSBzZXJpYWxpemVk IHRvIGRpc2suCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YShQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAorCQkJCQkJIGNvbnN0IHZvaWQgKmRh dGEpCit7CisJaW50CQkJcmV0cnkgPSAwOworCXNobV9tcV9yZXN1bHQgcmVzdWx0OworCVRpbWVz dGFtcFR6IHN0YXJ0VGltZSA9IDA7CisKKwlBc3NlcnQoIXdpbmZvLT5zZXJpYWxpemVfY2hhbmdl cyk7CisJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisKKyNkZWZpbmUgUkVUUllfQ09V TlRfVEhSRVNIT0xECTEwMDAKKyNkZWZpbmUgU0hNX1NFTkRfVElNRU9VVF9NUwkJMTAwMDAKKwor CWZvciAoOzspCisJeworCQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxlLCBu Ynl0ZXMsIGRhdGEsIHRydWUsIHRydWUpOworCisJCWlmIChyZXN1bHQgPT0gU0hNX01RX1NVQ0NF U1MpCisJCQlicmVhazsKKwkJZWxzZSBpZiAocmVzdWx0ID09IFNITV9NUV9ERVRBQ0hFRCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBkYXRhIHRvIHNo YXJlZC1tZW1vcnkgcXVldWUiKSkpOworCisJCUFzc2VydChyZXN1bHQgPT0gU0hNX01RX1dPVUxE X0JMT0NLKTsKKworCQkvKgorCQkgKiBPbmx5IGNoZWNrIGZvciB0aW1lb3V0IGFmdGVyIGNvbnRp bnVvdXNseSByZXRyeWluZworCQkgKiBSRVRSWV9DT1VOVF9USFJFU0hPTEQgdGltZXMsIHRoaXMg aXMgdG8gcmVkdWNlIHRoZSBjb3N0IG9mIGdldHRpbmcKKwkJICogdGhlIHN5c3RlbSB0aW1lIGFu ZCBjYWxjdWxhdGluZyB0aGUgdGltZSBkaWZmZXJlbmNlLgorCQkgKi8KKwkJaWYgKCsrcmV0cnkg Pj0gUkVUUllfQ09VTlRfVEhSRVNIT0xEKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisJ CQlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb247CisJCQlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisKKwkJCWlmIChzdGFydFRpbWUgPT0gMCkKKwkJCQlzdGFydFRpbWUg PSBub3c7CisKKwkJCWlmICghVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMoc3RhcnRUaW1lLCBu b3csIFNITV9TRU5EX1RJTUVPVVRfTVMpKQorCQkJeworCQkJCXJldHJ5ID0gMDsKKwkJCQljb250 aW51ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbWln aHQgYmUgc3R1Y2sgZm9yIHNvbWUgcmVhc29uLCBzbworCQkJICogc3RvcCBzZW5kaW5nIGRhdGEg dG8gcGFyYWxsZWwgd29ya2VyIGFuZCBzdGFydCB0byBzZXJpYWxpemUKKwkJCSAqIGRhdGEgdG8g ZmlsZXMuCisJCQkgKi8KKwkJCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IHRydWU7CisKKwkJ CWluaXRTdHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmbXNnLCBk YXRhLCBuYnl0ZXMpOworCisJCQkvKiBTa2lwIGZpcnN0IGJ5dGUgYW5kIHN0YXRpc3RpY3MgZmll bGRzLiAqLworCQkJbXNnLmN1cnNvciArPSBTSVpFX1NUQVRTX01FU1NBR0UgKyAxOworCisJCQkv KiBJbml0aWFsaXplIHRoZSBzdHJlYW0gZmlsZXNldC4gKi8KKwkJCXNlcmlhbGl6ZV9zdHJlYW1f c3RhcnQod2luZm8tPnNoYXJlZC0+eGlkLCB0cnVlKTsKKworCQkJLyogV3JpdGUgdGhpcyBtZXNz YWdlIHRvIGEgZmlsZS4gKi8KKwkJCWFjdGlvbiA9IHBxX2dldG1zZ2J5dGUoJm1zZyk7CisJCQlz dHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgJm1zZyk7CisKKwkJCS8qCisJCQkgKiBUaGUgc3Ry ZWFtIGxvY2sgaXMgcmVsZWFzZWQgd2hlbiBwcm9jZXNzaW5nIGNoYW5nZXMgaW4gYQorCQkJICog c3RyZWFtaW5nIGJsb2NrLCBzbyB0aGUgbGVhZGVyIG5lZWRzIHRvIGFjcXVpcmUgdGhlIGxvY2sg aGVyZQorCQkJICogYmVmb3JlIGVudGVyaW5nIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUgdG8gZW5z dXJlIHRoYXQgdGhlCisJCQkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCB3YWl0IGZvciB0 aGUgbGVhZGVyIHRvIHJlbGVhc2UgdGhlCisJCQkgKiBzdHJlYW0gbG9jay4KKwkJCSAqLworCQkJ aWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uICYmCisJCQkJYWN0aW9uICE9IExPR0lDQUxfUkVQ X01TR19TVFJFQU1fU1RPUCkKKwkJCXsKKwkJCQlwYXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbSh3 aW5mby0+c2hhcmVkLT54aWQsCisJCQkJCQkJCQkJICAgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJ CQl9CisKKwkJCS8qCisJCQkgKiBDbG9zZSB0aGUgc3RyZWFtIGZpbGUgaWYgbm90IGluIGEgc3Ry ZWFtaW5nIGJsb2NrIG9yIHRoZQorCQkJICogbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgaXMgdGhl IGxhc3QgbWVzc2FnZSBvZiBhIHN0cmVhbWluZworCQkJICogYmxvY2suCisJCQkgKi8KKwkJCWVs c2UKKwkJCXsKKwkJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aod2luZm8tPnNoYXJlZC0+eGlkKTsK KwkJCX0KKworCQkJcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJl ZCwgTEVBREVSX0ZJTEVTRVRfQlVTWSk7CisKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgor ICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyJ3MgdHJhbnNhY3Rpb24gZmlu aXNoZXMuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3dhaXRfZm9yX3hhY3RfZmluaXNoKFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpCit7CisJLyoKKwkgKiBXYWl0IHVudGls IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc2V0IHRoZSBzdGF0ZSB0bworCSAqIFBBUkFMTEVM X1RSQU5TX1NUQVJURUQgd2hpY2ggbWVhbnMgaXQgaGFzIGFjcXVpcmVkIHRoZSB0cmFuc2FjdGlv bgorCSAqIGxvY2suIFRoaXMgaXMgdG8gcHJldmVudCBsZWFkZXIgYXBwbHkgd29ya2VyIGZyb20g YWNxdWlyaW5nIHRoZQorCSAqIHRyYW5zYWN0aW9uIGxvY2sgZWFybGllciB0aGFuIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIuCisJICovCisJcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9z dGF0ZSh3c2hhcmVkLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKworCS8qIFdhaXQgZm9yIHRo ZSB0cmFuc2FjdGlvbiBsb2NrIHRvIGJlIHJlbGVhc2VkLiAqLworCXBhcmFsbGVsX2FwcGx5X2xv Y2tfdHJhbnNhY3Rpb24od3NoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwlwYXJh bGxlbF9hcHBseV91bmxvY2tfdHJhbnNhY3Rpb24od3NoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsKKworCS8qCisJICogV2FpdCB1bnRpbCB0aGUgc3RhdGUgYmVjb21lcyBQQVJBTExF TF9UUkFOU19GSU5JU0hFRCBpbiBjYXNlIHRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBm YWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcyBjYXVzaW5nIHRoZSBsb2NrIHRvCisJICogYmUg cmVsZWFzZWQuCisJICovCisJcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9zdGF0ZSh3c2hh cmVkLCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBzdGF0ZSByZWFjaCBvciBleGNl ZWQgdGhlCisgKiBnaXZlbiB4YWN0X3N0YXRlLgorICovCitzdGF0aWMgdm9pZAorcGFyYWxsZWxf YXBwbHlfd2FpdF9mb3JfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hh cmVkLAorCQkJCQkJCQkgICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlmb3Ig KDs7KQorCXsKKwkJLyogU3RvcCBpZiB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgcmVhY2ggb3IgZXhj ZWVkIHRoZSB4YWN0X3N0YXRlLiAqLworCQlpZiAocGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3Rh dGUod3NoYXJlZCkgPj0geGFjdF9zdGF0ZSkKKwkJCWJyZWFrOworCisJCS8qIFdhaXQgdG8gYmUg c2lnbmFsbGVkLiAqLworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfTEFU Q0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgMTBMLAor CQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFOR0UpOwor CisJCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLworCQlSZXNldExhdGNo KE15TGF0Y2gpOworCisJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3 ZSB3ZXJlIHdhaXRpbmcuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJfQorfQorCisv KgorICogU2V0IGFuIGVudW0gaW5kaWNhdGluZyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIHRo ZSBnaXZlbiBwYXJhbGxlbCBhcHBseQorICogd29ya2VyLgorICovCit2b2lkCitwYXJhbGxlbF9h cHBseV9zZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAor CQkJCQkJCSAgUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCit7CisJU3BpbkxvY2tBY3F1 aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJd3NoYXJlZC0+eGFjdF9zdGF0ZSA9IHhhY3Rfc3RhdGU7 CisJU3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7Cit9CisKKy8qCisgKiBHZXQgYW4g ZW51bSBpbmRpY2F0aW5nIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBmb3IgdGhlIGdpdmVuIHBhcmFs bGVsIGFwcGx5CisgKiB3b3JrZXIuCisgKi8KK3N0YXRpYyBQYXJhbGxlbFRyYW5zU3RhdGUKK3Bh cmFsbGVsX2FwcGx5X2dldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndz aGFyZWQpCit7CisJUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGU7CisKKwlTcGluTG9ja0Fj cXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl4YWN0X3N0YXRlID0gd3NoYXJlZC0+eGFjdF9zdGF0 ZTsKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKKworCXJldHVybiB4YWN0X3N0 YXRlOworfQorCisvKgorICogRm9ybSB0aGUgc2F2ZXBvaW50IG5hbWUgZm9yIHRoZSBzdHJlYW1p bmcgdHJhbnNhY3Rpb24uCisgKgorICogUmV0dXJuIHRoZSBuYW1lIGluIHRoZSBzdXBwbGllZCBi dWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwYXJhbGxlbF9hcHBseV9zYXZlcG9pbnRfbmFtZShP aWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgIGNoYXIgKnNwbmFtZSwgU2l6 ZSBzenNwKQoreworCXNucHJpbnRmKHNwbmFtZSwgc3pzcCwgInBnX3NwXyV1XyV1Iiwgc3Vib2lk LCB4aWQpOworfQorCisvKgorICogRGVmaW5lIGEgc2F2ZXBvaW50IGZvciBhIHN1YnhhY3QgaW4g cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIG5lZWRlZC4KKyAqCisgKiBUaGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGNhbiBmaWd1cmUgb3V0IGlmIGEgbmV3IHN1YnRyYW5zYWN0aW9uIHdhcworICog c3RhcnRlZCBieSBjaGVja2luZyBpZiB0aGUgbmV3IGNoYW5nZSBhcnJpdmVkIHdpdGggYSBkaWZm ZXJlbnQgeGlkLiBJbiB0aGF0CisgKiBjYXNlIGRlZmluZSBhIG5hbWVkIHNhdmVwb2ludCwgc28g dGhhdCB3ZSBhcmUgYWJsZSB0byByb2xsYmFjayB0byBpdAorICogaWYgcmVxdWlyZWQuCisgKi8K K3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3N0YXJ0X3N1YnRyYW5zKFRyYW5zYWN0aW9uSWQgY3VycmVu dF94aWQsIFRyYW5zYWN0aW9uSWQgdG9wX3hpZCkKK3sKKwlpZiAoY3VycmVudF94aWQgIT0gdG9w X3hpZCAmJgorCQkhbGlzdF9tZW1iZXJfeGlkKHN1YnhhY3RsaXN0LCBjdXJyZW50X3hpZCkpCisJ eworCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2hhcgkJc3BuYW1lW05BTUVEQVRBTEVOXTsK KworCQlwYXJhbGxlbF9hcHBseV9zYXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBj dXJyZW50X3hpZCwKKwkJCQkJCQkJCSAgc3BuYW1lLCBzaXplb2Yoc3BuYW1lKSk7CisKKwkJZWxv ZyhERUJVRzEsICJkZWZpbmluZyBzYXZlcG9pbnQgJXMgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2Vy Iiwgc3BuYW1lKTsKKworCQkvKiBXZSBtdXN0IGJlIGluIHRyYW5zYWN0aW9uIGJsb2NrIHRvIGRl ZmluZSB0aGUgU0FWRVBPSU5ULiAqLworCQlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7 CisJCQlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQorCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisKKwkJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOworCQkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisJCX0KKworCQlEZWZpbmVTYXZlcG9pbnQoc3BuYW1lKTsKKworCQkvKgor CQkgKiBDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQgaXMgbmVlZGVkIHRvIHN0YXJ0IGEgc3VidHJh bnNhY3Rpb24gYWZ0ZXIKKwkJICogaXNzdWluZyBhIFNBVkVQT0lOVCBpbnNpZGUgYSB0cmFuc2Fj dGlvbiBibG9jayAoc2VlCisJCSAqIFN0YXJ0U3ViVHJhbnNhY3Rpb24oKSkuCisJCSAqLworCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJc3VieGFjdGxpc3QgPSBsYXBwZW5kX3hpZChzdWJ4YWN0 bGlzdCwgY3VycmVudF94aWQpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwl9 Cit9CisKKy8qCisgKiBIYW5kbGUgU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2hlbiB0aGUgdHJhbnNh Y3Rpb24gd2FzIGFwcGxpZWQgaW4gYSBwYXJhbGxlbAorICogYXBwbHkgd29ya2VyLgorICovCit2 b2lkCitwYXJhbGxlbF9hcHBseV9zdHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0 YSAqYWJvcnRfZGF0YSkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZCA9IGFib3J0X2RhdGEtPnhpZDsK KwlUcmFuc2FjdGlvbklkIHN1YnhpZCA9IGFib3J0X2RhdGEtPnN1YnhpZDsKKworCS8qCisJICog VXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3Jy ZWN0IHBvc2l0aW9uCisJICogaW4gY2FzZSBvZiBjcmFzaC4KKwkgKi8KKwlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luX2xzbiA9IGFib3J0X2RhdGEtPmFib3J0X2xzbjsKKwlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGFib3J0X2RhdGEtPmFib3J0X3RpbWU7CisKKwkvKgor CSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0 b3BsZXZlbCB4YWN0LCBzbworCSAqIGp1c3QgZnJlZSB0aGUgc3VieGFjdGxpc3QuCisJICovCisJ aWYgKHN1YnhpZCA9PSB4aWQpCisJeworCQlBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigpOworCisJ CWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhm YWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCisJCXBnc3RhdF9y ZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CisKKwkJbGlzdF9mcmVlKHN1YnhhY3Rs aXN0KTsKKwkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJcGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rf c3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiBPSywgc28gaXQncyBhIHN1YnhhY3QuIFJvbGxiYWNrIHRvIHRo ZSBzYXZlcG9pbnQuCisJCSAqCisJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBzdWJ4YWN0 bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQgdHJhY2tlZAorCQkgKiBmb3IgdGhlIHN1YnhhY3Qs IGFuZCB0cnVuY2F0ZSB0aGUgbGlzdC4KKwkJICovCisJCWludAkJCWk7CisJCWJvb2wJCWZvdW5k ID0gZmFsc2U7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFyYWxsZWxfYXBw bHlfc2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRpb24tPm9pZCwgc3VieGlkLCBzcG5hbWUsCisJ CQkJCQkJCQkgIHNpemVvZihzcG5hbWUpKTsKKworCQllbG9nKERFQlVHMSwgInJvbGxpbmcgYmFj ayB0byBzYXZlcG9pbnQgJXMgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKwor CQlmb3IgKGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49IDA7IGktLSkKKwkJ eworCQkJVHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0X250aF9jZWxsKHN1 YnhhY3RsaXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkKKwkJCXsKKwkJCQlm b3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZm91bmQpCisJCXsK KwkJCWJvb2wJCXJlb3Blbl9zdHJlYW1fZmQgPSBmYWxzZTsKKwkJCWludAkJCWZpbGVubzsKKwkJ CW9mZl90CQlvZmZzZXQ7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGlzIGFwcGx5aW5nIHRoZSBzcG9vbGVkIG1lc3NhZ2VzLAorCQkJICogd2Ugc2F2ZSB0aGUg Y3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCBjbG9zZSB0aGUgZmlsZSB0byBwcmV2ZW50CisJCQkg KiB0aGUgZmlsZSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBjbG9zZWQgb24gcm9sbGJhY2suCisJ CQkgKi8KKwkJCWlmIChzdHJlYW1fZmQpCisJCQl7CisJCQkJQnVmRmlsZVRlbGwoc3RyZWFtX2Zk LCAmZmlsZW5vLCAmb2Zmc2V0KTsKKwkJCQlCdWZGaWxlQ2xvc2Uoc3RyZWFtX2ZkKTsKKwkJCQly ZW9wZW5fc3RyZWFtX2ZkID0gdHJ1ZTsKKwkJCX0KKworCQkJUm9sbGJhY2tUb1NhdmVwb2ludChz cG5hbWUpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQlzdWJ4YWN0bGlzdCA9 IGxpc3RfdHJ1bmNhdGUoc3VieGFjdGxpc3QsIGkgKyAxKTsKKworCQkJLyoKKwkJCSAqIFJlb3Bl biB0aGUgZmlsZSBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHRoZSBzYXZlZAorCQkJICog cG9zaXRpb24uCisJCQkgKi8KKwkJCWlmIChyZW9wZW5fc3RyZWFtX2ZkKQorCQkJeworCQkJCWNo YXIJCXBhdGhbTUFYUEdQQVRIXTsKKworCQkJCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKwkJCQlzdHJlYW1fZmQgPSBCdWZGaWxlT3BlbkZp bGVTZXQoJk15UGFyYWxsZWxTaGFyZWQtPmZpbGVzZXQsIHBhdGgsCisJCQkJCQkJCQkJCSAgIE9f UkRPTkxZLCBmYWxzZSk7CisJCQkJQnVmRmlsZVNlZWsoc3RyZWFtX2ZkLCBmaWxlbm8sIG9mZnNl dCwgU0VFS19TRVQpOworCQkJfQorCQl9CisKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9JRExFSU5UUkFOU0FDVElPTiwgTlVMTCk7CisJfQorfQorCisvKgorICogU2V0IHRoZSBmaWxl c2V0X3N0YXRlIGZsYWcgZm9yIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIFRoZQor ICogc3RyZWFtX2ZpbGVzZXQgb2YgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBiZSB3cml0 dGVuIGludG8gdGhlIHNoYXJlZAorICogbWVtb3J5IGlmIHRoZSBmaWxlc2V0X3N0YXRlIGlzIExF QURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3NldF9m aWxlc2V0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsIExlYWRlckZp bGVTZXRTdGF0ZSBmaWxlc2V0X3N0YXRlKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+ bXV0ZXgpOworCXdzaGFyZWQtPmZpbGVzZXRfc3RhdGUgPSBmaWxlc2V0X3N0YXRlOworCisJaWYg KGZpbGVzZXRfc3RhdGUgPT0gTEVBREVSX0ZJTEVTRVRfQUNDRVNTSUJMRSkKKwl7CisJCUFzc2Vy dChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpOworCQlBc3NlcnQoTXlMb2dpY2FsUmVwV29ya2Vy LT5zdHJlYW1fZmlsZXNldCk7CisJCXdzaGFyZWQtPmZpbGVzZXQgPSAqTXlMb2dpY2FsUmVwV29y a2VyLT5zdHJlYW1fZmlsZXNldDsKKwl9CisKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11 dGV4KTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgdG8gYWNxdWlyZSBhbmQgcmVsZWFz ZSBhIGxvY2sgZm9yIGVhY2ggc3RyZWFtIGJsb2NrLgorICoKKyAqIFNldCBsb2NrdGFnX2ZpZWxk NCB0byAwIHRvIGluZGljYXRlIHRoYXQgaXQncyBhIHN0cmVhbSBsb2NrLgorICovCit2b2lkCitw YXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbShUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9j a21vZGUpCit7CisJTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJICAgMCwgbG9ja21vZGUpOworfQorCit2b2lkCitw YXJhbGxlbF9hcHBseV91bmxvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBs b2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkgMCwgbG9ja21vZGUpOworfQorCisvKgor ICogSGVscGVyIGZ1bmN0aW9ucyB0byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFj aCBsb2NhbCB0cmFuc2FjdGlvbi4KKyAqCisgKiBTZXQgbG9ja3RhZ19maWVsZDQgdG8gMSB0byBp bmRpY2F0ZSB0aGF0IGl0J3MgYSB0cmFuc2FjdGlvbiBsb2NrLgorICoKKyAqIE5vdGUgdGhhdCBh bGwgdGhlIGNhbGxlcnMgYXJlIHBhc3NpbmcgcmVtb3RlIHRyYW5zYWN0aW9uIElEIGluc3RlYWQg b2YgbG9jYWwKKyAqIHRyYW5zYWN0aW9uIElEIGFzIHhpZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBs b2NhbCB0cmFuc2FjdGlvbiBJRCB3aWxsIG9ubHkgYmUKKyAqIGFzc2lnbmVkIHdoaWxlIGFwcGx5 aW5nIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIHBhcmFsbGVsIGFwcGx5LCBidXQgaXQncworICog cG9zc2libGUgdGhhdCB0aGUgZmlyc3QgY2hhbmdlIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBp cyBibG9ja2VkIGJ5IGEKKyAqIGNvbmN1cnJlbnRseSBleGVjdXRpbmcgdHJhbnNhY3Rpb24gaW4g YW5vdGhlciBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2F1c2luZworICogdGhlIGxlYWRlciBjYW5u b3QgZ2V0IGxvY2FsIHRyYW5zYWN0aW9uIElELgorICovCit2b2lkCitwYXJhbGxlbF9hcHBseV9s b2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sK KwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgeGlkLAorCQkJCQkJCQkgICAxLCBsb2NrbW9kZSk7Cit9CisKK3ZvaWQKK3BhcmFsbGVsX2Fw cGx5X3VubG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21v ZGUpCit7CisJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkJIDEsIGxvY2ttb2RlKTsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDJjYzBhYzkuLjMwMzU1N2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtNjUyLDkgKzY1MiwxMCBA QCBEZWNvZGVDb21taXQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVm ZmVyICpidWYsCiAJewogCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLT5uc3VieGFjdHM7IGkrKykK IAkJewotCQkJUmVvcmRlckJ1ZmZlckZvcmdldChjdHgtPnJlb3JkZXIsIHBhcnNlZC0+c3VieGFj dHNbaV0sIGJ1Zi0+b3JpZ3B0cik7CisJCQlSZW9yZGVyQnVmZmVyRm9yZ2V0KGN0eC0+cmVvcmRl ciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwgYnVmLT5vcmlncHRyLAorCQkJCQkJCQljb21taXRfdGlt ZSk7CiAJCX0KLQkJUmVvcmRlckJ1ZmZlckZvcmdldChjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5v cmlncHRyKTsKKwkJUmVvcmRlckJ1ZmZlckZvcmdldChjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5v cmlncHRyLCBjb21taXRfdGltZSk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTgyMiwxMCArODIzLDEx IEBAIERlY29kZUFib3J0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmLAogCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLT5uc3VieGFjdHM7IGkrKykKIAkJ ewogCQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgcGFyc2VkLT5zdWJ4YWN0c1tp XSwKLQkJCQkJCQkgICBidWYtPnJlY29yZC0+RW5kUmVjUHRyKTsKKwkJCQkJCQkgICBidWYtPnJl Y29yZC0+RW5kUmVjUHRyLCBhYm9ydF90aW1lKTsKIAkJfQogCi0JCVJlb3JkZXJCdWZmZXJBYm9y dChjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7CisJCVJlb3JkZXJC dWZmZXJBYm9ydChjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0ciwKKwkJ CQkJCSAgIGFib3J0X3RpbWUpOwogCX0KIAogCS8qIHVwZGF0ZSB0aGUgZGVjb2Rpbmcgc3RhdHMg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCA3MzU5 NGM2Li5hMDg2OTk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hl ci5jCkBAIC01NSw2ICs1NSw3IEBACiAvKiBHVUMgdmFyaWFibGVzICovCiBpbnQJCQltYXhfbG9n aWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNDsKIGludAkJCW1heF9zeW5jX3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbiA9IDI7CitpbnQJCQltYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJf c3Vic2NyaXB0aW9uID0gMjsKIAogTG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2FsUmVwV29ya2Vy ID0gTlVMTDsKIApAQCAtMTUyLDggKzE1MywxMCBAQCBnZXRfc3Vic2NyaXB0aW9uX2xpc3Qodm9p ZCkKICAqCiAgKiBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciBjbGVhbmluZyB1cCB0aGUgc2hhcmVk IG1lbW9yeSBpbiBjYXNlIHRoZSB3b3JrZXIKICAqIGZhaWxzIHRvIGF0dGFjaC4KKyAqCisgKiBS ZXR1cm4gd2hldGhlciB0aGUgYXR0YWNoIHdhcyBzdWNjZXNzZnVsLgogICovCi1zdGF0aWMgdm9p ZAorc3RhdGljIGJvb2wKIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVw V29ya2VyICp3b3JrZXIsCiAJCQkJCQkJICAgdWludDE2IGdlbmVyYXRpb24sCiAJCQkJCQkJICAg QmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQpAQCAtMTY5LDExICsxNzIsMTEgQEAgV2Fp dEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAog CQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCi0JCS8q IFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMgc3RhcnRlZDsgbm8gbmVlZCB0byBkbyBhbnl0aGlu Zy4gKi8KKwkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkLiBSZXR1cm4gZmFs c2UgaWYgZGllZC4gKi8KIAkJaWYgKCF3b3JrZXItPmluX3VzZSB8fCB3b3JrZXItPnByb2MpCiAJ CXsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQkJcmV0dXJuOwor CQkJcmV0dXJuIHdvcmtlci0+aW5fdXNlOwogCQl9CiAKIAkJTFdMb2NrUmVsZWFzZShMb2dpY2Fs UmVwV29ya2VyTG9jayk7CkBAIC0xODgsNyArMTkxLDcgQEAgV2FpdEZvclJlcGxpY2F0aW9uV29y a2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCWlmIChnZW5lcmF0aW9uID09 IHdvcmtlci0+Z2VuZXJhdGlvbikKIAkJCQlsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKHdvcmtl cik7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJCXJldHVybjsK KwkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCS8qCkBAIC0yMTAsNiArMjEzLDggQEAgV2FpdEZv clJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIC8qCiAg KiBXYWxrcyB0aGUgd29ya2VycyBhcnJheSBhbmQgc2VhcmNoZXMgZm9yIG9uZSB0aGF0IG1hdGNo ZXMgZ2l2ZW4KICAqIHN1YnNjcmlwdGlvbiBpZCBhbmQgcmVsaWQuCisgKgorICogV2UgYXJlIG9u bHkgaW50ZXJlc3RlZCBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBvciB0YWJsZSBzeW5jIHdv cmtlci4KICAqLwogTG9naWNhbFJlcFdvcmtlciAqCiBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9p ZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKQEAgLTIyNCw2ICsyMjksMTAg QEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5 X3J1bm5pbmcpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndv cmtlcnNbaV07CiAKKwkJLyogU2tpcCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCQlpZiAo aXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJY29udGludWU7CisKIAkJaWYgKHctPmluX3Vz ZSAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9PSByZWxpZCAmJgogCQkJKCFvbmx5 X3J1bm5pbmcgfHwgdy0+cHJvYykpCiAJCXsKQEAgLTI2MCwxMSArMjY5LDEzIEBAIGxvZ2ljYWxy ZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiB9CiAKIC8qCi0g KiBTdGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgorICogU3Rh cnQgbmV3IGJhY2tncm91bmQgd29ya2VyLCBpZiBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zIHRy dWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KICAqLwotdm9pZAorYm9vbAogbG9naWNh bHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5h bWUsIE9pZCB1c2VyaWQsCi0JCQkJCQkgT2lkIHJlbGlkKQorCQkJCQkJIE9pZCByZWxpZCwgZHNt X2hhbmRsZSBzdWJ3b3JrZXJfZHNtKQogewogCUJhY2tncm91bmRXb3JrZXIgYmd3OwogCUJhY2tn cm91bmRXb3JrZXJIYW5kbGUgKmJnd19oYW5kbGU7CkBAIC0yNzMsNyArMjg0LDEyIEBAIGxvZ2lj YWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJu YW1lLCBPaWQgdXNlcmlkLAogCWludAkJCXNsb3QgPSAwOwogCUxvZ2ljYWxSZXBXb3JrZXIgKndv cmtlciA9IE5VTEw7CiAJaW50CQkJbnN5bmN3b3JrZXJzOworCWludAkJCW5wYXJhbGxlbGFwcGx5 d29ya2VyczsKIAlUaW1lc3RhbXBUeiBub3c7CisJYm9vbAkJaXNfcGFyYWxsZWxfYXBwbHlfd29y a2VyID0gKHN1Yndvcmtlcl9kc20gIT0gRFNNX0hBTkRMRV9JTlZBTElEKTsKKworCS8qIFNhbml0 eSBjaGVjayAtIHRhYmxlc3luYyB3b3JrZXIgY2Fubm90IGJlIGEgc3Vid29ya2VyICovCisJQXNz ZXJ0KCEoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyICYmIE9pZElzVmFsaWQocmVsaWQpKSk7CiAK IAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoInN0YXJ0aW5nIGxvZ2ljYWwg cmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIiwKQEAgLTM1MSw3ICsz NjcsMjYgQEAgcmV0cnk6CiAJaWYgKE9pZElzVmFsaWQocmVsaWQpICYmIG5zeW5jd29ya2VycyA+ PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNl KExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJbnBhcmFsbGVsYXBwbHl3b3JrZXJzID0gbG9naWNhbHJlcF9wYXJhbGxlbF9hcHBseV93b3Jr ZXJfY291bnQoc3ViaWQpOworCisJLyoKKwkgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG51bWJlciBv ZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHJlYWNoZWQgdGhlIGxpbWl0CisJICogcGVyIHN1YnNj cmlwdGlvbi4KKwkgKi8KKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyICYmCisJCW5wYXJh bGxlbGFwcGx5d29ya2VycyA+PSBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2Ny aXB0aW9uKQorCXsKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJ ZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VY Q0VFREVEKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyIpLAor CQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfcGFyYWxsZWxfYXBw bHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLiIpKSk7CisKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAogCS8qCkBAIC0zNjUsNyArNDAwLDcgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9D T05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2YgbG9naWNh bCByZXBsaWNhdGlvbiB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5l ZWQgdG8gaW5jcmVhc2UgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycy4iKSkpOwotCQly ZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xv dC4gKi8KQEAgLTM4MCw2ICs0MTUsOCBAQCByZXRyeToKIAl3b3JrZXItPnJlbHN0YXRlID0gU1VC UkVMX1NUQVRFX1VOS05PV047CiAJd29ya2VyLT5yZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxlc2V0ID0gTlVMTDsKKwl3b3JrZXItPmFwcGx5X2xl YWRlcl9waWQgPSBpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgPyBNeVByb2NQaWQgOiBJbnZhbGlk UGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBpc19wYXJhbGxlbF9hcHBseV93b3JrZXI7 CiAJd29ya2VyLT5sYXN0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCVRJTUVTVEFNUF9OT0JF R0lOKHdvcmtlci0+bGFzdF9zZW5kX3RpbWUpOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+ bGFzdF9yZWN2X3RpbWUpOwpAQCAtMzk3LDE5ICs0MzQsMzQgQEAgcmV0cnk6CiAJCUJHV09SS0VS X0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsKIAliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dv cmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CiAJc25wcmludGYoYmd3LmJnd19saWJyYXJ5X25h bWUsIEJHV19NQVhMRU4sICJwb3N0Z3JlcyIpOwotCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25f bmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFpbiIpOworCisJaWYgKGlzX3BhcmFsbGVs X2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFY TEVOLCAiUGFyYWxsZWxBcHBseVdvcmtlck1haW4iKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5i Z3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFpbiIpOworCiAJaWYg KE9pZElzVmFsaWQocmVsaWQpKQogCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4s CiAJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHN5 bmMgJXUiLCBzdWJpZCwgcmVsaWQpOworCWVsc2UgaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtl cikKKwkJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAorCQkJCSAibG9naWNhbCBy ZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1 YmlkKTsKIAllbHNlCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKLQkJCQkg ImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7 Ci0Jc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlv biB3b3JrZXIiKTsKKwkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBz dWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7CisKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2Vy KQorCQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0 aW9uIHBhcmFsbGVsIHdvcmtlciIpOworCWVsc2UKKwkJc25wcmludGYoYmd3LmJnd190eXBlLCBC R1dfTUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIiKTsKIAogCWJndy5iZ3dfcmVz dGFydF90aW1lID0gQkdXX05FVkVSX1JFU1RBUlQ7CiAJYmd3LmJnd19ub3RpZnlfcGlkID0gTXlQ cm9jUGlkOwogCWJndy5iZ3dfbWFpbl9hcmcgPSBJbnQzMkdldERhdHVtKHNsb3QpOwogCisJaWYg KGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJbWVtY3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3 b3JrZXJfZHNtLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCiAJaWYgKCFSZWdpc3RlckR5bmFtaWNC YWNrZ3JvdW5kV29ya2VyKCZiZ3csICZiZ3dfaGFuZGxlKSkKIAl7CiAJCS8qIEZhaWxlZCB0byBz dGFydCB3b3JrZXIsIHNvIGNsZWFuIHVwIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTQyMiwzMyAr NDc0LDIyIEBAIHJldHJ5OgogCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1J VF9FWENFRURFRCksCiAJCQkJIGVycm1zZygib3V0IG9mIGJhY2tncm91bmQgd29ya2VyIHNsb3Rz IiksCiAJCQkJIGVycmhpbnQoIllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIG1heF93b3JrZXJf cHJvY2Vzc2VzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIE5v dyB3YWl0IHVudGlsIGl0IGF0dGFjaGVzLiAqLwotCVdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0 dGFjaCh3b3JrZXIsIGdlbmVyYXRpb24sIGJnd19oYW5kbGUpOworCXJldHVybiBXYWl0Rm9yUmVw bGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBnZW5lcmF0aW9uLCBiZ3dfaGFuZGxlKTsKIH0K IAogLyoKLSAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJpZC9y ZWxpZCwgaWYgYW55LCBhbmQgd2FpdCB1bnRpbAotICogaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xv dC4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHN0b3AgdGhlIHdvcmtlciBhbmQgd2FpdCBmb3Ig aXQgdG8gZGllLgogICovCi12b2lkCi1sb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwg T2lkIHJlbGlkKQorc3RhdGljIHZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwo TG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogewotCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsK IAl1aW50MTYJCWdlbmVyYXRpb247CiAKLQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJM b2NrLCBMV19TSEFSRUQpOwotCi0Jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJp ZCwgcmVsaWQsIGZhbHNlKTsKLQotCS8qIE5vIHdvcmtlciwgbm90aGluZyB0byBkby4gKi8KLQlp ZiAoIXdvcmtlcikKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwot CQlyZXR1cm47Ci0JfQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShMb2dpY2FsUmVwV29y a2VyTG9jaywgTFdfU0hBUkVEKSk7CiAKIAkvKgogCSAqIFJlbWVtYmVyIHdoaWNoIGdlbmVyYXRp b24gd2FzIG91ciB3b3JrZXIgc28gd2UgY2FuIGNoZWNrIGlmIHdoYXQgd2Ugc2VlCkBAIC00ODYs MTAgKzUyNyw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQp CiAJCSAqIGRpZmZlcmVudCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50IHdvcmtlciBoYXMgdGFr ZW4gdGhlIHNsb3QuCiAJCSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+Z2Vu ZXJhdGlvbiAhPSBnZW5lcmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBX b3JrZXJMb2NrKTsKIAkJCXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtlciBoYXMgYXNzaWduZWQg cHJvYywgc28gaXQgaGFzIHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXItPnByb2MpCkBAIC01MjMs NiArNTYxLDUwIEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQp CiAKIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIAl9 Cit9CisKKy8qCisgKiBTdG9wIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vi aWQvcmVsaWQsIGlmIGFueSwgYW5kIHdhaXQgdW50aWwKKyAqIGl0IGRldGFjaGVzIGZyb20gdGhl IHNsb3QuCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQg cmVsaWQpCit7CisJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOworCisJTFdMb2NrQWNxdWlyZShM b2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCXdvcmtlciA9IGxvZ2ljYWxyZXBf d29ya2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCBmYWxzZSk7CisKKwlpZiAod29ya2VyKQorCXsKKwkJ QXNzZXJ0KCFpc1BhcmFsbGVsQXBwbHlXb3JrZXIod29ya2VyKSk7CisJCWxvZ2ljYWxyZXBfd29y a2VyX3N0b3BfaW50ZXJuYWwod29ya2VyKTsKKwl9CisKKwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKTsKK30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g d29ya2VyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHNsb3QgbnVtYmVyLAorICogYW5kIHdh aXQgdW50aWwgaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqLwordm9pZAorbG9naWNhbHJl cF93b3JrZXJfc3RvcF9ieV9zbG90KGludCBzbG90X25vLCB1aW50MTYgZ2VuZXJhdGlvbikKK3sK KwlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7CisKKwlBc3NlcnQoc2xvdF9ubyA+PSAwICYmIHNs b3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzKTsKKworCUxXTG9ja0FjcXVp cmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSAmTG9naWNh bFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKworCS8qCisJICogT25seSBzdG9wIHRoZSB3b3Jr ZXIgaWYgdGhlIGdlbmVyYXRpb24gbWF0Y2hlcyBhbmQgdGhlIHdvcmtlciBpcyBhbGl2ZS4KKwkg Ki8KKwlpZiAod29ya2VyLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb24gJiYgd29ya2VyLT5wcm9j KQorCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlcik7CiAKIAlMV0xvY2tS ZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0KQEAgLTU5NSwxMSArNjc3LDMyIEBAIGxv Z2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIH0KIAogLyoKLSAqIERldGFjaCB0aGUg d29ya2VyIChjbGVhbnMgdXAgdGhlIHdvcmtlciBpbmZvKS4KKyAqIFN0b3AgdGhlIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgaWYgYW55LCBhbmQgZGV0YWNoIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy CisgKiAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCiAgKi8KIHN0YXRpYyB2b2lkCiBsb2dp Y2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKiBTdG9wIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXJzLiAqLworCWlmIChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJeworCQlMaXN0 CSAgICp3b3JrZXJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2lj YWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dv cmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChs Yywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29y a2VyICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJ CQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3KTsKKwkJfQorCisJCUxXTG9ja1Jl bGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworCX0KKwogCS8qIEJsb2NrIGNvbmN1cnJlbnQg YWNjZXNzLiAqLwogCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX0VYQ0xV U0lWRSk7CiAKQEAgLTYyMiw2ICs3MjUsOCBAQCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExv Z2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIAl3b3JrZXItPnVzZXJpZCA9IEludmFsaWRPaWQ7CiAJ d29ya2VyLT5zdWJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5yZWxpZCA9IEludmFsaWRPaWQ7 CisJd29ya2VyLT5hcHBseV9sZWFkZXJfcGlkID0gSW52YWxpZFBpZDsKKwl3b3JrZXItPnBhcmFs bGVsX2FwcGx5ID0gZmFsc2U7CiB9CiAKIC8qCkBAIC02NTMsNiArNzU4LDEyIEBAIGxvZ2ljYWxy ZXBfd29ya2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogCWlmIChNeUxvZ2ljYWxSZXBX b3JrZXItPnN0cmVhbV9maWxlc2V0ICE9IE5VTEwpCiAJCUZpbGVTZXREZWxldGVBbGwoTXlMb2dp Y2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKKwkvKgorCSAqIFJlbGVhc2UgYWxsIHNl c3Npb24gbGV2ZWwgbG9ja3MgdGhhdCBjb3VsZCBiZSBoZWxkIGluIHBhcmFsbGVsIGFwcGx5CisJ ICogbW9kZS4KKwkgKi8KKwlMb2NrUmVsZWFzZUFsbChERUZBVUxUX0xPQ0tNRVRIT0QsIHRydWUp OworCiAJQXBwbHlMYXVuY2hlcldha2V1cCgpOwogfQogCkBAIC02ODEsNiArNzkyLDMzIEBAIGxv Z2ljYWxyZXBfc3luY193b3JrZXJfY291bnQoT2lkIHN1YmlkKQogfQogCiAvKgorICogQ291bnQg dGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5lY2Vzc2FyaWx5IHJ1bm5pbmcpIHBh cmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNjcmlwdGlvbi4KKyAqLworaW50Cits b2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCit7CisJaW50 CQkJaTsKKwlpbnQJCQlyZXMgPSAwOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKSk7CisKKwkvKgorCSAqIFNjYW4gYWxsIGF0dGFjaGVkIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMsIG9ubHkgY291bnRpbmcgdGhvc2Ugd2hpY2gKKwkgKiBoYXZlIHRoZSBnaXZl biBzdWJzY3JpcHRpb24gaWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnM7IGkrKykKKwl7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAmTG9n aWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKKworCQlpZiAody0+c3ViaWQgPT0gc3ViaWQgJiYgaXNQ YXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJcmVzKys7CisJfQorCisJcmV0dXJuIHJlczsKK30K KworLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUKICAqCQlDb21wdXRlIHNwYWNlIG5lZWRl ZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIgc2hhcmVkIG1lbW9yeQogICovCkBAIC04NjksNyAr MTAwNyw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3YWl0X3Rp bWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJlcF93b3Jr ZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkJIHN1 Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9p ZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTk1Miw2ICsxMDkwLDEw IEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQlpZiAoT2lk SXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1YmlkKQogCQkJY29udGludWU7CiAK KwkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisJCWlmIChp c1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQljb250aW51ZTsKKwogCQl3b3JrZXJf cGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdldERhdHVt KHdvcmtlci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5i dWlsZAppbmRleCA3NzM1ODNhLi4yNmJmYzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0g ZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1 bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv b3JpZ2luLmMKaW5kZXggZjEzNGU0NC4uODBkZWExMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1LDIxIEBAIFJlcGxpY2F0aW9uT3Jp Z2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGFycmF5IGRvZXNuJ3QgaGF2 ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZh bmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdpbiBjYW4g ZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50CisgKiBOb3JtYWxseSBvbmx5IG9uZSBz dWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIGFuZCB0aGUgY3VycmVudAog ICogY2FjaGVkIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJldmlvdXMg dmFsdWUgaXMgdG9ybiBkb3duCiAgKiB3aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLgor ICoKKyAqIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgJ2FjcXVpcmVkX2J5JyBp cyBub3QgMCwgd2UgYWxsb3cgdGhlCisgKiBwcm9jZXNzIHRvIHVzZSB0aGUgc2FtZSBzbG90IGFs cmVhZHkgYWNxdWlyZWQgYnkgYW5vdGhlciBwcm9jZXNzLiBJdCdzIHNhZmUKKyAqIGJlY2F1c2Ug MSkgVGhlIG9ubHkgY2FsbGVyIChwYXJhbGxlbCBhcHBseSB3b3JrZXJzKSB3aWxsIG1haW50YWlu IHRoZQorICogY29tbWl0IG9yZGVyIGJ5IGFsbG93aW5nIG9ubHkgb25lIHByb2Nlc3MgdG8gY29t bWl0IGF0IGEgdGltZSwgc28gbm8gdHdvCisgKiB3b3JrZXJzIHdpbGwgYmUgb3BlcmF0aW5nIG9u IHRoZSBzYW1lIG9yaWdpbiBhdCB0aGUgc2FtZSB0aW1lIChzZWUgY29tbWVudHMKKyAqIGluIGxv Z2ljYWwvd29ya2VyLmMpLiAyKSBFdmVuIHRob3VnaCB3ZSB0cnkgdG8gYWR2YW5jZSB0aGUgc2Vz c2lvbidzIG9yaWdpbgorICogY29uY3VycmVudGx5LCBpdCdzIHNhZmUgdG8gZG8gc28gYXMgd2Ug Y2hhbmdlL2FkdmFuY2UgdGhlIHNlc3Npb25fb3JpZ2luCisgKiBMU05zIHVuZGVyIHJlcGxpY2F0 ZV9zdGF0ZSBMV0xvY2suCiAgKi8KIHZvaWQKLXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBP cmlnaW5JZCBub2RlKQorcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUs IGludCBhY3F1aXJlZF9ieSkKIHsKIAlzdGF0aWMgYm9vbCByZWdpc3RlcmVkX2NsZWFudXA7CiAJ aW50CQkJaTsKQEAgLTExMjIsNyArMTEzMSw3IEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChS ZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUtPnJvaWRlbnQgIT0gbm9kZSkKIAkJCWNv bnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwKQorCQllbHNl IGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAmJiBhY3F1aXJlZF9ieSA9PSAwKQogCQl7 CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9JTl9VU0Up LApAQCAtMTE1Myw3ICsxMTYyLDExIEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmln aW5JZCBub2RlKQogCiAJQXNzZXJ0KHNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPnJvaWRlbnQg IT0gSW52YWxpZFJlcE9yaWdpbklkKTsKIAotCXNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPmFj cXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWlmIChhY3F1aXJlZF9ieSA9PSAwKQorCQlzZXNzaW9u X3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9IE15UHJvY1BpZDsKKwllbHNlIGlmIChz ZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSAhPSBhY3F1aXJlZF9ieSkKKwkJ ZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIHJlcGxpY2F0aW9uIHN0YXRlIHNsb3QgZm9yIHJl cGxpY2F0aW9uIgorCQkJICJvcmlnaW4gd2l0aCBPSUQgJXUgd2hpY2ggd2FzIGFjcXVpcmVkIGJ5 ICVkIiwgbm9kZSwgYWNxdWlyZWRfYnkpOwogCiAJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvbk9y aWdpbkxvY2spOwogCkBAIC0xMzM3LDcgKzEzNTAsNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5f c2Vzc2lvbl9zZXR1cChQR19GVU5DVElPTl9BUkdTKQogCiAJbmFtZSA9IHRleHRfdG9fY3N0cmlu ZygodGV4dCAqKSBEYXR1bUdldFBvaW50ZXIoUEdfR0VUQVJHX0RBVFVNKDApKSk7CiAJb3JpZ2lu ID0gcmVwbG9yaWdpbl9ieV9uYW1lKG5hbWUsIGZhbHNlKTsKLQlyZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAob3JpZ2luKTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luLCAwKTsKIAog CXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlLi5kNjE2MGU2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC0xMTYzLDEwICsxMTYzLDE0IEBAIGxvZ2lj YWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBDb21taXRE YXRhICpjb21taXRfZGF0YSkKIC8qCiAgKiBXcml0ZSBTVFJFQU0gQUJPUlQgdG8gdGhlIG91dHB1 dCBzdHJlYW0uIE5vdGUgdGhhdCB4aWQgYW5kIHN1YnhpZCB3aWxsIGJlCiAgKiBzYW1lIGZvciB0 aGUgdG9wLWxldmVsIHRyYW5zYWN0aW9uIGFib3J0LgorICoKKyAqIElmIHdyaXRlX2Fib3J0X2lu Zm8gaXMgdHJ1ZSwgc2VuZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAq IG90aGVyd2lzZSBkb24ndC4KICAqLwogdm9pZAogbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCSAgVHJhbnNhY3Rp b25JZCBzdWJ4aWQpCisJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCwgWExvZ1JlY1B0ciBh Ym9ydF9sc24sCisJCQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLCBib29sIHdyaXRlX2Fi b3J0X2luZm8pCiB7CiAJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0FC T1JUKTsKIApAQCAtMTE3NSwxOSArMTE3OSw0MCBAQCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9h Ym9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJLyogdHJhbnNhY3Rpb24g SUQgKi8KIAlwcV9zZW5kaW50MzIob3V0LCB4aWQpOwogCXBxX3NlbmRpbnQzMihvdXQsIHN1Ynhp ZCk7CisKKwlpZiAod3JpdGVfYWJvcnRfaW5mbykKKwl7CisJCXBxX3NlbmRpbnQ2NChvdXQsIGFi b3J0X2xzbik7CisJCXBxX3NlbmRpbnQ2NChvdXQsIGFib3J0X3RpbWUpOworCX0KIH0KIAogLyoK ICAqIFJlYWQgU1RSRUFNIEFCT1JUIGZyb20gdGhlIG91dHB1dCBzdHJlYW0uCisgKgorICogSWYg cmVhZF9hYm9ydF9pbmZvIGlzIHRydWUsIHJlYWQgdGhlIGFib3J0X2xzbiBhbmQgYWJvcnRfdGlt ZSBmaWVsZHMsCisgKiBvdGhlcndpc2UgZG9uJ3QuCiAgKi8KIHZvaWQKLWxvZ2ljYWxyZXBfcmVh ZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNhY3Rpb25JZCAqeGlkLAotCQkJCQkJ CSBUcmFuc2FjdGlvbklkICpzdWJ4aWQpCitsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0 cmluZ0luZm8gaW4sCisJCQkJCQkJIExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2Rh dGEsCisJCQkJCQkJIGJvb2wgcmVhZF9hYm9ydF9pbmZvKQogewotCUFzc2VydCh4aWQgJiYgc3Vi eGlkKTsKKwlBc3NlcnQoYWJvcnRfZGF0YSk7CisKKwlhYm9ydF9kYXRhLT54aWQgPSBwcV9nZXRt c2dpbnQoaW4sIDQpOworCWFib3J0X2RhdGEtPnN1YnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7 CiAKLQkqeGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKLQkqc3VieGlkID0gcHFfZ2V0bXNnaW50 KGluLCA0KTsKKwlpZiAocmVhZF9hYm9ydF9pbmZvKQorCXsKKwkJYWJvcnRfZGF0YS0+YWJvcnRf bHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCQlhYm9ydF9kYXRhLT5hYm9ydF90aW1lID0gcHFf Z2V0bXNnaW50NjQoaW4pOworCX0KKwllbHNlCisJeworCQlhYm9ydF9kYXRhLT5hYm9ydF9sc24g PSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IDA7CisJfQog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYwppbmRleCAyMmExNWE0Li5hNzFjMTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjg0Niw3ICsyODQ2LDggQEAgUmVvcmRl ckJ1ZmZlckZpbmlzaFByZXBhcmVkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKICAqIGRpc2suCiAgKi8KIHZvaWQKLVJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZlckFi b3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24s CisJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0 eG47CiAKQEAgLTI4NTcsNiArMjg1OCw4IEBAIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0eG4gPT0g TlVMTCkKIAkJcmV0dXJuOwogCisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0X3Rp bWU7CisKIAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVtb3RlIG5v ZGUgYWJvdXQgdGhlIGFib3J0LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4pKQogCXsK QEAgLTI5MzEsNyArMjkzNCw4IEBAIFJlb3JkZXJCdWZmZXJBYm9ydE9sZChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCBvbGRlc3RSdW5uaW5nWGlkKQogICogdG8gdGhpcyB4aWQgbWln aHQgcmUtY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBpbmNvbXBsZXRlbHkuCiAgKi8KIHZvaWQKLVJl b3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJVGltZXN0YW1wVHogYWJvcnRf dGltZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CiAKQEAgLTI5NDIsNiArMjk0Niw4IEBA IFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09IE5VTEwpCiAJCXJldHVybjsKIAorCXR4bi0+ eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90aW1lOworCiAJLyogRm9yIHN0cmVhbWVkIHRy YW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBub2RlIGFib3V0IHRoZSBhYm9ydC4gKi8KIAlp ZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAkJcmItPnN0cmVhbV9hYm9ydChyYiwgdHhuLCBs c24pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXgg OTRlODEzYS4uNzA4NDM1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKgkgIFRoZSBpbml0aWFsIGRhdGEgc3luY2hy b25pemF0aW9uIGlzIGRvbmUgc2VwYXJhdGVseSBmb3IgZWFjaCB0YWJsZSwKICAqCSAgaW4gYSBz ZXBhcmF0ZSBhcHBseSB3b3JrZXIgdGhhdCBvbmx5IGZldGNoZXMgdGhlIGluaXRpYWwgc25hcHNo b3QgZGF0YQogICoJICBmcm9tIHRoZSBwdWJsaXNoZXIgYW5kIHRoZW4gc3luY2hyb25pemVzIHRo ZSBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtIHdpdGgKLSAqCSAgdGhlIG1haW4gYXBwbHkgd29ya2Vy LgorICoJICB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4KICAqCiAgKgkgIFRoZXJlIGFyZSBzZXZl cmFsIHJlYXNvbnMgZm9yIGRvaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gdGhpcyB3YXk6CiAgKgkg ICAtIEl0IGFsbG93cyB1cyB0byBwYXJhbGxlbGl6ZSB0aGUgaW5pdGlhbCBkYXRhIHN5bmNocm9u aXphdGlvbgpAQCAtMTUzLDcgKzE1Myw3IEBAIGZpbmlzaF9zeW5jX3dvcmtlcih2b2lkKQogCQkJ CQlnZXRfcmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCkpKSk7CiAJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7CiAKLQkvKiBGaW5kIHRoZSBtYWluIGFwcGx5IHdvcmtlciBhbmQg c2lnbmFsIGl0LiAqLworCS8qIEZpbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHNpZ25h bCBpdC4gKi8KIAlsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoTXlMb2dpY2FsUmVwV29ya2VyLT5z dWJpZCwgSW52YWxpZE9pZCk7CiAKIAkvKiBTdG9wIGdyYWNlZnVsbHkgKi8KQEAgLTYwOSw3ICs2 MDksOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJl bnRfbHNuKQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJCQkJCQkJCQkJCQkg TXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT51 c2VyaWQsCi0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJCQkJCQkgcnN0YXRl LT5yZWxpZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCQkJaGVudHJ5 LT5sYXN0X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC02MzAsNiArNjMxLDEz IEBAIHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9s c24pCiB2b2lkCiBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24p CiB7CisJLyoKKwkgKiBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiBTZWUgcGFyYWxs ZWxfYXBwbHlfY2FuX3N0YXJ0KCkgZm9yCisJICogZGV0YWlscy4KKwkgKi8KKwlpZiAoYW1fcGFy YWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybjsKKwogCWlmIChhbV90YWJsZXN5bmNfd29y a2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX3N5bmMoY3VycmVudF9sc24pOwog CWVsc2UKQEAgLTEyNDcsNyArMTI1NSw3IEBAIExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9n UmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAKIAkvKgogCSAqIEhlcmUgd2UgdXNlIHRoZSBzbG90 IG5hbWUgaW5zdGVhZCBvZiB0aGUgc3Vic2NyaXB0aW9uIG5hbWUgYXMgdGhlCi0JICogYXBwbGlj YXRpb25fbmFtZSwgc28gdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiBhcHBseSB3 b3JrZXIsCisJICogYXBwbGljYXRpb25fbmFtZSwgc28gdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJv bSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwKIAkgKiBzbyB0aGF0IHN5bmNocm9ub3VzIHJlcGxp Y2F0aW9uIGNhbiBkaXN0aW5ndWlzaCB0aGVtLgogCSAqLwogCUxvZ1JlcFdvcmtlcldhbFJjdkNv bm4gPQpAQCAtMTI5NSw3ICsxMzAzLDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dS ZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAkJICogdGltZSB0aGlzIHRhYmxlc3luYyB3YXMgbGF1 bmNoZWQuCiAJCSAqLwogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1l LCBmYWxzZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxv cmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW4gPSBvcmlnaW5pZDsKIAkJKm9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5fc2Vzc2lv bl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCkBAIC0xNDA2LDcgKzE0MTQsNyBAQCBMb2dpY2FsUmVw U3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkJCQkJICAgdHJ1 ZSAvKiBnbyBiYWNrd2FyZCAqLyAsIHRydWUgLyogV0FMIGxvZyAqLyApOwogCQlVbmxvY2tSZWxh dGlvbk9pZChSZXBsaWNhdGlvbk9yaWdpblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwog Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vz c2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBv cmlnaW5pZDsKIAl9CiAJZWxzZQpAQCAtMTQ2MSw4ICsxNDY5LDggQEAgY29weV90YWJsZV9kb25l OgogCVNwaW5Mb2NrUmVsZWFzZSgmTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxtdXRleCk7CiAKIAkv KgotCSAqIEZpbmFsbHksIHdhaXQgdW50aWwgdGhlIG1haW4gYXBwbHkgd29ya2VyIHRlbGxzIHVz IHRvIGNhdGNoIHVwIGFuZCB0aGVuCi0JICogcmV0dXJuIHRvIGxldCBMb2dpY2FsUmVwQXBwbHlM b29wIGRvIGl0LgorCSAqIEZpbmFsbHksIHdhaXQgdW50aWwgdGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgdGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kCisJICogdGhlbiByZXR1cm4gdG8gbGV0IExvZ2lj YWxSZXBBcHBseUxvb3AgZG8gaXQuCiAJICovCiAJd2FpdF9mb3Jfd29ya2VyX3N0YXRlX2NoYW5n ZShTVUJSRUxfU1RBVEVfQ0FUQ0hVUCk7CiAJcmV0dXJuIHNsb3RuYW1lOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggZTQ4YTNmNS4uNDNmMDliNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0yMiw4ICsyMiw1NCBAQAog ICogU1RSRUFNRUQgVFJBTlNBQ1RJT05TCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0 cmVhbWVkIHRyYW5zYWN0aW9ucyAobGFyZ2UgdHJhbnNhY3Rpb25zIGV4Y2VlZGluZyBhIG1lbW9y eSBsaW1pdCBvbiB0aGUKLSAqIHVwc3RyZWFtKSBhcmUgbm90IGFwcGxpZWQgaW1tZWRpYXRlbHks IGJ1dCBpbnN0ZWFkLCB0aGUgZGF0YSBpcyB3cml0dGVuCi0gKiB0byB0ZW1wb3JhcnkgZmlsZXMg YW5kIHRoZW4gYXBwbGllZCBhdCBvbmNlIHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzLgor ICogdXBzdHJlYW0pIGFyZSBhcHBsaWVkIHVzaW5nIG9uZSBvZiB0d28gYXBwcm9hY2hlczoKKyAq CisgKiAxKSBQYXJhbGxlbCBhcHBseSB3b3JrZXJzCisgKgorICogSWYgc3RyZWFtaW5nID0gcGFy YWxsZWwsIHdlIGFzc2lnbiBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKGlmCisgKiBhdmFp bGFibGUpIGFzIHNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJlYW0gaXMgcmVjZWl2ZWQuIFRo ZSBsZWFkZXIgYXBwbHkKKyAqIHdvcmtlciB3aWxsIHNlbmQgY2hhbmdlcyB0byB0aGlzIG5ldyB3 b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuIFdlIGtlZXAgdGhpcworICogd29ya2VyIGFzc2lnbmVk IHRpbGwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZv cgorICogdGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21t aXQgb3JkZXJpbmcgYW5kIGF2b2lkcworICogZmlsZSBJL08gaW4gbW9zdCBjYXNlcywgYWx0aG91 Z2ggd2Ugc3RpbGwgbmVlZCB0byBzcGlsbCB0byBhIGZpbGUgaWYgdGhlcmUKKyAqIGlzIG5vIHdv cmtlciBhdmFpbGFibGUuIEl0IGlzIGltcG9ydGFudCB0byBtYWludGFpbiBjb21taXQgb3JkZXIg dG8gYXZvaWQKKyAqIGZhaWx1cmVzIGR1ZSB0byAoYSkgdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVz LCBzYXkgaWYgd2UgaW5zZXJ0IGEgcm93IGluIHRoZQorICogZmlyc3QgdHJhbnNhY3Rpb24gYW5k IHVwZGF0ZSBpdCBpbiB0aGUgc2Vjb25kIHRyYW5zYWN0aW9uIHRoZW4gYWxsb3dpbmcgdG8KKyAq IGFwcGx5IGJvdGggaW4gcGFyYWxsZWwgY2FuIGxlYWQgdG8gZmFpbHVyZSBpbiB0aGUgdXBkYXRl LiAoYikgZGVhZGxvY2tzLAorICogYWxsb3dpbmcgdHJhbnNhY3Rpb25zIHRoYXQgdXBkYXRlIHRo ZSBzYW1lIHNldCBvZiByb3dzL3RhYmxlcyBpbiBvcHBvc2l0ZQorICogb3JkZXIgdG8gYmUgYXBw bGllZCBpbiBwYXJhbGxlbCBjYW4gbGVhZCB0byBkZWFkbG9ja3MuCisgKgorICogV2UgbWFpbnRh aW4gYSB3b3JrZXIgcG9vbCB0byBhdm9pZCByZXN0YXJ0aW5nIHdvcmtlcnMgZm9yIGVhY2ggc3Ry ZWFtaW5nCisgKiB0cmFuc2FjdGlvbi4gV2UgbWFpbnRhaW4gZWFjaCB3b3JrZXIncyBpbmZvcm1h dGlvbiBpbiB0aGUKKyAqIFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdC4gQWZ0ZXIgc3VjY2Vzc2Z1 bGx5IGxhdW5jaGluZyBhIG5ldyB3b3JrZXIsIGl0cworICogaW5mb3JtYXRpb24gaXMgYWRkZWQg dG8gdGhlIFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdC4gT25jZSB0aGUgd29ya2VyCisgKiBmaW5p c2hlcyBhcHBseWluZyB0aGUgdHJhbnNhY3Rpb24sIHdlIG1hcmsgaXQgYXZhaWxhYmxlIGZvciBy ZS11c2UuIE5vdywKKyAqIGJlZm9yZSBzdGFydGluZyBhIG5ldyB3b3JrZXIgdG8gYXBwbHkgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgd2UgY2hlY2sKKyAqIHRoZSBsaXN0IGZvciBhbnkgYXZh aWxhYmxlIHdvcmtlci4gTm90ZSB0aGF0IHdlIG1haW50YWluIGEgbWF4aW11bSBvZiBoYWxmCisg KiB0aGUgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiB3b3JrZXJz IGluIHRoZSBwb29sIGFuZAorICogYWZ0ZXIgdGhhdCwgd2Ugc2ltcGx5IGV4aXQgdGhlIHdvcmtl ciBhZnRlciBhcHBseWluZyB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogWFhYIFRoaXMgd29ya2Vy IHBvb2wgdGhyZXNob2xkIGlzIGEgYml0IGFyYml0cmFyeSBhbmQgd2UgY2FuIHByb3ZpZGUgYSBH VUMKKyAqIHZhcmlhYmxlIGZvciB0aGlzIGluIHRoZSBmdXR1cmUgaWYgcmVxdWlyZWQuCisgKgor ICogVGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBjcmVhdGUgc2VwYXJhdGUgZHluYW1pYyBz aGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAqIHdoZW4gZWFjaCBwYXJhbGxlbCBhcHBseSB3b3JrZXIg c3RhcnRzLiBUaGUgcmVhc29uIGZvciB0aGlzIGRlc2lnbiBpcyB0aGF0CisgKiB3ZSBjYW5ub3Qg Y291bnQgaG93IG1hbnkgd29ya2VycyB3aWxsIGJlIHN0YXJ0ZWQuIEl0IG1heSBiZSBwb3NzaWJs ZSB0bworICogYWxsb2NhdGUgZW5vdWdoIHNoYXJlZCBtZW1vcnkgaW4gb25lIHNlZ21lbnQgYmFz ZWQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzICht YXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKSwgYnV0IHRoaXMKKyAq IHdvdWxkIHdhc3RlIG1lbW9yeSBpZiBubyBwcm9jZXNzIGlzIGFjdHVhbGx5IHN0YXJ0ZWQuCisg KgorICogVGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHdpbGwgY29udGFpbiAoYSkg YSBzaG1fbXEgdGhhdCBpcyB1c2VkIHRvCisgKiBzZW5kIGNoYW5nZXMgaW4gdGhlIHRyYW5zYWN0 aW9uIGZyb20gbGVhZGVyIGFwcGx5IHdvcmtlciB0byBwYXJhbGxlbCBhcHBseQorICogd29ya2Vy IChiKSBhbm90aGVyIHNobV9tcSB0aGF0IGlzIHVzZWQgdG8gc2VuZCBlcnJvcnMgKGFuZCBvdGhl ciBtZXNzYWdlcworICogcmVwb3J0ZWQgdmlhIGVsb2cvZXJlcG9ydCkgZnJvbSB0aGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIHRvIGxlYWRlciBhcHBseQorICogd29ya2VyIChjKSBuZWNlc3Nhcnkg aW5mb3JtYXRpb24gdG8gYmUgc2hhcmVkIGFtb25nIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKyAq IGFuZCBsZWFkZXIgYXBwbHkgd29ya2VyIChpLmUuIG1lbWJlcnMgb2YgUGFyYWxsZWxBcHBseVdv cmtlclNoYXJlZCkuCisgKgorICogSWYgbm8gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGF2YWls YWJsZSB0byBoYW5kbGUgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uCisgKiB3ZSBmb2xsb3cgYXBw cm9hY2ggMi4KKyAqCisgKiAyKSBXcml0ZSB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFwcGx5IHdo ZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzCiAgKgogICogVW5saWtlIHRoZSByZWd1bGFyIChu b24tc3RyZWFtZWQpIGNhc2UsIGhhbmRsaW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBoYXMKICAq IHRvIGhhbmRsZSBhYm9ydHMgb2YgYm90aCB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24gYW5kIHN1 YnRyYW5zYWN0aW9ucy4gVGhpcwpAQCAtMTcyLDcgKzIxOCw2IEBACiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJu YWwuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCi0jaW5jbHVkZSAic3Rv cmFnZS9idWZmaWxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTIxOSwyMCArMjY0LDUz IEBAIHR5cGVkZWYgc3RydWN0IEFwcGx5RXhlY3V0aW9uRGF0YQogCVBhcnRpdGlvblR1cGxlUm91 dGluZyAqcHJvdXRlOwkvKiBwYXJ0aXRpb24gcm91dGluZyBpbmZvICovCiB9IEFwcGx5RXhlY3V0 aW9uRGF0YTsKIAotLyogU3RydWN0IGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBhcHBseSBlcnJj b250ZXh0IGluZm9ybWF0aW9uICovCi10eXBlZGVmIHN0cnVjdCBBcHBseUVycm9yQ2FsbGJhY2tB cmcKKy8qCisgKiBXaGF0IGFjdGlvbiB0byB0YWtlIGZvciB0aGUgdHJhbnNhY3Rpb24uCisgKgor ICogVFJBTlNfTEVBREVSX0FQUExZOgorICogVGhlIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBp biB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgY2hhbmdlcyBvZiB0aGUKKyAqIHRyYW5zYWN0 aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGluIHRoZSB3b3JrZXIuCisgKgorICogVFJBTlNfTEVB REVSX1NFUklBTElaRToKKyAqIEl0IG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBw bHkgd29ya2VyIG9yIHRhYmxlIHN5bmMgd29ya2VyLgorICogQ2hhbmdlcyBhcmUgd3JpdHRlbiB0 byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCB3aGVuIHRoZSBmaW5hbAorICogY29t bWl0IGFycml2ZXMuCisgKgorICogVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorICog VGhlIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBh bmQgaGF2ZSBzZW50IHNvbWUKKyAqIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciwgYnV0IHRoZSByZW1haW5pbmcgY2hhbmdlcyBuZWVkIHRvIGJlCisgKiBzZXJpYWxpemVkIHRv IGRpc2sgZHVlIHRvIHRpbWVvdXQgd2hpbGUgc2VuZGluZyBkYXRhLCBhbmQgdGhlIHBhcmFsbGVs IGFwcGx5CisgKiB3b3JrZXIgd2lsbCBhcHBseSB0aGVzZSBjaGFuZ2VzIHdoZW4gdGhlIGZpbmFs IGNvbW1pdCBhcnJpdmVzLgorICoKKyAqIE9uZSBtaWdodCB0aGluayB3ZSBjYW4gdXNlIExFQURF Ul9TRVJJQUxJWkUgZGlyZWN0bHkuIEJ1dCBpbiBwYXJ0aWFsCisgKiBzZXJpYWxpemUgbW9kZSwg aW4gYWRkaXRpb24gdG8gc2VyaWFsaXppbmcgY2hhbmdlcyB0byBmaWxlLCB0aGUgbGVhZGVyCisg KiB3b3JrZXIgbmVlZCB0byB3cml0ZSB0aGUgU1RSRUFNX1hYWCBtZXNzYWdlIHRvIGRpc2ssIGFu ZCBuZWVkIHRvIHdhaXQgZm9yCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gZmluaXNoIHRo ZSB0cmFuc2FjdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlCisgKiB0cmFuc2FjdGlvbiBmaW5pc2gg Y29tbWFuZC4gU28gYSBuZXcgYWN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRvIG1ha2UgdGhlIGxvZ2lj CisgKiBjbGVhcmVyLgorICoKKyAqIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorICog VGhlIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBh bmQgbmVlZCB0byBzZW5kIHRoZQorICogY2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyLgorICoKKyAqIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorICogVGhlIGFjdGlvbiB0aGF0IHdl IGFyZSBpbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGFuZCBjaGFuZ2VzIG9mIHRoZQorICog dHJhbnNhY3Rpb24gYXJlIGFwcGxpZWQgZGlyZWN0bHkgaW4gdGhlIHdvcmtlci4KKyAqLwordHlw ZWRlZiBlbnVtCiB7Ci0JTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFuZDsJLyogMCBpZiBpbnZhbGlk ICovCi0JTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7Ci0KLQkvKiBSZW1vdGUgbm9kZSBpbmZv cm1hdGlvbiAqLwotCWludAkJCXJlbW90ZV9hdHRudW07CS8qIC0xIGlmIGludmFsaWQgKi8KLQlU cmFuc2FjdGlvbklkIHJlbW90ZV94aWQ7Ci0JWExvZ1JlY1B0cglmaW5pc2hfbHNuOwotCWNoYXIJ ICAgKm9yaWdpbl9uYW1lOwotfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7Ci0KLXN0YXRpYyBBcHBs eUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KKwkvKiBUaGUgYWN0 aW9uIGZvciBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4gKi8KKwlUUkFOU19MRUFERVJfQVBQ TFksCisKKwkvKiBBY3Rpb25zIGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5T X0xFQURFUl9TRVJJQUxJWkUsCisJVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFLAorCVRS QU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMLAorCVRSQU5TX1BBUkFMTEVMX0FQUExZCit9IFRy YW5zQXBwbHlBY3Rpb247CisKKy8qIGVycmNvbnRleHQgdHJhY2tlciAqLworQXBwbHlFcnJvckNh bGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiB7CiAJLmNvbW1hbmQgPSAwLAog CS5yZWwgPSBOVUxMLApAQCAtMjQyLDcgKzMyMCw5IEBAIHN0YXRpYyBBcHBseUVycm9yQ2FsbGJh Y2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KIAkub3JpZ2luX25hbWUgPSBOVUxMLAog fTsKIAotc3RhdGljIE1lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CitF cnJvckNvbnRleHRDYWxsYmFjayAqYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IE5VTEw7CisK K01lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CiBNZW1vcnlDb250ZXh0 IEFwcGx5Q29udGV4dCA9IE5VTEw7CiAKIC8qIHBlciBzdHJlYW0gY29udGV4dCBmb3Igc3RyZWFt aW5nIHRyYW5zYWN0aW9ucyAqLwpAQCAtMjUxLDMzICszMzEsNDIgQEAgc3RhdGljIE1lbW9yeUNv bnRleHQgTG9naWNhbFN0cmVhbWluZ0NvbnRleHQgPSBOVUxMOwogV2FsUmVjZWl2ZXJDb25uICpM b2dSZXBXb3JrZXJXYWxSY3ZDb25uID0gTlVMTDsKIAogU3Vic2NyaXB0aW9uICpNeVN1YnNjcmlw dGlvbiA9IE5VTEw7Ci1zdGF0aWMgYm9vbCBNeVN1YnNjcmlwdGlvblZhbGlkID0gZmFsc2U7Citi b29sCQlNeVN1YnNjcmlwdGlvblZhbGlkID0gZmFsc2U7CiAKIGJvb2wJCWluX3JlbW90ZV90cmFu c2FjdGlvbiA9IGZhbHNlOwogc3RhdGljIFhMb2dSZWNQdHIgcmVtb3RlX2ZpbmFsX2xzbiA9IElu dmFsaWRYTG9nUmVjUHRyOwogCiAvKiBmaWVsZHMgdmFsaWQgb25seSB3aGVuIHByb2Nlc3Npbmcg c3RyZWFtZWQgdHJhbnNhY3Rpb24gKi8KLXN0YXRpYyBib29sIGluX3N0cmVhbWVkX3RyYW5zYWN0 aW9uID0gZmFsc2U7Citib29sCQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwogCi1z dGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CitU cmFuc2FjdGlvbklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKworLyoKKyAq IFRoZSBudW1iZXIgb2YgY2hhbmdlcyBhcHBsaWVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBk dXJpbmcgb25lIHN0cmVhbWluZworICogYmxvY2suCisgKi8KK3N0YXRpYyB1aW50MzIgcGFyYWxs ZWxfc3RyZWFtX25jaGFuZ2VzID0gMDsKIAogLyoKICAqIFdlIGVuYWJsZSBza2lwcGluZyBhbGwg ZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyAoSU5TRVJULCBVUERBVEUsIGV0Yy4pIGZvcgogICog dGhlIHN1YnNjcmlwdGlvbiBpZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uJ3MgZmluaXNoIExTTiBt YXRjaGVzIHRoZSBzdWJza2lwbHNuLgogICogT25jZSB3ZSBzdGFydCBza2lwcGluZyBjaGFuZ2Vz LCB3ZSBkb24ndCBzdG9wIGl0IHVudGlsIHdlIHNraXAgYWxsIGNoYW5nZXMgb2YKICAqIHRoZSB0 cmFuc2FjdGlvbiBldmVuIGlmIHBnX3N1YnNjcmlwdGlvbiBpcyB1cGRhdGVkIGFuZCBNeVN1YnNj cmlwdGlvbi0+c2tpcGxzbgotICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBB bHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gY2FzZXMsIHdlCi0gKiBkb24ndCBza2lwIHJl Y2VpdmluZyBhbmQgc3Bvb2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIg b3Igbm90CisgKiBnZXRzIGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0 cmVhbWluZyB0cmFuc2FjdGlvbiBjYXNlcyAoc3RyZWFtaW5nID0gb24pLAorICogd2UgZG9uJ3Qg c2tpcCByZWNlaXZpbmcgYW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3 aGV0aGVyIG9yIG5vdAogICogdG8gc2tpcCBhcHBseWluZyB0aGUgY2hhbmdlcyB3aGVuIHN0YXJ0 aW5nIHRvIGFwcGx5IGNoYW5nZXMuIFRoZSBzdWJza2lwbHNuIGlzCiAgKiBjbGVhcmVkIGFmdGVy IHN1Y2Nlc3NmdWxseSBza2lwcGluZyB0aGUgdHJhbnNhY3Rpb24gb3IgYXBwbHlpbmcgbm9uLWVt cHR5CiAgKiB0cmFuc2FjdGlvbi4gVGhlIGxhdHRlciBwcmV2ZW50cyB0aGUgbWlzdGFrZW5seSBz cGVjaWZpZWQgc3Vic2tpcGxzbiBmcm9tCi0gKiBiZWluZyBsZWZ0LgorICogYmVpbmcgbGVmdC4g Tm90ZSB0aGF0IHdlIGNhbm5vdCBza2lwIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIHdoZW4g dXNpbmcKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYmVjYXVzZSB3ZSBjYW5ub3QgZ2V0IHRo ZSBmaW5pc2ggTFNOIGJlZm9yZSBhcHBseWluZworICogdGhlIGNoYW5nZXMuIFNvLCB3ZSBkb24n dCBzdGFydCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2hlbiBmaW5pc2ggTFNOIGlzIHNldAorICog YnkgdGhlIHVzZXIuCiAgKi8KIHN0YXRpYyBYTG9nUmVjUHRyIHNraXBfeGFjdF9maW5pc2hfbHNu ID0gSW52YWxpZFhMb2dSZWNQdHI7CiAjZGVmaW5lIGlzX3NraXBwaW5nX2NoYW5nZXMoKSAodW5s aWtlbHkoIVhMb2dSZWNQdHJJc0ludmFsaWQoc2tpcF94YWN0X2ZpbmlzaF9sc24pKSkKIAogLyog QnVmRmlsZSBoYW5kbGUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGZpbGUgKi8KLXN0YXRpYyBC dWZGaWxlICpzdHJlYW1fZmQgPSBOVUxMOworQnVmRmlsZSAgICAqc3RyZWFtX2ZkID0gTlVMTDsK IAogdHlwZWRlZiBzdHJ1Y3QgU3ViWGFjdEluZm8KIHsKQEAgLTI5OCw3ICszODcsNyBAQCB0eXBl ZGVmIHN0cnVjdCBBcHBseVN1YlhhY3REYXRhCiBzdGF0aWMgQXBwbHlTdWJYYWN0RGF0YSBzdWJ4 YWN0X2RhdGEgPSB7MCwgMCwgSW52YWxpZFRyYW5zYWN0aW9uSWQsIE5VTEx9OwogCiBzdGF0aWMg aW5saW5lIHZvaWQgc3VieGFjdF9maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VzX2ZpbGVuYW1lKGNoYXIg KnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOworaW5saW5lIHZvaWQgY2hhbmdl c19maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKTsKIAog LyoKICAqIEluZm9ybWF0aW9uIGFib3V0IHN1YnRyYW5zYWN0aW9ucyBvZiBhIGdpdmVuIHRvcGxl dmVsIHRyYW5zYWN0aW9uLgpAQCAtMzExLDIzICs0MDAsMTcgQEAgc3RhdGljIGlubGluZSB2b2lk IGNsZWFudXBfc3VieGFjdF9pbmZvKHZvaWQpOwogLyoKICAqIFNlcmlhbGl6ZSBhbmQgZGVzZXJp YWxpemUgY2hhbmdlcyBmb3IgYSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KICAqLwotc3RhdGljIHZv aWQgc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCk7CiBz dGF0aWMgdm9pZCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCQkJCQkJIGJvb2wgZmlyc3Rfc2VnbWVudCk7Ci1zdGF0aWMgdm9pZCBzdHJlYW1fd3JpdGVf Y2hhbmdlKGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpOworc3RhdGljIHZvaWQgc3RyZWFtX3dy aXRlX21lc3NhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMp Owogc3RhdGljIHZvaWQgc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNl bmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RS ZXBseSk7CiAKIHN0YXRpYyB2b2lkIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVt b3RlX2xzbik7CiAKLXN0YXRpYyB2b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7 Ci0KIHN0YXRpYyB2b2lkIERpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KHZvaWQpOwogCi0vKiBw cm90b3R5cGUgbmVlZGVkIGJlY2F1c2Ugb2Ygc3RyZWFtX2NvbW1pdCAqLwotc3RhdGljIHZvaWQg YXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKTsKLQogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxl X2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogc3Rh dGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2VydF9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEg KmVkYXRhLAogCQkJCQkJCQkJCSBSZXN1bHRSZWxJbmZvICpyZWxpbmZvLApAQCAtMzUxLDE5ICs0 MzQsMjAgQEAgc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVj dXRpb25EYXRhICplZGF0YSwKIC8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rp b25zICovCiBzdGF0aWMgdm9pZCBUd29QaGFzZVRyYW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwgVHJh bnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZCwgaW50IHN6Z2lkKTsKIAotLyogQ29tbW9uIHN0cmVh bWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMgKi8KLXN0YXRp YyB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQ dHIgbHNuKTsKLQogLyogRnVuY3Rpb25zIGZvciBza2lwcGluZyBjaGFuZ2VzICovCiBzdGF0aWMg dm9pZCBtYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKFhMb2dSZWNQdHIgZmluaXNoX2xzbik7 CiBzdGF0aWMgdm9pZCBzdG9wX3NraXBwaW5nX2NoYW5nZXModm9pZCk7CiBzdGF0aWMgdm9pZCBj bGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIAogLyog RnVuY3Rpb25zIGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAqLwotc3RhdGljIHZvaWQgYXBwbHlf ZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBz dGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwog CitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbiBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRy YW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq KndpbmZvKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF93b3JrZXJfbmFtZSh2b2lkKTsKKwog LyoKICAqIEZvcm0gdGhlIG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAg LTM5MywxOSArNDc3LDQzIEBAIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoT2lk IHN1Ym9pZCwgT2lkIHJlbGlkLAogICoKICAqIFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBmb3IgaW5p dGlhbCByZWxhdGlvbiBkYXRhIHN5bmMgYXMgdGhhdCBydW5zIGluCiAgKiBzZXBhcmF0ZSB3b3Jr ZXIgcHJvY2VzcyBydW5uaW5nIGluIHBhcmFsbGVsIGFuZCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHNr aXAKLSAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtlciBkdXJpbmcgdGhl IHN5bmMgb2YgYSB0YWJsZS4KKyAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBsZWFkZXIgYXBwbHkg d29ya2VyIGR1cmluZyB0aGUgc3luYyBvZiBhIHRhYmxlLgogICoKICAqIE5vdGUgd2UgbmVlZCB0 byBkbyBzbWFsbGVyIG9yIGVxdWFscyBjb21wYXJpc29uIGZvciBTWU5DRE9ORSBzdGF0ZSBiZWNh dXNlCiAgKiBpdCBtaWdodCBob2xkIHBvc2l0aW9uIG9mIGVuZCBvZiBpbml0aWFsIHNsb3QgY29u c2lzdGVudCBwb2ludCBXQUwKICAqIHJlY29yZCArIDEgKGllIHN0YXJ0IG9mIG5leHQgcmVjb3Jk KSBhbmQgbmV4dCByZWNvcmQgY2FuIGJlIENPTU1JVCBvZgogICogdHJhbnNhY3Rpb24gd2UgYXJl IG5vdyBwcm9jZXNzaW5nICh3aGljaCBpcyB3aGF0IHdlIHNldCByZW1vdGVfZmluYWxfbHNuCiAg KiB0byBpbiBhcHBseV9oYW5kbGVfYmVnaW4pLgorICoKKyAqIE5vdGUgdGhhdCBmb3Igc3RyZWFt aW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBsaWVkIGluIHRoZSBwYXJhbGxlbAor ICogYXBwbHkgd29ya2VyLCB3ZSBkaXNhbGxvdyBhcHBseWluZyBjaGFuZ2VzIG9uIGEgdGFibGUg dGhhdCBpcyBub3QgaW4KKyAqIHRoZSBSRUFEWSBzdGF0ZSwgYmVjYXVzZSB3ZSBjYW5ub3QgZGVj aWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBhcyB3ZQorICogd29uJ3Qga25vdyByZW1v dGVfZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4KKyAqCisgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhp cyBpbiBwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQoKSBiZWZvcmUgYXNzaWduaW5nIHRoZQorICog c3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIHRoZSBwYXJhbGxlbCB3b3JrZXIsIGJ1dCBpdCBhbHNv IG5lZWRzIHRvIGJlCisgKiBjaGVja2VkIGhlcmUgYmVjYXVzZSBpZiB0aGUgdXNlciBleGVjdXRl cyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0gKKyAqIFBVQkxJQ0FUSU9OIGluIHBhcmFs bGVsLCB0aGUgbmV3IHRhYmxlIGNhbiBiZSBhZGRlZCB0byBwZ19zdWJzY3JpcHRpb25fcmVsCisg KiB3aGlsZSBhcHBseWluZyB0aGlzIHRyYW5zYWN0aW9uLgogICovCiBzdGF0aWMgYm9vbAogc2hv dWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIHsK IAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQlyZXR1cm4gTXlMb2dpY2FsUmVwV29ya2Vy LT5yZWxpZCA9PSByZWwtPmxvY2FscmVsb2lkOworCWVsc2UgaWYgKGFtX3BhcmFsbGVsX2FwcGx5 X3dvcmtlcigpKQorCXsKKwkJaWYgKHJlbC0+c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1JFQURZKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFt ZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkgZXJybXNnKCIlcyBmb3Ig c3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgp LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIkNhbm5vdCBoYW5kbGUg c3RyZWFtZWQgcmVwbGljYXRpb24gdHJhbnNhY3Rpb25zIHVzaW5nIHBhcmFsbGVsICIKKwkJCQkJ CQkgICAiYXBwbHkgd29ya2VycyB1bnRpbCBhbGwgdGFibGVzIGhhdmUgYmVlbiBzeW5jaHJvbml6 ZWQuIikpKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CiAJZWxzZQogCQlyZXR1cm4gKHJlbC0+c3Rh dGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZIHx8CiAJCQkJKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NU QVRFX1NZTkNET05FICYmCkBAIC00NTEsNDMgKzU1OSw5MyBAQCBlbmRfcmVwbGljYXRpb25fc3Rl cCh2b2lkKQogfQogCiAvKgotICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKyAqIEhh bmRsZSBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgZm9yIGJvdGggdGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgYW5kIHRoZSBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4KKyAqCisgKiBJbiBzdHJlYW1p bmcgY2FzZSAocmVjZWl2aW5nIGEgYmxvY2sgb2Ygc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCBmb3IK KyAqIFNVQlNUUkVBTV9PTiBtb2RlLCBzaW1wbHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0 aGUgcHJvcGVyIHRvcGxldmVsCisgKiB0cmFuc2FjdGlvbiwgYW5kIGZvciBTVUJTVFJFQU1fUEFS QUxMRUwgbW9kZSwgc2VuZCB0aGUgY2hhbmdlcyB0byBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vy cyAoTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OIG9yIExPR0lDQUxfUkVQX01TR19UWVBFIGNoYW5n ZXMKKyAqIHdpbGwgYmUgYXBwbGllZCBieSBib3RoIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMpLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNl aXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVk aXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgor ICogRm9yIG5vbi1zdHJlYW1lZCB0cmFuc2FjdGlvbnMsIHJldHVybnMgZmFsc2UuCisgKiBGb3Ig c3RyZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIHRydWUgaWYgaW4gbGVhZGVyIGFwcGx5IHdv cmtlciwgZmFsc2UKKyAqIG90aGVyd2lzZS4KICAqCi0gKiBSZXR1cm5zIHRydWUgZm9yIHN0cmVh bWVkIHRyYW5zYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFyIG1vZGUpLgorICogRXhj ZXB0aW9uOiBJZiB0aGUgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgaXMgTE9HSUNBTF9SRVBfTVNH X1JFTEFUSU9OCisgKiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRSwgcmV0dXJuIGZhbHNlIGV2ZW4g aWYgdGhlIG1lc3NhZ2UgbmVlZHMgdG8gYmUgc2VudAorICogdG8gYSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9n aWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4 aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0Rh dGEgb3JpZ2luYWxfbXNnOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5 X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOwogCiAJLyogbm90IGluIHN0cmVhbWluZyBtb2Rl ICovCi0JaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwlpZiAoYXBwbHlfYWN0aW9uID09 IFRSQU5TX0xFQURFUl9BUFBMWSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JQXNzZXJ0KHN0cmVhbV9m ZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwog CisJb3JpZ2luYWxfbXNnID0gKnM7CisKIAkvKgogCSAqIFdlIHNob3VsZCBoYXZlIHJlY2VpdmVk IFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUKIAkgKiBtZXNzYWdl LCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKKwljdXJy ZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGN1cnJlbnRfeGlkKSkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJ CQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2FjdGlvbiBJRCBpbiBzdHJlYW1lZCBy ZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRv IHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLwotCXN1YnhhY3RfaW5mb19hZGQo eGlkKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NF UklBTElaRToKKwkJCUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAKLQkvKiB3cml0ZSB0aGUg Y2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KLQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlv biwgcyk7CisJCQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFs cmVhZHkgdGhlcmUpLiAqLworCQkJc3VieGFjdF9pbmZvX2FkZChjdXJyZW50X3hpZCk7CisKKwkJ CS8qIFdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLworCQkJc3RyZWFtX3dy aXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkJcmV0dXJuIHRydWU7CisKKwkJY2FzZSBUUkFOU19M RUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFS QUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5T X0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCQlzdHJlYW1fd3JpdGVfY2hhbmdl KGFjdGlvbiwgJm9yaWdpbmFsX21zZyk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwkJCS8qCisJCQkgKiBY WFggVGhlIHB1Ymxpc2hlciBzaWRlIGRvZXNuJ3QgYWx3YXlzIHNlbmQgcmVsYXRpb24vdHlwZSB1 cGRhdGUKKwkJCSAqIG1lc3NhZ2VzIGFmdGVyIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24sIHNv IGFsc28gdXBkYXRlIHRoZQorCQkJICogcmVsYXRpb24vdHlwZSBpbiBsZWFkZXIgYXBwbHkgd29y a2VyLiBTZWUgZnVuY3Rpb24KKwkJCSAqIGNsZWFudXBfcmVsX3N5bmNfY2FjaGUuCisJCQkgKi8K KwkJCXJldHVybiAoYWN0aW9uICE9IExPR0lDQUxfUkVQX01TR19SRUxBVElPTiAmJgorCQkJCQlh Y3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxf QVBQTFk6CisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgKz0gMTsKKworCQkJLyogRGVmaW5l IGEgc2F2ZXBvaW50IGZvciBhIHN1YnhhY3QgaWYgbmVlZGVkLiAqLworCQkJcGFyYWxsZWxfYXBw bHlfc3RhcnRfc3VidHJhbnMoY3VycmVudF94aWQsIHN0cmVhbV94aWQpOworCQkJcmV0dXJuIGZh bHNlOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJcmV0dXJuIGZhbHNlOwkJ Lyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICovCisJfQogfQogCiAvKgpAQCAtOTIzLDggKzEw ODEsMTEgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVk VHhuRGF0YSAqcHJlcGFyZV9kYXRhKQogCSAqIEJlZ2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNl c3NhcnkgdG8gYmFsYW5jZSB0aGUgRW5kVHJhbnNhY3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRo aW4gdGhlIFByZXBhcmVUcmFuc2FjdGlvbkJsb2NrIGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNh Y3Rpb25CbG9jaygpOwotCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0ZXMg dGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCWlmICghSXNUcmFuc2FjdGlvbkJsb2Nr KCkpCisJeworCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5nIEJlZ2luIGNvbW1hbmQuICovCisJ fQogCiAJLyoKIAkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVh bWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KQEAgLTk5Myw2ICsxMTU0LDEyIEBAIGFwcGx5X2hh bmRsZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBhIENPTU1JVCBQUkVQ QVJFRCBvZiBhIHByZXZpb3VzbHkgUFJFUEFSRUQgdHJhbnNhY3Rpb24uCisgKgorICogTm90ZSB0 aGF0IHdlIGRvbid0IG5lZWQgdG8gd2FpdCBoZXJlIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgcHJl cGFyZWQgaW4gYQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBJbiB0aGF0IGNhc2UsIHdlIGhh dmUgYWxyZWFkeSB3YWl0ZWQgZm9yIHRoZSBwcmVwYXJlCisgKiB0byBmaW5pc2ggaW4gYXBwbHlf aGFuZGxlX3N0cmVhbV9wcmVwYXJlKCkgd2hpY2ggd2lsbCBlbnN1cmUgYWxsIHRoZQorICogb3Bl cmF0aW9ucyBpbiB0aGF0IHRyYW5zYWN0aW9uIGhhdmUgaGFwcGVuZWQgaW4gdGhlIHN1YnNjcmli ZXIsIHNvIG5vCisgKiBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGNhbiBjYXVzZSBkZWFkbG9jayBv ciB0cmFuc2FjdGlvbiBkZXBlbmRlbmN5IGlzc3Vlcy4KICAqLwogc3RhdGljIHZvaWQKIGFwcGx5 X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQpAQCAtMTAzNiw2ICsxMjAzLDEy IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCiAvKgogICog SGFuZGxlIGEgUk9MTEJBQ0sgUFJFUEFSRUQgb2YgYSBwcmV2aW91c2x5IFBSRVBBUkVEIFRSQU5T QUNUSU9OLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0 aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIGluIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkIGZvciB0aGUgcHJlcGFyZQor ICogdG8gZmluaXNoIGluIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwg ZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJhdGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhh cHBlbmVkIGluIHRoZSBzdWJzY3JpYmVyLCBzbyBubworICogY29uY3VycmVudCB0cmFuc2FjdGlv biBjYW4gY2F1c2UgZGVhZGxvY2sgb3IgdHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAg Ki8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5m byBzKQpAQCAtMTA4OSwxNSArMTI2MiwxNCBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFy ZWQoU3RyaW5nSW5mbyBzKQogCiAvKgogICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgotICoKLSAq IExvZ2ljIGlzIGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3Bl cmF0aW9ucwotICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKICAqLwogc3Rh dGljIHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiB7CiAJ TG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSBwcmVwYXJlX2RhdGE7CisJUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCVN0cmlu Z0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwogCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0 aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTExMywyNCArMTI4NSwxMDEgQEAgYXBwbHlfaGFu ZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfc3RyZWFt X3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFj dChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JZWxvZyhE RUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHBy ZXBhcmVfZGF0YS54aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9h Y3Rpb24ocHJlcGFyZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwgdGhlIHNw b29sZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0 YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24p CisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRoZSB0cmFu c2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgm cHJlcGFyZV9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2Vy aWFsaXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRp b25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtl ci0+c3RyZWFtX2ZpbGVzZXQsCisJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVf ZGF0YS5wcmVwYXJlX2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8q IE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFuZGxlX3By ZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFs c2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlzdG9yZV9mbHVzaF9wb3Np dGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVw YXJlX2RhdGEuZW5kX2xzbik7CiAKLQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKwkJ CWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBVbmxpbmsgdGhlIGZpbGVz IHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCisJCQlzdHJlYW1f Y2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlk KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJ CWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsK KworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGNhbgorCQkJICogY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBw bHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrX3N0cmVhbSh3aW5m by0+c2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQkvKiBTZW5kIFNUUkVB TSBQUkVQQVJFIG1lc3NhZ2UgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KKwkJCWlm IChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwpCisJCQkJcGFy YWxsZWxfYXBwbHlfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOworCQkJZWxzZQor CQkJCXN0cmVhbV93cml0ZV9tZXNzYWdlKHByZXBhcmVfZGF0YS54aWQsCisJCQkJCQkJCQkgTE9H SUNBTF9SRVBfTVNHX1NUUkVBTV9QUkVQQVJFLAorCQkJCQkJCQkJICZvcmlnaW5hbF9tc2cpOwor CisJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCXBhcmFsbGVsX2FwcGx5X3Nl dF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsCisJCQkJCQkJCQkJCQkgTEVBREVSX0ZJTEVT RVRfQUNDRVNTSUJMRSk7CisKKwkJCS8qCisJCQkgKiBBZnRlciBzZW5kaW5nIHRoZSBkYXRhIHRv IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgb3IKKwkJCSAqIHNlcmlhbGl6aW5nIGRhdGEgdG8g ZmlsZSwgd2FpdCBmb3IgdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzCisJCQkgKiBpcyBuZWNl c3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0IG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUK KwkJCSAqIHRvIHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyBhbmQgZGVhZGxvY2tzLgorCQkJICov CisJCQlwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsK KwkJCSh2b2lkKSBwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtlcih3aW5mbywgcHJlcGFyZV9kYXRh LnhpZCwgdHJ1ZSk7CisKKwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQlz dG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlicmVhazsKKwor CQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCisJCQkvKgorCQkJICogQ2xvc2UgdGhlIGZp bGUgYmVmb3JlIGNvbW1pdHRpbmcgaWYgdGhlIHBhcmFsbGVsIGFwcGx5IGlzCisJCQkgKiBhcHBs eWluZyBzcG9vbGVkIGNoYW5nZXMuCisJCQkgKi8KKwkJCWlmIChzdHJlYW1fZmQpCisJCQkJQnVm RmlsZUNsb3NlKHN0cmVhbV9mZCk7CisKKwkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwor CQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlhcHBseV9oYW5k bGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCWxpc3RfZnJl ZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQkJcGFyYWxsZWxfYXBw bHlfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNI RUQpOworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxsZWxTaGFy ZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAotCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBz ZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KLQlzdHJlYW1fY2xlYW51cF9m aWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlkKTsKKwkJCWVs b2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNv bW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJ YnJlYWs7CisJfQorCisJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAogCS8qIFByb2Nlc3Mg YW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJ cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEuZW5kX2xzbik7CkBAIC0xMTY4LDI3 ICsxNDE3LDY4IEBAIGFwcGx5X2hhbmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQogfQogCiAvKgor ICogSW5pdGlhbGl6ZSBmaWxlc2V0IChpZiBub3QgYWxyZWFkeSBkb25lKS4KKyAqCisgKiBDcmVh dGUgYSBuZXcgZmlsZSB3aGVuIGZpcnN0X3NlZ21lbnQgaXMgdHJ1ZSwgb3RoZXJ3aXNlIG9wZW4g dGhlIGV4aXN0aW5nCisgKiBmaWxlLgorICovCit2b2lkCitzZXJpYWxpemVfc3RyZWFtX3N0YXJ0 KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCit7CisJYmVnaW5fcmVwbGlj YXRpb25fc3RlcCgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1f ZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcyB3aWxsIGJlCisJICogdXNlZCBmb3IgdGhl IGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVu dAorCSAqIGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWlu ZyBtZXNzYWdlIGZyb20gYW55CisJICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0 aGlzIGFuZCBvdGhlciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLgorCSAqIE5vdywgd2UgY291bGQg Y3JlYXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAor CSAqIHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1c2VkLgorCSAq LworCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJewor CQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oQXBwbHlDb250ZXh0KTsKKworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7CisJCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdv cmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgp OworCX0KKworCS8qIE9wZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICov CisJc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsIGZpcnN0 X3NlZ21lbnQpOworCisJLyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4g ZXhpc3Rpbmcgc3VieGFjdCBmaWxlLiAqLworCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJc3VieGFj dF9pbmZvX3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCWVuZF9yZXBs aWNhdGlvbl9zdGVwKCk7Cit9CisKKy8qCiAgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2Uu CisgKgorICogWFhYIFdlIGNhbiBhdm9pZCBzZW5kaW5nIHBhaXJzIG9mIHRoZSBTVEFSVC9TVE9Q IG1lc3NhZ2VzIHRvIHRoZSBwYXJhbGxlbAorICogd29ya2VyIGJlY2F1c2UgdW5saWtlIGFwcGx5 IHdvcmtlciBpdCB3aWxsIHByb2Nlc3Mgb25seSBvbmUgdHJhbnNhY3Rpb24gYXQgYQorICogdGlt ZS4gSG93ZXZlciwgaXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgYW55IG9wdGltaXphdGlvbiBpcyB3 b3J0aHdoaWxlCisgKiBiZWNhdXNlIHRoZXNlIG1lc3NhZ2VzIGFyZSBzZW50IG9ubHkgd2hlbiB0 aGUgbG9naWNhbF9kZWNvZGluZ193b3JrX21lbQorICogdGhyZXNob2xkIGlzIGV4Y2VlZGVkLgog ICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMp CiB7CiAJYm9vbAkJZmlyc3Rfc2VnbWVudDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEgb3Jp Z2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBv cnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAogCQkJ CSBlcnJtc2dfaW50ZXJuYWwoImR1cGxpY2F0ZSBTVFJFQU0gU1RBUlQgbWVzc2FnZSIpKSk7CiAK LQkvKgotCSAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5z YWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkCi0JICogb24gdGhlIHN0cmVhbSBzdG9wIHVubGVzcyBp dCBpcyBhIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdAotCSAqIHdpbGwgYmUgY29t bWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRoZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGUKLQkg KiB0cmFuc2FjdGlvbiBmb3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsIHVzZWQgZm9yIHNlcmlhbGl6 aW5nIHRoZQotCSAqIHN0cmVhbWluZyBkYXRhIGFuZCBzdWJ4YWN0IGluZm8uCi0JICovCi0JYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOwotCiAJLyogbm90aWZ5IGhhbmRsZSBtZXRob2RzIHdlJ3Jl IHByb2Nlc3NpbmcgYSByZW1vdGUgdHJhbnNhY3Rpb24gKi8KIAlpbl9zdHJlYW1lZF90cmFuc2Fj dGlvbiA9IHRydWU7CiAKQEAgLTEyMDMsNTMgKzE0OTMsOTkgQEAgYXBwbHlfaGFuZGxlX3N0cmVh bV9zdGFydChTdHJpbmdJbmZvIHMpCiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdHJl YW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgdGhlIHdv cmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzIHdpbGwgYmUKLQkg KiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28gY3JlYXRlIGl0 IGluIGEgcGVybWFuZW50Ci0JICogY29udGV4dC4gV2UgY3JlYXRlIHRoaXMgb24gdGhlIHZlcnkg Zmlyc3Qgc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkKLQkgKiB0cmFuc2FjdGlvbiBhbmQgdGhl biB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuCi0JICog Tm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgd29ya2Vy IGFzIHdlbGwgYnV0Ci0JICogdGhlbiB3ZSB3b24ndCBiZSBzdXJlIHRoYXQgaXQgd2lsbCBldmVy IGJlIHVzZWQuCisJICogRm9yIHRoZSBmaXJzdCBzdHJlYW0gc3RhcnQsIGNoZWNrIGlmIHRoZXJl IGlzIGFueSBmcmVlIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyIHdlIGNhbiB1c2UgdG8gcHJv Y2VzcyB0aGlzIHRyYW5zYWN0aW9uLCBvdGhlcndpc2UgdHJ5IHRvIHN0YXJ0IGEKKwkgKiBuZXcg cGFyYWxsZWwgYXBwbHkgd29ya2VyLgogCSAqLwotCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0 cmVhbV9maWxlc2V0ID09IE5VTEwpCisJaWYgKGZpcnN0X3NlZ21lbnQpCisJCXBhcmFsbGVsX2Fw cGx5X3N0YXJ0X3dvcmtlcihzdHJlYW1feGlkKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFu c2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBw bHlfYWN0aW9uKQogCXsKLQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNhc2UgVFJBTlNfTEVB REVSX1NFUklBTElaRToKIAotCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlD b250ZXh0KTsKKwkJCS8qCisJCQkgKiBzZXJpYWxpemVfc3RyZWFtX3N0YXJ0IHdpbGwgc3RhcnQg YSB0cmFuc2FjdGlvbiwgdGhpcworCQkJICogdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQg b24gdGhlIHN0cmVhbSBzdG9wIHVubGVzcyBpdCBpcyBhCisJCQkgKiB0YWJsZXN5bmMgd29ya2Vy IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIKKwkJCSAqIHByb2Nlc3Np bmcgYWxsIHRoZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGUgdHJhbnNhY3Rpb24gZm9yCisJCQkgKiBo YW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIHN0cmVhbWluZyBk YXRhCisJCQkgKiBhbmQgc3VieGFjdCBpbmZvLgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFt X3N0YXJ0KHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOworCQkJYnJlYWs7CiAKLQkJTXlMb2dp Y2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2YoRmlsZVNldCkpOwot CQlGaWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CiAKLQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN0eCk7Ci0JfQorCQkJLyoKKwkJCSAqIFRoZSBmaWxlIHNob3VsZCBoYXZlIGJlZW4g Y3JlYXRlZCB3aGVuIGVudGVyaW5nCisJCQkgKiBQQVJUSUFMX1NFUklBTElaRSBtb2RlIHNvIG5v IG5lZWQgdG8gY3JlYXRlIGl0IGFnYWluLiBUaGUKKwkJCSAqIHRyYW5zYWN0aW9uIHN0YXJ0ZWQg aW4gc2VyaWFsaXplX3N0cmVhbV9zdGFydCB3aWxsIGJlIGNvbW1pdHRlZAorCQkJICogb24gdGhl IHN0cmVhbSBzdG9wLgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KHN0cmVhbV94 aWQsIGZhbHNlKTsKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVB TV9TVEFSVCwgJm9yaWdpbmFsX21zZyk7CiAKLQkvKiBvcGVuIHRoZSBzcG9vbCBmaWxlIGZvciB0 aGlzIHRyYW5zYWN0aW9uICovCi0Jc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCBzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJCWJyZWFrOwogCi0JLyogaWYg dGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFjdCBmaWxl ICovCi0JaWYgKCFmaXJzdF9zZWdtZW50KQotCQlzdWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9U T19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CiAKLQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5 KFNUQVRFX1JVTk5JTkcsIE5VTEwpOworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9i amVjdCBsb2NrIHNvIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorCQkJICogY2FuIGNv bnRpbnVlIHRvIHJlY2VpdmUgY2hhbmdlcy4KKwkJCSAqLworCQkJaWYgKCFmaXJzdF9zZWdtZW50 KQorCQkJCXBhcmFsbGVsX2FwcGx5X3VubG9ja19zdHJlYW0od2luZm8tPnNoYXJlZC0+eGlkLAor CQkJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKLQllbmRfcmVwbGljYXRpb25fc3Rl cCgpOworCQkJLyoKKwkJCSAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHdhaXRp bmcgdG8gYmUgcHJvY2Vzc2VkIGJ5CisJCQkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkg Ki8KKwkJCXBnX2F0b21pY19hZGRfZmV0Y2hfdTMyKCYod2luZm8tPnNoYXJlZC0+cGVuZGluZ19t ZXNzYWdlX2NvdW50KSwgMSk7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3aW5mbywg cy0+bGVuLCBzLT5kYXRhKTsKKworCQkJLyogQ2FjaGUgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSB3aW5m bzsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlpZiAoZmly c3Rfc2VnbWVudCkKKwkJCXsKKwkJCQkvKiBIb2xkIHRoZSBsb2NrIHVudGlsIHRoZSBlbmQgb2Yg dGhlIHRyYW5zYWN0aW9uLiAqLworCQkJCXBhcmFsbGVsX2FwcGx5X2xvY2tfdHJhbnNhY3Rpb24o TXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXBhcmFsbGVsX2Fw cGx5X3NldF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX1NUQVJU RUQpOworCQkJfQorCisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgPSAwOworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOwogfQogCiAvKgotICogSGFu ZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCisgKiBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0 IHN1YnhhY3RzIGFuZCBjbG9zZSB0aGUgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBiZSBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsaXplX3N0cmVhbV9zdGFydCBmdW5jdGlvbiBoYXMK KyAqIGJlZW4gY2FsbGVkLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9z dG9wKFN0cmluZ0luZm8gcykKK3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlv bklkIHhpZCkKIHsKLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJy bXNnX2ludGVybmFsKCJTVFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikp KTsKLQogCS8qCiAJICogQ2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFu ZCBzZXJpYWxpemUgaW5mb3JtYXRpb24gYWJvdXQKIAkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxl dmVsIHRyYW5zYWN0aW9uLgogCSAqLwotCXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKwlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKIAlzdHJlYW1fY2xvc2VfZmlsZSgpOwogCiAJLyogV2Ug bXVzdCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCkBAIC0xMjU4LDQwICsxNTk0 LDk4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiAJLyogQ29tbWl0 IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICovCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAKLQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwotCiAJLyogUmVzZXQgcGVy LXN0cmVhbSBjb250ZXh0ICovCiAJTWVtb3J5Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdD b250ZXh0KTsKIAogCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7Ci0J cmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CiAKIC8qCi0gKiBIYW5kbGUgU1RS RUFNIGFib3J0IG1lc3NhZ2UuCisgKiBIYW5kbGUgU1RSRUFNIFNUT1AgbWVzc2FnZS4KICAqLwog c3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQorYXBw bHlfaGFuZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKIHsKLQlUcmFuc2FjdGlvbklkIHhp ZDsKLQlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CiAKLQlpZiAoaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb24pCisJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChF UlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCi0JCQkJIGVy cm1zZ19pbnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIp KSk7CisJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIFNUT1AgbWVzc2FnZSB3aXRob3V0IFNU UkVBTSBTVEFSVCIpKSk7CisKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlf YWN0aW9uKHN0cmVhbV94aWQsICZ3aW5mbyk7CiAKLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fi b3J0KHMsICZ4aWQsICZzdWJ4aWQpOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgorCQkJc2VyaWFsaXplX3N0cmVhbV9zdG9wKHN0cmVh bV94aWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJ WkU6CisJCQlzdHJlYW1fd3JpdGVfY2hhbmdlKExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RPUCwg cyk7CisJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hpZCk7CisJCQlzdHJlYW1fYXBw bHlfd29ya2VyID0gTlVMTDsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogTG9jayBiZWZv cmUgc2VuZGluZyB0aGUgU1RSRUFNX1NUT1AgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIKKwkJ CSAqIGNhbiBob2xkIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IHdpbGwgd2FpdAorCQkJICogZm9yIGxlYWRlciB0byByZWxlYXNlIHRoZSBsb2NrLgorCQkJICov CisJCQlwYXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOwogCisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMt Pmxlbiwgcy0+ZGF0YSk7CisKKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisJCQlw Z3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCWVsb2coREVCVUcxLCAiYXBwbGllZCAldSBj aGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsiLAorCQkJCSBwYXJhbGxlbF9zdHJlYW1fbmNo YW5nZXMpOworCisJCQkvKgorCQkJICogQnkgdGhlIHRpbWUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IGlzIHByb2Nlc3NpbmcgdGhlIGNoYW5nZXMgaW4KKwkJCSAqIHRoZSBjdXJyZW50IHN0cmVhbWlu ZyBibG9jaywgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgbWF5IGhhdmUKKwkJCSAqIHNlbnQgbXVs dGlwbGUgc3RyZWFtaW5nIGJsb2Nrcy4gU28sIHRyeSB0byBsb2NrIG9ubHkgaWYgdGhlcmUKKwkJ CSAqIGlzIG5vIG1lc3NhZ2UgbGVmdCBpbiB0aGUgcXVldWUuCisJCQkgKi8KKwkJCWlmIChwZ19h dG9taWNfc3ViX2ZldGNoX3UzMigmKE15UGFyYWxsZWxTaGFyZWQtPnBlbmRpbmdfbWVzc2FnZV9j b3VudCksIDEpID09IDApCisJCQl7CisJCQkJcGFyYWxsZWxfYXBwbHlfbG9ja19zdHJlYW0oTXlQ YXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXBhcmFsbGVsX2FwcGx5 X3VubG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJfQorCisJCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9O LCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJ YnJlYWs7CisJfQorCisJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKworCXJlc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOworfQorCisvKgorICogSGFuZGxlIFNUUkVBTSBB Qk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcyBzcGlsbGVkIHRvIGRpc2suCisg Ki8KK3N0YXRpYyB2b2lkCitzZXJpYWxpemVfc3RyZWFtX2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlk LCBUcmFuc2FjdGlvbklkIHN1YnhpZCkKK3sKIAkvKgogCSAqIElmIHRoZSB0d28gWElEcyBhcmUg dGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0b3BsZXZlbCB4YWN0LCBzbwogCSAqIGp1 c3QgZGVsZXRlIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgaW5mby4KIAkgKi8KIAlpZiAoeGlk ID09IHN1YnhpZCkKLQl7Ci0JCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBJbnZh bGlkWExvZ1JlY1B0cik7CiAJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCk7Ci0JfQogCWVsc2UKIAl7CiAJCS8qCkBAIC0xMzE1LDggKzE3MDksNiBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJYm9vbAkJZm91bmQg PSBmYWxzZTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwogCi0JCXNldF9hcHBseV9lcnJvcl9j b250ZXh0X3hhY3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7Ci0KIAkJc3ViaWR4ID0gLTE7 CiAJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKQEAgLTEzNDEsNyArMTczMyw2IEBAIGFwcGx5X2hh bmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQkJY2xlYW51cF9zdWJ4YWN0X2luZm8o KTsKIAkJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKLQkJCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogCQkJcmV0dXJuOwog CQl9CiAKQEAgLTEzNjQsNiArMTc1NSwxMjEgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChT dHJpbmdJbmZvIHMpCiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCX0KK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2Fn ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5m byBzKQoreworCVRyYW5zYWN0aW9uSWQgeGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkOworCUxv Z2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgYWJvcnRfZGF0YTsKKwlQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5m b0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CisJYm9vbAkJYWJvcnRfdG9wbGV2ZWxfdHJhbnNhY3Rp b247CisKKwlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBlcnJtc2dfaW50 ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkpOworCisJ LyogV2UgcmVjZWl2ZSBhYm9ydCBpbmZvcm1hdGlvbiBvbmx5IHdoZW4gd2UgY2FuIGFwcGx5IGlu IHBhcmFsbGVsLiAqLworCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQocywgJmFib3J0X2Rh dGEsCisJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5KTsKKworCXhp ZCA9IGFib3J0X2RhdGEueGlkOworCXN1YnhpZCA9IGFib3J0X2RhdGEuc3VieGlkOworCWFib3J0 X3RvcGxldmVsX3RyYW5zYWN0aW9uID0gKHhpZCA9PSBzdWJ4aWQpOworCisJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIGFib3J0X2RhdGEuYWJvcnRfbHNuKTsKKworCWFwcGx5 X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAmd2luZm8pOworCisJ c3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6 CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRo ZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLgorCQkJICov CisJCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlkKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsK KworCQkJLyoKKwkJCSAqIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBtaWdodCBoYXZlIGFwcGxpZWQg c29tZSBjaGFuZ2VzLCBzbyB3cml0ZQorCQkJICogdGhlIFNUUkVBTV9BQk9SVCBtZXNzYWdlIHNv IHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjYW4KKwkJCSAqIHJvbGxiYWNrIHRoZSBz dWJ0cmFuc2FjdGlvbiBpZiBuZWVkZWQuCisJCQkgKi8KKwkJCXN0cmVhbV93cml0ZV9tZXNzYWdl KHhpZCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9BQk9SVCwKKwkJCQkJCQkJICZvcmlnaW5hbF9t c2cpOworCisJCQlpZiAoYWJvcnRfdG9wbGV2ZWxfdHJhbnNhY3Rpb24pCisJCQl7CisJCQkJcGFy YWxsZWxfYXBwbHlfdW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJ CXBhcmFsbGVsX2FwcGx5X3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIExFQURFUl9G SUxFU0VUX0FDQ0VTU0lCTEUpOworCQkJCSh2b2lkKSBwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtl cih3aW5mbywgeGlkLCB0cnVlKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCWlmICghYWJv cnRfdG9wbGV2ZWxfdHJhbnNhY3Rpb24pCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJbmNyZW1lbnQg dGhlIG51bWJlciBvZiBtZXNzYWdlcyB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBieQorCQkJCSAq IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkJCQkgKi8KKwkJCQlwZ19hdG9taWNfYWRkX2ZldGNo X3UzMigmKHdpbmZvLT5zaGFyZWQtPnBlbmRpbmdfbWVzc2FnZV9jb3VudCksIDEpOworCQkJfQor CisJCQkvKiBTZW5kIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuICovCisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ ZGF0YSk7CisKKwkJCWlmIChhYm9ydF90b3BsZXZlbF90cmFuc2FjdGlvbikKKwkJCXsKKwkJCQlw YXJhbGxlbF9hcHBseV91bmxvY2tfc3RyZWFtKHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisK KwkJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCQlwYXJhbGxlbF9hcHBseV9z ZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLAorCQkJCQkJCQkJCQkJCSBMRUFERVJfRklM RVNFVF9BQ0NFU1NJQkxFKTsKKworCQkJCSh2b2lkKSBwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtl cih3aW5mbywgeGlkLCB0cnVlKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19Q QVJBTExFTF9BUFBMWToKKwkJCXBhcmFsbGVsX2FwcGx5X3N0cmVhbV9hYm9ydCgmYWJvcnRfZGF0 YSk7CisKKwkJCS8qCisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMg cHJvY2Vzc2luZyB0aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGJs b2NrLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2VudCBtdWx0aXBs ZSBzdHJlYW1pbmcgYmxvY2tzLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVyZQorCQkJICog aXMgbm8gbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKCFhYm9ydF90 b3BsZXZlbF90cmFuc2FjdGlvbiAmJgorCQkJCXBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKCYoTXlQ YXJhbGxlbFNoYXJlZC0+cGVuZGluZ19tZXNzYWdlX2NvdW50KSwgMSkgPT0gMCkKKwkJCXsKKwkJ CQlwYXJhbGxlbF9hcHBseV9sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVs U2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisKKwkJCWVsb2coREVCVUcxLCAi ZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJ CWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQog CiAJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CkBAIC0xMzcxLDE3ICsxODc3 LDE4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogLyoKICAqIENv bW1vbiBzcG9vbGZpbGUgcHJvY2Vzc2luZy4KICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X3Nwb29s ZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQordm9pZAorYXBw bHlfc3Bvb2xlZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25J ZCB4aWQsCisJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKQogewogCVN0cmluZ0luZm9EYXRhIHMyOwog CWludAkJCW5jaGFuZ2VzOwogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAljaGFyCSAgICpidWZm ZXIgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwotCUJ1ZkZpbGUgICAgKmZkOwogCi0J bWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24pOworCWlmICghYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpCisJCW1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMobHNuKTsKIAogCS8q IE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIG9wZW4gdHJhbnNhY3Rpb24gKi8KIAliZWdpbl9yZXBsaWNh dGlvbl9zdGVwKCk7CkBAIC0xMzk3LDggKzE5MDQsOCBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2Vz KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAljaGFuZ2VzX2ZpbGVuYW1lKHBh dGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CiAJZWxvZyhERUJVRzEsICJyZXBs YXlpbmcgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwgcGF0aCk7CiAKLQlmZCA9IEJ1ZkZpbGVP cGVuRmlsZVNldChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JE T05MWSwKLQkJCQkJCQlmYWxzZSk7CisJc3RyZWFtX2ZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KHN0 cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwgZmFsc2UpOworCXN0cmVhbV94aWQgPSB4aWQ7 CiAKIAlidWZmZXIgPSBwYWxsb2MoQkxDS1NaKTsKIAlpbml0U3RyaW5nSW5mbygmczIpOwpAQCAt MTQyOSw3ICsxOTM2LDcgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24pCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJLyogcmVh ZCBsZW5ndGggb2YgdGhlIG9uLWRpc2sgcmVjb3JkICovCi0JCW5ieXRlcyA9IEJ1ZkZpbGVSZWFk KGZkLCAmbGVuLCBzaXplb2YobGVuKSk7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkKHN0cmVhbV9m ZCwgJmxlbiwgc2l6ZW9mKGxlbikpOwogCiAJCS8qIGhhdmUgd2UgcmVhY2hlZCBlbmQgb2YgdGhl IGZpbGU/ICovCiAJCWlmIChuYnl0ZXMgPT0gMCkKQEAgLTE0NTAsNyArMTk1Nyw3IEBAIGFwcGx5 X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCQli dWZmZXIgPSByZXBhbGxvYyhidWZmZXIsIGxlbik7CiAKIAkJLyogYW5kIGZpbmFsbHkgcmVhZCB0 aGUgZGF0YSBpbnRvIHRoZSBidWZmZXIgKi8KLQkJaWYgKEJ1ZkZpbGVSZWFkKGZkLCBidWZmZXIs IGxlbikgIT0gbGVuKQorCQlpZiAoQnVmRmlsZVJlYWQoc3RyZWFtX2ZkLCBidWZmZXIsIGxlbikg IT0gbGVuKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gc3RyZWFtaW5nIHRyYW5zYWN0 aW9uJ3MgY2hhbmdlcyBmaWxlIFwiJXNcIjogJW0iLApAQCAtMTQ2OSw2ICsxOTc2LDE2IEBAIGFw cGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQog CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCisJCS8qCisJCSAqIEJyZWFrIHRo ZSBsb29wIGlmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFzIGZpbmlzaGVkIGFwcGx5aW5n CisJCSAqIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBzaG91bGQg aGF2ZSBjbG9zZWQgdGhlCisJCSAqIGZpbGUgYmVmb3JlIGNvbW1pdHRpbmcuCisJCSAqLworCQlp ZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkgJiYKKwkJCShNeVBhcmFsbGVsU2hhcmVkLT54 YWN0X3N0YXRlID09IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEIHx8CisJCQkgTXlQYXJhbGxlbFNo YXJlZC0+eGFjdF9zdGF0ZSA9PSBQQVJBTExFTF9UUkFOU19VTktOT1dOKSkKKwkJCWdvdG8gZG9u ZTsKKwogCQluY2hhbmdlcysrOwogCiAJCWlmIChuY2hhbmdlcyAlIDEwMDAgPT0gMCkKQEAgLTE0 NzYsMTEgKzE5OTMsMTQgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24pCiAJCQkJIG5jaGFuZ2VzLCBwYXRoKTsKIAl9CiAKLQlCdWZGaWxl Q2xvc2UoZmQpOwotCisJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CiAJcGZyZWUoYnVmZmVyKTsK IAlwZnJlZShzMi5kYXRhKTsKIAorZG9uZToKKwlzdHJlYW1fZmQgPSBOVUxMOworCXN0cmVhbV94 aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwogCWVsb2coREVCVUcxLCAicmVwbGF5ZWQgJWQg KGFsbCkgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwKIAkJIG5jaGFuZ2VzLCBwYXRoKTsKIApA QCAtMTQ5NSw2ICsyMDE1LDkgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5m byBzKQogewogCVRyYW5zYWN0aW9uSWQgeGlkOwogCUxvZ2ljYWxSZXBDb21taXREYXRhIGNvbW1p dF9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0 aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAog CWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE1MDQs MTQgKzIwMjcsOTIgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQog CXhpZCA9IGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KHMsICZjb21taXRfZGF0YSk7CiAJ c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdCh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24p OwogCi0JZWxvZyhERUJVRzEsICJyZWNlaXZlZCBjb21taXQgZm9yIHN0cmVhbWVkIHRyYW5zYWN0 aW9uICV1IiwgeGlkKTsKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0 aW9uKHhpZCwgJndpbmZvKTsKIAotCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoeGlkLCBjb21taXRf ZGF0YS5jb21taXRfbHNuKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJB TlNfTEVBREVSX1NFUklBTElaRToKIAotCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNv bW1pdF9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFs aXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRpb25z LgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQsIHhpZCwKKwkJCQkJCQkJICAgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7 CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJ LyogVW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBp bmZvLiAqLworCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgeGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxM RUw6CisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdp bmZvKTsKKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRo YXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNhbgorCQkJICogY29udGludWUgdG8gcmVjZWl2ZSBh bmQgYXBwbHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrX3N0cmVh bSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQkvKiBTZW5kIFNUUkVBTSBDT01NSVQg bWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQkJaWYgKGFwcGx5X2Fj dGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCkKKwkJCQlwYXJhbGxlbF9hcHBs eV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQllbHNlCisJCQkJc3RyZWFt X3dyaXRlX21lc3NhZ2UoeGlkLCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0NPTU1JVCwKKwkJCQkJ CQkJCSAmb3JpZ2luYWxfbXNnKTsKKworCQkJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcykK KwkJCQlwYXJhbGxlbF9hcHBseV9zZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLAorCQkJ CQkJCQkJCQkJIExFQURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUpOworCisJCQkvKgorCQkJICogQWZ0 ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG9yCisJCQkg KiBzZXJpYWxpemluZyBkYXRhIHRvIGZpbGUsIHdhaXQgZm9yIHRoYXQgd29ya2VyIHRvIGZpbmlz aC4gVGhpcworCQkJICogaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNvbW1pdCBvcmRlciB3aGlj aCBhdm9pZHMgZmFpbHVyZXMgZHVlCisJCQkgKiB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMg YW5kIGRlYWRsb2Nrcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9m aW5pc2god2luZm8tPnNoYXJlZCk7CisKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisJ CQlzdG9yZV9mbHVzaF9wb3NpdGlvbihjb21taXRfZGF0YS5lbmRfbHNuKTsKKwkJCXN0b3Bfc2tp cHBpbmdfY2hhbmdlcygpOworCisJCQkodm9pZCkgcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXIo d2luZm8sIHhpZCwgdHJ1ZSk7CiAKLQkvKiB1bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXpl ZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8gKi8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlv biBpcyBlaXRoZXIgbm9uLWVtcHR5IG9yIHNraXBwZWQsIHNvIHdlIGNsZWFyIHRoZQorCQkJICog c3Vic2tpcGxzbi4KKwkJCSAqLworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKGNvbW1p dF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVM X0FQUExZOgorCisJCQkvKgorCQkJICogQ2xvc2UgdGhlIGZpbGUgYmVmb3JlIGNvbW1pdHRpbmcg aWYgdGhlIHBhcmFsbGVsIGFwcGx5IGlzCisJCQkgKiBhcHBseWluZyBzcG9vbGVkIGNoYW5nZXMu CisJCQkgKi8KKwkJCWlmIChzdHJlYW1fZmQpCisJCQkJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7 CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJ bGlzdF9mcmVlKHN1YnhhY3RsaXN0KTsKKwkJCXN1YnhhY3RsaXN0ID0gTklMOworCisJCQlwYXJh bGxlbF9hcHBseV91bmxvY2tfdHJhbnNhY3Rpb24oeGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ cGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3Npbmcg dGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KIAogCS8qIFByb2Nlc3MgYW55IHRh YmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vz c19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKQEAgLTE1NTUsNiArMjE1Niwx MyBAQCBhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKExvZ2ljYWxSZXBDb21taXREYXRhICpj b21taXRfZGF0YSkKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSBjb21t aXRfZGF0YS0+Y29tbWl0dGltZTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwor CQlpZiAoSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2so ZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCX0KKwogCQlwZ3N0YXRf cmVwb3J0X3N0YXQoZmFsc2UpOwogCiAJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRh LT5lbmRfbHNuKTsKQEAgLTI1MDYsNyArMzExNCw3IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShT dHJpbmdJbmZvIHMpCiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdl IGRpc3BhdGNoZXIuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9kaXNwYXRjaChTdHJp bmdJbmZvIHMpCiB7CiAJTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShz KTsKQEAgLTI2NzUsNiArMzI4MywxMCBAQCBzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRy IHJlbW90ZV9sc24pCiB7CiAJRmx1c2hQb3NpdGlvbiAqZmx1c2hwb3M7CiAKKwkvKiBTa2lwIGZv ciBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3Jr ZXIoKSkKKwkJcmV0dXJuOworCiAJLyogTmVlZCB0byBkbyB0aGlzIGluIHBlcm1hbmVudCBjb250 ZXh0ICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CiAKQEAgLTI3Mzks NiArMzM1MSw3IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVk KQogCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CiAJZXJyY2Fs bGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSAmZXJyY2FsbGJhY2s7CisJYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IGVycm9yX2Nv bnRleHRfc3RhY2s7CiAKIAkvKiBUaGlzIG91dGVyIGxvb3AgaXRlcmF0ZXMgb25jZSBwZXIgd2Fp dC4gKi8KIAlmb3IgKDs7KQpAQCAtMjk1Myw2ICszNTY2LDcgQEAgTG9naWNhbFJlcEFwcGx5TG9v cChYTG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisJ YXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAKIAkvKiBB bGwgZG9uZSAqLwogCXdhbHJjdl9lbmRzdHJlYW1pbmcoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwg JnRsaSk7CkBAIC0zMDUzLDcgKzM2NjcsNyBAQCBzZW5kX2ZlZWRiYWNrKFhMb2dSZWNQdHIgcmVj dnBvcywgYm9vbCBmb3JjZSwgYm9vbCByZXF1ZXN0UmVwbHkpCiAvKgogICogUmVyZWFkIHN1YnNj cmlwdGlvbiBpbmZvIGlmIG5lZWRlZC4gTW9zdCBjaGFuZ2VzIHdpbGwgYmUgZXhpdC4KICAqLwot c3RhdGljIHZvaWQKK3ZvaWQKIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIHsKIAlN ZW1vcnlDb250ZXh0IG9sZGN0eDsKQEAgLTMwODMsOCArMzY5Nyw5IEBAIG1heWJlX3JlcmVhZF9z dWJzY3JpcHRpb24odm9pZCkKIAlpZiAoIW5ld3N1YikKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJ CShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgIgotCQkJCQkJInN0b3AgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdh cyByZW1vdmVkIiwKKwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0 aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUgIgorCQkJCQkJInN1YnNjcmlwdGlvbiB3 YXMgcmVtb3ZlZCIsIGdldF93b3JrZXJfbmFtZSgpLAogCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5h bWUpKSk7CiAKIAkJcHJvY19leGl0KDApOwpAQCAtMzA5NCw4ICszNzA5LDkgQEAgbWF5YmVfcmVy ZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCWlmICghbmV3c3ViLT5lbmFibGVkKQogCXsKIAkJZXJl cG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCi0JCQkJCQkic3RvcCBiZWNhdXNlIHRoZSBz dWJzY3JpcHRpb24gd2FzIGRpc2FibGVkIiwKKwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMgaXMg dGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIl cyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUgIgorCQkJCQkJ InN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQiLCBnZXRfd29ya2VyX25hbWUoKSwKIAkJCQkJCU15 U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJCXByb2NfZXhpdCgwKTsKQEAgLTMxMDksNyArMzcy NSw5IEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAogCS8qCiAJICogRXhpdCBp ZiBhbnkgcGFyYW1ldGVyIHRoYXQgYWZmZWN0cyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gd2FzIGNo YW5nZWQuCi0JICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyLgorCSAqIFRo ZSBsYXVuY2hlciB3aWxsIHN0YXJ0IGEgbmV3IHdvcmtlciwgYnV0IG5vdGUgdGhhdCB0aGUgcGFy YWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgbWF5IG9yIG1heSBub3QgcmVzdGFydCBkZXBlbmRpbmcg b24gdGhlIHZhbHVlIG9mIHRoZSBzdHJlYW1pbmcKKwkgKiBvcHRpb24gYW5kIHdoZXRoZXIgdGhl cmUgd2lsbCBiZSBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KIAkgKi8KIAlpZiAoc3RyY21wKG5l d3N1Yi0+Y29ubmluZm8sIE15U3Vic2NyaXB0aW9uLT5jb25uaW5mbykgIT0gMCB8fAogCQlzdHJj bXAobmV3c3ViLT5uYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkgIT0gMCB8fApAQCAtMzEyMCw5 ICszNzM4LDE2IEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAkJbmV3c3ViLT5v d25lciAhPSBNeVN1YnNjcmlwdGlvbi0+b3duZXIgfHwKIAkJIWVxdWFsKG5ld3N1Yi0+cHVibGlj YXRpb25zLCBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zKSkKIAl7Ci0JCWVyZXBvcnQoTE9H LAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJz Y3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5n ZSIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJaWYgKGFtX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcigpKQorCQkJZXJlcG9ydChMT0csCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAl cyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkoZXJy bXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSBvZiBhIHBh cmFtZXRlciBjaGFuZ2UiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSkpKTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0csCisJCQkvKiB0cmFuc2xhdG9yOiBm aXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJ CQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHJlc3RhcnQgYmVjYXVz ZSBvZiBhIHBhcmFtZXRlciBjaGFuZ2UiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzM2Miw3ICsz OTg3LDcgQEAgc3VieGFjdF9maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0 aW9uSWQgeGlkKQogfQogCiAvKiBmb3JtYXQgZmlsZW5hbWUgZm9yIGZpbGUgY29udGFpbmluZyBz ZXJpYWxpemVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAordm9pZAogY2hhbmdlc19m aWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogewogCXNu cHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiV1LSV1LmNoYW5nZXMiLCBzdWJpZCwgeGlkKTsKQEAg LTMzNzYsNyArNDAwMSw3IEBAIGNoYW5nZXNfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1Ymlk LCBUcmFuc2FjdGlvbklkIHhpZCkKICAqIHRvcGxldmVsIHRyYW5zYWN0aW9uLiBFYWNoIHN1YnNj cmlwdGlvbiBoYXMgYSBzZXBhcmF0ZSBzZXQgb2YgZmlsZXMKICAqIGZvciBhbnkgdG9wbGV2ZWwg dHJhbnNhY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzdHJlYW1fY2xlYW51cF9maWxl cyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogewogCWNoYXIJCXBhdGhbTUFYUEdQQVRI XTsKQEAgLTMzOTksOSArNDAyNCw2IEBAIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwg VHJhbnNhY3Rpb25JZCB4aWQpCiAgKiBieSBzdHJlYW1feGlkIChnbG9iYWwgdmFyaWFibGUpLiBJ ZiBpdCdzIHRoZSBmaXJzdCBjaHVuayBvZiBzdHJlYW1lZAogICogY2hhbmdlcyBmb3IgdGhpcyB0 cmFuc2FjdGlvbiwgY3JlYXRlIHRoZSBidWZmaWxlLCBvdGhlcndpc2Ugb3BlbiB0aGUKICAqIHBy ZXZpb3VzbHkgY3JlYXRlZCBmaWxlLgotICoKLSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGF0 IHRoZSBiZWdpbm5pbmcgb2YgYSAic3RyZWFtaW5nIiBibG9jaywgaS5lLgotICogYmV0d2VlbiBz dHJlYW1fc3RhcnQvc3RyZWFtX3N0b3AgbWVzc2FnZXMgZnJvbSB0aGUgdXBzdHJlYW0uCiAgKi8K IHN0YXRpYyB2b2lkCiBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4 aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKQEAgLTM0MDksNyArNDAzMSw2IEBAIHN0cmVhbV9vcGVu X2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQog CWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAotCUFzc2Vy dChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7CiAJQXNzZXJ0KE9pZElzVmFsaWQoc3ViaWQpKTsK IAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9mZCA9 PSBOVUxMKTsKQEAgLTM0NDgsMTUgKzQwNjksMTAgQEAgc3RyZWFtX29wZW5fZmlsZShPaWQgc3Vi aWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCiAvKgogICogc3RyZWFt X2Nsb3NlX2ZpbGUKICAqCSAgQ2xvc2UgdGhlIGN1cnJlbnRseSBvcGVuIGZpbGUgd2l0aCBzdHJl YW1lZCBjaGFuZ2VzLgotICoKLSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGF0IHRoZSBlbmQg b2YgYSBzdHJlYW1pbmcgYmxvY2ssIGkuZS4gYXQgc3RyZWFtX3N0b3AKLSAqIG1lc3NhZ2UgZnJv bSB0aGUgdXBzdHJlYW0uCiAgKi8KIHN0YXRpYyB2b2lkCiBzdHJlYW1fY2xvc2VfZmlsZSh2b2lk KQogewotCUFzc2VydChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7Ci0JQXNzZXJ0KFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwog CiAJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CkBAIC0zNDczLDEzICs0MDg5LDExIEBAIHN0cmVh bV9jbG9zZV9maWxlKHZvaWQpCiAgKiB0aGUgbGVuZ3RoKSwgYWN0aW9uIGNvZGUgKGlkZW50aWZ5 aW5nIHRoZSBtZXNzYWdlIHR5cGUpIGFuZCBtZXNzYWdlCiAgKiBjb250ZW50cyAod2l0aG91dCB0 aGUgc3VieGFjdCBUcmFuc2FjdGlvbklkIHZhbHVlKS4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQK IHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKIHsKIAlpbnQJ CQlsZW47CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwotCUFzc2VydChUcmFu c2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxM KTsKIAogCS8qIHRvdGFsIG9uLWRpc2sgc2l6ZSwgaW5jbHVkaW5nIHRoZSBhY3Rpb24gdHlwZSBj aGFyYWN0ZXIgKi8KQEAgLTM0OTgsNiArNDExMiwyMyBAQCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNo YXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB9CiAKIC8qCisgKiBzdHJlYW1fd3JpdGVfbWVzc2Fn ZQorICoJICBTZXJpYWxpemUgYSBtZXNzYWdlIHRvIGEgZmlsZSBmb3IgdGhlIGdpdmVuIHRyYW5z YWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBzdHJlYW1fd3JpdGVf Y2hhbmdlIGV4Y2VwdCB0aGF0IGl0IHdpbGwgb3BlbiB0aGUKKyAqIHRhcmdldCBmaWxlIGJlZm9y ZSB3cml0aW5nIHRoZSBtZXNzYWdlIGFuZCBjbG9zZSBmaWxlIGF0IHRoZSBlbmQuCisgKi8KK3N0 YXRpYyB2b2lkCitzdHJlYW1fd3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhpZCwgY2hhciBh Y3Rpb24sIFN0cmluZ0luZm8gcykKK3sKKwlBc3NlcnQoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KTsKKworCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoeGlkLCBmYWxzZSk7CisJc3RyZWFtX3dyaXRl X2NoYW5nZShhY3Rpb24sIHMpOworCXNlcmlhbGl6ZV9zdHJlYW1fc3RvcCh4aWQpOworfQorCisv KgogICogQ2xlYW51cCB0aGUgbWVtb3J5IGZvciBzdWJ4YWN0cyBhbmQgcmVzZXQgdGhlIHJlbGF0 ZWQgdmFyaWFibGVzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTM2MDgsMzcgKzQyMzks MTYgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJUEdfRU5EX1RS WSgpOwogfQogCi0vKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2lu dCAqLworLyoKKyAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBmb3IgbGVhZGVyIGFwcGx5IHdvcmtl ciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEluaXRpYWxpemUgdGhlIGRhdGFi YXNlIGNvbm5lY3Rpb24sIGluLW1lbW9yeSBzdWJzY3JpcHRpb24gYW5kIG5lY2Vzc2FyeQorICog Y29uZmlnIG9wdGlvbnMuCisgKi8KIHZvaWQKLUFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2Fy ZykKK0luaXRpYWxpemVBcHBseVdvcmtlcih2b2lkKQogewotCWludAkJCXdvcmtlcl9zbG90ID0g RGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7Ci0JY2hhcgkJ b3JpZ2lubmFtZVtOQU1FREFUQUxFTl07Ci0JWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJ bnZhbGlkWExvZ1JlY1B0cjsKLQljaGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKLQlXYWxSY3ZT dHJlYW1PcHRpb25zIG9wdGlvbnM7Ci0JaW50CQkJc2VydmVyX3ZlcnNpb247Ci0KLQkvKiBBdHRh Y2ggdG8gc2xvdCAqLwotCWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7Ci0K LQkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhh bmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0JQmFja2dy b3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGN1cnJlbnRs eSBuZWVkIGFueSBSZXNvdXJjZU93bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0Ci0J ICogaWYgd2UgZGlkLCB3ZSBjb3VsZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVy IGhlcmUuCi0JICovCi0KLQkvKiBJbml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICov Ci0JTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtl ci0+bGFzdF9yZWN2X3RpbWUgPQotCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0KLQkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5j dGlvbnMgKi8KLQlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CiAKIAkvKiBS dW4gYXMgcmVwbGljYSBzZXNzaW9uIHJlcGxpY2F0aW9uIHJvbGUuICovCiAJU2V0Q29uZmlnT3B0 aW9uKCJzZXNzaW9uX3JlcGxpY2F0aW9uX3JvbGUiLCAicmVwbGljYSIsCkBAIC0zNjY2LDkgKzQy NzYsMTEgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCWlmICghTXlTdWJzY3Jp cHRpb24pCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKLQkJCQkJCSJz dGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAi LAotCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwkJLyogdHJhbnNsYXRvcjog JXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJy bXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90IHN0YXJ0IGJlY2F1c2UgdGhlICIK KwkJCQkJCSJzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAiLAorCQkJCQkJ Z2V0X3dvcmtlcl9uYW1lKCksIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQpKSk7CisKIAkJcHJv Y19leGl0KDApOwogCX0KIApAQCAtMzY3OCw5ICs0MjkwLDEwIEBAIEFwcGx5V29ya2VyTWFpbihE YXR1bSBtYWluX2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uLT5lbmFibGVkKQogCXsKIAkJZXJl cG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBub3QgIgotCQkJCQkJInN0YXJ0IGJlY2F1c2Ug dGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBu YW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9y IHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSAiCisJCQkJCQkidGhl IHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAiLAorCQkJCQkJZ2V0X3dv cmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJCXByb2NfZXhpdCgwKTsK IAl9CkBAIC0zNjk2LDE0ICs0MzA5LDUxIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2Fy ZykKIAogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCWVyZXBvcnQoTE9HLAotCQkJCShl cnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgdGFibGUgXCIlc1wiIGhhcyBzdGFydGVkIiwKLQkJCQkJ CU15U3Vic2NyaXB0aW9uLT5uYW1lLCBnZXRfcmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5y ZWxpZCkpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlwdGlv biBcIiVzXCIsIHRhYmxlIFwiJXNcIiBoYXMgc3RhcnRlZCIsCisJCQkJCQlnZXRfd29ya2VyX25h bWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQlnZXRfcmVsX25hbWUoTXlMb2dpY2Fs UmVwV29ya2VyLT5yZWxpZCkpKSk7CiAJZWxzZQogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNc IiBoYXMgc3RhcnRlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJh bnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBoYXMgc3RhcnRl ZCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAK IAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKK30KKworLyogTG9naWNhbCBSZXBsaWNhdGlv biBBcHBseSB3b3JrZXIgZW50cnkgcG9pbnQgKi8KK3ZvaWQKK0FwcGx5V29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZykKK3sKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9h cmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCVhMb2dSZWNQdHIJb3JpZ2lu X3N0YXJ0cG9zID0gSW52YWxpZFhMb2dSZWNQdHI7CisJY2hhcgkgICAqbXlzbG90bmFtZSA9IE5V TEw7CisJV2FsUmN2U3RyZWFtT3B0aW9ucyBvcHRpb25zOworCWludAkJCXNlcnZlcl92ZXJzaW9u OworCisJLyogQXR0YWNoIHRvIHNsb3QgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29y a2VyX3Nsb3QpOworCisJLyogU2V0dXAgc2lnbmFsIGhhbmRsaW5nICovCisJcHFzaWduYWwoU0lH SFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChTSUdURVJNLCBk aWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoKKwkgKiBXZSBk b24ndCBjdXJyZW50bHkgbmVlZCBhbnkgUmVzb3VyY2VPd25lciBpbiBhIHdhbHJlY2VpdmVyIHBy b2Nlc3MsIGJ1dAorCSAqIGlmIHdlIGRpZCwgd2UgY291bGQgY2FsbCBDcmVhdGVBdXhQcm9jZXNz UmVzb3VyY2VPd25lciBoZXJlLgorCSAqLworCisJLyogSW5pdGlhbGlzZSBzdGF0cyB0byBhIHNh bmlzaCB2YWx1ZSAqLworCU15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxv Z2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0KKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5y ZXBseV90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJLyogTG9hZCB0aGUgbGlicHEt c3BlY2lmaWMgZnVuY3Rpb25zICovCisJbG9hZF9maWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFs c2UpOworCisJSW5pdGlhbGl6ZUFwcGx5V29ya2VyKCk7CiAKIAkvKiBDb25uZWN0IHRvIHRoZSBv cmlnaW4gYW5kIHN0YXJ0IHRoZSByZXBsaWNhdGlvbi4gKi8KIAllbG9nKERFQlVHMSwgImNvbm5l Y3RpbmcgdG8gcHVibGlzaGVyIHVzaW5nIGNvbm5lY3Rpb24gc3RyaW5nIFwiJXNcIiIsCkBAIC0z NzI2LDcgKzQzNzYsNyBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJfQogCWVs c2UKIAl7Ci0JCS8qIFRoaXMgaXMgbWFpbiBhcHBseSB3b3JrZXIgKi8KKwkJLyogVGhpcyBpcyBs ZWFkZXIgYXBwbHkgd29ya2VyICovCiAJCVJlcE9yaWdpbklkIG9yaWdpbmlkOwogCQlUaW1lTGlu ZUlECXN0YXJ0cG9pbnRUTEk7CiAJCWNoYXIJICAgKmVycjsKQEAgLTM3NTAsNyArNDQwMCw3IEBA IEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAkJb3JpZ2luaWQgPSByZXBsb3JpZ2lu X2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CiAJCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkp CiAJCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fY3JlYXRlKG9yaWdpbm5hbWUpOwotCQlyZXBsb3Jp Z2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAo b3JpZ2luaWQsIDApOwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJ CW9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2Up OwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAgLTM3OTEsMTMgKzQ0NDEsMzYgQEAg QXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCiAJc2VydmVyX3ZlcnNpb24gPSB3YWxy Y3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CiAJb3B0aW9ucy5wcm90 by5sb2dpY2FsLnByb3RvX3ZlcnNpb24gPQorCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNjAwMDAgPyBM T0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSA6CiAJCXNlcnZlcl92 ZXJzaW9uID49IDE1MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0g OgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9W RVJTSU9OX05VTSA6CiAJCUxPR0lDQUxSRVBfUFJPVE9fVkVSU0lPTl9OVU07CiAKIAlvcHRpb25z LnByb3RvLmxvZ2ljYWwucHVibGljYXRpb25fbmFtZXMgPSBNeVN1YnNjcmlwdGlvbi0+cHVibGlj YXRpb25zOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5iaW5hcnkgPSBNeVN1YnNjcmlwdGlvbi0+ YmluYXJ5OwotCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmcgPSBNeVN1YnNjcmlwdGlv bi0+c3RyZWFtOworCisJLyoKKwkgKiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiB2YWx1 ZSBmb3Igc3RyZWFtaW5nIG9wdGlvbiBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgJ3N0cmVhbWluZycg bW9kZSBhbmQgdGhlIHB1Ymxpc2hlcidzIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGF0IG1vZGUuCisJ ICovCisJaWYgKHNlcnZlcl92ZXJzaW9uID49IDE2MDAwMCAmJgorCQlNeVN1YnNjcmlwdGlvbi0+ c3RyZWFtID09IFNVQlNUUkVBTV9QQVJBTExFTCkKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNh bC5zdHJlYW1pbmdfc3RyID0gcHN0cmR1cCgicGFyYWxsZWwiKTsKKwkJTXlMb2dpY2FsUmVwV29y a2VyLT5wYXJhbGxlbF9hcHBseSA9IHRydWU7CisJfQorCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9u ID49IDE0MDAwMCAmJgorCQkJIE15U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gU1VCU1RSRUFNX09G RikKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gcHN0cmR1cCgi b24iKTsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0K KwllbHNlCisJeworCQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IE5VTEw7 CisJCU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisKIAlv cHRpb25zLnByb3RvLmxvZ2ljYWwudHdvcGhhc2UgPSBmYWxzZTsKIAlvcHRpb25zLnByb3RvLmxv Z2ljYWwub3JpZ2luID0gcHN0cmR1cChNeVN1YnNjcmlwdGlvbi0+b3JpZ2luKTsKIApAQCAtMzgz MCwxMiArNDUwMywxMyBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCX0KIAog CQllcmVwb3J0KERFQlVHMSwKLQkJCQkoZXJybXNnX2ludGVybmFsKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB0d29fcGhhc2UgaXMgJXMi LAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+dHdv cGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0RJU0FCTEVEID8gIkRJU0FC TEVEIiA6Ci0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQ X1RXT1BIQVNFX1NUQVRFX1BFTkRJTkcgPyAiUEVORElORyIgOgotCQkJCQkJTXlTdWJzY3JpcHRp b24tPnR3b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9FTkFCTEVEID8g IkVOQUJMRUQiIDoKLQkJCQkJCSI/IikpKTsKKwkJCQkoZXJybXNnX2ludGVybmFsKCIlcyBmb3Ig c3Vic2NyaXB0aW9uIFwiJXNcIiB0d29fcGhhc2UgaXMgJXMiLAorCQkJCQkJCQkgZ2V0X3dvcmtl cl9uYW1lKCksCisJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJCQkJIE15U3Vi c2NyaXB0aW9uLT50d29waGFzZXN0YXRlID09IExPR0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVfRElT QUJMRUQgPyAiRElTQUJMRUQiIDoKKwkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT50d29waGFzZXN0 YXRlID09IExPR0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVfUEVORElORyA/ICJQRU5ESU5HIiA6CisJ CQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BI QVNFX1NUQVRFX0VOQUJMRUQgPyAiRU5BQkxFRCIgOgorCQkJCQkJCQkgIj8iKSkpOwogCX0KIAll bHNlCiAJewpAQCAtMzg5NSw2ICs0NTY5LDE1IEBAIElzTG9naWNhbFdvcmtlcih2b2lkKQogfQog CiAvKgorICogSXMgY3VycmVudCBwcm9jZXNzIGEgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXI/CisgKi8KK2Jvb2wKK0lzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIo dm9pZCkKK3sKKwlyZXR1cm4gSXNMb2dpY2FsV29ya2VyKCkgJiYgYW1fcGFyYWxsZWxfYXBwbHlf d29ya2VyKCk7Cit9CisKKy8qCiAgKiBTdGFydCBza2lwcGluZyBjaGFuZ2VzIG9mIHRoZSB0cmFu c2FjdGlvbiBpZiB0aGUgZ2l2ZW4gTFNOIG1hdGNoZXMgdGhlCiAgKiBMU04gc3BlY2lmaWVkIGJ5 IHN1YnNjcmlwdGlvbidzIHNraXBsc24uCiAgKi8KQEAgLTM5NTYsNyArNDYzOSw3IEBAIGNsZWFy X3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiAJWExvZ1JlY1B0 cglteXNraXBsc24gPSBNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbjsKIAlib29sCQlzdGFydGVkX3R4 ID0gZmFsc2U7CiAKLQlpZiAobGlrZWx5KFhMb2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkp CisJaWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpIHx8IGFtX3BhcmFs bGVsX2FwcGx5X3dvcmtlcigpKQogCQlyZXR1cm47CiAKIAlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0 ZSgpKQpAQCAtNDAyOCw3ICs0NzExLDcgQEAgY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhM b2dSZWNQdHIgZmluaXNoX2xzbikKIH0KIAogLyogRXJyb3IgY2FsbGJhY2sgdG8gZ2l2ZSBtb3Jl IGNvbnRleHQgaW5mbyBhYm91dCB0aGUgY2hhbmdlIGJlaW5nIGFwcGxpZWQgKi8KLXN0YXRpYyB2 b2lkCit2b2lkCiBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiB7CiAJQXBwbHlFcnJv ckNhbGxiYWNrQXJnICplcnJhcmcgPSAmYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnOwpAQCAtNDA1 NiwyMyArNDczOSw0NyBAQCBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiAJCQkJCSAg IGVycmFyZy0+cmVtb3RlX3hpZCwKIAkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+Zmlu aXNoX2xzbikpOwogCX0KLQllbHNlIGlmIChlcnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQotCQll cnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g XCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQg cmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIs Ci0JCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKLQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2Vf dHlwZShlcnJhcmctPmNvbW1hbmQpLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNw bmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCi0JCQkJICAgZXJy YXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9s c24pKTsKIAllbHNlCi0JCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJl cGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJl cGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFu c2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25h bWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwt PnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFt ZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKLQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCi0J CQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOworCXsKKwkJaWYgKGVy cmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCisJCXsKKwkJCWlmIChYTG9nUmVjUHRySXNJbnZhbGlk KGVycmFyZy0+ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUg ZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwi JXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2Fj dGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNh bHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVs LT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVs bmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29u dGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNc IiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0 aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJ CQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90 eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5z cG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkg ICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5m aW5pc2hfbHNuKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxp ZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3Rl IGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBc IiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwi JXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAor CQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVs LT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0 bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hp ZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3Ig cmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3Ig cmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wiIGluIHRy YW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdp bl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5k KSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVy cmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1v dGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJCSAgIGVycmFyZy0+ cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24p KTsKKwkJfQorCX0KIH0KIAogLyogU2V0IHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIG9mIGFwcGx5 IGVycm9yIGNhbGxiYWNrICovCkBAIC00MDkyLDMgKzQ3OTksNTcgQEAgcmVzZXRfYXBwbHlfZXJy b3JfY29udGV4dF9pbmZvKHZvaWQpCiAJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLnJlbW90ZV9h dHRudW0gPSAtMTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KEludmFsaWRUcmFuc2Fj dGlvbklkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiB9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFjdGlv biB0byB0YWtlIGZvciB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24uICp3aW5mbyBpcyBhc3NpZ25lZCB0 bworICogdGhlIGRlc3RpbmF0aW9uIHBhcmFsbGVsIHdvcmtlciBpbmZvIChpZiB0aGUgYWN0aW9u IGlzCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCBvciBUUkFOU19MRUFERVJfUEFS VElBTF9TRVJJQUxJWkUpLCBvdGhlcndpc2UKKyAqICp3aW5mbyBpcyBhc3NpZ25lZCBOVUxMLgor ICovCitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbgorZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlv bihUcmFuc2FjdGlvbklkIHhpZCwgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKip3aW5mbykKK3sK Kwkqd2luZm8gPSBOVUxMOworCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsK KwkJcmV0dXJuIFRSQU5TX1BBUkFMTEVMX0FQUExZOworCX0KKwllbHNlIGlmIChpbl9yZW1vdGVf dHJhbnNhY3Rpb24pCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX0FQUExZOworCX0KKworCS8q CisJICogQ2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcyB0cmFuc2FjdGlvbiB1c2luZyBh IHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyLgorCSAqLworCSp3aW5mbyA9IHBhcmFsbGVsX2Fw cGx5X2ZpbmRfd29ya2VyKHhpZCk7CisKKwlpZiAoKndpbmZvID09IE5VTEwpCisJeworCQlyZXR1 cm4gVFJBTlNfTEVBREVSX1NFUklBTElaRTsKKwl9CisJZWxzZSBpZiAoKCp3aW5mbyktPnNlcmlh bGl6ZV9jaGFuZ2VzKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTEla RTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVM OworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNh dGlvbiB3b3JrZXIuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF93b3JrZXJfbmFtZSh2 b2lkKQoreworCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCisJCXJldHVybiBfKCJsb2dpY2Fs IHJlcGxpY2F0aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXIiKTsKKwllbHNlIGlmIChh bV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRp b24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIik7CisJZWxzZQorCQlyZXR1cm4gXygibG9naWNhbCBy ZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jCmluZGV4IDJlY2FhNWIuLmJlYWY4MjcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0 b3IuaCIKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBA IC0yOTAsNyArMjkxLDcgQEAgcGFyc2Vfb3V0cHV0X3BhcmFtZXRlcnMoTGlzdCAqb3B0aW9ucywg UEdPdXRwdXREYXRhICpkYXRhKQogCWJvb2wJCW9yaWdpbl9vcHRpb25fZ2l2ZW4gPSBmYWxzZTsK IAogCWRhdGEtPmJpbmFyeSA9IGZhbHNlOwotCWRhdGEtPnN0cmVhbWluZyA9IGZhbHNlOworCWRh dGEtPnN0cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJZGF0YS0+bWVzc2FnZXMgPSBmYWxzZTsK IAlkYXRhLT50d29fcGhhc2UgPSBmYWxzZTsKIApAQCAtMzY5LDcgKzM3MCw3IEBAIHBhcnNlX291 dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAkJCQkJ CSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIikpKTsKIAkJCXN0cmVh bWluZ19naXZlbiA9IHRydWU7CiAKLQkJCWRhdGEtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4o ZGVmZWwpOworCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7 CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0g MCkKIAkJewpAQCAtNDYxLDEzICs0NjIsMjAgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAkJICogd2Ugb25s eSBhbGxvdyBpdCB3aXRoIHN1ZmZpY2llbnQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wsIGFuZCB3 aGVuCiAJCSAqIHRoZSBvdXRwdXQgcGx1Z2luIHN1cHBvcnRzIGl0LgogCQkgKi8KLQkJaWYgKCFk YXRhLT5zdHJlYW1pbmcpCisJCWlmIChkYXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX09GRikK IAkJCWN0eC0+c3RyZWFtaW5nID0gZmFsc2U7Ci0JCWVsc2UgaWYgKGRhdGEtPnByb3RvY29sX3Zl cnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkKKwkJZWxzZSBpZiAo ZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9PTiAmJgorCQkJCSBkYXRhLT5wcm90b2NvbF92 ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0pCiAJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK IAkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3ZlcnNpb249JWQgZG9lcyBub3Qgc3VwcG9y dCBzdHJlYW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVyIiwKIAkJCQkJCQlkYXRhLT5wcm90b2NvbF92 ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkpKTsKKwkJZWxzZSBp ZiAoZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9QQVJBTExFTCAmJgorCQkJCSBkYXRhLT5w cm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lP Tl9OVU0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3ZlcnNpb249 JWQgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBzdHJlYW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVy IiwKKwkJCQkJCQlkYXRhLT5wcm90b2NvbF92ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVB TV9QQVJBTExFTF9WRVJTSU9OX05VTSkpKTsKIAkJZWxzZSBpZiAoIWN0eC0+c3RyZWFtaW5nKQog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCkBAIC0xODM5LDYgKzE4NDcsOCBAQCBwZ291dHB1dF9zdHJlYW1fYWJvcnQoc3Ry dWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJICBYTG9nUmVjUHRyIGFib3J0 X2xzbikKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0b3B0eG47CisJUEdPdXRwdXREYXRhICpkYXRh ID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlib29sCQl3 cml0ZV9hYm9ydF9pbmZvID0gKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJFQU1fUEFSQUxMRUwp OwogCiAJLyoKIAkgKiBUaGUgYWJvcnQgc2hvdWxkIGhhcHBlbiBvdXRzaWRlIHN0cmVhbWluZyBi bG9jaywgZXZlbiBmb3Igc3RyZWFtZWQKQEAgLTE4NTIsNyArMTg2Miw5IEBAIHBnb3V0cHV0X3N0 cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCUFzc2VydChy YnR4bl9pc19zdHJlYW1lZCh0b3B0eG4pKTsKIAogCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShj dHgsIHRydWUpOwotCWxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KGN0eC0+b3V0LCB0b3B0 eG4tPnhpZCwgdHhuLT54aWQpOworCWxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KGN0eC0+ b3V0LCB0b3B0eG4tPnhpZCwgdHhuLT54aWQsIGFib3J0X2xzbiwKKwkJCQkJCQkJICB0eG4tPnhh Y3RfdGltZS5hYm9ydF90aW1lLCB3cml0ZV9hYm9ydF9pbmZvKTsKKwogCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7CiAKIAljbGVhbnVwX3JlbF9zeW5jX2NhY2hlKHRvcHR4bi0+eGlkLCBm YWxzZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggNzc2NzY1Ny4uN2Mw MDlkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMjIsNiArMjIsNyBA QAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv Y29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTY1Nyw2 ICs2NTgsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlpZiAo Q2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKSkKIAkJSGFuZGxlTG9n TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lH X1BBUkFMTEVMX0FQUExZX01FU1NBR0UpKQorCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZUlu dGVycnVwdCgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NPTkZM SUNUX0RBVEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL2xtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKaW5kZXggMTA0 MzA2OC4uZDAxZmE3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3Iu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCkBAIC0xMTE3LDYgKzExMTcs NDQgQEAgVW5sb2NrU2hhcmVkT2JqZWN0Rm9yU2Vzc2lvbihPaWQgY2xhc3NpZCwgT2lkIG9iamlk LCB1aW50MTYgb2Jqc3ViaWQsCiAJTG9ja1JlbGVhc2UoJnRhZywgbG9ja21vZGUsIHRydWUpOwog fQogCisvKgorICoJCUxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbgorICoKKyAqIE9idGFp biBhIHNlc3Npb24tbGV2ZWwgbG9jayBvbiBhIHRyYW5zYWN0aW9uIGJlaW5nIGFwcGxpZWQgb24g dGhlIHN1YnNjcmliZXIuCisgKiBTZWUgTG9ja1JlbGF0aW9uSWRGb3JTZXNzaW9uIGZvciBub3Rl cyBhYm91dCBzZXNzaW9uLWxldmVsIGxvY2tzLgorICovCit2b2lkCitMb2NrQXBwbHlUcmFuc2Fj dGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBvYmpp ZCwKKwkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMT0NLVEFHCQl0YWc7CisKKwlT RVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTih0YWcsCisJCQkJCQkJCSAgTXlEYXRhYmFzZUlk LAorCQkJCQkJCQkgIHN1Ym9pZCwKKwkJCQkJCQkJICB4aWQsCisJCQkJCQkJCSAgb2JqaWQpOwor CisJKHZvaWQpIExvY2tBY3F1aXJlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlLCBmYWxzZSk7Cit9CisK Ky8qCisgKgkJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24KKyAqLwordm9pZAorVW5s b2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4 aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxPQ0tU QUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywKKwkJCQkJCQkJ ICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhpZCwKKwkJCQkJ CQkJICBvYmppZCk7CisKKwlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7Cit9CiAK IC8qCiAgKiBBcHBlbmQgYSBkZXNjcmlwdGlvbiBvZiBhIGxvY2thYmxlIG9iamVjdCB0byBidWYu CkBAIC0xMjAyLDYgKzEyNDAsMTMgQEAgRGVzY3JpYmVMb2NrVGFnKFN0cmluZ0luZm8gYnVmLCBj b25zdCBMT0NLVEFHICp0YWcpCiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCiAJCQkJCQkJ IHRhZy0+bG9ja3RhZ19maWVsZDQpOwogCQkJYnJlYWs7CisJCWNhc2UgTE9DS1RBR19BUFBMWV9U UkFOU0FDVElPTjoKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLAorCQkJCQkJCSBfKCJyZW1vdGUg dHJhbnNhY3Rpb24gJXUgb2Ygc3Vic2NyaXB0aW9uICV1IG9mIGRhdGFiYXNlICV1IiksCisJCQkJ CQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDIsCisJ CQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDEpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwKIAkJCQkJCQkgXygidW5yZWNvZ25pemVkIGxvY2t0YWcgdHlw ZSAlZCIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDMwODIwOTMuLmY1MmU1YmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKQEAgLTMzNzksNiArMzM3OSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlp ZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50 ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQorCQlIYW5kbGVQ YXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnQuYwppbmRleCA5MmYyNGE2Li5kY2ZmNTk4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMwLDkgQEAgcGdzdGF0X2dldF93YWl0 X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FM X0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxMYXVuY2hlck1haW4iOwog CQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU46 CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQYXJhbGxlbEFwcGx5TWFpbiI7CisJCQlicmVhazsK IAkJY2FzZSBXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU06CiAJCQlldmVudF9uYW1lID0g IlJlY292ZXJ5V2FsU3RyZWFtIjsKIAkJCWJyZWFrOwpAQCAtMzg4LDYgKzM5MSw5IEBAIHBnc3Rh dF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9IQVNIX0dS T1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2ZW50X25hbWUgPSAiSGFzaEdyb3dCdWNrZXRzUmVp bnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQ UExZX1NUQVRFX0NIQU5HRToKKwkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFBhcmFsbGVsQXBwbHlT dGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19E QVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggZjliMzI0ZS4uM2JmMDQ4MyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9sb2NrZnVuY3MuYwpAQCAtMzcsMTAgKzM3LDExIEBAIGNvbnN0IGNoYXIgKmNvbnN0IExv Y2tUYWdUeXBlTmFtZXNbXSA9IHsKIAkic3BlY3Rva2VuIiwKIAkib2JqZWN0IiwKIAkidXNlcmxv Y2siLAotCSJhZHZpc29yeSIKKwkiYWR2aXNvcnkiLAorCSJhcHBseXRyYW5zYWN0aW9uIgogfTsK IAotU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RB R19BRFZJU09SWSArIDEpLAorU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5h bWVzKSA9PSAoTE9DS1RBR19MQVNUX1RZUEUgKyAxKSwKIAkJCQkgImFycmF5IGxlbmd0aCBtaXNt YXRjaCIpOwogCiAvKiBUaGlzIG11c3QgbWF0Y2ggZW51bSBQcmVkaWNhdGVMb2NrVGFyZ2V0VHlw ZSAocHJlZGljYXRlX2ludGVybmFscy5oKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YwppbmRleCA4MzZiNDk0Li42NzRiYThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YwpAQCAtMjk2Miw2ICsyOTYyLDE4IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVz SW50W10gPQogCX0sCiAKIAl7CisJCXsibWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbiIsCisJCQlQR0NfU0lHSFVQLAorCQkJUkVQTElDQVRJT05fU1VCU0NSSUJFUlMs CisJCQlnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtl cnMgcGVyIHN1YnNjcmlwdGlvbi4iKSwKKwkJCU5VTEwsCisJCX0sCisJCSZtYXhfcGFyYWxsZWxf YXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLAorCQkyLCAwLCBNQVhfQkFDS0VORFMsCisJ CU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJewogCQl7ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0Nf U0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91bnQg b2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaW5nICIKIAkJCQkJCSAibG9nIGZpbGUgcm90YXRp b24uIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK aW5kZXggODY4ZDIxYy4uNGQwMWNhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzYwLDYgKzM2MCw3IEBACiAjbWF4X2xvZ2ljYWxfcmVw bGljYXRpb25fd29ya2VycyA9IDQJIyB0YWtlbiBmcm9tIG1heF93b3JrZXJfcHJvY2Vzc2VzCiAJ CQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI21heF9zeW5jX3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtl cnMKKyNtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMgkjIHRh a2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycwogCiAKICMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGRhNDI3ZjQuLjUxNDFhNjYgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YwpAQCAtNDQ4MSw3ICs0NDgxLDcgQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQog CWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE0MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIgcy5zdWJzdHJlYW0sXG4iKTsKIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiIGZhbHNlIEFTIHN1YnN0cmVhbSxcbiIpOworCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIiAnZicgQVMgc3Vic3RyZWFtLFxuIik7CiAKIAlpZiAoZm91dC0+cmVtb3Rl VmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LApAQCAtNDYx OCw4ICs0NjE4LDEwIEBAIGR1bXBTdWJzY3JpcHRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgU3Vi c2NyaXB0aW9uSW5mbyAqc3ViaW5mbykKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YmJpbmFyeSwg InQiKSA9PSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgYmluYXJ5ID0gdHJ1 ZSIpOwogCi0JaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0sICJmIikgIT0gMCkKKwlpZiAo c3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgInQiKSA9PSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0gb24iKTsKKwllbHNlIGlmIChzdHJjbXAoc3ViaW5m by0+c3Vic3RyZWFtLCAicCIpID09IDApCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi LCBzdHJlYW1pbmcgPSBwYXJhbGxlbCIpOwogCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJ0d29w aGFzZXN0YXRlLCB0d29fcGhhc2VfZGlzYWJsZWQpICE9IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiLCB0d29fcGhhc2UgPSBvbiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBjNjQ1ZDY2Li4zNzI2 MDQxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYwpAQCAtNjQ5NywxMSArNjQ5NywyNCBAQCBkZXNjcmliZVN1YnNjcmlwdGlv bnMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKQogCXsKIAkJLyogQmluYXJ5IG1v ZGUgYW5kIHN0cmVhbWluZyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdjE0IGFuZCBoaWdoZXIgKi8K IAkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQl7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAotCQkJCQkJCSAgIiwgc3ViYmluYXJ5IEFTIFwiJXNcIlxuIgotCQkJCQkJCSAgIiwg c3Vic3RyZWFtIEFTIFwiJXNcIlxuIiwKLQkJCQkJCQkgIGdldHRleHRfbm9vcCgiQmluYXJ5Iiks Ci0JCQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIpKTsKKwkJCQkJCQkgICIsIHN1YmJp bmFyeSBBUyBcIiVzXCJcbiIsCisJCQkJCQkJICBnZXR0ZXh0X25vb3AoIkJpbmFyeSIpKTsKKwor CQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkJCSAgIiwgKENBU0Ugc3Vic3RyZWFtXG4iCisJCQkJCQkJCSAgIiAgICBXSEVO ICdmJyBUSEVOICdvZmYnXG4iCisJCQkJCQkJCSAgIiAgICBXSEVOICd0JyBUSEVOICdvbidcbiIK KwkJCQkJCQkJICAiICAgIFdIRU4gJ3AnIFRIRU4gJ3BhcmFsbGVsJ1xuIgorCQkJCQkJCQkgICIg ICBFTkQpIEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIp KTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkgICIsIHN1 YnN0cmVhbSBBUyBcIiVzXCJcbiIsCisJCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJTdHJlYW1pbmci KSk7CisJCX0KIAogCQkvKiBUd29fcGhhc2UgYW5kIGRpc2FibGVfb25fZXJyb3IgYXJlIG9ubHkg c3VwcG9ydGVkIGluIHYxNSBhbmQgaGlnaGVyICovCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE1 MDAwMCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IDdiOTg3MTQuLjAx NmFmYmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAtODAsNyArODAs OCBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9uSWQp IEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCWJvb2wJCXN1YmJpbmFyeTsJCS8qIFRydWUg aWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUKIAkJCQkJCQkJICogcHVibGlzaGVyIHRvIHNl bmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJCXN1YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1w cm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGlu LXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gU2VlCisJCQkJCQkJCSAqIFNVQlNUUkVBTV94eHggY29u c3RhbnRzLiAqLwogCiAJY2hhcgkJc3VidHdvcGhhc2VzdGF0ZTsJLyogU3RyZWFtIHR3by1waGFz ZSB0cmFuc2FjdGlvbnMgKi8KIApAQCAtMTI0LDcgKzEyNSw4IEBAIHR5cGVkZWYgc3RydWN0IFN1 YnNjcmlwdGlvbgogCWJvb2wJCWVuYWJsZWQ7CQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlw dGlvbiBpcyBlbmFibGVkICovCiAJYm9vbAkJYmluYXJ5OwkJCS8qIEluZGljYXRlcyBpZiB0aGUg c3Vic2NyaXB0aW9uIHdhbnRzIGRhdGEgaW4KIAkJCQkJCQkJICogYmluYXJ5IGZvcm1hdCAqLwot CWJvb2wJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rp b25zLiAqLworCWNoYXIJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3Mg dHJhbnNhY3Rpb25zLgorCQkJCQkJCQkgKiBTZWUgU1VCU1RSRUFNX3h4eCBjb25zdGFudHMuICov CiAJY2hhcgkJdHdvcGhhc2VzdGF0ZTsJLyogQWxsb3cgc3RyZWFtaW5nIHR3by1waGFzZSB0cmFu c2FjdGlvbnMgKi8KIAlib29sCQlkaXNhYmxlb25lcnI7CS8qIEluZGljYXRlcyBpZiB0aGUgc3Vi c2NyaXB0aW9uIHNob3VsZCBiZQogCQkJCQkJCQkgKiBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlm IGEgd29ya2VyIGVycm9yCkBAIC0xMzcsNiArMTM5LDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YnNj cmlwdGlvbgogCQkJCQkJCQkgKiBzcGVjaWZpZWQgb3JpZ2luICovCiB9IFN1YnNjcmlwdGlvbjsK IAorLyogRGlzYWxsb3cgc3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKyNk ZWZpbmUgU1VCU1RSRUFNX09GRiAnZicKKworLyoKKyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0 cmFuc2FjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQKKyAqIGFwcGxp ZWQgb25seSBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHVwc3RyZWFtLgor ICovCisjZGVmaW5lIFNVQlNUUkVBTV9PTiAndCcKKworLyoKKyAqIFN0cmVhbWluZyBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkgdmlhIGEgcGFyYWxsZWwK KyAqIGFwcGx5IHdvcmtlci4KKyAqLworI2RlZmluZSBTVUJTVFJFQU1fUEFSQUxMRUwgJ3AnCisK IGV4dGVybiBTdWJzY3JpcHRpb24gKkdldFN1YnNjcmlwdGlvbihPaWQgc3ViaWQsIGJvb2wgbWlz c2luZ19vayk7CiBleHRlcm4gdm9pZCBGcmVlU3Vic2NyaXB0aW9uKFN1YnNjcmlwdGlvbiAqc3Vi KTsKIGV4dGVybiB2b2lkIERpc2FibGVTdWJzY3JpcHRpb24oT2lkIHN1YmlkKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaAppbmRleCAyY2JlN2Q3Li43Nzk0NzRmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCkBAIC0yNiw0ICsyNiw2IEBAIGV4 dGVybiB2b2lkIERyb3BTdWJzY3JpcHRpb24oRHJvcFN1YnNjcmlwdGlvblN0bXQgKnN0bXQsIGJv b2wgaXNUb3BMZXZlbCk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclN1YnNjcmlwdGlvbk93 bmVyKGNvbnN0IGNoYXIgKm5hbWUsIE9pZCBuZXdPd25lcklkKTsKIGV4dGVybiB2b2lkIEFsdGVy U3Vic2NyaXB0aW9uT3duZXJfb2lkKE9pZCBzdWJpZCwgT2lkIG5ld093bmVySWQpOwogCitleHRl cm4gY2hhciBkZWZHZXRTdHJlYW1pbmdNb2RlKERlZkVsZW0gKmRlZik7CisKICNlbmRpZgkJCQkJ CQkvKiBTVUJTQ1JJUFRJT05DTURTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bGxhdW5jaGVyLmgKaW5kZXggZjFlMjgyMS4uZDUxM2VmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbGxhdW5jaGVyLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzOwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb247CitleHRlcm4gUEdE TExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb247 CiAKIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJSZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lk IEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOS4uMWRhN2IwMSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTMyLDEyICszMiwxNyBAQAogICoKICAqIExPR0lDQUxS RVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0gaXMgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVy c2lvbiB3aXRoCiAgKiBzdXBwb3J0IGZvciB0d28tcGhhc2UgY29tbWl0IGRlY29kaW5nIChhdCBw cmVwYXJlIHRpbWUpLiBJbnRyb2R1Y2VkIGluIFBHMTUuCisgKgorICogTE9HSUNBTFJFUF9QUk9U T19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0gaXMgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVy c2lvbgorICogd2hlcmUgd2Ugc3VwcG9ydCBhcHBseWluZyBsYXJnZSBzdHJlYW1pbmcgdHJhbnNh Y3Rpb25zIGluIHBhcmFsbGVsLgorICogSW50cm9kdWNlZCBpbiBQRzE2LgogICovCiAjZGVmaW5l IExPR0lDQUxSRVBfUFJPVE9fTUlOX1ZFUlNJT05fTlVNIDEKICNkZWZpbmUgTE9HSUNBTFJFUF9Q Uk9UT19WRVJTSU9OX05VTSAxCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJ T05fTlVNIDIKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSAz Ci0jZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJT05fTlVNIExPR0lDQUxSRVBfUFJP VE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0KKyNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1f UEFSQUxMRUxfVkVSU0lPTl9OVU0gNAorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01BWF9WRVJT SU9OX05VTSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTQogCiAv KgogICogTG9naWNhbCBtZXNzYWdlIHR5cGVzCkBAIC0xNzUsNiArMTgwLDE3IEBAIHR5cGVkZWYg c3RydWN0IExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVkVHhuRGF0YQogCWNoYXIJCWdpZFtHSURT SVpFXTsKIH0gTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhOwogCisvKgorICogVHJh bnNhY3Rpb24gcHJvdG9jb2wgaW5mb3JtYXRpb24gZm9yIHN0cmVhbSBhYm9ydC4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQoreworCVRyYW5zYWN0aW9uSWQg eGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkOworCVhMb2dSZWNQdHIJYWJvcnRfbHNuOworCVRp bWVzdGFtcFR6IGFib3J0X3RpbWU7Cit9IExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGE7CisKIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfYmVnaW4oU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJC dWZmZXJUWE4gKnR4bik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfYmVnaW4oU3RyaW5n SW5mbyBpbiwKIAkJCQkJCQkJICBMb2dpY2FsUmVwQmVnaW5EYXRhICpiZWdpbl9kYXRhKTsKQEAg LTI0Niw5ICsyNjIsMTMgQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fY29t bWl0KFN0cmluZ0luZm8gb3V0LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIGV4dGVybiBUcmFuc2Fj dGlvbklkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gaW4sCiAJCQkJ CQkJCQkJCQkgICBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLAotCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwotZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlv bklkICp4aWQsCi0JCQkJCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCk7CisJCQkJCQkJCQkJ ICBUcmFuc2FjdGlvbklkIHN1YnhpZCwKKwkJCQkJCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRfbHNu LAorCQkJCQkJCQkJCSAgVGltZXN0YW1wVHogYWJvcnRfdGltZSwKKwkJCQkJCQkJCQkgIGJvb2wg d3JpdGVfYWJvcnRfaW5mbyk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fi b3J0KFN0cmluZ0luZm8gaW4sCisJCQkJCQkJCQkJIExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEg KmFib3J0X2RhdGEsCisJCQkJCQkJCQkJIGJvb2wgcmVhZF9hYm9ydF9pbmZvKTsKIGV4dGVybiBj aGFyICpsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pOwog CiAjZW5kaWYJCQkJCQkJLyogTE9HSUNBTF9QUk9UT19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2Fsd29ya2VyLmgKaW5kZXggY2QxYjZlOC4uZGM2OGNkOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaApAQCAtMTIsOCArMTIsMTYgQEAKICNpZm5kZWYgTE9H SUNBTFdPUktFUl9ICiAjZGVmaW5lIExPR0lDQUxXT1JLRVJfSAogCisjaW5jbHVkZSA8c2lnbmFs Lmg+CisKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxB cHBseU1lc3NhZ2VQZW5kaW5nOworCiBleHRlcm4gdm9pZCBBcHBseVdvcmtlck1haW4oRGF0dW0g bWFpbl9hcmcpOworZXh0ZXJuIHZvaWQgUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFp bl9hcmcpOwogCiBleHRlcm4gYm9vbCBJc0xvZ2ljYWxXb3JrZXIodm9pZCk7CitleHRlcm4gYm9v bCBJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2VyKHZvaWQpOworZXh0ZXJuIHZvaWQgSGFuZGxl UGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQ YXJhbGxlbEFwcGx5TWVzc2FnZXModm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMV09S S0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKaW5kZXggMmE1MGQxMC4uYzdiMWFkZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKQEAgLTUzLDcgKzUzLDcgQEAgZXh0ZXJuIFhMb2dS ZWNQdHIgcmVwbG9yaWdpbl9nZXRfcHJvZ3Jlc3MoUmVwT3JpZ2luSWQgbm9kZSwgYm9vbCBmbHVz aCk7CiAKIGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKFhMb2dSZWNQdHIg cmVtb3RlX2NvbW1pdCwKIAkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbG9jYWxfY29tbWl0KTsKLWV4 dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKTsKK2V4 dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlLCBpbnQg YWNxdWlyZWRfYnkpOwogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KHZvaWQp OwogZXh0ZXJuIFhMb2dSZWNQdHIgcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhib29s IGZsdXNoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NS4uM2Mz MGRhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNiw3ICsyNiw3IEBAIHR5 cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVzOwog CUxpc3QJICAgKnB1YmxpY2F0aW9uczsKIAlib29sCQliaW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5n OworCWNoYXIJCXN0cmVhbWluZzsKIAlib29sCQltZXNzYWdlczsKIAlib29sCQl0d29fcGhhc2U7 CiAJY2hhcgkgICAqb3JpZ2luOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v cmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o CmluZGV4IGIyM2Q4Y2MuLmIyYTcwMjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVy YnVmZmVyLmgKQEAgLTMwMSw2ICszMDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVy VFhOCiAJewogCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZTsKIAkJVGltZXN0YW1wVHogcHJlcGFy ZV90aW1lOworCQlUaW1lc3RhbXBUeiBhYm9ydF90aW1lOwogCX0JCQl4YWN0X3RpbWU7CiAKIAkv KgpAQCAtNjYzLDkgKzY2NCwxMSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQXNzaWduQ2hp bGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlckNvbW1pdENoaWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkJCSBUcmFuc2FjdGlvbklkIHN1YnhpZCwgWExvZ1JlY1B0ciBjb21taXRfbHNu LAogCQkJCQkJCQkJIFhMb2dSZWNQdHIgZW5kX2xzbik7Ci1leHRlcm4gdm9pZCBSZW9yZGVyQnVm ZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRy IGxzbik7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkgICBUaW1lc3RhbXBU eiBhYm9ydF90aW1lKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBYm9ydE9sZChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCBvbGRlc3RSdW5uaW5nWGlkKTsKLWV4dGVybiB2b2lk IFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbik7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJ CVRpbWVzdGFtcFR6IGFib3J0X3RpbWUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckludmFs aWRhdGUoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxz bik7CiAKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJTZXRCYXNlU25hcHNob3QoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd2FscmVjZWl2ZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2Vp dmVyLmgKaW5kZXggOTMzOWYyOS4uMGM4YmJkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd2FscmVjZWl2ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxy ZWNlaXZlci5oCkBAIC0xODIsNyArMTgyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkJCXVpbnQzMgkJ cHJvdG9fdmVyc2lvbjsJLyogTG9naWNhbCBwcm90b2NvbCB2ZXJzaW9uICovCiAJCQlMaXN0CSAg ICpwdWJsaWNhdGlvbl9uYW1lczsJLyogU3RyaW5nIGxpc3Qgb2YgcHVibGljYXRpb25zICovCiAJ CQlib29sCQliaW5hcnk7IC8qIEFzayBwdWJsaXNoZXIgdG8gdXNlIGJpbmFyeSAqLwotCQkJYm9v bAkJc3RyZWFtaW5nOwkvKiBTdHJlYW1pbmcgb2YgbGFyZ2UgdHJhbnNhY3Rpb25zICovCisJCQlj aGFyCSAgICpzdHJlYW1pbmdfc3RyOwkvKiBTdHJlYW1pbmcgb2YgbGFyZ2UgdHJhbnNhY3Rpb25z ICovCiAJCQlib29sCQl0d29waGFzZTsJLyogU3RyZWFtaW5nIG9mIHR3by1waGFzZSB0cmFuc2Fj dGlvbnMgYXQKIAkJCQkJCQkJCSAqIHByZXBhcmUgdGltZSAqLwogCQkJY2hhcgkgICAqb3JpZ2lu OyAvKiBPbmx5IHB1Ymxpc2ggZGF0YSBvcmlnaW5hdGluZyBmcm9tIHRoZQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCAyYjcxMTRmLi5kOTg3N2VhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtMTcsOCArMTcsMTMg QEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1 YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oIgor I2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmlsZXNldC5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgi CiAKIApAQCAtNjAsNiArNjUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgog CSAqLwogCUZpbGVTZXQgICAgKnN0cmVhbV9maWxlc2V0OwogCisJLyoKKwkgKiBQSUQgb2YgbGVh ZGVyIGFwcGx5IHdvcmtlciBpZiB0aGlzIHNsb3QgaXMgdXNlZCBmb3IgYSBwYXJhbGxlbCBhcHBs eQorCSAqIHdvcmtlciwgSW52YWxpZFBpZCBvdGhlcndpc2UuCisJICovCisJcGlkX3QJCWFwcGx5 X2xlYWRlcl9waWQ7CisKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciBhcHBseSBjYW4gYmUgcGVyZm9y bWVkIGluIHBhcmFsbGVsLiAqLworCWJvb2wJCXBhcmFsbGVsX2FwcGx5OworCiAJLyogU3RhdHMu ICovCiAJWExvZ1JlY1B0cglsYXN0X2xzbjsKIAlUaW1lc3RhbXBUeiBsYXN0X3NlbmRfdGltZTsK QEAgLTY4LDkgKzgyLDEzMyBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJVGlt ZXN0YW1wVHogcmVwbHlfdGltZTsKIH0gTG9naWNhbFJlcFdvcmtlcjsKIAorLyogU3RydWN0IGZv ciBzYXZpbmcgYW5kIHJlc3RvcmluZyBhcHBseSBlcnJjb250ZXh0IGluZm9ybWF0aW9uICovCit0 eXBlZGVmIHN0cnVjdCBBcHBseUVycm9yQ2FsbGJhY2tBcmcKK3sKKwlMb2dpY2FsUmVwTXNnVHlw ZSBjb21tYW5kOwkvKiAwIGlmIGludmFsaWQgKi8KKwlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJl bDsKKworCS8qIFJlbW90ZSBub2RlIGluZm9ybWF0aW9uICovCisJaW50CQkJcmVtb3RlX2F0dG51 bTsJLyogLTEgaWYgaW52YWxpZCAqLworCVRyYW5zYWN0aW9uSWQgcmVtb3RlX3hpZDsKKwlYTG9n UmVjUHRyCWZpbmlzaF9sc247CisJY2hhcgkgICAqb3JpZ2luX25hbWU7Cit9IEFwcGx5RXJyb3JD YWxsYmFja0FyZzsKKworLyoKKyAqIFN0YXRlIG9mIHRoZSB0cmFuc2FjdGlvbiBpbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIuCisgKgorICogVGhlc2UgZW51bSB2YWx1ZXMgYXJlIG9yZGVyZWQgYnkg dGhlIG9yZGVyIG9mIHRyYW5zYWN0aW9uIHN0YXRlIGNoYW5nZXMgaW4KKyAqIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KKyAqLwordHlwZWRlZiBlbnVtIFBhcmFsbGVsVHJhbnNTdGF0ZQoreworCVBB UkFMTEVMX1RSQU5TX1VOS05PV04sCisJUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCwKKwlQQVJBTExF TF9UUkFOU19GSU5JU0hFRAorfSBQYXJhbGxlbFRyYW5zU3RhdGU7CisKKy8qIFN0YXRlIG9mIGZp bGVzZXQgaW4gbGVhZGVyIGFwcGx5IHdvcmtlci4gKi8KK3R5cGVkZWYgZW51bSBMZWFkZXJGaWxl U2V0U3RhdGUKK3sKKwlMRUFERVJfRklMRVNFVF9VTktOT1dOLAorCUxFQURFUl9GSUxFU0VUX0JV U1ksCisJTEVBREVSX0ZJTEVTRVRfQUNDRVNTSUJMRQorfSBMZWFkZXJGaWxlU2V0U3RhdGU7CisK Ky8qCisgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBsZWFkZXIgYXBw bHkgd29ya2VyIGFuZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAoreworCXNsb2NrX3QJCW11dGV4OworCisJ VHJhbnNhY3Rpb25JZAl4aWQ7CisKKwkvKgorCSAqIFN0YXRlIHVzZWQgdG8gZW5zdXJlIGNvbW1p dCBvcmRlcmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBzZXQg aXQgdG8gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkgKiBoYW5kbGluZyB0aGUgdHJh bnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBseSBsZWFkZXIgd2lsbAorCSAq IHdhaXQgZm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBiZWZvcmUgcHJv Y2VlZGluZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kcyAoZS5nLiBTVFJFQU1f Q09NTUlUL1NUUkVBTV9QUkVQQVJFKS4KKwkgKi8KKwlQYXJhbGxlbFRyYW5zU3RhdGUJCXhhY3Rf c3RhdGU7CisKKwkvKiBJbmZvcm1hdGlvbiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIExvZ2ljYWxS ZXBXb3JrZXIgc2xvdC4gKi8KKwl1aW50MTYJCWxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247 CisKKwlpbnQJCQlsb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOworCisJLyoKKwkgKiBJbmRpY2F0 ZXMgd2hldGhlciB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyBpbiB0aGUgcXVldWUuIFRoZSBw YXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aWxsIGNoZWNrIGl0IGJlZm9yZSBzdGFydGluZyB0 byB3YWl0LgorCSAqLworCXBnX2F0b21pY191aW50MzIJcGVuZGluZ19tZXNzYWdlX2NvdW50Owor CisJLyoKKwkgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSBjaGFuZ2Vz IHRvIHRoZSBmaWxlIGFmdGVyCisJICogZW50ZXJpbmcgUEFSVElBTF9TRVJJQUxJWkUgbW9kZSBh bmQgc2hhcmUgdGhlIGZpbGVzZXQgd2l0aCB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIg d2hlbiBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZC4gQW5kIHRoZW4K KwkgKiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgYXBwbHkgYWxsIHRoZSBzcG9vbGVk IG1lc3NhZ2VzLgorCSAqCisJICogRG9uJ3QgdXNlIFNoYXJlZEZpbGVTZXQgaGVyZSBhcyB3ZSBu ZWVkIHRoZSBmaWxlc2V0IHRvIHN1cnZpdmUgYWZ0ZXIKKwkgKiByZWxlYXNpbmcgdGhlIHNoYXJl ZCBtZW1vcnkgc28gdGhhdCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBjYW4gcmUtdXNlCisJICog dGhlIGZpbGVzZXQgZm9yIG5leHQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSAqLworCUxlYWRl ckZpbGVTZXRTdGF0ZQkJZmlsZXNldF9zdGF0ZTsKKwlGaWxlU2V0CQlmaWxlc2V0OworfSBQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkOworCisvKgorICogSW5mb3JtYXRpb24gd2hpY2ggaXMgdXNl ZCB0byBtYW5hZ2UgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgUGFyYWxsZWxBcHBseVdvcmtlckluZm8KK3sKKwlzaG1fbXFfaGFuZGxlICptcV9oYW5kbGU7 CisKKwkvKgorCSAqIFRoZSBxdWV1ZSB1c2VkIHRvIHRyYW5zZmVyIGVycm9yIG1lc3NhZ2VzIGZy b20gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorCSAqIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyLiBOVUxMIGlmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhpdGVkCisJICogY2xlYW5s eS4KKwkgKi8KKwlzaG1fbXFfaGFuZGxlICplcnJvcl9tcV9oYW5kbGU7CisKKwlkc21fc2VnbWVu dCAqZHNtX3NlZzsKKworCS8qCisJICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgbmVlZHMgdG8gc2VyaWFsaXplIHRoZQorCSAqIHJlbWFpbmluZyBjaGFuZ2VzIHRv IGRpc2sgZHVlIHRvIHRpbWVvdXQgd2hlbiBzZW5kaW5nIGRhdGEgdG8gdGhlCisJICogcGFyYWxs ZWwgYXBwbHkgd29ya2VyLgorCSAqLworCWJvb2wJCXNlcmlhbGl6ZV9jaGFuZ2VzOworCisJLyoK KwkgKiBUcnVlIGlmIHRoZSB3b3JrZXIgaXMgYmVpbmcgdXNlZCB0byBwcm9jZXNzIGEgcGFyYWxs ZWwgYXBwbHkKKwkgKiB0cmFuc2FjdGlvbi4gRmFsc2UgaW5kaWNhdGVzIHRoaXMgd29ya2VyIGlz IGF2YWlsYWJsZSBmb3IgcmUtdXNlLgorCSAqLworCWJvb2wJCWluX3VzZTsKKworCVBhcmFsbGVs QXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKK30gUGFyYWxsZWxBcHBseVdvcmtlckluZm87CisK IC8qIE1haW4gbWVtb3J5IGNvbnRleHQgZm9yIGFwcGx5IHdvcmtlci4gUGVybWFuZW50IGR1cmlu ZyB3b3JrZXIgbGlmZXRpbWUuICovCiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBB cHBseUNvbnRleHQ7CiAKK2V4dGVybiBQR0RMTElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5TWVz c2FnZUNvbnRleHQ7CisKK2V4dGVybiBQR0RMTElNUE9SVCBFcnJvckNvbnRleHRDYWxsYmFjayAq YXBwbHlfZXJyb3JfY29udGV4dF9zdGFjazsKK2V4dGVybiBQR0RMTElNUE9SVCBBcHBseUVycm9y Q2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnOworCitleHRlcm4gUEdETExJTVBP UlQgYm9vbCBNeVN1YnNjcmlwdGlvblZhbGlkOworCitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxs ZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZDsKKworZXh0ZXJuIFBHRExMSU1Q T1JUIExpc3QgKnN1YnhhY3RsaXN0OworCitleHRlcm4gUEdETExJTVBPUlQgQnVmRmlsZSAqc3Ry ZWFtX2ZkOworCiAvKiBsaWJwcXJlY2VpdmVyIGNvbm5lY3Rpb24gKi8KIGV4dGVybiBQR0RMTElN UE9SVCBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uICpMb2dSZXBXb3JrZXJXYWxSY3ZDb25uOwogCkBA IC03OSwxOCArMjE3LDI0IEBAIGV4dGVybiBQR0RMTElNUE9SVCBTdWJzY3JpcHRpb24gKk15U3Vi c2NyaXB0aW9uOwogZXh0ZXJuIFBHRExMSU1QT1JUIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNh bFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0 aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb247Citl eHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93 b3JrZXI7CitleHRlcm4gUEdETExJTVBPUlQgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkOwogCiBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpOwogZXh0ZXJuIExv Z2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVs aWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmluZyk7CiBleHRlcm4gTGlzdCAqbG9naWNh bHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZyk7Ci1leHRlcm4g dm9pZCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3Qg Y2hhciAqc3VibmFtZSwKLQkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQpOworZXh0ZXJu IGJvb2wgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0 IGNoYXIgKnN1Ym5hbWUsCisJCQkJCQkJCQkgT2lkIHVzZXJpZCwgT2lkIHJlbGlkLAorCQkJCQkJ CQkJIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dv cmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d29ya2VyX3N0b3BfYnlfc2xvdChpbnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRpb24pOwogZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNhbFJlcFdvcmtl ciAqd29ya2VyKTsKIAogZXh0ZXJuIGludAlsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9p ZCBzdWJpZCk7CitleHRlcm4gaW50CWxvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29ya2VyX2Nv dW50KE9pZCBzdWJpZCk7CiAKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxv Z2ljYWxSZXAoT2lkIHN1Ym9pZCwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCQkgICBjaGFyICpvcmln aW5uYW1lLCBTaXplIHN6b3JpZ2lubmFtZSk7CkBAIC0xMDMsMTAgKzI0Nyw3MCBAQCBleHRlcm4g dm9pZCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pOwogZXh0 ZXJuIHZvaWQgaW52YWxpZGF0ZV9zeW5jaW5nX3RhYmxlX3N0YXRlcyhEYXR1bSBhcmcsIGludCBj YWNoZWlkLAogCQkJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVlKTsKIAorZXh0ZXJuIHZvaWQgc2Vy aWFsaXplX3N0cmVhbV9zdGFydChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50 KTsKK2V4dGVybiB2b2lkIHNlcmlhbGl6ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlvbklkIHhpZCk7 CisKKy8qIENvbW1vbiBzdHJlYW1pbmcgZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9vbGVk IG1lc3NhZ2VzICovCitleHRlcm4gdm9pZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKEZpbGVTZXQg KnN0cmVhbV9maWxlc2V0LCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJICAgWExvZ1JlY1B0 ciBsc24pOworCitleHRlcm4gdm9pZCBjaGFuZ2VzX2ZpbGVuYW1lKGNoYXIgKnBhdGgsIE9pZCBz dWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOworCitleHRlcm4gdm9pZCBhcHBseV9kaXNwYXRjaChT dHJpbmdJbmZvIHMpOworCitleHRlcm4gdm9pZCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZv aWQpOworCitleHRlcm4gdm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIodm9pZCk7CisKK2V4dGVy biB2b2lkIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7Citl eHRlcm4gdm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQg eGlkKTsKKworLyogRnVuY3Rpb24gZm9yIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCitleHRlcm4g dm9pZCBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworCisvKiBQYXJhbGxlbCBhcHBs eSB3b3JrZXIgc2V0dXAgYW5kIGludGVyYWN0aW9ucyAqLworZXh0ZXJuIHZvaWQgcGFyYWxsZWxf YXBwbHlfc3RhcnRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKTsKK2V4dGVybiBQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqcGFyYWxsZWxfYXBwbHlfZmluZF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4 aWQpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxB cHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkJCQkgIFBhcmFsbGVsVHJhbnNTdGF0 ZSBpbl94YWN0KTsKK2V4dGVybiBib29sIHBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywKKwkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlk LCBib29sIHN0b3Bfd29ya2VyKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X2ZyZWVfd29y a2VyX2luZm8oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKTsKKworZXh0ZXJuIHZvaWQg cGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlclNo YXJlZCAqd3NoYXJlZCk7CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEoUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCQkJCSBjb25z dCB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfc3RhcnRfc3VidHJh bnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKTsKK2V4 dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJv cnREYXRhICphYm9ydF9kYXRhKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3NldF9maWxl c2V0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJCQkg ICBMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZSk7CisKK2V4dGVybiB2b2lkIHBhcmFs bGVsX2FwcGx5X2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9k ZSk7CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0 aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2Fw cGx5X3VubG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsK K2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3VubG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlv bklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworCisjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdv cmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlkKQor CiBzdGF0aWMgaW5saW5lIGJvb2wKIGFtX3RhYmxlc3luY193b3JrZXIodm9pZCkKIHsKIAlyZXR1 cm4gT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKTsKIH0KIAorc3RhdGljIGlu bGluZSBib29sCithbV9sZWFkZXJfYXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuICghT2lk SXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSAmJgorCQkJIWlzUGFyYWxsZWxBcHBs eVdvcmtlcihNeUxvZ2ljYWxSZXBXb3JrZXIpKTsKK30KKworc3RhdGljIGlubGluZSBib29sCith bV9wYXJhbGxlbF9hcHBseV93b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gaXNQYXJhbGxlbEFwcGx5 V29ya2VyKE15TG9naWNhbFJlcFdvcmtlcik7Cit9CisKICNlbmRpZgkJCQkJCQkvKiBXT1JLRVJf SU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaAppbmRleCBiZTFkMmM5Li41YTNiZDAzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2xtZ3IuaApAQCAtMTA3LDYgKzEwNywxMSBAQCBleHRlcm4gdm9pZCBMb2NrU2hhcmVkT2JqZWN0 Rm9yU2Vzc2lvbihPaWQgY2xhc3NpZCwgT2lkIG9iamlkLCB1aW50MTYgb2Jqc3ViaWQsCiBleHRl cm4gdm9pZCBVbmxvY2tTaGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2Jq aWQsIHVpbnQxNiBvYmpzdWJpZCwKIAkJCQkJCQkJCQkgTE9DS01PREUgbG9ja21vZGUpOwogCitl eHRlcm4gdm9pZCBMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJh bnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJCQkgICBMT0NLTU9ERSBsb2Nr bW9kZSk7CitleHRlcm4gdm9pZCBVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQg c3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkJCQkgTE9D S01PREUgbG9ja21vZGUpOworCiAvKiBEZXNjcmliZSBhIGxvY2t0YWcgZm9yIGVycm9yIG1lc3Nh Z2VzICovCiBleHRlcm4gdm9pZCBEZXNjcmliZUxvY2tUYWcoU3RyaW5nSW5mbyBidWYsIGNvbnN0 IExPQ0tUQUcgKnRhZyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKaW5kZXggZTRlMTQ5NS4uYjljZDJkZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sb2NrLmgKQEAgLTE0OSwxMCArMTQ5LDEyIEBAIHR5cGVkZWYgZW51bSBMb2NrVGFnVHlw ZQogCUxPQ0tUQUdfU1BFQ1VMQVRJVkVfVE9LRU4sCS8qIHNwZWN1bGF0aXZlIGluc2VydGlvbiBY aWQgYW5kIHRva2VuICovCiAJTE9DS1RBR19PQkpFQ1QsCQkJCS8qIG5vbi1yZWxhdGlvbiBkYXRh YmFzZSBvYmplY3QgKi8KIAlMT0NLVEFHX1VTRVJMT0NLLAkJCS8qIHJlc2VydmVkIGZvciBvbGQg Y29udHJpYi91c2VybG9jayBjb2RlICovCi0JTE9DS1RBR19BRFZJU09SWQkJCS8qIGFkdmlzb3J5 IHVzZXIgbG9ja3MgKi8KKwlMT0NLVEFHX0FEVklTT1JZLAkJCS8qIGFkdmlzb3J5IHVzZXIgbG9j a3MgKi8KKwlMT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OCS8qIHRyYW5zYWN0aW9uIGJlaW5nIGFw cGxpZWQgb24gdGhlIHN1YnNjcmliZXIKKwkJCQkJCQkJICogc2lkZSAqLwogfSBMb2NrVGFnVHlw ZTsKIAotI2RlZmluZSBMT0NLVEFHX0xBU1RfVFlQRQlMT0NLVEFHX0FEVklTT1JZCisjZGVmaW5l IExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04KIAogZXh0ZXJuIFBH RExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNbXTsKIApAQCAtMjc4 LDYgKzI4MCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBMT0NLVEFHCiAJIChsb2NrdGFnKS5sb2NrdGFn X3R5cGUgPSBMT0NLVEFHX0FEVklTT1JZLCBcCiAJIChsb2NrdGFnKS5sb2NrdGFnX2xvY2ttZXRo b2RpZCA9IFVTRVJfTE9DS01FVEhPRCkKIAorLyoKKyAqIElEIGluZm8gZm9yIGEgcmVtb3RlIHRy YW5zYWN0aW9uIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgaXM6CisgKiBEQiBPSUQgKyBTVUJTQ1JJ UFRJT04gT0lEICsgVFJBTlNBQ1RJT04gSUQgKyBPQkpJRAorICovCisjZGVmaW5lIFNFVF9MT0NL VEFHX0FQUExZX1RSQU5TQUNUSU9OKGxvY2t0YWcsZGJvaWQsc3Vib2lkLHhpZCxvYmppZCkgXAor CSgobG9ja3RhZykubG9ja3RhZ19maWVsZDEgPSAoZGJvaWQpLCBcCisJIChsb2NrdGFnKS5sb2Nr dGFnX2ZpZWxkMiA9IChzdWJvaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2ZpZWxkMyA9ICh4 aWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2ZpZWxkNCA9IChvYmppZCksIFwKKwkgKGxvY2t0 YWcpLmxvY2t0YWdfdHlwZSA9IExPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04sIFwKKwkgKGxvY2t0 YWcpLmxvY2t0YWdfbG9ja21ldGhvZGlkID0gREVGQVVMVF9MT0NLTUVUSE9EKQogCiAvKgogICog UGVyLWxvY2tlZC1vYmplY3QgbG9jayBpbmZvcm1hdGlvbjoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKaW5kZXggZWU2MzY5MC4uOTNhNTFmNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAg LTM1LDYgKzM1LDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElO RywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJ R19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KIAlQUk9DU0lHX0xP R19NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4 dHMgKi8KKwlQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsIC8qIE1lc3NhZ2UgZnJvbSBw YXJhbGxlbCBhcHBseSB3b3JrZXJzICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25z ICovCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZl bnQuaAppbmRleCA2ZjJkNTYxLi5jNjUxYWQyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy93YWl0X2V2ZW50LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC00 Miw2ICs0Miw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfQ0hFQ0tQT0lOVEVSX01BSU4s CiAJV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX01BSU4sCiAJV0FJVF9FVkVOVF9MT0dJQ0FMX0xB VU5DSEVSX01BSU4sCisJV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU4sCiAJ V0FJVF9FVkVOVF9SRUNPVkVSWV9XQUxfU1RSRUFNLAogCVdBSVRfRVZFTlRfU1lTTE9HR0VSX01B SU4sCiAJV0FJVF9FVkVOVF9XQUxfUkVDRUlWRVJfTUFJTiwKQEAgLTEwNSw2ICsxMDYsNyBAQCB0 eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0FMTE9DQVRFLAogCVdB SVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfRUxFQ1QsCiAJV0FJVF9FVkVOVF9IQVNIX0dST1df QlVDS0VUU19SRUlOU0VSVCwKKwlXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RB VEVfQ0hBTkdFLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEEsCiAJV0FJVF9FVkVOVF9M T0dJQ0FMX1NZTkNfU1RBVEVfQ0hBTkdFLAogCVdBSVRfRVZFTlRfTVFfSU5URVJOQUwsCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKaW5kZXggYzEzZDIxOC4uMWVk NmY0YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24u b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dApAQCAt MTE3LDcgKzExNyw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3Qg bWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgIE5hbWUgICAgICAg fCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmlu YXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBP cmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAg fCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0 c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IG5vbmUgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBub25lICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjQgU0VUIChvcmlnaW4gPSBhbnkpOwpAQCAtMTI1LDcg KzEyNSw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0IFNFVCAob3JpZ2lu ID0gYW55KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3Jp cHRpb25zCiAgICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBF bmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNl ciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAg ICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViNCB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAg ICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFu eSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8 IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIzOwpAQCAt MTM4LDcgKzEzOCw3IEBAIEVSUk9SOiAgaW52YWxpZCBjb25uZWN0aW9uIHN0cmluZyBzeW50YXg6 IG1pc3NpbmcgIj0iIGFmdGVyICJmb29iYXIiIGluIGNvbm5lY3RpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5h cnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9y aWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8 IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1 YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRi bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJ UFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCBQVUJMSUNBVElPTiB0ZXN0cHViMiwgdGVzdHB1YjMg V0lUSCAocmVmcmVzaCA9IGZhbHNlKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBBTFRFUiBTVUJTQ1JJ UFRJT04gcmVncmVzc190ZXN0c3ViIFNLSVAgKGxzbiA9ICcwLzEyMzQ1Jyk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5h bWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICBQdWJs aWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlz YWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBmICAgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzEyMzQ1CisgcmVncmVz c190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1 YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYg ICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVn cmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8xMjM0NQogKDEgcm93KQogCiAtLSBvayAtIHdpdGggbHNu ID0gTk9ORQpAQCAtMTcwLDcgKzE3MCw3IEBAIEVSUk9SOiAgaW52YWxpZCBXQUwgbG9jYXRpb24g KExTTik6IDAvMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBz dWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwg VHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91 cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwg ZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAg fCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QyIHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8 IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAg ICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8wCiAoMSByb3cpCiAKIEJF R0lOOwpAQCAtMjA1LDcgKzIwNSw3IEBAIEhJTlQ6ICBBdmFpbGFibGUgdmFsdWVzOiBsb2NhbCwg cmVtb3RlX3dyaXRlLCByZW1vdGVfYXBwbHksIG9uLCBvZmYuCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgICBOYW1lICAg ICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICBQdWJsaWNh dGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJs ZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgICBDb25u aW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViX2ZvbyB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IGYgICAgICAg ICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgbG9jYWwg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAorIHJlZ3Jl c3NfdGVzdHN1Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0 ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAg IHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IGxvY2FsICAgICAgICAgICAgICB8IGRibmFt ZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sg dG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKQEAgLTI0Miw3ICsyNDIsNyBAQCBISU5UOiAgVG8gaW5p dGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRp b24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgdCAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgdCAgICAg IHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGJp bmFyeSA9IGZhbHNlKTsKQEAgLTI1MSwxMyArMjUxLDEzIEBAIEFMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwg ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NSSVBU SU9OIHJlZ3Jlc3NfdGVzdHN1YjsKLS0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFu CistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBvciAncGFyYWxsZWwnCiBDUkVB VEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNl LCBzdHJlYW1pbmcgPSBmb28pOwotRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFu IHZhbHVlCitFUlJPUjogIHN0cmVhbWluZyByZXF1aXJlcyBhIEJvb2xlYW4gdmFsdWUgb3IgInBh cmFsbGVsIgogLS0gbm93IGl0IHdvcmtzCiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVz dHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9O IHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSB0cnVlKTsKIFdBUk5J Tkc6ICBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29ubmVjdGVkCkBAIC0y NjYsNyArMjY2LDE1IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3Qg bWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5h cnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9y aWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8 IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1 YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCB0ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBkICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRi bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorKDEgcm93KQorCitBTFRFUiBTVUJTQ1JJ UFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOworXGRScysK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisg ICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQ dWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNh YmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29u bmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHBhcmFsbGVsICB8IGQgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7CkBAIC0yNzUsNyArMjgzLDcg QEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5P TkUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlv bnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxl ZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgx IHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIGFscmVhZHkgZXhpc3RzCkBAIC0yOTMsNyAr MzAxLDcgQEAgRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1YjEiIGlzIGFscmVhZHkgaW4gc3Vi c2NyaXB0aW9uICJyZWdyZXNzX3Rlc3RzdWIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgICAgIFB1YmxpY2F0aW9uICAg ICAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBv biBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHViLHRlc3RwdWIxLHRlc3RwdWIyfSB8IGYgICAgICB8IGYgICAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVn cmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVz dHB1Yix0ZXN0cHViMSx0ZXN0cHViMn0gfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLSBmYWlsIC0g cHVibGljYXRpb24gdXNlZCBtb3JlIHRoZW4gb25jZQpAQCAtMzExLDcgKzMxOSw3IEBAIEFMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMSwg dGVzdHB1YjIgV0lUSCAocmVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28t cGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNv bW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7 CkBAIC0zNTAsNyArMzU4LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3Ug bXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAg ICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8 IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9y IHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAg ICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190 ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0g ICB8IGYgICAgICB8IGYgICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNl ciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IHAgICAgICAg ICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tZmFpbCAt IGFsdGVyIG9mIHR3b19waGFzZSBvcHRpb24gbm90IHN1cHBvcnRlZC4KQEAgLTM2Miw3ICszNzAs NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0g dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0 aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFi bGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0 IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAg ICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCB0ICAgICAgICAgfCBwICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRi bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBv biAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAog KDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9u YW1lID0gTk9ORSk7CkBAIC0zNzUsNyArMzgzLDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxp Y2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAg ICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQ dWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNh YmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29u bmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHQgICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJz Y3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9uICAgICAg ICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cp CiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBO T05FKTsKQEAgLTM5MSw3ICszOTksNyBAQCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24s IHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5h bWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0 aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24g ZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlv bl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAg ICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxU RVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2FibGVfb25fZXJyb3IgPSB0 cnVlKTsKQEAgLTM5OSw3ICs0MDcsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViIFNFVCAoZGlzYWJsZV9vbl9lcnJvciA9IHRydWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwg U3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4g fCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lw IExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8 IHQgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N1YnNjcmlwdGlvbi5zcWwKaW5kZXggZWFlYWRlOC4uNzk5MWFiZiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9zdWJzY3JpcHRpb24uc3FsCkBAIC0xNjcsNyArMTY3LDcgQEAgQUxURVIgU1VCU0NSSVBU SU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogCiBEUk9QIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWI7CiAKLS0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBi b29sZWFuCistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBvciAncGFyYWxsZWwn CiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9 IGZhbHNlLCBzdHJlYW1pbmcgPSBmb28pOwogCiAtLSBub3cgaXQgd29ya3MKQEAgLTE3NSw2ICsx NzUsMTAgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAn ZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIAogXGRScysKIAorQUxURVIgU1VCU0NS SVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKKworXGRS cysKKwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9 IGZhbHNlKTsKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25h bWUgPSBOT05FKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5NjgzYjBhLi5hNmVm YjkwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTQ3Miw2ICsxNDcyLDcgQEAgTG9n aWNhbFJlcFJlbElkCiBMb2dpY2FsUmVwUmVsTWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgog TG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnRE YXRhCiBMb2dpY2FsUmVwVHVwbGVEYXRhCiBMb2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2Vy CkBAIC0xNjYzLDYgKzE2NjQsOSBAQCBPdmVycmlkZVN0YWNrRW50cnkKIE92ZXJyaWRpbmdLaW5k CiBQQUNFX0hFQURFUgogUEFDTAorUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5CitQYXJhbGxlbEFw cGx5V29ya2VySW5mbworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAogUEFUSAogUEJPT0wKIFBD dHh0SGFuZGxlCkBAIC0xODk0LDYgKzE4OTgsNyBAQCBQYXJhbGxlbFNsb3RSZXN1bHRIYW5kbGVy CiBQYXJhbGxlbFN0YXRlCiBQYXJhbGxlbFRhYmxlU2NhbkRlc2MKIFBhcmFsbGVsVGFibGVTY2Fu RGVzY0RhdGEKK1BhcmFsbGVsVHJhbnNTdGF0ZQogUGFyYWxsZWxWYWN1dW1TdGF0ZQogUGFyYWxs ZWxXb3JrZXJDb250ZXh0CiBQYXJhbGxlbFdvcmtlckluZm8KQEAgLTI3ODQsNiArMjc4OSw3IEBA IFRyYW5zYWN0aW9uU3RtdEtpbmQKIFRyYW5zZm9ybUluZm8KIFRyYW5zZm9ybUpzb25TdHJpbmdW YWx1ZXNTdGF0ZQogVHJhbnNpdGlvbkNhcHR1cmVTdGF0ZQorVHJhbnNBcHBseUFjdGlvbgogVHJn bUFyYwogVHJnbUFyY0luZm8KIFRyZ21Cb3VuZAotLSAKMi43LjIud2luZG93cy4xCgo= --_003_OS0PR01MB571628A8975A7A984D45134A94009OS0PR01MB5716jpnp_--