From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 4CB283857400 for ; Fri, 29 Jul 2022 19:56:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CB283857400 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26TJiGLJ017433; Fri, 29 Jul 2022 19:56:19 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9ap7mb3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 29 Jul 2022 19:56:18 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26TIABb5009233; Fri, 29 Jul 2022 19:56:18 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2177.outbound.protection.outlook.com [104.47.59.177]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hm888utg6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 29 Jul 2022 19:56:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lCci/Sh8205qIvjBogyVu1TKP3hYya5eRNi8fHo9buo52XBlCEclA9FGdl6UeYT4W7pNH6WoYyLGHJMFmaUiXzc8vGqOnhgC4BG6m8MYjtI3uEPFHUVxwEwJrdkphaehvUPGSMyeUBETwiU8ie0dHCzwQcyY3XdQDt3MDRS1qjYuStZS5VS9qn2jVdggIgChLZV0gZKUBbEXa4Oft1mvCH+uyi9NvUCrPcZbZLrhmdbqbo8c8X6bVMHB0J1FqdimqdSRWz3hzEsnVoN566j2bhKYmiP0Vo11NQABg2JVLSnxub/y+qDtuWMKuTopkyRbCuaRS1VFB2Teh3v6WDFHZQ== 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=IgRR4i1IeqGiDSFk+RICb1C9tTyphtB+CggbNlgjM4w=; b=e3cNOPTq6shvTNtKZCiKajeUAf3RsKVhiPaTwii26UmkoZSE5+NQXwTqDkkdJNCNhbVAu3FHtqX39K9NqjqkrYCMBJHN2pja2jjwxAStymg1DIgQSV4oPOXdkK2MU6Oq4tGYjea+jXLWkLtsdd0qrFSz1RZo67PENUqNFeTS9JR2RSD77UIrBKnuNWQiE3/X57vDb9UXkHxCMjkkb8JElUDdz2I/K5/g1ouCAOAcG4amvpkdLtwq9iNJRQCLwH3Hl6ur+aAAO1tL6Is6A9E+0aD7++D6/2x4bqY8a1IYEk+MHiYqer890ExFrQTxayu7WnTEK/FYR3TFrUyNQRxu8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by MN2PR10MB3663.namprd10.prod.outlook.com (2603:10b6:208:111::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.11; Fri, 29 Jul 2022 19:56:15 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::84af:9275:f1d7:de1]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::84af:9275:f1d7:de1%5]) with mapi id 15.20.5482.012; Fri, 29 Jul 2022 19:56:14 +0000 From: Qing Zhao To: Richard Biener CC: gcc-patches Paul A Clarke via , jakub Jelinek , martin Sebor , kees Cook , "joseph@codesourcery.com" Subject: Re: [GCC13][Patch][V2][1/2]Add a new option -fstrict-flex-array[=n] and attribute strict_flex_array(n) and use it in PR101836 Thread-Topic: [GCC13][Patch][V2][1/2]Add a new option -fstrict-flex-array[=n] and attribute strict_flex_array(n) and use it in PR101836 Thread-Index: AQHYm3kzWKnaJcRdM06lFScE7QxsLa2Tb+OAgAJjrgA= Date: Fri, 29 Jul 2022 19:56:14 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3d4f2f39-df62-4567-8dfe-08da719c64f9 x-ms-traffictypediagnostic: MN2PR10MB3663:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3VHeTTH/MVNmzYiOH7AyXYj6HMRMa/x06fl7Z14txRnQceKgmQkFOYACTNs3jbkEJwX7FxBmnK0K0klFBYpdK/doJ7SO8TP2PEu7cGMu9Xbs/tJ5J0Etc6SNxnq/juySa84MjWtw5/WDx+1GzsBRpsQ0GEdH0VxLobnYCpFRuLyDohEVmBZJtySF6o/RwdDye/30VXBA3QrC/lPzvv9R4RaDbWOj15cdPmjxgs/duyESDZtH25pVyNn72611PIMgKuvS+TfA6KWZo7N2YW0w4j/1/R1bFrz5ufyZWtynZg8//5OAGTpqmcE4dgSK1dImmiUdE+P4GYmmhRO40xN4jDoKQ87sDuyDCYHlwZ++WbVKMTQfupOOYkuo/KF+fiUtqY3lVS0T1f1Xw+D1n2wYta0ftggtPMf08O2m1bim7FUlE4Kp+0YUxn0iWZpfbyZ9gGwpc8OeQaz8hH++CoyMZbpXmTfrz9Tk2Z74Tk8aliEHqCW4E9zihVNy1KftkPljA9oclwqeDLmP8jSxlQOpTFRMok2Y39JRbpnW8X7l5kAdVQvCu5TihisaBsCFS9IUvRe/AJwG8Lpgz0ghj1YdBnH5Q/aIEK11O6Y49ZrPI/U14ItD+N6KbeaqZ3nE73R5ZRPdT2tRxWtltTpXjH0s0e5bH7sODAXxAer0iYSUpvnM9YX1FhiMyYRqYGde0XuKLJgiUc8fCBI9mP3ClPgiCJ0UgKqvKGB7Jf9d3Qfz3t/4T4HyBrz9GTu99BIOWRFja4AykVmsjVlSA7Aw9UUrShKZTBOvmjUjij/5sgmG9JeZBD6hUvJMC7hyubM8qbjDwOhcve41H+wZEWK4I8GraOQW7S8kfEF0Kpa4OjqKc8g= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(376002)(396003)(346002)(366004)(136003)(39860400002)(86362001)(38100700002)(38070700005)(66556008)(66476007)(91956017)(66946007)(76116006)(5660300002)(71200400001)(4326008)(122000001)(64756008)(66446008)(8676002)(8936002)(478600001)(6486002)(316002)(54906003)(6916009)(2616005)(186003)(83380400001)(2906002)(33656002)(41300700001)(30864003)(36756003)(53546011)(44832011)(26005)(84970400001)(6512007)(6506007)(45980500001)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dExHSjEvd3pwVnZ5d0hGVHFDUTROdFZ5SFp6YlE3SU0zWnVjMytKRXl4YVlo?= =?utf-8?B?RC9DY2szZjUxODdreFBLT0VkWUY0QTQ3bVFzN3NXN2Zob0ZDdVhrU09WMDZj?= =?utf-8?B?bXZoelhqQ3NrU3ZscXJ1OGNndXZGcTliRmtvM1VCOVlaTC9nMmFLd1I3MHFP?= =?utf-8?B?NC9DRS9yeCtWNVcyMDJseWg1TGVPSFFMQVIwVEtMaFY2ZnFKa3NES1NRR0xN?= =?utf-8?B?WlJucldsVjRqVTFtMXVXQytjVk11L2NYWlNCWEpNOVVRRDlUaTNBdlk5SUZK?= =?utf-8?B?aGN1NzRRZ3c4QU5WUFlZQVA4VkVhVmhHTmhaR2IySEVNNmVaTkoyZis1ZGp5?= =?utf-8?B?NUJOYjhxbGVBYUlwdnhnNm43Wnl6eGtEOEx5WlhVOTJMR0dFczhFR3Q0QlR6?= =?utf-8?B?dTZRQlVaQVZZMGdKK1BFbHpvTEpadUlIa2loQUsyMTUvb1pXdHdZUTdRWEdW?= =?utf-8?B?aVoyVEtxdURULzFNNmV0azcwcGN6UUY5MDV5YmVKcTFKTm9nVGp0bGl4aE11?= =?utf-8?B?NzRWVFl1aG1CeFF1NGp0bTlyWFJtYzcyN3dEdjNoRUxQdUMxVnhYaDdyN1NO?= =?utf-8?B?MlBib1RkUEFQSldtenQrV2l5ZVdabktZc3h2OEdvMlRYUzBpeHBOVDlxeFZK?= =?utf-8?B?SE5vUDFiRTNOZ1BwV3JIdGgvaWVkcDUyM0dzSmpCYUdEK0FlY3M5b1JQZzk2?= =?utf-8?B?YUlaVDFzb3VWZ2NHeW9RWi9LR1ZSbGZuVmt0MlU4RTVYMEprZStlVGRDYlli?= =?utf-8?B?b1B6VTFQZlR1dFR2Nmk5cW5JTEFVUDNlMFpJUGEzMXNCekhmSXZ6YUNLK29M?= =?utf-8?B?NU9NcGp0a1JmdE15eGlFdmorUEFRY0lERy9wYTJHSlJOY29ldzZtSWh2MHZw?= =?utf-8?B?U1l4dm43RmlJWFB6UlArYWRvejZ4SkpsN1BaN1duMVBGME9jcnBwdXozYWNL?= =?utf-8?B?SmtvY2N6d1RqMDJPbVZ4RG9TekF2UVd4R3Mwdmg3WHpvR3E3UXExYyt0Rm1M?= =?utf-8?B?azB2RWhqZERlYUIvOG1NRnVEZmJZZ3FyUDN4Q3BFZ1duenZMQjNMZ1ZsNGgr?= =?utf-8?B?Yk8zVFkxUkoyWG9MdWEyVWFyMHhwemJNMEdoYXlkVVdTSWJoemxZalU1RWc4?= =?utf-8?B?cllYWjAyUENlbk1KalRNNGQ1dW1WSjdnL3J1R3k2Q3ZYYUNYQkRoUnVNSG5t?= =?utf-8?B?RkZZRVcxK1VGT1U5UzdhamE5K1dIa05UdU1FTkVWR1N6Q3ZTRzl4TVArcXZs?= =?utf-8?B?bko3Nm9iVmJsQnZIUVNBZ1JDNGFGc2ZJSURMV0swYWRGWFEwY0NHclhWcG1v?= =?utf-8?B?K3VxeFJWdmdaeEFXSkNjUW5EVC9TL1RBTXdhaFlVL092K25nbWhhYm93UVNq?= =?utf-8?B?ckpRV0FhY3VFektPeHpEcENNcmwyNXhHYTZwY2s2WFBZSnBHNCtjUlV0ZmFv?= =?utf-8?B?eENpdHBWaFU1cDFWbjFIcWE1dlg0ejZKRm0rYTBIZ1VKeFN4cUhHUVJnMm5z?= =?utf-8?B?UTB3WnpQMkZtUnpmMWJkK0xSeDBjc0V0MzZUTUFkS0xNQlBzMnpMNHpKZHI1?= =?utf-8?B?ZVArYW1sUHFnVWFMV2ZoclNSWGs4NWxPTzBXSWJhQitTS25jVjNlU2M4Y1RT?= =?utf-8?B?L3g2cDUyUmhGOG9JSmZsRlJvSEpUSEhiUzZROW5wNjk0V00zQkdTSmNlV3Z6?= =?utf-8?B?RHgvRkpFdU0vMXdCaW5UcVRXTmh3ZVE5cWRLS0JwWmRvc3ptU0lQaHF5TVZO?= =?utf-8?B?TkFnWm9Fa2l0bHhET0lYNmJLOUdJdzkzRHl5S2ZNNjZDR05BUXBYUStCdEhN?= =?utf-8?B?eGFZZmRwN3RPcDZWMlc2Zk03dUNYOG8xc3VPYW9kcDFnOXhZK09kbWdiYUYz?= =?utf-8?B?MkdzeWhyNlRGZHM0RGZkZ0wycGplWkkwWVl3QW93aGFGeHp5UUlHKzBKbW85?= =?utf-8?B?Ym4vRmlFMG1KdjdZb1RVWkFCNjloejcrdEJzNzlCUnc4bDhYUW03V1Z4aWho?= =?utf-8?B?WTE3RGkzSVVZL2xmKzBDY21sd2xhUlR1aWZSK1VMRWl5Q0ZoZWJXRzd3ZlFs?= =?utf-8?B?cnZHeDZxOFlJUm4za2c5czJBQWkrZTQwd3ZIS0VOaWFlSnFKUStoMEFLWVFs?= =?utf-8?B?enhadERGM1UvNW56bElwaUx4MGdXVkdEOFBVbXAxZ3d2Rnl2V2NvSTMxS1RM?= =?utf-8?B?K1E9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d4f2f39-df62-4567-8dfe-08da719c64f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jul 2022 19:56:14.8947 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nzOauegva25U733CZg7yLiat/KscGUUzTCim4ujDoI3OtI9GShKXgzfcSJAklHC0TdBCECW6xZjXcrdTesIZvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB3663 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-29_19,2022-07-28_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207290082 X-Proofpoint-ORIG-GUID: G3BbzALXFpPO6yCPUSbnB4Et-2Qwbinz X-Proofpoint-GUID: G3BbzALXFpPO6yCPUSbnB4Et-2Qwbinz X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jul 2022 19:56:31 -0000 SGksIFJpY2hhcmQsDQoNClRoYW5rcyBhIGxvdCBmb3IgeW91ciBjb21tZW50cyBhbmQgc3VnZ2Vz dGlvbnMuIChBbmQgc29ycnkgZm9yIG15IGxhdGUgcmVwbHkpLg0KDQo+IE9uIEp1bCAyOCwgMjAy MiwgYXQgMzoyNiBBTSwgUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPiB3cm90ZToN Cj4gDQo+IE9uIFR1ZSwgMTkgSnVsIDIwMjIsIFFpbmcgWmhhbyB3cm90ZToNCj4gDQo+PiBGcm9t IDM4NTQwMDQ4MDJiOGUyZjEzMmViZjIxOGZjMzVhNjMyZjVlODBjNmEgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxDQo+PiBGcm9tOiBRaW5nIFpoYW8gPHFpbmcuemhhb0BvcmFjbGUuY29tPg0KPj4g RGF0ZTogTW9uLCAxOCBKdWwgMjAyMiAxNzowNDoxMiArMDAwMA0KPj4gU3ViamVjdDogW1BBVENI IDEvMl0gQWRkIGEgbmV3IG9wdGlvbiAtZnN0cmljdC1mbGV4LWFycmF5Wz1uXSBhbmQgbmV3DQo+ PiBhdHRyaWJ1dGUgc3RyaWN0X2ZsZXhfYXJyYXkNCj4+IA0KPj4gQWRkIHRoZSBmb2xsb3dpbmcg bmV3IG9wdGlvbiAtZnN0cmljdC1mbGV4LWFycmF5Wz1uXSBhbmQgYSBjb3JyZXNwb25kaW5nDQo+ PiBhdHRyaWJ1dGUgc3RyaWN0X2ZsZXhfYXJyYXkgdG8gR0NDOg0KPj4gDQo+PiAnLWZzdHJpY3Qt ZmxleC1hcnJheScNCj4+ICAgIFRyZWF0IHRoZSB0cmFpbGluZyBhcnJheSBvZiBhIHN0cnVjdHVy ZSBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlcg0KPj4gICAgaW4gYSBzdHJpY3RlciB3YXkuICBU aGUgcG9zaXRpdmUgZm9ybSBpcyBlcXVpdmFsZW50IHRvDQo+PiAgICAnLWZzdHJpY3QtZmxleC1h cnJheT0zJywgd2hpY2ggaXMgdGhlIHN0cmljdGVzdC4gIEEgdHJhaWxpbmcgYXJyYXkNCj4+ICAg IGlzIHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgb25seSB3aGVuIGl0IGlzIGRl Y2xhcmVkIGFzIGENCj4+ICAgIGZsZXhpYmxlIGFycmF5IG1lbWJlciBwZXIgQzk5IHN0YW5kYXJk IG9ud2FyZHMuICBUaGUgbmVnYXRpdmUgZm9ybQ0KPj4gICAgaXMgZXF1aXZhbGVudCB0byAnLWZz dHJpY3QtZmxleC1hcnJheT0wJywgd2hpY2ggaXMgdGhlIGxlYXN0DQo+PiAgICBzdHJpY3QuICBB bGwgdHJhaWxpbmcgYXJyYXlzIG9mIHN0cnVjdHVyZXMgYXJlIHRyZWF0ZWQgYXMgZmxleGlibGUN Cj4+ICAgIGFycmF5IG1lbWJlcnMuDQo+PiANCj4+ICctZnN0cmljdC1mbGV4LWFycmF5PUxFVkVM Jw0KPj4gICAgVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0dXJlIGFzIGEgZmxl eGlibGUgYXJyYXkgbWVtYmVyDQo+PiAgICBpbiBhIHN0cmljdGVyIHdheS4gIFRoZSB2YWx1ZSBv ZiBMRVZFTCBjb250cm9scyB0aGUgbGV2ZWwgb2YNCj4+ICAgIHN0cmljdG5lc3MuDQo+PiANCj4+ ICAgIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgTEVWRUwgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUN Cj4+ICAgICdzdHJpY3RfZmxleF9hcnJheScgYXR0cmlidXRlICgqbm90ZSBWYXJpYWJsZSBBdHRy aWJ1dGVzOjopLg0KPj4gDQo+PiAgICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3Ig YSBzcGVjaWZpYyB0cmFpbGluZyBhcnJheSBmaWVsZA0KPj4gICAgb2YgYSBzdHJ1Y3R1cmUgYnkg dXNpbmcgdGhlIHZhcmlhYmxlIGF0dHJpYnV0ZSAnc3RyaWN0X2ZsZXhfYXJyYXknDQo+PiAgICBh dHRyaWJ1dGUgKCpub3RlIFZhcmlhYmxlIEF0dHJpYnV0ZXM6OikuDQo+PiANCj4+ICdzdHJpY3Rf ZmxleF9hcnJheSAoTEVWRUwpJw0KPj4gICAgVGhlICdzdHJpY3RfZmxleF9hcnJheScgYXR0cmli dXRlIHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUNCj4+ICAgIHRyYWlsaW5nIGFycmF5IGZpZWxk IG9mIGEgc3RydWN0dXJlLiAgSXQgc3BlY2lmaWVzIHRoZSBsZXZlbCBvZg0KPj4gICAgc3RyaWN0 bmVzcyBvZiB0cmVhdGluZyB0aGUgdHJhaWxpbmcgYXJyYXkgZmllbGQgb2YgYSBzdHJ1Y3R1cmUg YXMgYQ0KPj4gICAgZmxleGlibGUgYXJyYXkgbWVtYmVyLiAgTEVWRUwgbXVzdCBiZSBhbiBpbnRl Z2VyIGJldHdlbiAwIHRvIDMuDQo+PiANCj4+ICAgIExFVkVMPTAgaXMgdGhlIGxlYXN0IHN0cmlj dCBsZXZlbCwgYWxsIHRyYWlsaW5nIGFycmF5cyBvZg0KPj4gICAgc3RydWN0dXJlcyBhcmUgdHJl YXRlZCBhcyBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLiAgTEVWRUw9MyBpcyB0aGUNCj4+ICAgIHN0 cmljdGVzdCBsZXZlbCwgb25seSB3aGVuIHRoZSB0cmFpbGluZyBhcnJheSBpcyBkZWNsYXJlZCBh cyBhDQo+PiAgICBmbGV4aWJsZSBhcnJheSBtZW1iZXIgcGVyIEM5OSBzdGFuZGFyZCBvbndhcmRz IChbXSksIGl0IGlzIHRyZWF0ZWQNCj4+ICAgIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyLg0K Pj4gDQo+PiAgICBUaGVyZSBhcmUgdHdvIG1vcmUgbGV2ZWxzIGluIGJldHdlZW4gMCBhbmQgMywg d2hpY2ggYXJlIHByb3ZpZGVkIHRvDQo+PiAgICBzdXBwb3J0IG9sZGVyIGNvZGVzIHRoYXQgdXNl IEdDQyB6ZXJvLWxlbmd0aCBhcnJheSBleHRlbnNpb24gKFswXSkNCj4+ICAgIG9yIG9uZS1zaXpl IGFycmF5IGFzIGZsZXhpYmxlIGFycmF5IG1lbWJlciAoWzFdKTogV2hlbiBMRVZFTCBpcyAxLA0K Pj4gICAgdGhlIHRyYWlsaW5nIGFycmF5IGlzIHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBt ZW1iZXIgd2hlbiBpdCBpcw0KPj4gICAgZGVjbGFyZWQgYXMgZWl0aGVyIFtdLCBbMF0sIG9yIFsx XTsgV2hlbiBMRVZFTCBpcyAyLCB0aGUgdHJhaWxpbmcNCj4+ICAgIGFycmF5IGlzIHRyZWF0ZWQg YXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgd2hlbiBpdCBpcyBkZWNsYXJlZCBhcw0KPj4gICAg ZWl0aGVyIFtdLCBvciBbMF0uDQo+PiANCj4+ICAgIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2Vk IHdpdGggb3Igd2l0aG91dCAnLWZzdHJpY3QtZmxleC1hcnJheScuDQo+PiAgICBXaGVuIGJvdGgg dGhlIGF0dHJpYnV0ZSBhbmQgdGhlIG9wdGlvbiBwcmVzZW50IGF0IHRoZSBzYW1lIHRpbWUsDQo+ PiAgICB0aGUgbGV2ZWwgb2YgdGhlIHN0cmljdG5lc3MgZm9yIHRoZSBzcGVjaWZpYyB0cmFpbGlu ZyBhcnJheSBmaWVsZA0KPj4gICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXR0cmlidXRlLg0KPj4g DQo+PiBnY2MvYy1mYW1pbHkvQ2hhbmdlTG9nOg0KPj4gDQo+PiAJKiBjLWF0dHJpYnMuY2MgKGhh bmRsZV9zdHJpY3RfZmxleF9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uDQo+PiAJKGNf Y29tbW9uX2F0dHJpYnV0ZV90YWJsZSk6IE5ldyBpdGVtIGZvciBzdHJpY3RfZmxleF9hcnJheS4N Cj4+IAkqIGMub3B0IChmc3RyaWN0LWZsZXgtYXJyYXkpOiBOZXcgb3B0aW9uLg0KPj4gCShmc3Ry aWN0LWZsZXgtYXJyYXk9KTogTmV3IG9wdGlvbi4NCj4+IA0KPj4gZ2NjL2MvQ2hhbmdlTG9nOg0K Pj4gDQo+PiAJKiBjLWRlY2wuY2MgKGFkZF9mbGV4aWJsZV9hcnJheV9lbHRzX3RvX3NpemUpOiBD YWxsIG5ldyB1dGlsaXR5DQo+PiAJcm91dGluZSBmbGV4aWJsZV9hcnJheV9tZW1iZXJfcC4NCj4+ IAkoaXNfZmxleGlibGVfYXJyYXlfbWVtYmVyX3ApOiBOZXcgZnVuY3Rpb24uDQo+PiAJKGZpbmlz aF9zdHJ1Y3QpOiBTZXQgdGhlIG5ldyBERUNMX05PVF9GTEVYQVJSQVkgZmxhZy4NCj4+IA0KPj4g Z2NjL0NoYW5nZUxvZzoNCj4+IA0KPj4gCSogZG9jL2V4dGVuZC50ZXhpOiBEb2N1bWVudCBzdHJp Y3RfZmxleF9hcnJheSBhdHRyaWJ1dGUuDQo+PiAJKiBkb2MvaW52b2tlLnRleGk6IERvY3VtZW50 IC1mc3RyaWN0LWZsZXgtYXJyYXlbPW5dIG9wdGlvbi4NCj4+IAkqIHRyZWUtY29yZS5oIChzdHJ1 Y3QgdHJlZV9kZWNsX2NvbW1vbik6IE5ldyBiaXQgZmllbGQNCj4+IAlkZWNsX25vdF9mbGV4YXJy YXkuDQo+PiAJKiB0cmVlLmNjIChjb21wb25lbnRfcmVmX3NpemUpOiBSZW9yZyBieSB1c2luZyBu ZXcgdXRpbGl0eSBmdW5jdGlvbnMuDQo+PiAJKGZsZXhpYmxlX2FycmF5X21lbWJlcl9wKTogTmV3 IGZ1bmN0aW9uLg0KPj4gCSh6ZXJvX2xlbmd0aF9hcnJheV9wKTogTGlrZXdpc2UuDQo+PiAJKG9u ZV9lbGVtZW50X2FycmF5X3ApOiBMaWtld2lzZS4NCj4+IAkoZmxleGlibGVfYXJyYXlfdHlwZV9w KTogTGlrZXdpc2UuDQo+PiAJKiB0cmVlLmggKERFQ0xfTk9UX0ZMRVhBUlJBWSk6IE5ldyBmbGFn Lg0KPj4gCSh6ZXJvX2xlbmd0aF9hcnJheV9wKTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZS4NCj4+ IAkob25lX2VsZW1lbnRfYXJyYXlfcCk6IExpa2V3aXNlLg0KPj4gCShmbGV4aWJsZV9hcnJheV9t ZW1iZXJfcCk6IExpa2V3aXNlLg0KPj4gDQo+PiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4+ IA0KPj4gCSogZ2NjLmRnL3N0cmljdC1mbGV4LWFycmF5LTEuYzogTmV3IHRlc3QuDQo+PiAtLS0N Cj4+IGdjYy9jLWZhbWlseS9jLWF0dHJpYnMuY2MgICAgICAgICAgICAgICAgICB8ICA0NyArKysr KysrKw0KPj4gZ2NjL2MtZmFtaWx5L2Mub3B0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3 ICsrDQo+PiBnY2MvYy9jLWRlY2wuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTEg KysrKysrKysrKysrKy0tDQo+PiBnY2MvZG9jL2V4dGVuZC50ZXhpICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMjUgKysrKw0KPj4gZ2NjL2RvYy9pbnZva2UudGV4aSAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDI3ICsrKystDQo+PiBnY2MvdGVzdHN1aXRlL2djYy5kZy9zdHJpY3QtZmxleC1h cnJheS0xLmMgfCAgMzEgKysrKysNCj4+IGdjYy90cmVlLWNvcmUuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgNSArLQ0KPj4gZ2NjL3RyZWUuY2MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKysrLS0tLS0tLQ0KPj4gZ2NjL3RyZWUuaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrLQ0KPj4gOSBmaWxlcyBjaGFuZ2Vk LCAzMjIgaW5zZXJ0aW9ucygrKSwgNTcgZGVsZXRpb25zKC0pDQo+PiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RyaWN0LWZsZXgtYXJyYXktMS5jDQo+PiANCj4+IGRp ZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmNjIGIvZ2NjL2MtZmFtaWx5L2MtYXR0 cmlicy5jYw0KPj4gaW5kZXggYzhkOTY3MjNmNGMuLjEwZDE2NTMyZjBkIDEwMDY0NA0KPj4gLS0t IGEvZ2NjL2MtZmFtaWx5L2MtYXR0cmlicy5jYw0KPj4gKysrIGIvZ2NjL2MtZmFtaWx5L2MtYXR0 cmlicy5jYw0KPj4gQEAgLTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgdHJlZSBoYW5kbGVfc3BlY2lh bF92YXJfc2VjX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7DQo+ PiBzdGF0aWMgdHJlZSBoYW5kbGVfYWxpZ25lZF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJl ZSwgaW50LCBib29sICopOw0KPj4gc3RhdGljIHRyZWUgaGFuZGxlX3dhcm5faWZfbm90X2FsaWdu ZWRfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsDQo+PiAJCQkJCQkgIGludCwgYm9vbCAq KTsNCj4+ICtzdGF0aWMgdHJlZSBoYW5kbGVfc3RyaWN0X2ZsZXhfYXJyYXlfYXR0cmlidXRlICh0 cmVlICosIHRyZWUsIHRyZWUsDQo+PiArCQkJCQkJaW50LCBib29sICopOw0KPj4gc3RhdGljIHRy ZWUgaGFuZGxlX3dlYWtfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAq KSA7DQo+PiBzdGF0aWMgdHJlZSBoYW5kbGVfbm9wbHRfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKSA7DQo+PiBzdGF0aWMgdHJlZSBoYW5kbGVfYWxpYXNfaWZ1bmNf YXR0cmlidXRlIChib29sLCB0cmVlICosIHRyZWUsIHRyZWUsIGJvb2wgKik7DQo+PiBAQCAtMzY3 LDYgKzM2OSw4IEBAIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHRyaWJ1 dGVfdGFibGVbXSA9DQo+PiAJICAgICAgICAgICAgICAgICAgICAgIGF0dHJfYWxpZ25lZF9leGNs dXNpb25zIH0sDQo+PiAgeyAid2Fybl9pZl9ub3RfYWxpZ25lZCIsICAgIDAsIDEsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLA0KPj4gCQkJICAgICAgaGFuZGxlX3dhcm5faWZfbm90X2FsaWdu ZWRfYXR0cmlidXRlLCBOVUxMIH0sDQo+PiArICB7ICJzdHJpY3RfZmxleF9hcnJheSIsICAgICAg MSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsDQo+PiArCQkJICAgICAgaGFuZGxlX3N0 cmljdF9mbGV4X2FycmF5X2F0dHJpYnV0ZSwgTlVMTCB9LA0KPj4gIHsgIndlYWsiLCAgICAgICAg ICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwNCj4+IAkJCSAgICAg IGhhbmRsZV93ZWFrX2F0dHJpYnV0ZSwgTlVMTCB9LA0KPj4gIHsgIm5vcGx0IiwgICAgICAgICAg ICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsDQo+PiBAQCAtMjQ5OCw2 ICsyNTAyLDQ5IEBAIGhhbmRsZV93YXJuX2lmX25vdF9hbGlnbmVkX2F0dHJpYnV0ZSAodHJlZSAq bm9kZSwgdHJlZSBuYW1lLA0KPj4gCQkJCQkgIG5vX2FkZF9hdHRycywgdHJ1ZSk7DQo+PiB9DQo+ PiANCj4+ICsvKiBIYW5kbGUgYSAic3RyaWN0X2ZsZXhfYXJyYXkiIGF0dHJpYnV0ZTsgYXJndW1l bnRzIGFzIGluDQo+PiArICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLw0KPj4g Kw0KPj4gK3N0YXRpYyB0cmVlDQo+PiAraGFuZGxlX3N0cmljdF9mbGV4X2FycmF5X2F0dHJpYnV0 ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLA0KPj4gKwkJCQkgICAgdHJlZSBhcmdzLCBpbnQgQVJH X1VOVVNFRCAoZmxhZ3MpLA0KPj4gKwkJCQkgICAgYm9vbCAqbm9fYWRkX2F0dHJzKQ0KPj4gK3sN Cj4+ICsgIHRyZWUgZGVjbCA9ICpub2RlOw0KPj4gKyAgdHJlZSBhcmd2YWwgPSBUUkVFX1ZBTFVF IChhcmdzKTsNCj4+ICsNCj4+ICsgIC8qIFRoaXMgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0byBm aWVsZCBkZWNscyBvZiBhIHN0cnVjdHVyZS4gICovDQo+PiArICBpZiAoVFJFRV9DT0RFIChkZWNs KSAhPSBGSUVMRF9ERUNMKQ0KPj4gKyAgICB7DQo+PiArICAgICAgZXJyb3JfYXQgKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChkZWNsKSwNCj4+ICsJCSIlcUUgYXR0cmlidXRlIG1heSBub3QgYmUgc3Bl Y2lmaWVkIGZvciAlcStEIiwgbmFtZSwgZGVjbCk7DQo+PiArICAgICAgKm5vX2FkZF9hdHRycyA9 IHRydWU7DQo+PiArICAgIH0NCj4+ICsgIC8qIFRoaXMgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0 byBmaWVsZCB3aXRoIGFycmF5IHR5cGUuICAqLw0KPj4gKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChU UkVFX1RZUEUgKGRlY2wpKSAhPSBBUlJBWV9UWVBFKQ0KPj4gKyAgICB7DQo+PiArICAgICAgZXJy b3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwNCj4+ICsJCSIlcUUgYXR0cmlidXRl IG1heSBub3QgYmUgc3BlY2lmaWVkIGZvciBhIG5vbiBhcnJheSBmaWVsZCIsDQo+PiArCQluYW1l KTsNCj4+ICsgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsNCj4+ICsgICAgfQ0KPj4gKyAgZWxz ZSBpZiAoVFJFRV9DT0RFIChhcmd2YWwpICE9IElOVEVHRVJfQ1NUKQ0KPj4gKyAgICB7DQo+PiAr ICAgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwNCj4+ICsJCSIlcUUg YXR0cmlidXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ2VyIiwgbmFtZSk7DQo+PiArICAgICAgKm5v X2FkZF9hdHRycyA9IHRydWU7DQo+PiArICAgIH0NCj4+ICsgIGVsc2UgaWYgKCF0cmVlX2ZpdHNf dWh3aV9wIChhcmd2YWwpIHx8IHRyZWVfdG9fdWh3aSAoYXJndmFsKSA+IDMpDQo+PiArICAgIHsN Cj4+ICsgICAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLA0KPj4gKwkJ IiVxRSBhdHRyaWJ1dGUgYXJndW1lbnQgJXFFIGlzIG5vdCBhbiBpbnRlZ2VyIGNvbnN0YW50Ig0K Pj4gKwkJIiBiZXR3ZWVuIDAgYW5kIDMiLCBuYW1lLCBhcmd2YWwpOw0KPj4gKyAgICAgICpub19h ZGRfYXR0cnMgPSB0cnVlOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICByZXR1cm4gTlVMTF9UUkVF Ow0KPj4gK30NCj4+ICsNCj4+IC8qIEhhbmRsZSBhICJ3ZWFrIiBhdHRyaWJ1dGU7IGFyZ3VtZW50 cyBhcyBpbg0KPj4gICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovDQo+PiANCj4+ IGRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQNCj4+ IGluZGV4IDQ0ZTFhNjBjZTI0Li44NjRjZDhkZjFkMyAxMDA2NDQNCj4+IC0tLSBhL2djYy9jLWZh bWlseS9jLm9wdA0KPj4gKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0DQo+PiBAQCAtMjA2MCw2ICsy MDYwLDEzIEBAIGZzaXplZC1kZWFsbG9jYXRpb24NCj4+IEMrKyBPYmpDKysgVmFyKGZsYWdfc2l6 ZWRfZGVhbGxvY2F0aW9uKSBJbml0KC0xKQ0KPj4gRW5hYmxlIEMrKzE0IHNpemVkIGRlYWxsb2Nh dGlvbiBzdXBwb3J0Lg0KPj4gDQo+PiArZnN0cmljdC1mbGV4LWFycmF5DQo+PiArQyBDKysgQ29t bW9uIEFsaWFzKGZzdHJpY3QtZmxleC1hcnJheT0sMywwKQ0KPj4gKw0KPj4gK2ZzdHJpY3QtZmxl eC1hcnJheT0NCj4+ICtDIEMrKyBDb21tb24gSm9pbmVkIFJlamVjdE5lZ2F0aXZlIFVJbnRlZ2Vy IFZhcihmbGFnX3N0cmljdF9mbGV4X2FycmF5KSBJbml0KDApIEludGVnZXJSYW5nZSgwLDMpDQo+ PiArLWZzdHJpY3QtZmxleC1hcnJheT08bGV2ZWw+ICAgIFRyZWF0IHRoZSB0cmFpbGluZyBhcnJh eSBvZiBhIHN0cnVjdHVyZSBhcyBhIGZsZXhpYmxlIGFycmF5IGluIGEgc3RyaWN0ZXIgd2F5LiAg VGhlIGRlZmF1bHQgaXMgdHJlYXRpbmcgYWxsIHRyYWlsaW5nIGFycmF5cyBvZiBzdHJ1Y3R1cmVz IGFzIGZsZXhpYmxlIGFycmF5cy4NCj4+ICsNCj4+IGZzcXVhbmdsZQ0KPj4gQysrIE9iakMrKyBX YXJuUmVtb3ZlZA0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL2MvYy1kZWNsLmNjIGIvZ2NjL2Mv Yy1kZWNsLmNjDQo+PiBpbmRleCBhZTg5OTBjMTM4Zi4uMTRkZWZhZTk1ODQgMTAwNjQ0DQo+PiAt LS0gYS9nY2MvYy9jLWRlY2wuY2MNCj4+ICsrKyBiL2djYy9jL2MtZGVjbC5jYw0KPj4gQEAgLTUw MTMsMTAgKzUwMTMsNyBAQCBhZGRfZmxleGlibGVfYXJyYXlfZWx0c190b19zaXplICh0cmVlIGRl Y2wsIHRyZWUgaW5pdCkNCj4+IA0KPj4gIGVsdCA9IENPTlNUUlVDVE9SX0VMVFMgKGluaXQpLT5s YXN0ICgpLnZhbHVlOw0KPj4gIHR5cGUgPSBUUkVFX1RZUEUgKGVsdCk7DQo+PiAtICBpZiAoVFJF RV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFDQo+PiAtICAgICAgJiYgVFlQRV9TSVpFICh0eXBl KSA9PSBOVUxMX1RSRUUNCj4+IC0gICAgICAmJiBUWVBFX0RPTUFJTiAodHlwZSkgIT0gTlVMTF9U UkVFDQo+PiAtICAgICAgJiYgVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOICh0eXBlKSkgPT0g TlVMTF9UUkVFKQ0KPj4gKyAgaWYgKGZsZXhpYmxlX2FycmF5X21lbWJlcl9wICh0eXBlKSkNCj4+ ICAgIHsNCj4+ICAgICAgY29tcGxldGVfYXJyYXlfdHlwZSAoJnR5cGUsIGVsdCwgZmFsc2UpOw0K Pj4gICAgICBERUNMX1NJWkUgKGRlY2wpDQo+PiBAQCAtODcyMCw2ICs4NzE3LDgwIEBAIGZpbmlz aF9pbmNvbXBsZXRlX3ZhcnMgKHRyZWUgaW5jb21wbGV0ZV92YXJzLCBib29sIHRvcGxldmVsKQ0K Pj4gICAgfQ0KPj4gfQ0KPj4gDQo+PiArLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEZJRUxEX0RF Q0wgWCBpcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBhY2NvcmRpbmcgdG8NCj4+ICsgICB0aGUg Zm9sbG93aW5nIGluZm86DQo+PiArICBBLiB3aGV0aGVyIHRoZSBGSUVMRF9ERUNMIFggaXMgdGhl IGxhc3QgZmllbGQgb2YgdGhlIERFQ0xfQ09OVEVYVDsNCj4+ICsgIEIuIHdoZXRoZXIgdGhlIEZJ RUxEX0RFQ0wgaXMgYW4gYXJyYXkgdGhhdCBpcyBkZWNsYXJlZCBhcyAiW10iLCAiWzBdIiwNCj4+ ICsgICAgIG9yICJbMV0iOw0KPj4gKyAgQy4gZmxhZ19zdHJpY3RfZmxleF9hcnJheTsNCj4+ICsg IEQuIHRoZSBhdHRyaWJ1dGUgc3RyaWN0X2ZsZXhfYXJyYXkgdGhhdCBpcyBhdHRhY2hlZCB0byB0 aGUgZmllbGQNCj4+ICsgICAgIGlmIHByZXNlbnRpbmcuDQo+PiArICBSZXR1cm4gVFJVRSB3aGVu IGl0J3MgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIEZBTFNFIG90aGVyd2lzZS4gICovDQo+PiAr DQo+PiArc3RhdGljIGJvb2wNCj4+ICtpc19mbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAoYm9vbCBp c19sYXN0X2ZpZWxkLA0KPj4gKwkJCSAgICB0cmVlIHgpDQo+PiArew0KPj4gKyAgLyogaWYgbm90 IHRoZSBsYXN0IGZpZWxkLCByZXR1cm4gZmFsc2UuICAqLw0KPj4gKyAgaWYgKCFpc19sYXN0X2Zp ZWxkKQ0KPj4gKyAgICByZXR1cm4gZmFsc2U7DQo+PiArDQo+PiArICAvKiBpZiBub3QgYW4gYXJy YXkgZmllbGQsIHJldHVybiBmYWxzZS4gICovDQo+PiArICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZ UEUgKHgpKSAhPSBBUlJBWV9UWVBFKQ0KPj4gKyAgICByZXR1cm4gZmFsc2U7DQo+PiArDQo+PiAr ICBib29sIGlzX3plcm9fbGVuZ3RoX2FycmF5ID0gemVyb19sZW5ndGhfYXJyYXlfcCAoVFJFRV9U WVBFICh4KSk7DQo+PiArICBib29sIGlzX29uZV9lbGVtZW50X2FycmF5ID0gb25lX2VsZW1lbnRf YXJyYXlfcCAoVFJFRV9UWVBFICh4KSk7DQo+PiArICBib29sIGlzX2ZsZXhpYmxlX2FycmF5ID0g ZmxleGlibGVfYXJyYXlfbWVtYmVyX3AgKFRSRUVfVFlQRSAoeCkpOw0KPj4gKw0KPj4gKyAgdW5z aWduZWQgaW50IHN0cmljdF9mbGV4X2FycmF5X2xldmVsID0gZmxhZ19zdHJpY3RfZmxleF9hcnJh eTsNCj4+ICsNCj4+ICsgIHRyZWUgYXR0cl9zdHJpY3RfZmxleF9hcnJheSA9IGxvb2t1cF9hdHRy aWJ1dGUgKCJzdHJpY3RfZmxleF9hcnJheSIsDQo+PiArCQkJCQkJICBERUNMX0FUVFJJQlVURVMg KHgpKTsNCj4+ICsgIC8qIGlmIHRoZXJlIGlzIGEgc3RyaWN0X2ZsZXhfYXJyYXkgYXR0cmlidXRl IGF0dGFjaGVkIHRvIHRoZSBmaWVsZCwNCj4+ICsgICAgIG92ZXJyaWRlIHRoZSBmbGFnX3N0cmlj dF9mbGV4X2FycmF5LiAgKi8NCj4+ICsgIGlmIChhdHRyX3N0cmljdF9mbGV4X2FycmF5KQ0KPj4g KyAgICB7DQo+PiArICAgICAgLyogZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgbGV2ZWwgZmlyc3QgZnJv bSB0aGUgYXR0cmlidXRlLiAgKi8NCj4+ICsgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGF0 dHJfc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwgPSAwOw0KPj4gKyAgICAgIGdjY19hc3NlcnQgKFRS RUVfVkFMVUUgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpICE9IE5VTExfVFJFRSk7DQo+PiArICAg ICAgYXR0cl9zdHJpY3RfZmxleF9hcnJheSA9IFRSRUVfVkFMVUUgKGF0dHJfc3RyaWN0X2ZsZXhf YXJyYXkpOw0KPj4gKyAgICAgIGdjY19hc3NlcnQgKFRSRUVfVkFMVUUgKGF0dHJfc3RyaWN0X2Zs ZXhfYXJyYXkpICE9IE5VTExfVFJFRSk7DQo+PiArICAgICAgYXR0cl9zdHJpY3RfZmxleF9hcnJh eSA9IFRSRUVfVkFMVUUgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpOw0KPj4gKyAgICAgIGdjY19h c3NlcnQgKHRyZWVfZml0c191aHdpX3AgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpKTsNCj4+ICsg ICAgICBhdHRyX3N0cmljdF9mbGV4X2FycmF5X2xldmVsID0gdHJlZV90b191aHdpIChhdHRyX3N0 cmljdF9mbGV4X2FycmF5KTsNCj4+ICsNCj4+ICsgICAgICAvKiB0aGUgYXR0cmlidXRlIGhhcyBo aWdoZXIgcHJpb3JpdHkgdGhhbiBmbGFnX3N0cnVjdF9mbGV4X2FycmF5LiAgKi8NCj4+ICsgICAg ICBzdHJpY3RfZmxleF9hcnJheV9sZXZlbCA9IGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWw7 DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgIHN3aXRjaCAoc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwp DQo+PiArICAgIHsNCj4+ICsgICAgICBjYXNlIDA6DQo+PiArCS8qIGRlZmF1bHQsIGFsbCB0cmFp bGluZyBhcnJheXMgYXJlIGZsZXhpYWJsZSBhcnJheSBtZW1iZXJzLiAgKi8NCj4+ICsJcmV0dXJu IHRydWU7DQo+PiArICAgICAgY2FzZSAxOg0KPj4gKwkvKiBMZXZlbCAxOiBhbGwgIlsxXSIsICJb MF0iLCBhbmQgIltdIiBhcmUgZmxleGlhYmxlIGFycmF5IG1lbWJlcnMuICAqLw0KPj4gKwlpZiAo aXNfb25lX2VsZW1lbnRfYXJyYXkpDQo+PiArCSAgcmV0dXJuIHRydWU7DQo+PiArCS8qIEZBTExU SFJPVUdILiAgKi8NCj4+ICsgICAgICBjYXNlIDI6DQo+PiArCS8qIExldmVsIDI6IGFsbCAiWzBd IiwgYW5kICJbXSIgYXJlIGZsZXhpYWJsZSBhcnJheSBtZW1iZXJzLiAgKi8NCj4+ICsJaWYgKGlz X3plcm9fbGVuZ3RoX2FycmF5KQ0KPj4gKwkgIHJldHVybiB0cnVlOw0KPj4gKwkvKiBGQUxMVEhS T1VHSC4gICovDQo+PiArICAgICAgY2FzZSAzOg0KPj4gKwkvKiBMZXZlbCAzOiBPbmx5ICJbXSIg YXJlIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuICAqLw0KPj4gKwlpZiAoaXNfZmxleGlibGVfYXJy YXkpDQo+PiArCSAgcmV0dXJuIHRydWU7DQo+PiArCWJyZWFrOw0KPj4gKyAgICAgIGRlZmF1bHQ6 DQo+PiArCWdjY191bnJlYWNoYWJsZSAoKTsNCj4+ICsgICAgfQ0KPj4gKyAgcmV0dXJuIGZhbHNl Ow0KPj4gK30NCj4+ICsNCj4+ICsNCj4+IC8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiBhIFJFQ09S RF9UWVBFIG9yIFVOSU9OX1RZUEUgbm9kZSwgVC4NCj4+ICAgTE9DIGlzIHRoZSBsb2NhdGlvbiBv ZiB0aGUgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSdzIGRlZmluaXRpb24uDQo+PiAgIEZJRUxE TElTVCBpcyBhIGNoYWluIG9mIEZJRUxEX0RFQ0wgbm9kZXMgZm9yIHRoZSBmaWVsZHMuDQo+PiBA QCAtODc4MSw2ICs4ODUyLDggQEAgZmluaXNoX3N0cnVjdCAobG9jYXRpb25fdCBsb2MsIHRyZWUg dCwgdHJlZSBmaWVsZGxpc3QsIHRyZWUgYXR0cmlidXRlcywNCj4+ICBib29sIHNhd19uYW1lZF9m aWVsZCA9IGZhbHNlOw0KPj4gIGZvciAoeCA9IGZpZWxkbGlzdDsgeDsgeCA9IERFQ0xfQ0hBSU4g KHgpKQ0KPj4gICAgew0KPj4gKyAgICAgIGJvb2wgaXNfbGFzdF9maWVsZCA9IChERUNMX0NIQUlO ICh4KSA9PSBOVUxMX1RSRUUpOw0KPj4gKw0KPj4gICAgICBpZiAoVFJFRV9UWVBFICh4KSA9PSBl cnJvcl9tYXJrX25vZGUpDQo+PiAJY29udGludWU7DQo+PiANCj4+IEBAIC04ODE5LDEwICs4ODky LDcgQEAgZmluaXNoX3N0cnVjdCAobG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJlZSBmaWVsZGxp c3QsIHRyZWUgYXR0cmlidXRlcywNCj4+IAlERUNMX1BBQ0tFRCAoeCkgPSAxOw0KPj4gDQo+PiAg ICAgIC8qIERldGVjdCBmbGV4aWJsZSBhcnJheSBtZW1iZXIgaW4gYW4gaW52YWxpZCBjb250ZXh0 LiAgKi8NCj4+IC0gICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHgpKSA9PSBBUlJBWV9U WVBFDQo+PiAtCSAgJiYgVFlQRV9TSVpFIChUUkVFX1RZUEUgKHgpKSA9PSBOVUxMX1RSRUUNCj4+ IC0JICAmJiBUWVBFX0RPTUFJTiAoVFJFRV9UWVBFICh4KSkgIT0gTlVMTF9UUkVFDQo+PiAtCSAg JiYgVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOIChUUkVFX1RZUEUgKHgpKSkgPT0gTlVMTF9U UkVFKQ0KPj4gKyAgICAgIGlmIChmbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAoVFJFRV9UWVBFICh4 KSkpDQo+PiAJew0KPj4gCSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gVU5JT05fVFlQRSkNCj4+IAkg ICAgew0KPj4gQEAgLTg4MzAsNyArODkwMCw3IEBAIGZpbmlzaF9zdHJ1Y3QgKGxvY2F0aW9uX3Qg bG9jLCB0cmVlIHQsIHRyZWUgZmllbGRsaXN0LCB0cmVlIGF0dHJpYnV0ZXMsDQo+PiAJCQkiZmxl eGlibGUgYXJyYXkgbWVtYmVyIGluIHVuaW9uIik7DQo+PiAJICAgICAgVFJFRV9UWVBFICh4KSA9 IGVycm9yX21hcmtfbm9kZTsNCj4+IAkgICAgfQ0KPj4gLQkgIGVsc2UgaWYgKERFQ0xfQ0hBSU4g KHgpICE9IE5VTExfVFJFRSkNCj4+ICsJICBlbHNlIGlmICghaXNfbGFzdF9maWVsZCkNCj4+IAkg ICAgew0KPj4gCSAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoeCksDQo+PiAJ CQkiZmxleGlibGUgYXJyYXkgbWVtYmVyIG5vdCBhdCBlbmQgb2Ygc3RydWN0Iik7DQo+PiBAQCAt ODg1MCw2ICs4OTIwLDkgQEAgZmluaXNoX3N0cnVjdCAobG9jYXRpb25fdCBsb2MsIHRyZWUgdCwg dHJlZSBmaWVsZGxpc3QsIHRyZWUgYXR0cmlidXRlcywNCj4+IAlwZWR3YXJuIChERUNMX1NPVVJD RV9MT0NBVElPTiAoeCksIE9QVF9XcGVkYW50aWMsDQo+PiAJCSAiaW52YWxpZCB1c2Ugb2Ygc3Ry dWN0dXJlIHdpdGggZmxleGlibGUgYXJyYXkgbWVtYmVyIik7DQo+PiANCj4+ICsgICAgICAvKiBT ZXQgREVDTF9OT1RfRkxFWEFSUkFZIGZsYWcgZm9yIEZJRUxEX0RFQ0wgeC4gICovDQo+PiArICAg ICAgREVDTF9OT1RfRkxFWEFSUkFZICh4KSA9ICFpc19mbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAo aXNfbGFzdF9maWVsZCwgeCk7DQo+PiArDQo+PiAgICAgIGlmIChERUNMX05BTUUgKHgpDQo+PiAJ ICB8fCBSRUNPUkRfT1JfVU5JT05fVFlQRV9QIChUUkVFX1RZUEUgKHgpKSkNCj4+IAlzYXdfbmFt ZWRfZmllbGQgPSB0cnVlOw0KPj4gZGlmZiAtLWdpdCBhL2djYy9kb2MvZXh0ZW5kLnRleGkgYi9n Y2MvZG9jL2V4dGVuZC50ZXhpDQo+PiBpbmRleCBkZmJlMzNhYzY1Mi4uNzQ1MTQxMGEwMTEgMTAw NjQ0DQo+PiAtLS0gYS9nY2MvZG9jL2V4dGVuZC50ZXhpDQo+PiArKysgYi9nY2MvZG9jL2V4dGVu ZC50ZXhpDQo+PiBAQCAtNzQzNiw2ICs3NDM2LDMxIEBAIFRoaXMgd2FybmluZyBjYW4gYmUgZGlz YWJsZWQgYnkgQG9wdGlvbnstV25vLWlmLW5vdC1hbGlnbmVkfS4NCj4+IFRoZSBAY29kZXt3YXJu X2lmX25vdF9hbGlnbmVkfSBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCBmb3IgdHlwZXMNCj4+ IChAcHhyZWZ7Q29tbW9uIFR5cGUgQXR0cmlidXRlc30uKQ0KPj4gDQo+PiArQGNpbmRleCBAY29k ZXtzdHJpY3RfZmxleF9hcnJheX0gdmFyaWFibGUgYXR0cmlidXRlDQo+PiArQGl0ZW0gc3RyaWN0 X2ZsZXhfYXJyYXkgKEB2YXJ7bGV2ZWx9KQ0KPj4gK1RoZSBAY29kZXtzdHJpY3RfZmxleF9hcnJh eX0gYXR0cmlidXRlIHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgdHJhaWxpbmcNCj4+ICthcnJh eSBmaWVsZCBvZiBhIHN0cnVjdHVyZS4gIEl0IHNwZWNpZmllcyB0aGUgbGV2ZWwgb2Ygc3RyaWN0 bmVzcyBvZg0KPj4gK3RyZWF0aW5nIHRoZSB0cmFpbGluZyBhcnJheSBmaWVsZCBvZiBhIHN0cnVj dHVyZSBhcyBhIGZsZXhpYmxlIGFycmF5DQo+PiArbWVtYmVyLiBAdmFye2xldmVsfSBtdXN0IGJl IGFuIGludGVnZXIgYmV0d2VuIDAgdG8gMy4NCj4+ICsNCj4+ICtAdmFye2xldmVsfT0wIGlzIHRo ZSBsZWFzdCBzdHJpY3QgbGV2ZWwsIGFsbCB0cmFpbGluZyBhcnJheXMgb2Ygc3RydWN0dXJlcw0K Pj4gK2FyZSB0cmVhdGVkIGFzIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuIEB2YXJ7bGV2ZWx9PTMg aXMgdGhlIHN0cmljdGVzdCBsZXZlbCwNCj4+ICtvbmx5IHdoZW4gdGhlIHRyYWlsaW5nIGFycmF5 IGlzIGRlY2xhcmVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHBlciBDOTkNCj4+ICtzdGFu ZGFyZCBvbndhcmRzIChbXSksIGl0IGlzIHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1i ZXIuDQo+IA0KPiBIb3cgaXMgbGV2ZWwgMyAodGh1cyAtZnN0cmljdC1mbGV4LWFycmF5KSBpbnRl cnByZXRlZCB3aGVuIHlvdSBzcGVjaWZ5IA0KPiAtc3RkPWM4OT8gIEhvdyBmb3IgLXN0ZD1nbnU4 OT8NCg0KMS4gd2hhdOKAmXMgdGhlIG1ham9yIGRpZmZlcmVuY2UgYmV0d2VlbiAtc3RkPWM4OSBh bmQgLXN0ZD1nbnU4OSBvbiBmbGV4aWJsZSBhcnJheT8gKENoZWNrZWQgb25saW5lLCBjYW5ub3Qg ZmluZCBhIGNvbmNyZXRlIGFuc3dlciBvbiB0aGlzKS4NCgkqKiBteSB1bmRlcnN0YW5kaW5nIGlz OiAgIC1zdGQ9Yzg5IHdpbGwgbm90IHN1cHBvcnQgYW55IGZsZXhpYmxlIGFycmF5IChuZWl0aGVy IFtdLCBbMF0sIFsxXSksIGJ1dCAtc3RkPWdudTg5IHdpbGwgc3VwcG9ydCBbMF0gYW5kIFsxXSwg YnV0IG5vdCBbXS4NCiAgICAgICAgIElzIHRoaXMgY29ycmVjdD8NCiANCklmIG15IGFuc3dlciB0 byB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgY29ycmVjdCwgdGhlbjoNCg0KMi4gV2hlbiAtZnN0cmlj dC1mbGV4LWFycmF5PW4gYW5kIC1zdGQ9Yzg5IHByZXNlbnQgYXQgdGhlIHNhbWUgdGltZSwgd2hp Y2ggb25lIGhhcyB0aGUgaGlnaGVyIHByaW9yaXR5PyANCiAgICAgCSoqIEkgdGhpbmsgdGhhdCAt c3RkPWM4OSBzaG91bGQgYmUgaG9ub3JlZCBvdmVyIC1mc3RyaWN0LWZsZXgtYXJyYXksIHRoZXJl Zm9yZSB3ZSBzaG91bGQgZGlzYWJsZSAtZnN0cmljdC1mbGV4LWFycmF5PW4gd2hlbiBuID4gMCAg YW5kIGlzc3VlIHdhcm5pbmdzIHRvIHRoZSB1c2VyLg0KDQoNCjMuIGhvdyBhYm91dCAtZnN0cmlj dC1mbGV4LWFycmF5PW4gYW5kIC1zdGQ9Z251ODkgcHJlc2VudCBhdCB0aGUgc2FtZSB0aW1lPyAN CiAgICAgCSoqIFdoZW4gLXN0ZD1nbnU4OSBwcmVzZW50LCBbXSBpcyBub3Qgc3VwcG9ydGVkLiBT bywgd2UgbmVlZCB0byBpc3N1ZSBhbiB3YXJuaW5nIHRvIGRpc2FibGUgLWZzdHJpY3QtZmxleC1h cnJheT0zOyBidXQgbGV2ZWwgMSBhbmQgbGV2ZWwgMiBpcyBPa2F5Lg0KDQpXZSBhbHNvIG5lZWQg dG8gZG9jdW1lbnQgdGhlIGFib3ZlLg0KDQpMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgbW9y ZSBjb21tZW50IGFuZCBzdWdnZXN0aW9ucyBoZXJlLg0KDQo+IA0KPj4gKw0KPj4gK1RoZXJlIGFy ZSB0d28gbW9yZSBsZXZlbHMgaW4gYmV0d2VlbiAwIGFuZCAzLCB3aGljaCBhcmUgcHJvdmlkZWQg dG8gc3VwcG9ydA0KPj4gK29sZGVyIGNvZGVzIHRoYXQgdXNlIEdDQyB6ZXJvLWxlbmd0aCBhcnJh eSBleHRlbnNpb24gKFswXSkgb3Igb25lLXNpemUgYXJyYXkNCj4+ICthcyBmbGV4aWJsZSBhcnJh eSBtZW1iZXIgKFsxXSk6DQo+PiArV2hlbiBAdmFye2xldmVsfSBpcyAxLCB0aGUgdHJhaWxpbmcg YXJyYXkgaXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlcg0KPj4gK3doZW4gaXQg aXMgZGVjbGFyZWQgYXMgZWl0aGVyICJbXSIsICJbMF0iLCBvciAiWzFdIjsNCj4+ICtXaGVuIEB2 YXJ7bGV2ZWx9IGlzIDIsIHRoZSB0cmFpbGluZyBhcnJheSBpcyB0cmVhdGVkIGFzIGEgZmxleGli bGUgYXJyYXkgbWVtYmVyDQo+PiArd2hlbiBpdCBpcyBkZWNsYXJlZCBhcyBlaXRoZXIgIltdIiwg b3IgIlswXSIuDQo+IA0KPiBHaXZlbiB0aGUgYWJvdmUgZG9lcyBhZGRpbmcgbGV2ZWwgMiBtYWtl IHNlbnNlIGdpdmVuIHRoYXQgWzBdIGlzIGEgR05VDQo+IGV4dGVuc2lvbj8NCkkgdGhpbmsgS2Vl cyBhbHJlYWR5IGFuc3dlcmVkIHRoaXMgcXVlc3Rpb24uDQo+IA0KPj4gK1RoaXMgYXR0cmlidXRl IGNhbiBiZSB1c2VkIHdpdGggb3Igd2l0aG91dCBAb3B0aW9uey1mc3RyaWN0LWZsZXgtYXJyYXl9 LiBXaGVuDQo+PiArYm90aCB0aGUgYXR0cmlidXRlIGFuZCB0aGUgb3B0aW9uIHByZXNlbnQgYXQg dGhlIHNhbWUgdGltZSwgdGhlIGxldmVsIG9mIHRoZQ0KPj4gK3N0cmljdG5lc3MgZm9yIHRoZSBz cGVjaWZpYyB0cmFpbGluZyBhcnJheSBmaWVsZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhdHRyaWJ1 dGUuDQo+PiArDQo+PiArDQo+PiBAaXRlbSBhbGxvY19zaXplIChAdmFye3Bvc2l0aW9ufSkNCj4+ IEBpdGVteCBhbGxvY19zaXplIChAdmFye3Bvc2l0aW9uLTF9LCBAdmFye3Bvc2l0aW9uLTJ9KQ0K Pj4gQGNpbmRleCBAY29kZXthbGxvY19zaXplfSB2YXJpYWJsZSBhdHRyaWJ1dGUNCj4+IGRpZmYg LS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQ0KPj4gaW5k ZXggOTRmZTU3YWE0ZTIuLjliZWZlNjAxODE3IDEwMDY0NA0KPj4gLS0tIGEvZ2NjL2RvYy9pbnZv a2UudGV4aQ0KPj4gKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQ0KPj4gQEAgLTIwNyw3ICsyMDcs OCBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLg0KPj4gLWZvcGVubXAgIC1mb3Blbm1wLXNp bWQgQGdvbA0KPj4gLWZwZXJtaXR0ZWQtZmx0LWV2YWwtbWV0aG9kcz1AdmFye3N0YW5kYXJkfSBA Z29sDQo+PiAtZnBsYW45LWV4dGVuc2lvbnMgIC1mc2lnbmVkLWJpdGZpZWxkcyAgLWZ1bnNpZ25l ZC1iaXRmaWVsZHMgQGdvbA0KPj4gLS1mc2lnbmVkLWNoYXIgIC1mdW5zaWduZWQtY2hhciAgLWZz c28tc3RydWN0PUB2YXJ7ZW5kaWFubmVzc319DQo+PiArLWZzaWduZWQtY2hhciAgLWZ1bnNpZ25l ZC1jaGFyIC1mc3RyaWN0LWZsZXgtYXJyYXlbPUB2YXJ7bn1dIEBnb2wNCj4+ICstZnNzby1zdHJ1 Y3Q9QHZhcntlbmRpYW5uZXNzfX0NCj4+IA0KPj4gQGl0ZW0gQysrIExhbmd1YWdlIE9wdGlvbnMN Cj4+IEB4cmVme0MrKyBEaWFsZWN0IE9wdGlvbnMsLE9wdGlvbnMgQ29udHJvbGxpbmcgQysrIERp YWxlY3R9Lg0KPj4gQEAgLTI4MjUsNiArMjgyNiwzMCBAQCBUaGUgdHlwZSBAY29kZXtjaGFyfSBp cyBhbHdheXMgYSBkaXN0aW5jdCB0eXBlIGZyb20gZWFjaCBvZg0KPj4gQGNvZGV7c2lnbmVkIGNo YXJ9IG9yIEBjb2Rle3Vuc2lnbmVkIGNoYXJ9LCBldmVuIHRob3VnaCBpdHMgYmVoYXZpb3INCj4+ IGlzIGFsd2F5cyBqdXN0IGxpa2Ugb25lIG9mIHRob3NlIHR3by4NCj4+IA0KPj4gK0BpdGVtIC1m c3RyaWN0LWZsZXgtYXJyYXkNCj4+ICtAb3BpbmRleCBmc3RyaWN0LWZsZXgtYXJyYXkNCj4+ICtA b3BpbmRleCBmbm8tc3RyaWN0LWZsZXgtYXJyYXkNCj4+ICtUcmVhdCB0aGUgdHJhaWxpbmcgYXJy YXkgb2YgYSBzdHJ1Y3R1cmUgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgaW4gYQ0KPj4gK3N0 cmljdGVyIHdheS4NCj4+ICtUaGUgcG9zaXRpdmUgZm9ybSBpcyBlcXVpdmFsZW50IHRvIEBvcHRp b257LWZzdHJpY3QtZmxleC1hcnJheT0zfSwgd2hpY2ggaXMgdGhlDQo+PiArc3RyaWN0ZXN0LiAg QSB0cmFpbGluZyBhcnJheSBpcyB0cmVhdGVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIG9u bHkgd2hlbiBpdA0KPj4gK2lzIGRlY2xhcmVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHBl ciBDOTkgc3RhbmRhcmQgb253YXJkcy4NCj4+ICtUaGUgbmVnYXRpdmUgZm9ybSBpcyBlcXVpdmFs ZW50IHRvIEBvcHRpb257LWZzdHJpY3QtZmxleC1hcnJheT0wfSwgd2hpY2ggaXMgdGhlDQo+PiAr bGVhc3Qgc3RyaWN0LiAgQWxsIHRyYWlsaW5nIGFycmF5cyBvZiBzdHJ1Y3R1cmVzIGFyZSB0cmVh dGVkIGFzIGZsZXhpYmxlIGFycmF5DQo+PiArbWVtYmVycy4NCj4+ICsNCj4+ICtAaXRlbSAtZnN0 cmljdC1mbGV4LWFycmF5PUB2YXJ7bGV2ZWx9DQo+PiArQG9waW5kZXggZnN0cmljdC1mbGV4LWFy cmF5PUB2YXJ7bGV2ZWx9DQo+PiArVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0 dXJlIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIGENCj4+ICtzdHJpY3RlciB3YXkuICBU aGUgdmFsdWUgb2YgQHZhcntsZXZlbH0gY29udHJvbHMgdGhlIGxldmVsIG9mIHN0cmljdG5lc3Mu DQo+PiArDQo+PiArVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBAdmFye2xldmVsfSBhcmUgdGhlIHNh bWUgYXMgZm9yIHRoZQ0KPj4gK0Bjb2Rle3N0cmljdF9mbGV4X2FycmF5fSBhdHRyaWJ1dGUgKEBw eHJlZntWYXJpYWJsZSBBdHRyaWJ1dGVzfSkuDQo+PiArDQo+PiArWW91IGNhbiBjb250cm9sIHRo aXMgYmVoYXZpb3IgZm9yIGEgc3BlY2lmaWMgdHJhaWxpbmcgYXJyYXkgZmllbGQgb2YgYQ0KPj4g K3N0cnVjdHVyZSBieSB1c2luZyB0aGUgdmFyaWFibGUgYXR0cmlidXRlIEBjb2Rle3N0cmljdF9m bGV4X2FycmF5fSBhdHRyaWJ1dGUNCj4+ICsoQHB4cmVme1ZhcmlhYmxlIEF0dHJpYnV0ZXN9KS4N Cj4+ICsNCj4+IEBpdGVtIC1mc3NvLXN0cnVjdD1AdmFye2VuZGlhbm5lc3N9DQo+PiBAb3BpbmRl eCBmc3NvLXN0cnVjdA0KPj4gU2V0IHRoZSBkZWZhdWx0IHNjYWxhciBzdG9yYWdlIG9yZGVyIG9m IHN0cnVjdHVyZXMgYW5kIHVuaW9ucyB0byB0aGUNCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy9zdHJpY3QtZmxleC1hcnJheS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9z dHJpY3QtZmxleC1hcnJheS0xLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAw MDAwMDAwMDAwMC4uZWM4ODZjOTliMjUNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3N0cmljdC1mbGV4LWFycmF5LTEuYw0KPj4gQEAgLTAsMCArMSwzMSBA QA0KPj4gKy8qIHRlc3RpbmcgdGhlIGNvcnJlY3QgdXNhZ2Ugb2YgYXR0cmlidXRlIHN0cmljdF9m bGV4X2FycmF5LiAgKi8gICANCj4+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPj4gKy8qIHsg ZGctb3B0aW9ucyAiLU8yIiB9ICovDQo+PiArDQo+PiArDQo+PiAraW50IHggX19hdHRyaWJ1dGVf XyAoKHN0cmljdF9mbGV4X2FycmF5ICgxKSkpOyAvKiB7IGRnLWVycm9yICInc3RyaWN0X2ZsZXhf YXJyYXknIGF0dHJpYnV0ZSBtYXkgbm90IGJlIHNwZWNpZmllZCBmb3IgJ3gnIiB9ICovDQo+PiAr DQo+PiArc3RydWN0IHRyYWlsaW5nIHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBjIF9f YXR0cmlidXRlICgoc3RyaWN0X2ZsZXhfYXJyYXkpKTsgLyogeyBkZy1lcnJvciAid3JvbmcgbnVt YmVyIG9mIGFyZ3VtZW50cyBzcGVjaWZpZWQgZm9yICdzdHJpY3RfZmxleF9hcnJheScgYXR0cmli dXRlIiB9ICovDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfMSB7DQo+PiArICAg IGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGMgX19hdHRyaWJ1dGUgKChzdHJp Y3RfZmxleF9hcnJheSAoMikpKTsgLyogeyBkZy1lcnJvciAiJ3N0cmljdF9mbGV4X2FycmF5JyBh dHRyaWJ1dGUgbWF5IG5vdCBiZSBzcGVjaWZpZWQgZm9yIGEgbm9uIGFycmF5IGZpZWxkIiB9ICov DQo+PiArfTsNCj4+ICsNCj4+ICtleHRlcm4gaW50IGQ7DQo+PiArDQo+PiArc3RydWN0IHRyYWls aW5nX2FycmF5XzIgew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGlu dCBjWzFdIF9fYXR0cmlidXRlICgoc3RyaWN0X2ZsZXhfYXJyYXkgKGQpKSk7IC8qIHsgZGctZXJy b3IgIidzdHJpY3RfZmxleF9hcnJheScgYXR0cmlidXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ2Vy IiB9ICovDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyB7DQo+PiAr ICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbMF0gX19hdHRyaWJ1dGUg KChzdHJpY3RfZmxleF9hcnJheSAoNSkpKTsgLyogeyBkZy1lcnJvciAiJ3N0cmljdF9mbGV4X2Fy cmF5JyBhdHRyaWJ1dGUgYXJndW1lbnQgJzUnIGlzIG5vdCBhbiBpbnRlZ2VyIGNvbnN0YW50IGJl dHdlZW4gMCBhbmQgMyIgfSAqLw0KPj4gK307DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY29y ZS5oIGIvZ2NjL3RyZWUtY29yZS5oDQo+PiBpbmRleCBlYTlmMjgxZjFjYy4uNDU4YzZlNmNlZWEg MTAwNjQ0DQo+PiAtLS0gYS9nY2MvdHJlZS1jb3JlLmgNCj4+ICsrKyBiL2djYy90cmVlLWNvcmUu aA0KPj4gQEAgLTE4MTMsNyArMTgxMywxMCBAQCBzdHJ1Y3QgR1RZKCgpKSB0cmVlX2RlY2xfY29t bW9uIHsNCj4+ICAgICBUWVBFX1dBUk5fSUZfTk9UX0FMSUdOLiAgKi8NCj4+ICB1bnNpZ25lZCBp bnQgd2Fybl9pZl9ub3RfYWxpZ24gOiA2Ow0KPj4gDQo+PiAtICAvKiAxNCBiaXRzIHVudXNlZC4g ICovDQo+PiArICAvKiBJbiBGSUVMRF9ERUNMLCB0aGlzIGlzIERFQ0xfTk9UX0ZMRVhBUlJBWS4g ICovDQo+PiArICB1bnNpZ25lZCBpbnQgZGVjbF9ub3RfZmxleGFycmF5IDogMTsNCj4+ICsNCj4+ ICsgIC8qIDEzIGJpdHMgdW51c2VkLiAgKi8NCj4gDQo+IEkndmUgbm90IHNlZW4gaXQgc28geW91 IGFyZSBwcm9iYWJseSBtaXNzaW5nIGl0IC0gdGhlIGJpdCBoYXMgdG8gYmUNCj4gc3RyZWFtZWQg aW4gdHJlZS1zdHJlYW1lci17aW4sb3V0fS5jYyB0byBiZSB1c2FibGUgZnJvbSBMVE8uDQoNCllv dSBtZWFuIGFkZCBpdCB0byB0aGUgcm91dGluZSDigJx1bnBhY2tfdHNfZGVjbF9jb21tb25fdmFs dWVfZmllbGRz4oCdIG9mIHRyZWUtc3RyZWFtZXItaW4uY2MNCkFuZCDigJxwYWNrX3RzX2RlY2xf Y29tbW9uX3ZhbHVlX2ZpZWxkc+KAnSBvZiB0cmVlLXN0cmVhbWVyLW91dC5jYz8NCg0KDQo+IEMr KyBtb2R1bGUgc3RyZWFtaW5nIGFsc28gbmVlZHMgdG8gaGFuZGxlIGl0Lg0KDQpXaGljaCBmaWxl IGlzIGZvciB0aGlzIEMrKyBtb2R1bGUgc3RyZWFtaW5nPw0KDQo+IA0KPj4gDQo+PiAgLyogVUlE IGZvciBwb2ludHMtdG8gc2V0cywgc3RhYmxlIG92ZXIgY29weWluZyBmcm9tIGlubGluaW5nLiAg Ki8NCj4+ICB1bnNpZ25lZCBpbnQgcHRfdWlkOw0KPj4gZGlmZiAtLWdpdCBhL2djYy90cmVlLmNj IGIvZ2NjL3RyZWUuY2MNCj4+IGluZGV4IDg0MDAwZGQ4YjY5Li4wMmUyNzQ2OTlmYiAxMDA2NDQN Cj4+IC0tLSBhL2djYy90cmVlLmNjDQo+PiArKysgYi9nY2MvdHJlZS5jYw0KPj4gQEAgLTEyODYy LDcgKzEyODYyLDcgQEAgZ2V0X2luaXRpYWxpemVyX2ZvciAodHJlZSBpbml0LCB0cmVlIGRlY2wp DQo+PiAvKiBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIgcmVmZXJlbmNlZCBieSB0 aGUgQ09NUE9ORU5UX1JFRg0KPj4gICBSRUYsIHVzaW5nIGl0cyBpbml0aWFsaXplciBleHByZXNz aW9uIGlmIG5lY2Vzc2FyeSBpbiBvcmRlciB0bw0KPj4gICBkZXRlcm1pbmUgdGhlIHNpemUgb2Yg YW4gaW5pdGlhbGl6ZWQgZmxleGlibGUgYXJyYXkgbWVtYmVyLg0KPj4gLSAgIElmIG5vbi1udWxs LCBzZXQgKkFSSyB3aGVuIFJFRiByZWZlcnMgdG8gYW4gaW50ZXJpb3IgemVyby1sZW5ndGgNCj4+ ICsgICBJZiBub24tbnVsbCwgc2V0ICpTQU0gd2hlbiBSRUYgcmVmZXJzIHRvIGFuIGludGVyaW9y IHplcm8tbGVuZ3RoDQo+PiAgIGFycmF5IG9yIGEgdHJhaWxpbmcgb25lLWVsZW1lbnQgYXJyYXku DQo+PiAgIFJldHVybnMgdGhlIHNpemUgYXMgc2l6ZXR5cGUgKHdoaWNoIG1pZ2h0IGJlIHplcm8g Zm9yIGFuIG9iamVjdA0KPj4gICB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgZmxleGlibGUgYXJyYXkg bWVtYmVyKSBvciBudWxsIGlmIHRoZSBzaXplDQo+PiBAQCAtMTI4NzgsMTYgKzEyODc4LDMyIEBA IGNvbXBvbmVudF9yZWZfc2l6ZSAodHJlZSByZWYsIHNwZWNpYWxfYXJyYXlfbWVtYmVyICpzYW0g LyogPSBOVUxMICovKQ0KPj4gICAgc2FtID0gJnNhbWJ1ZjsNCj4+ICAqc2FtID0gc3BlY2lhbF9h cnJheV9tZW1iZXI6Om5vbmU7DQo+PiANCj4+ICsgIC8qIFdoZXRoZXIgdGhpcyByZWYgaXMgYW4g YXJyYXkgYXQgdGhlIGVuZCBvZiBhIHN0cnVjdHVyZS4gICovDQo+PiArICBib29sIHRyYWlsaW5n ID0gYXJyYXlfYXRfc3RydWN0X2VuZF9wIChyZWYpOw0KPj4gKw0KPiANCj4gYWN0dWFsbHkgYXJy YXlfYXRfc3RydWN0X2VuZF9wIHJldHVybnMgd2hldGhlciByZWYgcG9zc2libHkgcmVmZXJzIHRv DQo+IGEgdHJhaWxpbmcgYXJyYXkuICBJbiBwYXJ0aWN1bGFyIGl0IG1heSByZXR1cm4gZmFsc2Ug Zm9yIGFycmF5cyBhdA0KPiBzdHJ1Y3QgZW5kIHdpdGggYSBrbm93biBsZW5ndGggYXMgaW4gYS5i W2ldIGZvciB0aGUgcmVmZXJlbmNlIHRvIGdsb2JhbCANCj4gJ2EnOg0KPiANCj4gc3RydWN0IHsg aW50IGJbMV07IH0gYTsNCg0KWWVzLCBJIG5vdGljZWQgdGhpcyBiZWhhdmlvciBkdXJpbmcgbXkg cmVjZW50IGRlYnVnZ2luZyBvZiB0aGlzIHJvdXRpbmUuIEkgdGhvdWdodCBpdOKAmXMgYSBidWcg YW5kIHBsYW5uZWQgdG8gZmlsZSBhbm90aGVyIGJ1ZyBhZ2FpbnN0IGl0Lg0KTG9va3MgbGlrZSB0 aGF0IHRoaXMgaXMgYW4gZXhwZWN0ZWQgYmVoYXZpb3IuDQoNClRoZW4gSSByZWFsbHkgZmVlbCB0 aGUgbmFtZSBhbmQgdGhlIGNvbW1lbnRzIG9mIHRoZSByb3V0aW5lIGlzIHZlcnkgY29uZnVzaW5n 4oCmDQpTaGFsbCB3ZSBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIHRvIGEgbW9yZSBk ZXNjcmlwdGl2ZSBvbmU/IEZvciBleGFtcGxlLCDigJxmbGV4aWJsZV9hcnJheV9tZW1iZXJfcOKA nT8gDQo+IA0KPiBzbyBpbiB0aGUgZW5kIGl0IHNob3VsZCBiZSBhcnJheV9hdF9zdHJ1Y3RfZW5k X3AgYWxzbyBob25vcmluZw0KPiBERUNMX05PVF9GTEVYQVJSQVkuDQoNClRoZW4gaXTigJlzIG1h a2UgbW9yZSBzZW5zZSB0byBjaGVjayBERUNMX05PVF9GTEVYQVJSQVkgaW5zaWRlIHRoaXMgdXRp bGl0eSByb3V0aW5lPw0KPiANCj4+ICAvKiBUaGUgb2JqZWN0L2FyZ3VtZW50IHJlZmVyZW5jZWQg YnkgdGhlIENPTVBPTkVOVF9SRUYgYW5kIGl0cyB0eXBlLiAgKi8NCj4+ICB0cmVlIGFyZyA9IFRS RUVfT1BFUkFORCAocmVmLCAwKTsNCj4+ICB0cmVlIGFyZ3R5cGUgPSBUUkVFX1RZUEUgKGFyZyk7 DQo+PiAtICAvKiBUaGUgcmVmZXJlbmNlZCBtZW1iZXIuICAqLw0KPj4gLSAgdHJlZSBtZW1iZXIg PSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7DQo+PiANCj4+ICsgIC8qIFRoZSByZWZlcmVuY2VkIGZp ZWxkIG1lbWJlci4gICovDQo+PiArICB0cmVlIG1lbWJlciA9IFRSRUVfT1BFUkFORCAocmVmLCAx KTsNCj4+ICsgIHRyZWUgbWVtdHlwZSA9IFRSRUVfVFlQRSAobWVtYmVyKTsNCj4+ICB0cmVlIG1l bXNpemUgPSBERUNMX1NJWkVfVU5JVCAobWVtYmVyKTsNCj4+ICsNCj4+ICsgIGJvb2wgaXNfemVy b19sZW5ndGhfYXJyYXlfcmVmID0gemVyb19sZW5ndGhfYXJyYXlfcCAobWVtdHlwZSk7DQo+PiAr ICBib29sIGlzX2NvbnN0YW50X2xlbmd0aF9hcnJheV9yZWYgPSBmYWxzZTsNCj4+ICsgIGJvb2wg aXNfb25lX2VsZW1lbnRfYXJyYXlfcmVmDQo+PiArCT0gb25lX2VsZW1lbnRfYXJyYXlfcCAobWVt dHlwZSwgJmlzX2NvbnN0YW50X2xlbmd0aF9hcnJheV9yZWYpOw0KPj4gKw0KPj4gKyAgLyogRGV0 ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWFsIGFycmF5IG1lbWJlci4gICovDQo+PiArICBp ZiAoaXNfemVyb19sZW5ndGhfYXJyYXlfcmVmKQ0KPj4gKyAgICAqc2FtID0gdHJhaWxpbmcgPyBz cGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMA0KPj4gKwkgICA6IHNwZWNpYWxfYXJyYXlfbWVt YmVyOjppbnRfMDsNCj4+ICsgIGVsc2UgaWYgKGlzX29uZV9lbGVtZW50X2FycmF5X3JlZiAmJiB0 cmFpbGluZykNCj4+ICsgICAgKnNhbSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8xOw0K Pj4gKw0KPj4gIGlmIChtZW1zaXplKQ0KPj4gICAgew0KPj4gLSAgICAgIHRyZWUgbWVtdHlwZSA9 IFRSRUVfVFlQRSAobWVtYmVyKTsNCj4+ICAgICAgaWYgKFRSRUVfQ09ERSAobWVtdHlwZSkgIT0g QVJSQVlfVFlQRSkNCj4+IAkvKiBERUNMX1NJWkUgbWF5IGJlIGxlc3MgdGhhbiBUWVBFX1NJWkUg aW4gQysrIHdoZW4gcmVmZXJyaW5nDQo+PiAJICAgdG8gdGhlIHR5cGUgb2YgYSBjbGFzcyB3aXRo IGEgdmlydHVhbCBiYXNlIHdoaWNoIGRvZXNuJ3QNCj4+IEBAIC0xMjg5Nyw1MCArMTI5MTMsMzAg QEAgY29tcG9uZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNh bSAvKiA9IE5VTEwgKi8pDQo+PiAJcmV0dXJuICh0cmVlX2ludF9jc3RfZXF1YWwgKG1lbXNpemUs IFRZUEVfU0laRV9VTklUIChtZW10eXBlKSkNCj4+IAkJPyBtZW1zaXplIDogTlVMTF9UUkVFKTsN Cj4+IA0KPj4gLSAgICAgIGJvb2wgdHJhaWxpbmcgPSBhcnJheV9hdF9zdHJ1Y3RfZW5kX3AgKHJl Zik7DQo+PiAtICAgICAgYm9vbCB6ZXJvX2xlbmd0aCA9IGludGVnZXJfemVyb3AgKG1lbXNpemUp Ow0KPj4gLSAgICAgIGlmICghdHJhaWxpbmcgJiYgIXplcm9fbGVuZ3RoKQ0KPj4gKyAgICAgIGlm ICghdHJhaWxpbmcgJiYgIWlzX3plcm9fbGVuZ3RoX2FycmF5X3JlZikNCj4+IAkvKiBNRU1CRVIg aXMgZWl0aGVyIGFuIGludGVyaW9yIGFycmF5IG9yIGlzIGFuIGFycmF5IHdpdGgNCj4+IAkgICBt b3JlIHRoYW4gb25lIGVsZW1lbnQuICAqLw0KPj4gCXJldHVybiBtZW1zaXplOw0KPj4gDQo+PiAt ICAgICAgaWYgKHplcm9fbGVuZ3RoKQ0KPj4gLQl7DQo+PiAtCSAgaWYgKHRyYWlsaW5nKQ0KPj4g LQkgICAgKnNhbSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8wOw0KPj4gLQkgIGVsc2UN Cj4+IC0JICAgIHsNCj4+IC0JICAgICAgKnNhbSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRf MDsNCj4+IC0JICAgICAgbWVtc2l6ZSA9IE5VTExfVFJFRTsNCj4+IC0JICAgIH0NCj4+IC0JfQ0K Pj4gKyAgICAgIGlmICgqc2FtICE9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8xDQo+PiAr CSAgJiYgaXNfY29uc3RhbnRfbGVuZ3RoX2FycmF5X3JlZikNCj4+ICsJLyogTUVNQkVSIGlzIGEg Y29uc3RhbnQgbGVuZ3RoIGFycmF5IHdoaWNoIGlzIG5vdCBhIG9uZS1lbGVtZW50DQo+PiArCSAg IHRyYWlsaW5nIGFycmF5LiAgKi8NCj4+ICsJcmV0dXJuIG1lbXNpemU7DQo+PiANCj4+IC0gICAg ICBpZiAoIXplcm9fbGVuZ3RoKQ0KPj4gLQlpZiAodHJlZSBkb20gPSBUWVBFX0RPTUFJTiAobWVt dHlwZSkpDQo+PiAtCSAgaWYgKHRyZWUgbWluID0gVFlQRV9NSU5fVkFMVUUgKGRvbSkpDQo+PiAt CSAgICBpZiAodHJlZSBtYXggPSBUWVBFX01BWF9WQUxVRSAoZG9tKSkNCj4+IC0JICAgICAgaWYg KFRSRUVfQ09ERSAobWluKSA9PSBJTlRFR0VSX0NTVA0KPj4gLQkJICAmJiBUUkVFX0NPREUgKG1h eCkgPT0gSU5URUdFUl9DU1QpDQo+PiAtCQl7DQo+PiAtCQkgIG9mZnNldF9pbnQgbWluaWR4ID0g d2k6OnRvX29mZnNldCAobWluKTsNCj4+IC0JCSAgb2Zmc2V0X2ludCBtYXhpZHggPSB3aTo6dG9f b2Zmc2V0IChtYXgpOw0KPj4gLQkJICBvZmZzZXRfaW50IG5lbHRzbTEgPSBtYXhpZHggLSBtaW5p ZHg7DQo+PiAtCQkgIGlmIChuZWx0c20xID4gMCkNCj4+IC0JCSAgICAvKiBNRU1CRVIgaXMgYW4g YXJyYXkgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQuICAqLw0KPj4gLQkJICAgIHJldHVybiBt ZW1zaXplOw0KPj4gLQ0KPj4gLQkJICBpZiAobmVsdHNtMSA9PSAwKQ0KPj4gLQkJICAgICpzYW0g PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMTsNCj4+IC0JCX0NCj4+ICsgICAgICBpZiAo KnNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6aW50XzApDQo+PiArCW1lbXNpemUgPSBOVUxM X1RSRUU7DQo+PiANCj4+IC0gICAgICAvKiBGb3IgYSByZWZlcmVuY2UgdG8gYSB6ZXJvLSBvciBv bmUtZWxlbWVudCBhcnJheSBtZW1iZXIgb2YgYSB1bmlvbg0KPj4gLQkgdXNlIHRoZSBzaXplIG9m IHRoZSB1bmlvbiBpbnN0ZWFkIG9mIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIuICAqLw0KPj4gKyAg ICAgIC8qIEZvciBhIHJlZmVyZW5jZSB0byBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYW4gaW50 ZXJpb3IgemVybyBsZW5ndGgNCj4+ICsJIGFycmF5LCBvciBhbiBhcnJheSB3aXRoIHZhcmlhYmxl IGxlbmd0aCBvZiBhIHVuaW9uLCB1c2UgdGhlIHNpemUgb2YNCj4+ICsJIHRoZSB1bmlvbiBpbnN0 ZWFkIG9mIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIuICAqLw0KPj4gICAgICBpZiAoVFJFRV9DT0RF IChhcmd0eXBlKSA9PSBVTklPTl9UWVBFKQ0KPj4gCW1lbXNpemUgPSBUWVBFX1NJWkVfVU5JVCAo YXJndHlwZSk7DQo+PiAgICB9DQo+PiANCj4+IC0gIC8qIE1FTUJFUiBpcyBlaXRoZXIgYSBib25h IGZpZGUgZmxleGlibGUgYXJyYXkgbWVtYmVyLCBvciBhIHplcm8tbGVuZ3RoDQo+PiAtICAgICBh cnJheSBtZW1iZXIsIG9yIGFuIGFycmF5IG9mIGxlbmd0aCBvbmUgdHJlYXRlZCBhcyBzdWNoLiAg Ki8NCj4+ICsgIC8qIE1FTUJFUiBub3cgaXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGFuIGlu dGVyaW9yIHplcm8gbGVuZ3RoIGFycmF5LCBvcg0KPj4gKyAgICAgYW4gYXJyYXkgd2l0aCB2YXJp YWJsZSBsZW5ndGguICBXZSBuZWVkIHRvIGRlY2lkZSBpdHMgc2l6ZSBmcm9tIGl0cw0KPj4gKyAg ICAgaW5pdGlhbGl6ZXIuICAqLw0KPj4gDQo+PiAgLyogSWYgdGhlIHJlZmVyZW5jZSBpcyB0byBh IGRlY2xhcmVkIG9iamVjdCBhbmQgdGhlIG1lbWJlciBhIHRydWUNCj4+ICAgICBmbGV4aWJsZSBh cnJheSwgdHJ5IHRvIGRldGVybWluZSBpdHMgc2l6ZSBmcm9tIGl0cyBpbml0aWFsaXplci4gICov DQo+PiBAQCAtMTQzNTEsNiArMTQzNDcsNTkgQEAgZGVmYXVsdF9pc19lbXB0eV9yZWNvcmQgKGNv bnN0X3RyZWUgdHlwZSkNCj4+ICByZXR1cm4gaXNfZW1wdHlfdHlwZSAoVFlQRV9NQUlOX1ZBUklB TlQgKHR5cGUpKTsNCj4+IH0NCj4+IA0KPj4gKy8qIERldGVybWluZSB3aGV0aGVyIFRZUEUgaXMg YSBJU08gZmxleGlibGUgYXJyYXkgbWVtZWJlciB0eXBlICJbXSIuICAqLw0KPiANCj4gSVNPIEM5 OQ0KDQpPa2F5LCB3aWxsIGFkZCB0aGlzLg0KPiANCj4+ICtib29sDQo+PiArZmxleGlibGVfYXJy YXlfbWVtYmVyX3AgKGNvbnN0X3RyZWUgdHlwZSkNCj4gDQo+IHNpbmNlIHlvdSBwYXNzIGluIGEg dHlwZSBhIGJldHRlciBuYW1lIHdvdWxkIGJlDQo+IGZsZXhpYmxlX2FycmF5X3R5cGVfcD8NCk9r YXksIGhvdyBhYm91dCDigJxmbGV4aWJsZV9hcnJheV9tZW1iZXJfdHlwZV9w4oCdPyAoU2luY2Ug 4oCcZmxleGlibGUgYXJyYXkgbWVtYmVy4oCdIGlzIGEgY29tcGxldGUgY29uY2VwdCkuDQo+IA0K Pj4gK3sNCj4+ICsgIGlmIChUUkVFX0NPREUgKHR5cGUpID09IEFSUkFZX1RZUEUNCj4+ICsgICAg ICAmJiBUWVBFX1NJWkUgKHR5cGUpID09IE5VTExfVFJFRQ0KPj4gKyAgICAgICYmIFRZUEVfRE9N QUlOICh0eXBlKSAhPSBOVUxMX1RSRUUNCj4gDQo+IHdoeSByZXF1aXJlIGEgc3BlY2lmaWVkIFRZ UEVfRE9NQUlOPw0KDQpUaGVyZSBhcmUgbXVsdGlwbGUgcGxhY2VzIGluIHRoZSBjdXJyZW50IEdD QyB1c2VkIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6DQoNCi0gICAgICBpZiAoVFJFRV9DT0RFICh0 eXBlKSkgPT0gQVJSQVlfVFlQRQ0KLSAgICAgICAgICYmIFRZUEVfU0laRSAodHlwZSkgPT0gTlVM TF9UUkVFDQotICAgICAgICAgJiYgVFlQRV9ET01BSU4gKHR5cGUpICE9IE5VTExfVFJFRQ0KLSAg ICAgICAgICYmIFRZUEVfTUFYX1ZBTFVFIChUWVBFX0RPTUFJTiAodHlwZSkpID09IE5VTExfVFJF RSkNCg0KVG8gY2hlY2sgd2hldGhlciB0aGUgdHlwZSBpcyBhIGZsZXhpYmxlX2FycmF5X21lbWJl ciB0eXBlLiAgDQooRm9yIGV4YW1wbGUsIHRoZSByb3V0aW5lIOKAnGFkZF9mbGV4aWJsZV9hcnJh eV9lbHRzX3RvX3NpemXigJ0gaW4gYy9jLWRlY2wuY2MNCgkJCXRoZSByb3V0aW5lIOKAnGZpbmlz aF9zdHJ1Y3TigJ0gaW4gYy9jLWRlY2wuY2MNCgkJCXRoZSByb3V0aW5lIOKAnGZsZXhpYmxlX2Fy cmF5X3R5cGVfcOKAnSBpbiB0cmVlLmNjKQ0KDQpUaGF04oCZcyB0aGUgcmVhc29uIEkgY29tZSB1 cCB3aXRoIHRoaXMgY29tbW9uIHJvdXRpbmUgdG8gcmVwbGFjZSBhbGwgdGhlc2Ugc2VxdWVuY2Vz Lg0KDQoNCj4+ICsgICAgICAmJiBUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKSA9 PSBOVUxMX1RSRUUpDQo+IA0KPiBhbmQgd2h5IGEgTlVMTCBUWVBFX01BWF9WQUxVRT8gIElzbid0 IGFuIHVua25vd24gVFlQRV9TSVpFIGVub3VnaD8NCg0KRG9lcyB0aGUgY3VycmVudCBGRSBnZW5l cmF0ZSBzdWNoIElSIGZvciBhIFtdPyAgQW4gYXJyYXkgdHlwZSwgd2l0aG91dCBUWVBFX1NJWkUs IHdpdGggYSBUWVBFX0RPTUFJTiwgYnV0IHRoZSBNQVhfVkFMVUUgb2YgdGhlIFRZUEVfRE9NQUlO IGlzIE5VTEw/DQoNCj4gDQo+IFRoYXQgc2FpZCwgSSdtIG5vdCBzdXJlIHByb3ZpZGluZyB0aGlz IGFic3RyYWN0aW9uIGlzIGEgZ29vZCBpZGVhDQo+IGdpdmVuIHRoZSB1c2UgSSBzZWUgaXMgaW4g ZnJvbnRlbmQgY29kZS4NCg0KVGhpcyBvbmUgaXMgYWxzbyB1c2VkIGluIG1pZGRsZS1lbmQsIGZv ciBleGFtcGxlIOKAnGZsZXhpYmxlX2FycmF5X3R5cGVfcOKAnSBpbiB0cmVlLmNjLg0KDQo+IA0K Pj4gKyAgICByZXR1cm4gdHJ1ZTsNCj4+ICsNCj4+ICsgIHJldHVybiBmYWxzZTsNCj4+ICt9DQo+ PiArDQo+PiArLyogRGV0ZXJtaW5lIHdoZXRoZXIgVFlQRSBpcyBhIHplcm8tbGVuZ3RoIGFycmF5 IHR5cGUgIlswXSIuICAqLw0KPj4gK2Jvb2wNCj4+ICt6ZXJvX2xlbmd0aF9hcnJheV9wIChjb25z dF90cmVlIHR5cGUpDQo+PiArew0KPj4gKyAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gQVJSQVlf VFlQRSkNCj4+ICsgICAgaWYgKHRyZWUgdHlwZV9zaXplID0gVFlQRV9TSVpFX1VOSVQgKHR5cGUp KQ0KPj4gKyAgICAgIGlmICgoaW50ZWdlcl96ZXJvcCAodHlwZV9zaXplKSkNCj4+ICsJICAgJiYg VFlQRV9ET01BSU4gKHR5cGUpICE9IE5VTExfVFJFRQ0KPj4gKwkgICAmJiBUWVBFX01BWF9WQUxV RSAoVFlQRV9ET01BSU4gKHR5cGUpKSA9PSBOVUxMX1RSRUUpDQo+IA0KPiB0aGF0IGFnYWluIHNl ZW1zIHZlcnkgQyg/KSBmcm9udGVuZCBzcGVjaWZpYywgcGxlYXNlIGRyb3AgaXQuDQpDdXJyZW50 bHksIHRoZSBtaWRkbGUtZW5kIHV0aWxpdHkgcm91dGluZSDigJxjb21wb25lbnRfcmVmX3NpemXi gJ0gbmVlZCB0byBjaGVjayB6ZXJvX2xlbmd0aF9hcnJheSwgb25lX2VsZW1lbnRfYXJyYXksIGV0 YywgDQpTbywgdGhpcyBpcyBub3Qgb25seSBhIEZFIHNwZWNpZmljIHJvdXRpbmUuDQpBbmQgSSB0 aGluayB0aGF0IGZvciBtYWtpbmcgdGhlIC1mc3RyaWN0LWZsZXgtYXJyYXkgd29yayBjbGVhciwg d2UgbWlnaHQgd2FudCB0byBlbXBoYXNpemUgIGFuZCBkaXN0aW5ndWlzaCB0aGUgY29uY2VwdHMg b2YgDQoNCltdICAgICAgICAgIGZsZXhpYmxlX2FycmF5X21lbWJlcl90eXBlX3ANClswXSAgICAg ICAgemVyb19sZW5ndGhfYXJyYXlfdHlwZV9wDQpbMV0gICAgICAgIG9uZV9lbGVtZW50X2FycmF5 X3R5cGVfcA0KDQpBY3Jvc3MgR0NDLiANCg0KPiANCj4+ICsJcmV0dXJuIHRydWU7DQo+PiArICBy ZXR1cm4gZmFsc2U7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIERldGVybWluZSB3aGV0aGVyIFRZUEUg aXMgYSBvbmUtZWxlbWVudCBhcnJheSB0eXBlICJbMV0iLg0KPj4gKyAgIFNldCBJU19DT05TVEFO VF9MRU5HVEggdG8gdHJ1ZSBpZiB0aGUgbGVuZ3RoIGlzIGNvbnN0YW50LA0KPj4gKyAgIG90aGVy d2lzZSwgSVNfQ09OU1RBTlRfTEVOR1RIIGlzIHNldCB0byBmYWxzZS4gICovDQo+PiArYm9vbA0K Pj4gK29uZV9lbGVtZW50X2FycmF5X3AgKGNvbnN0X3RyZWUgdHlwZSwgYm9vbCAqaXNfY29uc3Rh bnRfbGVuZ3RoIC8qID0gTlVMTCAqLykNCj4+ICt7DQo+PiArICBpZiAoaXNfY29uc3RhbnRfbGVu Z3RoKQ0KPj4gKyAgICAqaXNfY29uc3RhbnRfbGVuZ3RoID0gZmFsc2U7DQo+PiArDQo+PiArICBp ZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFKQ0KPj4gKyAgICBpZiAodHJlZSBkb20g PSBUWVBFX0RPTUFJTiAodHlwZSkpDQo+PiArICAgICAgaWYgKHRyZWUgbWluID0gVFlQRV9NSU5f VkFMVUUgKGRvbSkpDQo+PiArCWlmICh0cmVlIG1heCA9IFRZUEVfTUFYX1ZBTFVFIChkb20pKQ0K Pj4gKwkgIGlmIChUUkVFX0NPREUgKG1pbikgPT0gSU5URUdFUl9DU1QNCj4+ICsJICAgICAgJiYg VFJFRV9DT0RFIChtYXgpID09IElOVEVHRVJfQ1NUKQ0KPj4gKwkgICAgew0KPj4gKwkgICAgICBv ZmZzZXRfaW50IG1pbmlkeCA9IHdpOjp0b19vZmZzZXQgKG1pbik7DQo+PiArCSAgICAgIG9mZnNl dF9pbnQgbWF4aWR4ID0gd2k6OnRvX29mZnNldCAobWF4KTsNCj4+ICsJICAgICAgb2Zmc2V0X2lu dCBuZWx0c20xID0gbWF4aWR4IC0gbWluaWR4Ow0KPj4gKwkgICAgICBpZiAoaXNfY29uc3RhbnRf bGVuZ3RoKQ0KPj4gKwkJKmlzX2NvbnN0YW50X2xlbmd0aCA9IHRydWU7DQo+PiArCSAgICAgIGlm IChuZWx0c20xID09IDApDQo+PiArCQlyZXR1cm4gdHJ1ZTsNCj4+ICsJICAgIH0NCj4gDQo+IEkn ZCBzYXkgbGlrZXdpc2UuICBNYXliZSBtb3ZlIHRoZW0gdG8gYy1mYW1pbHkvYy1jb21tb24ue2Nj LGh9IGluc3RlYWQNCj4gaW4gYSBtb3JlIHNwZWNpYWxpemVkIHdheSBmb3IgdGhlIHNpbmdsZSB1 c2UgeW91IGhhdmU/DQoNCkl04oCZcyBub3Qgc2luZ2xlIHVzZSwgaXTigJlzIGFsc28gdXNlZCBp biDigJxjb21wb25lbnRfcmVmX3NpemXigJ0gcm91dGluZS4gDQoNClRoYW5rcyBhIGxvdCBmb3Ig eW91ciBjb21tZW50cy4NCg0KUWluZw0KPiANCj4+ICsgIHJldHVybiBmYWxzZTsNCj4+ICt9DQo+ PiArDQo+PiAvKiBEZXRlcm1pbmUgd2hldGhlciBUWVBFIGlzIGEgc3RydWN0dXJlIHdpdGggYSBm bGV4aWJsZSBhcnJheSBtZW1iZXIsDQo+PiAgIG9yIGEgdW5pb24gY29udGFpbmluZyBzdWNoIGEg c3RydWN0dXJlIChwb3NzaWJseSByZWN1cnNpdmVseSkuICAqLw0KPj4gDQo+PiBAQCAtMTQzNjcs MTAgKzE0NDE2LDcgQEAgZmxleGlibGVfYXJyYXlfdHlwZV9wIChjb25zdF90cmVlIHR5cGUpDQo+ PiAJICBsYXN0ID0geDsNCj4+ICAgICAgaWYgKGxhc3QgPT0gTlVMTF9UUkVFKQ0KPj4gCXJldHVy biBmYWxzZTsNCj4+IC0gICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKGxhc3QpKSA9PSBB UlJBWV9UWVBFDQo+PiAtCSAgJiYgVFlQRV9TSVpFIChUUkVFX1RZUEUgKGxhc3QpKSA9PSBOVUxM X1RSRUUNCj4+IC0JICAmJiBUWVBFX0RPTUFJTiAoVFJFRV9UWVBFIChsYXN0KSkgIT0gTlVMTF9U UkVFDQo+PiAtCSAgJiYgVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOIChUUkVFX1RZUEUgKGxh c3QpKSkgPT0gTlVMTF9UUkVFKQ0KPj4gKyAgICAgIGlmIChmbGV4aWJsZV9hcnJheV9tZW1iZXJf cCAoVFJFRV9UWVBFIChsYXN0KSkpDQo+PiAJcmV0dXJuIHRydWU7DQo+PiAgICAgIHJldHVybiBm YWxzZTsNCj4+ICAgIGNhc2UgVU5JT05fVFlQRToNCj4+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS5o IGIvZ2NjL3RyZWUuaA0KPj4gaW5kZXggZTY1NjRhYWNjYjcuLjMxMDdkZTViNDk5IDEwMDY0NA0K Pj4gLS0tIGEvZ2NjL3RyZWUuaA0KPj4gKysrIGIvZ2NjL3RyZWUuaA0KPj4gQEAgLTI5OTMsNiAr Mjk5MywxMSBAQCBleHRlcm4gdm9pZCBkZWNsX3ZhbHVlX2V4cHJfaW5zZXJ0ICh0cmVlLCB0cmVl KTsNCj4+ICNkZWZpbmUgREVDTF9QQURESU5HX1AoTk9ERSkgXA0KPj4gIChGSUVMRF9ERUNMX0NI RUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzMpDQo+PiANCj4+ICsvKiBVc2VkIGlu IGEgRklFTERfREVDTCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgZmllbGQgaXMgbm90IGEgZmxl eGlibGUNCj4+ICsgICBhcnJheSBtZW1iZXIuICAqLw0KPj4gKyNkZWZpbmUgREVDTF9OT1RfRkxF WEFSUkFZKE5PREUpIFwNCj4+ICsgIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21t b24uZGVjbF9ub3RfZmxleGFycmF5KQ0KPj4gKw0KPj4gLyogQSBudW1lcmljIHVuaXF1ZSBpZGVu dGlmaWVyIGZvciBhIExBQkVMX0RFQ0wuICBUaGUgVUlEIGFsbG9jYXRpb24gaXMNCj4+ICAgZGVu c2UsIHVuaXF1ZSB3aXRoaW4gYW55IG9uZSBmdW5jdGlvbiwgYW5kIG1heSBiZSB1c2VkIHRvIGlu ZGV4IGFycmF5cy4NCj4+ICAgSWYgdGhlIHZhbHVlIGlzIC0xLCB0aGVuIG5vIFVJRCBoYXMgYmVl biBhc3NpZ25lZC4gICovDQo+PiBAQCAtNTUzMSwxMCArNTUzNiwxMCBAQCBleHRlcm4gdHJlZSBj b21wb25lbnRfcmVmX2ZpZWxkX29mZnNldCAodHJlZSk7DQo+PiAgIHJldHVybnMgbnVsbC4gICov DQo+PiBlbnVtIHN0cnVjdCBzcGVjaWFsX2FycmF5X21lbWJlcg0KPj4gIHsNCj4+IC0gICBub25l LCAgICAgIC8qIE5vdCBhIHNwZWNpYWwgYXJyYXkgbWVtYmVyLiAgKi8NCj4+IC0gICBpbnRfMCwg ICAgIC8qIEludGVyaW9yIGFycmF5IG1lbWJlciB3aXRoIHNpemUgemVyby4gICovDQo+PiAtICAg dHJhaWxfMCwgICAvKiBUcmFpbGluZyBhcnJheSBtZW1iZXIgd2l0aCBzaXplIHplcm8uICAqLw0K Pj4gLSAgIHRyYWlsXzEgICAgLyogVHJhaWxpbmcgYXJyYXkgbWVtYmVyIHdpdGggb25lIGVsZW1l bnQuICAqLw0KPj4gKyAgICBub25lLAkvKiBOb3QgYSBzcGVjaWFsIGFycmF5IG1lbWJlci4gICov DQo+PiArICAgIGludF8wLAkvKiBJbnRlcmlvciBhcnJheSBtZW1iZXIgd2l0aCBzaXplIHplcm8u ICAqLw0KPj4gKyAgICB0cmFpbF8wLAkvKiBUcmFpbGluZyBhcnJheSBtZW1iZXIgd2l0aCBzaXpl IHplcm8uICAqLw0KPj4gKyAgICB0cmFpbF8xCS8qIFRyYWlsaW5nIGFycmF5IG1lbWJlciB3aXRo IG9uZSBlbGVtZW50LiAgKi8NCj4+ICB9Ow0KPj4gDQo+PiAvKiBSZXR1cm4gdGhlIHNpemUgb2Yg dGhlIG1lbWJlciByZWZlcmVuY2VkIGJ5IHRoZSBDT01QT05FTlRfUkVGLCB1c2luZw0KPj4gQEAg LTY0ODksNiArNjQ5NCw5IEBAIGV4dGVybiB2b2lkIGd0X3BjaF9ueCAodHJlZSAmLCBndF9wb2lu dGVyX29wZXJhdG9yLCB2b2lkICopOw0KPj4gZXh0ZXJuIGJvb2wgbm9ubnVsbF9hcmdfcCAoY29u c3RfdHJlZSk7DQo+PiBleHRlcm4gYm9vbCBpc19lbXB0eV90eXBlIChjb25zdF90cmVlKTsNCj4+ IGV4dGVybiBib29sIGRlZmF1bHRfaXNfZW1wdHlfcmVjb3JkIChjb25zdF90cmVlKTsNCj4+ICtl eHRlcm4gYm9vbCB6ZXJvX2xlbmd0aF9hcnJheV9wIChjb25zdF90cmVlKTsNCj4+ICtleHRlcm4g Ym9vbCBvbmVfZWxlbWVudF9hcnJheV9wIChjb25zdF90cmVlLCBib29sICogPSBOVUxMKTsNCj4+ ICtleHRlcm4gYm9vbCBmbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAoY29uc3RfdHJlZSk7DQo+PiBl eHRlcm4gYm9vbCBmbGV4aWJsZV9hcnJheV90eXBlX3AgKGNvbnN0X3RyZWUpOw0KPj4gZXh0ZXJu IEhPU1RfV0lERV9JTlQgYXJnX2ludF9zaXplX2luX2J5dGVzIChjb25zdF90cmVlKTsNCj4+IGV4 dGVybiB0cmVlIGFyZ19zaXplX2luX2J5dGVzIChjb25zdF90cmVlKTsNCj4+IA0KPiANCj4gLS0g DQo+IFJpY2hhcmQgQmllbmVyIDxyZ3VlbnRoZXJAc3VzZS5kZT4NCj4gU1VTRSBTb2Z0d2FyZSBT b2x1dGlvbnMgR2VybWFueSBHbWJILCBGcmFua2Vuc3RyYXNzZSAxNDYsIDkwNDYxIE51ZXJuYmVy ZywNCj4gR2VybWFueTsgR0Y6IEl2byBUb3RldiwgQW5kcmV3IE15ZXJzLCBBbmRyZXcgTWNEb25h bGQsIEJvdWRpZW4gTW9lcm1hbjsNCj4gSFJCIDM2ODA5IChBRyBOdWVybmJlcmcpDQoNCg==