From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 2D4D83852208; Fri, 18 Nov 2022 15:19:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2D4D83852208 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2AIEwdDG015230; Fri, 18 Nov 2022 15:19:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2022-7-12; bh=JxK+/qH4qubqcAJUVPGVLrGaaQyueOo1qsg4lpNtagE=; b=yj3C2nohibv6CBb2PWYKTbPTatTBbBamWYGIB9QvIWvVZXpxKS7Z/cJk5QVoNw2xEugN WhFY1Ai9BOhIcXJn5JLoqMe9hYkywgYNmmReFHe+ACBt5EhJEztekG3q56irlw1D2qKa 2t1UwVv3yadpfYsYG20JRGgBzX7acaTFEdX38UdoVBzdWimqzxuf9YVu0ljcrfChx705 DcZnlQ1e7xJmWmTjkb6uzj0xo3V54Md9e2NiYU/PQEp74UYFuJONLTPPnyNUNKSLVrbz oEdG5qnXzhy0ywLFYaq99XNE5ByC+lphHqFulOjMUnevjt6OdCNMNNQWCWtmnz14I+cG Lg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kxbub8506-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 18 Nov 2022 15:19:12 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2AIFDMGi016019; Fri, 18 Nov 2022 15:19:11 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2175.outbound.protection.outlook.com [104.47.57.175]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3kt1xapjyg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 18 Nov 2022 15:19:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Db96sMfVJ3lhfe1p8cFwwBAVDhYtXKKu++I7/+vB5GnAz6eIKw8tSyiS/Fs5PtLcu4NA6nalTvEdVbiYUUvqGfPhGnw2y/xbfLI1H9W5C15KUvDSYU3g+EXfZAz+c7wPy4fN5X4TRQa6WRP0ajclNddnt0scVsJQA0gc89uIHEXA1JqS3cf/oRBUDtB/e4auArJUwHA/i8wsJxLjR4hvmphRL+fECaDz/R7NNoPhA5IBIT/BwvJvaoHkIWlYcyDZRqz3jdvgDX7b68x+M0GTKoTHBw9422wM4sv9xcnVrgPg1kJsre9BT/y3blXY42/dMIJEAzM/kEep1csJBr4CFA== 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=JxK+/qH4qubqcAJUVPGVLrGaaQyueOo1qsg4lpNtagE=; b=nKzhcLO9Aq4dbtmAJ9mrmWi1OgRfkPbmZSZKNqMwemFOhDA8pUPRhQ6010VGYBbOudwcWFJDfaYtgv/EKbEynjti48klGvWYA44tXPZ2w/ZSWrtkyPjK5yztZcfQBZNHpSsDJltpTDjnhepP8JIdRL+vMWCKXlUUb/DDWKoOSpHdFRQsx0csbtzrRVv8HwzweySk5WnNAR4VczWNPji5ib0OK6yPDpOFhCALYFgj4OJ+PRPuGTfcTIUp3N3Zw9kqFSwJFB3hLblsQOtpxrYsBAMXRgjzcFIjWjXu2+WT6xIiOoDKuRZYBsB3uH+9+SEJj5hMVzDBwzULvg0vt+bvpg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JxK+/qH4qubqcAJUVPGVLrGaaQyueOo1qsg4lpNtagE=; b=zzoWcv/af4ROqJLqO7GCYvB0mZ+juKX6mJss2lkDK39Wx7kgmrS5jRaSrUvAC+tURT24TvGGuNQbCfUWuyNDqLo5TcD1wUhI1W+hzm2WNaipzg8ENKTsDU3bMAIZJQZW8HRUZQZa/SmSTTwUG5u6BLWmU5y8nDDKsocVEiwnmLc= Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CH0PR10MB5243.namprd10.prod.outlook.com (2603:10b6:610:dc::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.18; Fri, 18 Nov 2022 15:19:08 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::9423:79b3:c0dc:1113]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::9423:79b3:c0dc:1113%9]) with mapi id 15.20.5834.009; Fri, 18 Nov 2022 15:19:08 +0000 From: Qing Zhao To: Richard Biener CC: "joseph@codesourcery.com" , gcc Patches , "keescook@chromium.org" , "siddhesh@gcc.gnu.org" Subject: Re: [PATCH 2/2] Add a new warning option -Wstrict-flex-arrays. Thread-Topic: [PATCH 2/2] Add a new warning option -Wstrict-flex-arrays. Thread-Index: AQHY84GSjiE+CH4eVEq4fZ1E1BjODa5EuEiAgAAi5wA= Date: Fri, 18 Nov 2022 15:19:07 +0000 Message-ID: References: <20221108145113.955321-1-qing.zhao@oracle.com> <20221108145113.955321-3-qing.zhao@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3696.120.41.1.1) x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR10MB4344:EE_|CH0PR10MB5243:EE_ x-ms-office365-filtering-correlation-id: 974b4e78-67db-4b03-a768-08dac9783ccd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Rl3nyXXvst9BxLf+9/0mQIoAcFb7fJHC44VcLGaXrCxBdxGlLF+JPF1A+ywSjElmL5y205R3pSPGtWPQM8iUsUoi24/E/sFuXdfhj5f/OQRswvqz27GY4Pfrt8jmA1ZpI2uh/BRNTfMGQZgT/Kdxly5ay0+b1UA8/qEvLjmFgNQf8A77z5206Tsfi3hsx1kSdCNMTehH/XB1fO2lZYsuH31N/tcXBXJK6yuTtQPZ4rPWm/aylC4sClTXFLW14XiS3175bLmAArsYK3wg+49QFRNb31lzxafKDFIhbIDAJgNBc/SqCHrhp9tyX8HhSchYXBZeJhO8elulv7YdKAKYPsIZBIBDqEohCFdJ3KdhOx10jSaMw973O1MolBLTc7cpqUUlG+6c5g+PgbRJsNOmdoWqmt3+fHNIbFtFvUMfBXQs+jvanr+nxwOJtgLWob2n+x2h45IOtop8sE2zh75v3IhMlS70IvMdM1rgagwJ1VCnVYIczmYx5474POuhfWxrJ+Cau0/9fVPXfRgO7/4yW+mYnJDgSM00nDn5i58FHYznr3z8Tz9jk+QBFqCDBN367YkRFvzPTNK/zLbBlAtbjW4MVzSGnzTNVedbcMGsTzpPFAoDag8GXXpI8erTvObbeAJKGejiyX/IS32nGiiIZVQpjJdjB1zwfOYx6kCSiJQcmav3SJNlXlP/yha80x5jt0gvBSL0l5VJPyDGqqr5ga7Dvvc6cpb+OYlgKaX+XkdipGnQrB7RZX1ma+GSZHRH3jc5jU+CWPD//vRgPVLulkrmphhxj95+NrmrNs7AgJx5AVw5FleJB3TmuJAde3kn 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:(13230022)(376002)(39860400002)(366004)(396003)(136003)(346002)(451199015)(36756003)(33656002)(66899015)(84970400001)(86362001)(38070700005)(30864003)(83380400001)(44832011)(5660300002)(2906002)(6506007)(6512007)(2616005)(186003)(53546011)(122000001)(91956017)(8936002)(66946007)(4326008)(38100700002)(6916009)(76116006)(66556008)(54906003)(71200400001)(66476007)(66446008)(316002)(6486002)(64756008)(41300700001)(8676002)(478600001)(45980500001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VTdRNy9IYkdobWhiTGx1ZHBBWjJuZG5nekJyMDdpVituR0hGK0JleXBqRmtk?= =?utf-8?B?WDQ0eCtPNXBuNWdUMEJnNGs0K25BN3JXSzhiWE9OV2EvOVZvMU1yVnJNcmwr?= =?utf-8?B?Q3ArMzBFZTE5cEdVVDJrMUZGa0l6THcycTZFY3Q0QTBaMUhpTG13MWxoQjIv?= =?utf-8?B?U2hTUFJQUUswbU8rZ1BUZjBhSHZSWHNoOEFwWnV2Q1N5RHkwUEYrdFNhN0JX?= =?utf-8?B?WW1IMUhJRU8rMXhHQy9FckY4MVQ0Q0dmNW9FTzJUUFo0MDNVZ3hnay84KzYv?= =?utf-8?B?Q2ZKTVczYTVpdHRrZmxYTENCOHIrT2sxT0JQZ1JIdlVaWXdNZGFWaGxzQmVu?= =?utf-8?B?ZlFVajZhN0NQRjlIWncxUi9BL0NMNHdQekhVYUtPbnovbUkxTlFSczNtK0Ja?= =?utf-8?B?UW9CSTA0SkxraUNjZWlvZ1A1V3lBVmNYb2FNOXMvNVdEMkRpWTk3K2VRR2JC?= =?utf-8?B?bWZ3dnFBbG5heHZmR1J3Q2UyZzd4ejZ1Z2pTQU5kNGhBeEEzbDJKT2JKNFJJ?= =?utf-8?B?WlQrd3BuOEhMWlZJU1hUUG5nQTRpYlVrS2RCU3AyTk5hKzA0T092Vmhza1JI?= =?utf-8?B?d3AyQXlUbFdFL3JjbytsS1dvb0pDVW82OEQ3VEJTMjlxN3pic1NRME1NeWRM?= =?utf-8?B?NDYyckJZeHcxQmZSZXI2aTlWTHA1WnFjNGE4Q0dLc1hKNXN1YVNOTE44TW9H?= =?utf-8?B?WXN2OTN5ZjdQZ3ljeS9RTjFNQ3lEYlF6U0E5VTBGak9TRXpabklJdm5Zdmdm?= =?utf-8?B?QnpQUHkvMUpHUnUzNnhuTUk5aTZMUXJSRGZsZDBmVEQvRnFYaUFmcExEQ1BT?= =?utf-8?B?ZW1zQjEybUNyNGU2cGc2d3E5K2cwZkRnYnh1d284aElZR0N1U2dUVHFoRVZi?= =?utf-8?B?ODEzVHlwb2FPU1VqM1l0ZnB1NUdxMzhrVFdkTEUzYzcvcFhTRzIwMWpCNnly?= =?utf-8?B?ekVYWm14Zit0dzVGYkxNZ2dubXBicjA0SUJxQ1NEcE9oQ24rUUc1WmlNUUFB?= =?utf-8?B?QVhHMlI3clNiQUxkcm5YNjBieDJsM2NST2JiQzNaM3JubHlGYkxBbkVhbldk?= =?utf-8?B?dytHMUU0UTNOQTRHVDFma0tpVStkM096TnN0WGFHSG5WTzhIelZEekpENHky?= =?utf-8?B?bG45bGtYR1R2ems5a1d4Y1J3Y2pZdnd2SW9scWRxdEdKVysyRzhONmxRa0xG?= =?utf-8?B?VUdiVGdLZk9kS1BxZnBZNlBQR2dKWTdEWjNodE8zcm0zQnk3SnU0cTZuUjdU?= =?utf-8?B?UndTcGQ5cFdJUVovd2lrOFlpNDR6QWNIbTlGSzk1ckp2Wjg2c0JncXlrV0Fr?= =?utf-8?B?UnZ5ME1KVzRaQTlDelYwK3lYN2hERHUxMVhHa0ppSUt1bVJuSkNsa2l0aHE2?= =?utf-8?B?THhFU2dTV2NRUnNrWk5sR2hPTDVzamFuNDViL0E1ZXRjL0pjMU8rWElmVlc3?= =?utf-8?B?ajZmd2JIc1YzZkI5N0k3T3hzcnB4bFdSbUhTZnBaTnBXcFBIV2UxU3NWWTRr?= =?utf-8?B?WHFsY1VZRTZiUGhKNThUWlNWQ1NWamk4eEFia3lEMkhCRG0zUFplN2RHajYz?= =?utf-8?B?Y2hGVEMwMDNIcEQ4MHpUVno0ME1JcHNDK1VkY2t2ME1rTEtvZkVUemdjdzlx?= =?utf-8?B?OFJJL2hibVFrQ0NoakRIQXZhb0lPK2djS1BHMU5UbXI4eEg4UEVFdkQwdWtS?= =?utf-8?B?WEZRTm8xQ0xiYWxRUldyTjhBbGt3Tkw3Y1UyV0t3Wkh5enpjL09aMHBHd2NC?= =?utf-8?B?OEN1QnBHNlIwV25UUWlsWU5KNzJvTFJjZUVBZU1FcXNJSXRsMFQ2UXEvVnp4?= =?utf-8?B?cW1WaDBMQ1I2OWhNQm1pVHI5YVExb3QxNEJSN3V5R3dXdytjdnB2STFTSk9U?= =?utf-8?B?R0FwNFlDc2hYSDM4TjFqZnRjWm1QL3lwaUMvRjU3SndZY1RXejkrVzZmNlVH?= =?utf-8?B?bjlQd3FjNnhYZTJHS1FpZTN4aEtnT21pNDBFaHI5S0czWlp1aEt4SUJVd0VH?= =?utf-8?B?TGFnT3IwUkpBQnErWlhKQlMzMTE2WWlXRGFsZGhLb2hRbHFlYlNRNEladERW?= =?utf-8?B?S0xweCthNVhWMTlnMHBQa2cwY3poVGo0cDAwK0txb3pxUFhNaVI4R1hhMmh3?= =?utf-8?B?dlNLNVdBUWFiTW84czJOY3Erc2FLNlNubGFkK0Jvb0dSQ0IyRVJPZ29PTXM2?= =?utf-8?Q?/ajQJAB9bySB+yLO0TrjBW8=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: zgmOHsZsn9YQheSF61n91fFHOI90HIms9/KH/Kjhn9yEIkQ8tBsaolY5/SsdSvIxgbFdUorAzcRFuai81Ea2vGVt5Hq9zY9DgE3XxvkWFXJCY8VKcIgVnHgrJjVCLxv+1AADDTwy3aFTxr3vDW/m866DPaLAa5FWTe4LYa1SlOSaAc3pSkO+sJS6QNs38LH2m3mz1bX/DczzxtjE9lReCu7VPgFVPQr1Ao2exS8GWNKbTGd4ZnbNoJTtMqVTYTuUSSCVo0Wz7ZyFHoTvDpF2E71FtZYKNOKMsr+mhCrLsh05SqPViX+wZfDeo5sYEbyCwfvSWyI5U561yj8uxdWyYh+iK7f4lNOlUJKFuYx3lOi/uCHJWqTRWCLRL3Hvk2l/OACTpXoVIF7VB7kqtOmUbuVqFnqduRuVildGOF+Gkv8dJU8zGy3XcskeEY1UQxdW1+YpulRyHSVGT1IdSGPJp4O3s+5ZA7xe08in8SzBReme6PSkXhL0jywC0hT6MUCio0tPl8zgKkCVlyjvpmlrROJd35Rd6IqGhp7HAA4TFHQ4Cq9HRFXT0FKNcd5iG3nwKfzWnejD2WU6/1ZvU5VfUq3QrP3jDUgM8V8txU2Dt0lKYZHk5mvOJtrOmvWiC4TB1Tmjatze3suu6Dc9KpXCc5H9WNV82YE+DpO5qOLfB9VWljbVdJoH9ytrsOxrnH1xBjdproNPxZHkDWLldXNL4CebXP5wFhcUPgqPNwcahvWUn9vAX/qduNtk/8NcWtYR+qIksf0yoQ/0vw15JBzWmA3erTdMQL3YLTCTeFQfI6P3B4nnL4Mc8/Hpq5o0dvD8+cgv1q4ldiCYHrWJbeULIVdw31pM3bELVoGb42gMD8jtfQRDGo6EXu8Cs2Lws86m 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: 974b4e78-67db-4b03-a768-08dac9783ccd X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Nov 2022 15:19:07.9090 (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: D65s9rIMhiX3dpXycSBJmP9xWRGMrXG/MEsayZrf9rhWmLADiOTPLrGgqws2Wr1asSBmjC5qqaC6qjJIAQxMHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5243 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-18_03,2022-11-18_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 bulkscore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211180089 X-Proofpoint-ORIG-GUID: trIeDKEV6HgRZkoAmh6pSfbb70RvUREK X-Proofpoint-GUID: trIeDKEV6HgRZkoAmh6pSfbb70RvUREK X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,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 List-Id: SGksIFJpY2hhcmQsDQoNCkhvbmVzdGx5LCBpdOKAmXMgdmVyeSBoYXJkIGZvciBtZSB0byBkZWNp ZGUgd2hhdOKAmXMgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gDQpiZXR3 ZWVuIC1mc3RyaWN0LWZsZXgtYXJyYXk9TSBhbmQgLVdhcnJheS1ib3VuZHM9Ti4gDQoNCklkZWFs bHksICAtZnN0cmljdC1mbGV4LWFycmF5PU0gc2hvdWxkIGNvbXBsZXRlbHkgY29udHJvbCB0aGUg YmVoYXZpb3Igb2YgLVdhcnJheS1ib3VuZHMuDQpJZiBwb3NzaWJsZSwgSSBwcmVmZXIgdGhpcyBz b2x1dGlvbi4NCg0KSG93ZXZlciwgLVdhcnJheS1ib3VuZHMgaXMgaW5jbHVkZWQgaW4gLVdhbGws IGFuZCBoYXMgYmVlbiB1c2VkIGV4dGVuc2l2ZWx5IGZvciBhIGxvbmcgdGltZS4NCkl04oCZcyBu b3Qgc2FmZSB0byBjaGFuZ2UgaXRzIGRlZmF1bHQgYmVoYXZpb3IuIA0KDQpTbywgSSBndWVzcyB0 aGF0IHRoZSBib3R0b20tbGluZSBmb3IgdGhpcyB3b3JrIGlzOg0KDQpLZWVwaW5nIHRoZSBkZWZh dWx0IGJlaGF2aW9yIG9mIC1XYXJyYXktYm91bmRzLg0KDQpJcyB0aGlzIGNvcnJlY3QgdW5kZXJz dGFuZGluZz8NCg0KDQo+IE9uIE5vdiAxOCwgMjAyMiwgYXQgODoxNCBBTSwgUmljaGFyZCBCaWVu ZXIgPHJndWVudGhlckBzdXNlLmRlPiB3cm90ZToNCj4gDQo+IE9uIFR1ZSwgOCBOb3YgMjAyMiwg UWluZyBaaGFvIHdyb3RlOg0KPiANCj4+ICctV3N0cmljdC1mbGV4LWFycmF5cycNCj4+ICAgICBX YXJuIGFib3V0IGlucHJvcGVyIHVzYWdlcyBvZiBmbGV4aWJsZSBhcnJheSBtZW1iZXJzIGFjY29y ZGluZyB0bw0KPj4gICAgIHRoZSBMRVZFTCBvZiB0aGUgJ3N0cmljdF9mbGV4X2FycmF5IChMRVZF TCknIGF0dHJpYnV0ZSBhdHRhY2hlZCB0bw0KPj4gICAgIHRoZSB0cmFpbGluZyBhcnJheSBmaWVs ZCBvZiBhIHN0cnVjdHVyZSBpZiBpdCdzIGF2YWlsYWJsZSwNCj4+ICAgICBvdGhlcndpc2UgYWNj b3JkaW5nIHRvIHRoZSBMRVZFTCBvZiB0aGUgb3B0aW9uDQo+PiAgICAgJy1mc3RyaWN0LWZsZXgt YXJyYXlzPUxFVkVMJy4NCj4+IA0KPj4gICAgIFRoaXMgb3B0aW9uIGlzIGVmZmVjdGl2ZSBvbmx5 IHdoZW4gTEVWRUwgaXMgYmlnZ2VyIHRoYW4gMC4NCj4+ICAgICBPdGhlcndpc2UsIGl0IHdpbGwg YmUgaWdub3JlZCB3aXRoIGEgd2FybmluZy4NCj4+IA0KPj4gICAgIHdoZW4gTEVWRUw9MSwgd2Fy bmluZ3Mgd2lsbCBiZSBpc3N1ZWQgZm9yIGEgdHJhaWxpbmcgYXJyYXkNCj4+ICAgICByZWZlcmVu Y2Ugb2YgYSBzdHJ1Y3R1cmUgdGhhdCBoYXZlIDIgb3IgbW9yZSBlbGVtZW50cyBpZiB0aGUNCj4+ ICAgICB0cmFpbGluZyBhcnJheSBpcyByZWZlcmVuY2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVt YmVyLg0KPj4gDQo+PiAgICAgd2hlbiBMRVZFTD0yLCBpbiBhZGRpdGlvbiB0byBMRVZFTD0xLCBh ZGRpdGlvbmFsIHdhcm5pbmdzIHdpbGwgYmUNCj4+ICAgICBpc3N1ZWQgZm9yIGEgdHJhaWxpbmcg b25lLWVsZW1lbnQgYXJyYXkgcmVmZXJlbmNlIG9mIGEgc3RydWN0dXJlIGlmDQo+PiAgICAgdGhl IGFycmF5IGlzIHJlZmVyZW5jZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIuDQo+PiANCj4+ ICAgICB3aGVuIExFVkVMPTMsIGluIGFkZGl0aW9uIHRvIExFVkVMPTIsIGFkZGl0aW9uYWwgd2Fy bmluZ3Mgd2lsbCBiZQ0KPj4gICAgIGlzc3VlZCBmb3IgYSB0cmFpbGluZyB6ZXJvLWxlbmd0aCBh cnJheSByZWZlcmVuY2Ugb2YgYSBzdHJ1Y3R1cmUgaWYNCj4+ICAgICB0aGUgYXJyYXkgaXMgcmVm ZXJlbmNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlci4NCj4+IA0KPj4gQXQgdGhlIHNhbWUg dGltZSwga2VlcCAtV2FycmF5LWJvdW5kcz1bMXwyXSB3YXJuaW5ncyB1bmNoYW5nZWQgZnJvbQ0K Pj4gLWZzdHJpY3QtZmxleC1hcnJheXMuDQo+IA0KPiBMb29raW5nIGF0IHRoaXMsIGlzIHRoaXMg YSB3YXkgdG8gYXZvaWQgaW50ZXJwcmV0aW5nIC1XYXJyYXktYm91bmRzPU4NCj4gdG9nZXRoZXIg d2l0aCAtZnN0cmljdC1mbGV4LWFycmF5cz1NPyAgV29uJ3QgdGhpcyBiZSBqdXN0IGNvbmZ1c2lu ZyB0bw0KPiB1c2Vycz8gIEVzcGVjaWFsbHkgc2luY2UgLVdhbGwgaW5jbHVkZXMgLVdhcnJheS1i b3VuZHMgYW5kIHRodXMgd2UnbGwNCj4gZGlhZ25vc2UNCj4gDQo+ICsgIGlmIChvcHRzLT54X3dh cm5fYXJyYXlfYm91bmRzKQ0KPiArICAgIGlmIChvcHRzLT54X2ZsYWdfc3RyaWN0X2ZsZXhfYXJy YXlzKQ0KPiArICAgICAgew0KPiArICAgICAgIHdhcm5pbmdfYXQgKFVOS05PV05fTE9DQVRJT04s IDAsDQo+ICsgICAgICAgICAgICAgICAgICAgIiU8LVdhcnJheS1ib3VuZHMlPiBpcyBub3QgaW1w YWN0ZWQgYnkgIg0KPiArICAgICAgICAgICAgICAgICAgICIlPC1mc3RyaWN0LWZsZXgtYXJyYXlz JT4iKTsNCj4gKyAgICAgIH0NCj4gDQo+IGFuZCBkbyB0aGF0IGV2ZW4gd2hlbiAtV3N0cmljdC1m bGV4LWFycmF5cyBpcyBnaXZlbj8NCg0KVGhlIGJhc2ljIGlkZWEgaGVyZSBpczogICAtV2FycmF5 LWJvdW5kcz1OIHdpbGwgTk9UIGJlIGNvbnRyb2xsZWQgYnkgLWZzdHJpY3QtZmxleC1hcnJheT1N IGF0IGFsbC4NCkFuZCB0aGUgbmV3IC1Xc3RyaWN0LWZsZXgtYXJyYXkgd2lsbCBiZSB1c2VkIHRv IHJlcG9ydCB3YXJuaW5ncyBmb3IgZGlmZmVyZW50IGxldmVsIG9mIOKAnE3igJ0uIA0KDQo+IA0K PiBXb3VsZCBpdCBiZSBiZXR0ZXIvcG9zc2libGUgdG8gYWRkIGEgbm90ZTogdG8gZXhpc3Rpbmcg LVdhcnJheS1ib3VuZHMNCj4gZGlhZ25vc3RpY3Mgb24gaG93IHRoZSBiZWhhdmlvciBpcyBhbHRl cmVkIGJ5IC1mc3RyaWN0LWZsZXgtYXJyYXlzPw0KDQpJZiAtV2FycmF5LWJvdW5kcyBkb2VzIG5v dCBoYXZlIHRoZSBhZGRpdGlvbmFsIGxldmVsIOKAnE7igJ0gYXJndW1lbnQuIEl04oCZcyByZWFz b25hYmxlIGFuZCBuYXR1cmFsIGZvciBpdCB0byBiZSBjb250cm9sbGVkIA0KYnkgdGhlIGxldmVs IG9mIC1mc3RyaWN0LWZsZXgtYXJyYXlzLiANCj4gDQo+IEkgZ3Vlc3MgdGhpcyB3aWxsIGluZXZp dGFibHkgcmUtaXRlcmF0ZSB0aGUgLWZzdHJpY3QtZmxleC1hcnJheXM9Tg0KPiB2cy4gLVdhcnJh eS1ib3VuZHM9TSBkaXNjdXNzaW9uIC4uLg0KDQpZZXMsIHRoYXTigJlzIHRoZSBtb3N0IGNvbmZ1 c2lvbiBhbmQgY2hhbGxlbmdlIHBhcnQgZm9yIHRoaXMgd29ya+KApiBhbmQgdG9vayBtZSBhIGxv dCBvZiB0aGlua2luZyBidXQgc3RpbGwgY2Fubm90DQogZmluZCB0aGUgYmVzdCB3YXkgdG8gaGFu ZGxlIGl04oCmLi4NCj4gDQo+IEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRvIHN0aWNrIHdp dGggLVdhcnJheS1ib3VuZHMgYW5kIGZsZXgNCj4gaXRzID0yIG1vZGUgdG8gd29yayBhY2NvcmRp bmcgdG8gLWZzdHJpY3QtZmxleC1hcnJheXM9TiBpbnN0ZWFkIG9mDQo+ICJvdXQgb2YgYm91bmRz IGFjY2Vzc2VzIHRvIHRyYWlsaW5nIHN0cnVjdCBtZW1iZXJzIG9mIG9uZS1lbGVtZW50IGFycmF5 IA0KPiB0eXBlcyIgKHRodXMsIG5vdCBhZGQgWzFdIGJ1dCBpbnN0ZWFkIHRoZSBjYXNlcyB0aGF0 IGFyZSBub3QgZmxleCANCj4gYXJyYXlzIGFjY29yZGluZyB0byAtZnN0cmljdC1mbGV4LWFycmF5 cykuDQoNCkZyb20gbXkgdW5kZXJzdGFuZGluZywgeW91IHN1Z2dlc3RlZCB0aGUgZm9sbG93aW5n Og0KDQoxLiBLZWVwIC1XYXJyYXktYm91bmRzIGRlZmF1bHQgYmVoYXZpb3IuDQogICAgaS5lLiB3 aGVuIC1XYXJyYXktYm91bmRzPTEsIGl04oCZcyBiZWhhdmlvciB3aWxsIG5vdCBiZSBpbXBhY3Rl ZCBieSAtZnN0cmljdC1mbGV4LWFycmF5PU0NCg0KMi4gV2hlbiAtV2FycmF5LWJvdW5kcz0yLCAg aXTigJlzIGJlaGF2aW9yIHdpbGwgYmUgY29udHJvbGxlZCBieSAtZnN0cmljdC1mbGV4LWFycmF5 PU0NCg0KDQpJcyB0aGUgYWJvdmUgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pw0KDQpJZiB5ZXMsIHRo ZW4gdGhlIG1ham9yIHF1ZXN0aW9uIGlzOg0KDQpXaGVuIC1XYXJyYXktYm91bmRzPTIsIC1mc3Ry aWN0LWZsZXgtYXJyYXkgPSAwIG9yIDEsMiwgIGkuZSwgd2hlbiB0aGUgbGV2ZWwgb2YgLWZzdHJp Y3QtZmxleC1hcnJheSBpcyBsb3dlciBvciBlcXVhbCB0byAyLiANCiBbMF0gYW5kIFsxXSB3aWxs IGJlIHRyZWF0ZWQgYXMgZmxleGlibGUgYXJyYXkgbWVtYmVyIGJ5IC1mc3RyaWN0LWZsZXgtYXJy YXksIGl04oCZcyBjb25mbGljdCB3aXRoIGhvdyAtV2FycmF5LWJvdW5kcz0y4oCZcyANCmJlaGF2 aW9yIG9uIHRyZWF0aW5nIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuICBVbmRlciBzdWNoIHNpdHVh dGlvbiwgd2hpY2ggb25lIGhhcyBoaWdoZXIgcHJpb3JpdHk/DQoNCg0KSSBoYXZlIGFub3RoZXIg aWRlYSBub3c6DQoNCjEuIEtlZXAgLVdhcnJheS1ib3VuZHM9MSBkZWZhdWx0IGJlaGF2aW9yLiAN CjIuIENoYW5nZSB0aGUgYmVoYXZpb3Igb2YgLVdhcnJheS1ib3VuZHM9MiBmcm9tOg0KDQpDdXJy ZW50Og0KLVdhcnJheS1ib3VuZHM9Mg0KVGhpcyB3YXJuaW5nIGxldmVsIGFsc28gd2FybnMgYWJv dXQgb3V0IG9mIGJvdW5kcyBhY2Nlc3NlcyB0byB0cmFpbGluZyBzdHJ1Y3QgbWVtYmVycyBvZiBv bmUtZWxlbWVudCBhcnJheSB0eXBlcyAoc2VlIFplcm8gTGVuZ3RoKSBhbmQgYWJvdXQgdGhlIGlu dGVybWVkaWF0ZSByZXN1bHRzIG9mIHBvaW50ZXIgYXJpdGhtZXRpYyB0aGF0IG1heSB5aWVsZCBv dXQgb2YgYm91bmRzIHZhbHVlcy4gVGhpcyB3YXJuaW5nIGxldmVsIG1heSBnaXZlIGEgbGFyZ2Vy IG51bWJlciBvZiBmYWxzZSBwb3NpdGl2ZXMgYW5kIGlzIGRlYWN0aXZhdGVkIGJ5IGRlZmF1bHQu DQoNCk5ldzoNCi1XYXJyYXktYm91bmRzPTINClRoaXMgd2FybmluZyBsZXZlbCBhbHNvIHdhcm5z ICBhYm91dCB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgb2YgcG9pbnRlciBhcml0aG1ldGljIHRo YXQgbWF5IHlpZWxkIG91dCBvZiBib3VuZHMgdmFsdWVzLiBUaGlzIHdhcm5pbmcgbGV2ZWwgbWF5 IGdpdmUgYSBsYXJnZXIgbnVtYmVyIG9mIGZhbHNlIHBvc2l0aXZlcyBhbmQgaXMgZGVhY3RpdmF0 ZWQgYnkgZGVmYXVsdC4NCg0KaS5lLCBkZWxldGUgdGhlIGNvbnRyb2wgb24gZmxleGlibGUgYXJy YXkgbWVtYmVyIGZyb20gdGhlIGxldmVsIG9mIC1XYXJyYXktYm91bmRzLiANCg0KMy4gVXNlIC1m c3RyaWN0LWZsZXgtYXJyYXkgdG8gY29udHJvbCBob3cgdGhlIC1XYXJyYXktYm91bmRzIHRyZWF0 IHRoZSB0YWlsaW5nIGFycmF5IGFzIGZsZXhpYmxlIGFycmF5IG1lbWJlcj8gDQoNCklzIHRoaXMg YmV0dGVyPw0KDQp0aGFua3MuDQoNClFpbmcNCg0KPiANCj4gUmljaGFyZC4NCj4gDQo+PiBnY2Mv Q2hhbmdlTG9nOg0KPj4gDQo+PiAJKiBhdHRyaWJzLmNjIChzdHJpY3RfZmxleF9hcnJheV9sZXZl bF9vZik6IE5ldyBmdW5jdGlvbi4NCj4+IAkqIGF0dHJpYnMuaCAoc3RyaWN0X2ZsZXhfYXJyYXlf bGV2ZWxfb2YpOiBQcm90b3R5cGUgZm9yIG5ldyBmdW5jdGlvbi4NCj4+IAkqIGRvYy9pbnZva2Uu dGV4aTogRG9jdW1lbnQgLVdzdHJpY3QtZmxleC1hcnJheXMgb3B0aW9uLiBVcGRhdGUNCj4+IAkt ZnN0cmljdC1mbGV4LWFycmF5c1s9bl0gb3B0aW9ucy4NCj4+IAkqIGdpbXBsZS1hcnJheS1ib3Vu ZHMuY2MgKGFycmF5X2JvdW5kc19jaGVja2VyOjpjaGVja19hcnJheV9yZWYpOg0KPj4gCUlzc3Vl IHdhcm5pbmdzIGZvciAtV3N0cmljdC1mbGV4LWFycmF5cy4NCj4+IAkoZ2V0X3VwX2JvdW5kc19m b3JfYXJyYXlfcmVmKTogTmV3IGZ1bmN0aW9uLg0KPj4gCShjaGVja19vdXRfb2ZfYm91bmRzX2Fu ZF93YXJuKTogTmV3IGZ1bmN0aW9uLg0KPj4gCSogb3B0cy5jYyAoZmluaXNoX29wdGlvbnMpOiBJ c3N1ZSB3YXJuaW5ncyBmb3IgdW5zdXBwb3J0ZWQgY29tYmluYXRpb24NCj4+IAlvZiAtV2FycmF5 LWJvdW5kcyBhbmQgLWZzdHJpY3QtZmxleC1hcnJheXMsIC1Xc3RyaWN0X2ZsZXhfYXJyYXlzIGFu ZA0KPj4gCS1mc3RyaWN0LWZsZXgtYXJyYXkuDQo+PiAJKiB0cmVlLXZycC5jYyAoZXhlY3V0ZV92 cnApOiBFbmFibGUgdGhlIHBhc3Mgd2hlbg0KPj4gCXdhcm5fc3RyaWN0X2ZsZXhfYXJyYXkgaXMg dHJ1ZS4NCj4+IAkoZXhlY3V0ZV9yYW5nZXJfdnJwKTogTGlrZXdpc2UuDQo+PiAJKiB0cmVlLmNj IChhcnJheV9yZWZfZmxleGlibGVfc2l6ZV9wKTogQWRkIG9uZSBuZXcgYXJndW1lbnQuDQo+PiAJ KGNvbXBvbmVudF9yZWZfc2FtX3R5cGUpOiBOZXcgZnVuY3Rpb24uDQo+PiAJKGNvbXBvbmVudF9y ZWZfc2l6ZSk6IEFkZCBvbmUgbmV3IGFyZ3VtZW50LA0KPj4gCSogdHJlZS5oIChhcnJheV9yZWZf ZmxleGlibGVfc2l6ZV9wKTogVXBkYXRlIHByb3RvdHlwZS4NCj4+IAkoZW51bSBzdHJ1Y3Qgc3Bl Y2lhbF9hcnJheV9tZW1iZXIpOiBBZGQgdHdvIG5ldyBlbnVtIHZhbHVlcy4NCj4+IAkoY29tcG9u ZW50X3JlZl9zYW1fdHlwZSk6IE5ldyBwcm90b3R5cGUuDQo+PiAJKGNvbXBvbmVudF9yZWZfc2l6 ZSk6IFVwZGF0ZSBwcm90b3R5cGUuDQo+PiANCj4+IGdjYy9jLWZhbWlseS9DaGFuZ2VMb2c6DQo+ PiANCj4+IAkqIGMub3B0IChXc3RyaWN0LWZsZXgtYXJyYXlzKTogTmV3IG9wdGlvbi4NCj4+IA0K Pj4gZ2NjL2MvQ2hhbmdlTG9nOg0KPj4gDQo+PiAJKiBjLWRlY2wuY2MgKGlzX2ZsZXhpYmxlX2Fy cmF5X21lbWJlcl9wKTogQ2FsbCBuZXcgZnVuY3Rpb24NCj4+IAlzdHJpY3RfZmxleF9hcnJheV9s ZXZlbF9vZi4NCj4+IA0KPj4gZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQo+PiANCj4+IAkqIGMt YysrLWNvbW1vbi9Xc3RyaWN0LWZsZXgtYXJyYXlzLmM6IE5ldyB0ZXN0Lg0KPj4gCSogYy1jKyst Y29tbW9uL1dzdHJpY3QtZmxleC1hcnJheXNfMi5jOiBOZXcgdGVzdC4NCj4+IAkqIGdjYy5kZy9X c3RyaWN0LWZsZXgtYXJyYXlzLTIuYzogTmV3IHRlc3QuDQo+PiAJKiBnY2MuZGcvV3N0cmljdC1m bGV4LWFycmF5cy0zLmM6IE5ldyB0ZXN0Lg0KPj4gCSogZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJh eXMtNC5jOiBOZXcgdGVzdC4NCj4+IAkqIGdjYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTUuYzog TmV3IHRlc3QuDQo+PiAJKiBnY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy02LmM6IE5ldyB0ZXN0 Lg0KPj4gCSogZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtNy5jOiBOZXcgdGVzdC4NCj4+IAkq IGdjYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTguYzogTmV3IHRlc3QuDQo+PiAJKiBnY2MuZGcv V3N0cmljdC1mbGV4LWFycmF5cy05LmM6IE5ldyB0ZXN0Lg0KPj4gCSogZ2NjLmRnL1dzdHJpY3Qt ZmxleC1hcnJheXMuYzogTmV3IHRlc3QuDQo+PiAtLS0NCj4+IGdjYy9hdHRyaWJzLmNjICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMCArKw0KPj4gZ2NjL2F0dHJpYnMuaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCj4+IGdjYy9jLWZhbWlseS9jLm9w dCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+PiBnY2MvYy9jLWRlY2wuY2Mg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjIgKy0NCj4+IGdjYy9kb2MvaW52b2tl LnRleGkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMyArKy0NCj4+IGdjYy9naW1wbGUt YXJyYXktYm91bmRzLmNjICAgICAgICAgICAgICAgICAgICB8IDI2NCArKysrKysrKysrKysrLS0t LS0NCj4+IGdjYy9vcHRzLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx NSArDQo+PiAuLi4vYy1jKystY29tbW9uL1dzdHJpY3QtZmxleC1hcnJheXMuYyAgICAgICAgfCAg IDkgKw0KPj4gLi4uL2MtYysrLWNvbW1vbi9Xc3RyaWN0LWZsZXgtYXJyYXlzXzIuYyAgICAgIHwg ICA5ICsNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtMi5jICB8 ICA0NiArKysNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtMy5j ICB8ICA0NiArKysNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMt NC5jICB8ICA0OSArKysrDQo+PiBnY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJy YXlzLTUuYyAgfCAgNDggKysrKw0KPj4gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4 LWFycmF5cy02LmMgIHwgIDQ4ICsrKysNCj4+IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3Qt ZmxleC1hcnJheXMtNy5jICB8ICA1MCArKysrDQo+PiBnY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3Ry aWN0LWZsZXgtYXJyYXlzLTguYyAgfCAgNDkgKysrKw0KPj4gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv V3N0cmljdC1mbGV4LWFycmF5cy05LmMgIHwgIDQ5ICsrKysNCj4+IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL1dzdHJpY3QtZmxleC1hcnJheXMuYyAgICB8ICA0NiArKysNCj4+IGdjYy90cmVlLXZycC5j YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQ0KPj4gZ2NjL3RyZWUuY2Mg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTY1ICsrKysrKysrLS0tDQo+PiBn Y2MvdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4+ IDIxIGZpbGVzIGNoYW5nZWQsIDg3MCBpbnNlcnRpb25zKCspLCAxMzYgZGVsZXRpb25zKC0pDQo+ PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV3N0cmljdC1m bGV4LWFycmF5cy5jDQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vV3N0cmljdC1mbGV4LWFycmF5c18yLmMNCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTIuYw0KPj4gY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtMy5jDQo+PiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5 cy00LmMNCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0 LWZsZXgtYXJyYXlzLTUuYw0KPj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL1dzdHJpY3QtZmxleC1hcnJheXMtNi5jDQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy03LmMNCj4+IGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTguYw0KPj4gY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMt OS5jDQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1m bGV4LWFycmF5cy5jDQo+PiANCj4+IGRpZmYgLS1naXQgYS9nY2MvYXR0cmlicy5jYyBiL2djYy9h dHRyaWJzLmNjDQo+PiBpbmRleCAyN2RlYTc0ODU2MS4uMDk1ZGVmNGQ2YjAgMTAwNjQ0DQo+PiAt LS0gYS9nY2MvYXR0cmlicy5jYw0KPj4gKysrIGIvZ2NjL2F0dHJpYnMuY2MNCj4+IEBAIC0yNDU2 LDYgKzI0NTYsMzYgQEAgaW5pdF9hdHRyX3Jkd3JfaW5kaWNlcyAocmR3cl9tYXAgKnJ3bSwgdHJl ZSBhdHRycykNCj4+ICAgICB9DQo+PiB9DQo+PiANCj4+ICsvKiBHZXQgdGhlIExFVkVMIG9mIHRo ZSBzdHJpY3RfZmxleF9hcnJheSBmb3IgdGhlIEFSUkFZX0ZJRUxEIGJhc2VkIG9uIHRoZQ0KPj4g KyAgIHZhbHVlcyBvZiBhdHRyaWJ1dGUgc3RyaWN0X2ZsZXhfYXJyYXkgYW5kIHRoZSBmbGFnX3N0 cmljdF9mbGV4X2FycmF5cy4gICovDQo+PiArdW5zaWduZWQgaW50DQo+PiArc3RyaWN0X2ZsZXhf YXJyYXlfbGV2ZWxfb2YgKHRyZWUgYXJyYXlfZmllbGQpDQo+PiArew0KPj4gKyAgZ2NjX2Fzc2Vy dCAoVFJFRV9DT0RFIChhcnJheV9maWVsZCkgPT0gRklFTERfREVDTCk7DQo+PiArICB1bnNpZ25l ZCBpbnQgc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwgPSBmbGFnX3N0cmljdF9mbGV4X2FycmF5czsN Cj4+ICsNCj4+ICsgIHRyZWUgYXR0cl9zdHJpY3RfZmxleF9hcnJheQ0KPj4gKyAgICA9IGxvb2t1 cF9hdHRyaWJ1dGUgKCJzdHJpY3RfZmxleF9hcnJheSIsIERFQ0xfQVRUUklCVVRFUyAoYXJyYXlf ZmllbGQpKTsNCj4+ICsgIC8qIElmIHRoZXJlIGlzIGEgc3RyaWN0X2ZsZXhfYXJyYXkgYXR0cmli dXRlIGF0dGFjaGVkIHRvIHRoZSBmaWVsZCwNCj4+ICsgICAgIG92ZXJyaWRlIHRoZSBmbGFnX3N0 cmljdF9mbGV4X2FycmF5cy4gICovDQo+PiArICBpZiAoYXR0cl9zdHJpY3RfZmxleF9hcnJheSkN Cj4+ICsgICAgew0KPj4gKyAgICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGxldmVsIGZpcnN0 IGZyb20gdGhlIGF0dHJpYnV0ZS4gICovDQo+PiArICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lO VCBhdHRyX3N0cmljdF9mbGV4X2FycmF5X2xldmVsID0gMDsNCj4+ICsgICAgICBnY2NfYXNzZXJ0 IChUUkVFX1ZBTFVFIChhdHRyX3N0cmljdF9mbGV4X2FycmF5KSAhPSBOVUxMX1RSRUUpOw0KPj4g KyAgICAgIGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkgPSBUUkVFX1ZBTFVFIChhdHRyX3N0cmljdF9m bGV4X2FycmF5KTsNCj4+ICsgICAgICBnY2NfYXNzZXJ0IChUUkVFX1ZBTFVFIChhdHRyX3N0cmlj dF9mbGV4X2FycmF5KSAhPSBOVUxMX1RSRUUpOw0KPj4gKyAgICAgIGF0dHJfc3RyaWN0X2ZsZXhf YXJyYXkgPSBUUkVFX1ZBTFVFIChhdHRyX3N0cmljdF9mbGV4X2FycmF5KTsNCj4+ICsgICAgICBn Y2NfYXNzZXJ0ICh0cmVlX2ZpdHNfdWh3aV9wIChhdHRyX3N0cmljdF9mbGV4X2FycmF5KSk7DQo+ PiArICAgICAgYXR0cl9zdHJpY3RfZmxleF9hcnJheV9sZXZlbCA9IHRyZWVfdG9fdWh3aSAoYXR0 cl9zdHJpY3RfZmxleF9hcnJheSk7DQo+PiArDQo+PiArICAgICAgLyogVGhlIGF0dHJpYnV0ZSBo YXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gZmxhZ19zdHJ1Y3RfZmxleF9hcnJheS4gICovDQo+PiAr ICAgICAgc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwgPSBhdHRyX3N0cmljdF9mbGV4X2FycmF5X2xl dmVsOw0KPj4gKyAgICB9DQo+PiArICByZXR1cm4gc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWw7DQo+ PiArfQ0KPj4gKw0KPj4gKw0KPj4gLyogUmV0dXJuIHRoZSBhY2Nlc3Mgc3BlY2lmaWNhdGlvbiBm b3IgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgUEFSTQ0KPj4gICAgb3IgbnVsbCBpZiB0aGUgY3VycmVu dCBmdW5jdGlvbiBoYXMgbm8gc3VjaCBzcGVjaWZpY2F0aW9uLiAgKi8NCj4+IA0KPj4gZGlmZiAt LWdpdCBhL2djYy9hdHRyaWJzLmggYi9nY2MvYXR0cmlicy5oDQo+PiBpbmRleCAxZGMxNmU0YmM0 ZS4uNzQyODExZTZmZGEgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvYXR0cmlicy5oDQo+PiArKysgYi9n Y2MvYXR0cmlicy5oDQo+PiBAQCAtMzk4LDQgKzM5OCw2IEBAIGV4dGVybiB2b2lkIGluaXRfYXR0 cl9yZHdyX2luZGljZXMgKHJkd3JfbWFwICosIHRyZWUpOw0KPj4gZXh0ZXJuIGF0dHJfYWNjZXNz ICpnZXRfcGFybV9hY2Nlc3MgKHJkd3JfbWFwICYsIHRyZWUsDQo+PiAJCQkJICAgICB0cmVlID0g Y3VycmVudF9mdW5jdGlvbl9kZWNsKTsNCj4+IA0KPj4gK2V4dGVybiB1bnNpZ25lZCBpbnQgc3Ry aWN0X2ZsZXhfYXJyYXlfbGV2ZWxfb2YgKHRyZWUpOw0KPj4gKw0KPj4gI2VuZGlmIC8vIEdDQ19B VFRSSUJTX0gNCj4+IGRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1p bHkvYy5vcHQNCj4+IGluZGV4IDAxZDQ4MDc1OWFlLi5iYzMzNzEwYTY0OSAxMDA2NDQNCj4+IC0t LSBhL2djYy9jLWZhbWlseS9jLm9wdA0KPj4gKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0DQo+PiBA QCAtOTY4LDYgKzk2OCwxMSBAQCBXc3RyaW5nb3AtdHJ1bmNhdGlvbg0KPj4gQyBPYmpDIEMrKyBM VE8gT2JqQysrIFZhcih3YXJuX3N0cmluZ29wX3RydW5jYXRpb24pIFdhcm5pbmcgSW5pdCAoMSkg TGFuZ0VuYWJsZWRCeShDIE9iakMgQysrIExUTyBPYmpDKyssIFdhbGwpDQo+PiBXYXJuIGFib3V0 IHRydW5jYXRpb24gaW4gc3RyaW5nIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgbGlrZSBzdHJuY2F0 IGFuZCBzdHJuY3B5Lg0KPj4gDQo+PiArV3N0cmljdC1mbGV4LWFycmF5cw0KPj4gK0MgQysrIFZh cih3YXJuX3N0cmljdF9mbGV4X2FycmF5cykgV2FybmluZw0KPj4gK1dhcm4gYWJvdXQgaW5wcm9w ZXIgdXNhZ2VzIG9mIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMNCj4+ICthY2NvcmRpbmcgdG8gdGhl IGxldmVsIG9mIC1mc3RyaWN0LWZsZXgtYXJyYXlzLg0KPj4gKw0KPj4gV3N1Z2dlc3QtYXR0cmli dXRlPWZvcm1hdA0KPj4gQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fc3VnZ2VzdF9hdHRyaWJ1 dGVfZm9ybWF0KSBXYXJuaW5nDQo+PiBXYXJuIGFib3V0IGZ1bmN0aW9ucyB3aGljaCBtaWdodCBi ZSBjYW5kaWRhdGVzIGZvciBmb3JtYXQgYXR0cmlidXRlcy4NCj4+IGRpZmYgLS1naXQgYS9nY2Mv Yy9jLWRlY2wuY2MgYi9nY2MvYy9jLWRlY2wuY2MNCj4+IGluZGV4IDQ3NDZlMzEwZDJkLi5jOWNi NDZkYWFjYyAxMDA2NDQNCj4+IC0tLSBhL2djYy9jL2MtZGVjbC5jYw0KPj4gKysrIGIvZ2NjL2Mv Yy1kZWNsLmNjDQo+PiBAQCAtODgyOCw3ICs4ODI4LDYgQEAgZmluaXNoX2luY29tcGxldGVfdmFy cyAodHJlZSBpbmNvbXBsZXRlX3ZhcnMsIGJvb2wgdG9wbGV2ZWwpDQo+PiAgICAgfQ0KPj4gfQ0K Pj4gDQo+PiAtDQo+PiAvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgRklFTERfREVDTCBYIGlzIGEg ZmxleGlibGUgYXJyYXkgbWVtYmVyIGFjY29yZGluZyB0bw0KPj4gICAgdGhlIGZvbGxvd2luZyBp bmZvOg0KPj4gICBBLiB3aGV0aGVyIHRoZSBGSUVMRF9ERUNMIFggaXMgdGhlIGxhc3QgZmllbGQg b2YgdGhlIERFQ0xfQ09OVEVYVDsNCj4+IEBAIC04ODU1LDI2ICs4ODU0LDcgQEAgaXNfZmxleGli bGVfYXJyYXlfbWVtYmVyX3AgKGJvb2wgaXNfbGFzdF9maWVsZCwNCj4+ICAgYm9vbCBpc19vbmVf ZWxlbWVudF9hcnJheSA9IG9uZV9lbGVtZW50X2FycmF5X3R5cGVfcCAoVFJFRV9UWVBFICh4KSk7 DQo+PiAgIGJvb2wgaXNfZmxleGlibGVfYXJyYXkgPSBmbGV4aWJsZV9hcnJheV9tZW1iZXJfdHlw ZV9wIChUUkVFX1RZUEUgKHgpKTsNCj4+IA0KPj4gLSAgdW5zaWduZWQgaW50IHN0cmljdF9mbGV4 X2FycmF5X2xldmVsID0gZmxhZ19zdHJpY3RfZmxleF9hcnJheXM7DQo+PiAtDQo+PiAtICB0cmVl IGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkgPSBsb29rdXBfYXR0cmlidXRlICgic3RyaWN0X2ZsZXhf YXJyYXkiLA0KPj4gLQkJCQkJCSAgREVDTF9BVFRSSUJVVEVTICh4KSk7DQo+PiAtICAvKiBJZiB0 aGVyZSBpcyBhIHN0cmljdF9mbGV4X2FycmF5IGF0dHJpYnV0ZSBhdHRhY2hlZCB0byB0aGUgZmll bGQsDQo+PiAtICAgICBvdmVycmlkZSB0aGUgZmxhZ19zdHJpY3RfZmxleF9hcnJheXMuICAqLw0K Pj4gLSAgaWYgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpDQo+PiAtICAgIHsNCj4+IC0gICAgICAv KiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBsZXZlbCBmaXJzdCBmcm9tIHRoZSBhdHRyaWJ1dGUuICAq Lw0KPj4gLSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYXR0cl9zdHJpY3RfZmxleF9hcnJh eV9sZXZlbCA9IDA7DQo+PiAtICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9WQUxVRSAoYXR0cl9zdHJp Y3RfZmxleF9hcnJheSkgIT0gTlVMTF9UUkVFKTsNCj4+IC0gICAgICBhdHRyX3N0cmljdF9mbGV4 X2FycmF5ID0gVFJFRV9WQUxVRSAoYXR0cl9zdHJpY3RfZmxleF9hcnJheSk7DQo+PiAtICAgICAg Z2NjX2Fzc2VydCAoVFJFRV9WQUxVRSAoYXR0cl9zdHJpY3RfZmxleF9hcnJheSkgIT0gTlVMTF9U UkVFKTsNCj4+IC0gICAgICBhdHRyX3N0cmljdF9mbGV4X2FycmF5ID0gVFJFRV9WQUxVRSAoYXR0 cl9zdHJpY3RfZmxleF9hcnJheSk7DQo+PiAtICAgICAgZ2NjX2Fzc2VydCAodHJlZV9maXRzX3Vo d2lfcCAoYXR0cl9zdHJpY3RfZmxleF9hcnJheSkpOw0KPj4gLSAgICAgIGF0dHJfc3RyaWN0X2Zs ZXhfYXJyYXlfbGV2ZWwgPSB0cmVlX3RvX3Vod2kgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpOw0K Pj4gLQ0KPj4gLSAgICAgIC8qIFRoZSBhdHRyaWJ1dGUgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFu IGZsYWdfc3RydWN0X2ZsZXhfYXJyYXkuICAqLw0KPj4gLSAgICAgIHN0cmljdF9mbGV4X2FycmF5 X2xldmVsID0gYXR0cl9zdHJpY3RfZmxleF9hcnJheV9sZXZlbDsNCj4+IC0gICAgfQ0KPj4gKyAg dW5zaWduZWQgaW50IHN0cmljdF9mbGV4X2FycmF5X2xldmVsID0gc3RyaWN0X2ZsZXhfYXJyYXlf bGV2ZWxfb2YgKHgpOw0KPj4gDQo+PiAgIHN3aXRjaCAoc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwp DQo+PiAgICAgew0KPj4gZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9j L2ludm9rZS50ZXhpDQo+PiBpbmRleCA2NGY3N2U4MzY3YS4uYTM1ZTZiZjI3ZTAgMTAwNjQ0DQo+ PiAtLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpDQo+PiArKysgYi9nY2MvZG9jL2ludm9rZS50ZXhp DQo+PiBAQCAtMzk3LDcgKzM5Nyw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERp YWxlY3RzfS4NCj4+IC1Xc3RyaWN0LWFsaWFzaW5nPW4gIC1Xc3RyaWN0LW92ZXJmbG93ICAtV3N0 cmljdC1vdmVyZmxvdz1AdmFye259IEBnb2wNCj4+IC1Xc3RyaW5nLWNvbXBhcmUgQGdvbA0KPj4g LVduby1zdHJpbmdvcC1vdmVyZmxvdyAtV25vLXN0cmluZ29wLW92ZXJyZWFkIEBnb2wNCj4+IC0t V25vLXN0cmluZ29wLXRydW5jYXRpb24gQGdvbA0KPj4gKy1Xbm8tc3RyaW5nb3AtdHJ1bmNhdGlv biAtV3N0cmljdC1mbGV4LWFycmF5cyBAZ29sDQo+PiAtV3N1Z2dlc3QtYXR0cmlidXRlPUBye1t9 cHVyZUBye3x9Y29uc3RAcnt8fW5vcmV0dXJuQHJ7fH1mb3JtYXRAcnt8fW1hbGxvY0Bye119IEBn b2wNCj4+IC1Xc3dpdGNoICAtV25vLXN3aXRjaC1ib29sICAtV3N3aXRjaC1kZWZhdWx0ICAtV3N3 aXRjaC1lbnVtIEBnb2wNCj4+IC1Xbm8tc3dpdGNoLW91dHNpZGUtcmFuZ2UgIC1Xbm8tc3dpdGNo LXVucmVhY2hhYmxlICAtV3N5bmMtbmFuZCBAZ29sDQo+PiBAQCAtMjg0OCwxMiArMjg0OCwxOCBA QCBUaGUgbmVnYXRpdmUgZm9ybSBpcyBlcXVpdmFsZW50IHRvIEBvcHRpb257LWZzdHJpY3QtZmxl eC1hcnJheXM9MH0sIHdoaWNoIGlzIHRoZQ0KPj4gbGVhc3Qgc3RyaWN0LiAgQWxsIHRyYWlsaW5n IGFycmF5cyBvZiBzdHJ1Y3R1cmVzIGFyZSB0cmVhdGVkIGFzIGZsZXhpYmxlIGFycmF5DQo+PiBt ZW1iZXJzLg0KPj4gDQo+PiArVGhpcyBvcHRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBAb3B0 aW9uey1XYXJyYXktYm91bmRzfSBkdWUgdG8gaGlzdG9yaWNhbA0KPj4gK3JlYXNvbi4gIFRoZSBi ZWhhdmlvciBvZiBAb3B0aW9uey1XYXJyYXktYm91bmRzfSBpcyBub3QgY2hhbmdlZCBieSB0aGlz IG9wdGlvbi4NCj4+ICsNCj4+IEBpdGVtIC1mc3RyaWN0LWZsZXgtYXJyYXlzPUB2YXJ7bGV2ZWx9 DQo+PiBAb3BpbmRleCBmc3RyaWN0LWZsZXgtYXJyYXlzPUB2YXJ7bGV2ZWx9DQo+PiBDb250cm9s IHdoZW4gdG8gdHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0dXJlIGFzIGEgZmxl eGlibGUgYXJyYXkNCj4+IG1lbWJlciBmb3IgdGhlIHB1cnBvc2Ugb2YgYWNjZXNzaW5nIHRoZSBl bGVtZW50cyBvZiBzdWNoIGFuIGFycmF5LiAgVGhlIHZhbHVlDQo+PiBvZiBAdmFye2xldmVsfSBj b250cm9scyB0aGUgbGV2ZWwgb2Ygc3RyaWN0bmVzcy4NCj4+IA0KPj4gK1RoaXMgb3B0aW9uIGlz IG5vdCBjb21wYXRpYmxlIHdpdGggQG9wdGlvbnstV2FycmF5LWJvdW5kc30gZHVlIHRvIGhpc3Rv cmljYWwNCj4+ICtyZWFzb24uICBUaGUgYmVoYXZpb3Igb2YgQG9wdGlvbnstV2FycmF5LWJvdW5k c30gaXMgbm90IGNoYW5nZWQgYnkgdGhpcyBvcHRpb24uDQo+PiArDQo+PiBUaGUgcG9zc2libGUg dmFsdWVzIG9mIEB2YXJ7bGV2ZWx9IGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlDQo+PiBAY29kZXtz dHJpY3RfZmxleF9hcnJheX0gYXR0cmlidXRlIChAcHhyZWZ7VmFyaWFibGUgQXR0cmlidXRlc30p Lg0KPj4gDQo+PiBAQCAtNzY2Miw2ICs3NjY4LDMxIEBAIGhvd2V2ZXIsIGFyZSBub3Qgc3VpdGFi bGUgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucyB0aGF0IGV4cGVjdA0KPj4gc3VjaCBhcnJheXMgR0ND IGlzc3VlcyB3YXJuaW5ncyB1bmxlc3MgaXQgY2FuIHByb3ZlIHRoYXQgdGhlIHVzZSBpcw0KPj4g c2FmZS4gIEB4cmVme0NvbW1vbiBWYXJpYWJsZSBBdHRyaWJ1dGVzfS4NCj4+IA0KPj4gK0BpdGVt IC1Xc3RyaWN0LWZsZXgtYXJyYXlzDQo+PiArQG9waW5kZXggV3N0cmljdC1mbGV4LWFycmF5cw0K Pj4gK0BvcGluZGV4IFduby1zdHJpY3QtZmxleC1hcnJheXMNCj4+ICtXYXJuIGFib3V0IGlucHJv cGVyIHVzYWdlcyBvZiBmbGV4aWJsZSBhcnJheSBtZW1iZXJzDQo+PiArYWNjb3JkaW5nIHRvIHRo ZSBAdmFye2xldmVsfSBvZiB0aGUgQGNvZGV7c3RyaWN0X2ZsZXhfYXJyYXkgKEB2YXJ7bGV2ZWx9 KX0NCj4+ICthdHRyaWJ1dGUgYXR0YWNoZWQgdG8gdGhlIHRyYWlsaW5nIGFycmF5IGZpZWxkIG9m IGEgc3RydWN0dXJlIGlmIGl0J3MNCj4+ICthdmFpbGFibGUsIG90aGVyd2lzZSBhY2NvcmRpbmcg dG8gdGhlIEB2YXJ7bGV2ZWx9IG9mIHRoZSBvcHRpb24NCj4+ICtAb3B0aW9uey1mc3RyaWN0LWZs ZXgtYXJyYXlzPUB2YXJ7bGV2ZWx9fS4NCj4+ICsNCj4+ICtUaGlzIG9wdGlvbiBpcyBlZmZlY3Rp dmUgb25seSB3aGVuIEB2YXJ7bGV2ZWx9IGlzIGJpZ2dlciB0aGFuIDAuICBPdGhlcndpc2UsDQo+ PiAraXQgd2lsbCBiZSBpZ25vcmVkIHdpdGggYSB3YXJuaW5nLg0KPj4gKw0KPj4gK3doZW4gQHZh cntsZXZlbH09MSwgd2FybmluZ3Mgd2lsbCBiZSBpc3N1ZWQgZm9yIGEgdHJhaWxpbmcgYXJyYXkg cmVmZXJlbmNlDQo+PiArb2YgYSBzdHJ1Y3R1cmUgdGhhdCBoYXZlIDIgb3IgbW9yZSBlbGVtZW50 cyBpZiB0aGUgdHJhaWxpbmcgYXJyYXkgaXMgcmVmZXJlbmNlZA0KPj4gK2FzIGEgZmxleGlibGUg YXJyYXkgbWVtYmVyLg0KPj4gKw0KPj4gK3doZW4gQHZhcntsZXZlbH09MiwgaW4gYWRkaXRpb24g dG8gQHZhcntsZXZlbH09MSwgYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlDQo+PiAraXNzdWVk IGZvciBhIHRyYWlsaW5nIG9uZS1lbGVtZW50IGFycmF5IHJlZmVyZW5jZSBvZiBhIHN0cnVjdHVy ZQ0KPj4gK2lmIHRoZSBhcnJheSBpcyByZWZlcmVuY2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVt YmVyLg0KPj4gKw0KPj4gK3doZW4gQHZhcntsZXZlbH09MywgaW4gYWRkaXRpb24gdG8gQHZhcnts ZXZlbH09MiwgYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlDQo+PiAraXNzdWVkIGZvciBhIHRy YWlsaW5nIHplcm8tbGVuZ3RoIGFycmF5IHJlZmVyZW5jZSBvZiBhIHN0cnVjdHVyZQ0KPj4gK2lm IHRoZSBhcnJheSBpcyByZWZlcmVuY2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyLg0KPj4g Kw0KPj4gKw0KPj4gQGl0ZW0gLVdzdWdnZXN0LWF0dHJpYnV0ZT1AcntbfXB1cmVAcnt8fWNvbnN0 QHJ7fH1ub3JldHVybkBye3x9Zm9ybWF0QHJ7fH1jb2xkQHJ7fH1tYWxsb2NAcntdfQ0KPj4gQG9w aW5kZXggV3N1Z2dlc3QtYXR0cmlidXRlPQ0KPj4gQG9waW5kZXggV25vLXN1Z2dlc3QtYXR0cmli dXRlPQ0KPj4gZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtYXJyYXktYm91bmRzLmNjIGIvZ2NjL2dp bXBsZS1hcnJheS1ib3VuZHMuY2MNCj4+IGluZGV4IGZiZjQ0OGUwNDVkLi43Zjc5MGM1YTE5YSAx MDA2NDQNCj4+IC0tLSBhL2djYy9naW1wbGUtYXJyYXktYm91bmRzLmNjDQo+PiArKysgYi9nY2Mv Z2ltcGxlLWFycmF5LWJvdW5kcy5jYw0KPj4gQEAgLTE3MCwzOCArMTcwLDIwIEBAIHRyYWlsaW5n X2FycmF5ICh0cmVlIGFyZywgdHJlZSAqcHJlZikNCj4+ICAgcmV0dXJuIGFycmF5X3JlZl9mbGV4 aWJsZV9zaXplX3AgKGFyZyk7DQo+PiB9DQo+PiANCj4+IC0vKiBDaGVja3Mgb25lIEFSUkFZX1JF RiBpbiBSRUYsIGxvY2F0ZWQgYXQgTE9DVVMuIElnbm9yZXMgZmxleGlibGUNCj4+IC0gICBhcnJh eXMgYW5kICJzdHJ1Y3QiIGhhY2tzLiBJZiBWUlAgY2FuIGRldGVybWluZSB0aGF0IHRoZSBhcnJh eQ0KPj4gLSAgIHN1YnNjcmlwdCBpcyBhIGNvbnN0YW50LCBjaGVjayBpZiBpdCBpcyBvdXRzaWRl IHZhbGlkIHJhbmdlLiAgSWYNCj4+IC0gICB0aGUgYXJyYXkgc3Vic2NyaXB0IGlzIGEgUkFOR0Us IHdhcm4gaWYgaXQgaXMgbm9uLW92ZXJsYXBwaW5nIHdpdGgNCj4+IC0gICB2YWxpZCByYW5nZS4g IElHTk9SRV9PRkZfQllfT05FIGlzIHRydWUgaWYgdGhlIEFSUkFZX1JFRiBpcyBpbnNpZGUNCj4+ IC0gICBhIEFERFJfRVhQUi4gIFJldHVybiAgdHJ1ZSBpZiBhIHdhcm5pbmcgaGFzIGJlZW4gaXNz dWVkIG9yIGlmDQo+PiAtICAgbm8td2FybmluZyBpcyBzZXQuICAqLw0KPj4gLQ0KPj4gLWJvb2wN Cj4+IC1hcnJheV9ib3VuZHNfY2hlY2tlcjo6Y2hlY2tfYXJyYXlfcmVmIChsb2NhdGlvbl90IGxv Y2F0aW9uLCB0cmVlIHJlZiwNCj4+IC0JCQkJICAgICAgIGdpbXBsZSAqc3RtdCwgYm9vbCBpZ25v cmVfb2ZmX2J5X29uZSkNCj4+ICsvKiBBY3F1aXJlIHRoZSB1cHBlciBib3VuZCBhbmQgdXBwZXIg Ym91bmQgcGx1cyBvbmUgZm9yIHRoZSBhcnJheQ0KPj4gKyAgIHJlZmVyZW5jZSBSRUYgYW5kIHJl Y29yZCB0aGVtIGludG8gVVBfQk9VTkQgYW5kIFVQX0JPVU5EX1AxLg0KPj4gKyAgIFNldCAqREVD TCB0byB0aGUgZGVjbCBvciBleHByZXNzc2lvbiBSRUYgcmVmZXJzIHRvLg0KPj4gKyAgIEZPUl9B UlJBWV9CT1VORCBpcyB0cnVlIHdoZW4gdGhpcyBpcyBmb3IgYXJyYXkgYm91bmQgY2hlY2tpbmcu ICAqLw0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiArZ2V0X3VwX2JvdW5kc19mb3JfYXJyYXlf cmVmICh0cmVlIHJlZiwgdHJlZSAqZGVjbCwNCj4+ICsJCQkgICAgIHRyZWUgKnVwX2JvdW5kLCB0 cmVlICp1cF9ib3VuZF9wMSwNCj4+ICsJCQkgICAgIGJvb2wgZm9yX2FycmF5X2JvdW5kKQ0KPj4g ew0KPj4gLSAgaWYgKHdhcm5pbmdfc3VwcHJlc3NlZF9wIChyZWYsIE9QVF9XYXJyYXlfYm91bmRz KSkNCj4+IC0gICAgLyogUmV0dXJuIHRydWUgdG8gaGF2ZSB0aGUgY2FsbGVyIHByZXZlbnQgd2Fy bmluZ3MgZm9yIGVuY2xvc2luZw0KPj4gLSAgICAgICByZWZzLiAgKi8NCj4+IC0gICAgcmV0dXJu IHRydWU7DQo+PiAtDQo+PiAtICB0cmVlIGxvd19zdWIgPSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7 DQo+PiAtICB0cmVlIHVwX3N1YiA9IGxvd19zdWI7DQo+PiAtICB0cmVlIHVwX2JvdW5kID0gYXJy YXlfcmVmX3VwX2JvdW5kIChyZWYpOw0KPj4gLQ0KPj4gLSAgLyogUmVmZXJlbmNlZCBkZWNsIGlm IG9uZSBjYW4gYmUgZGV0ZXJtaW5lZC4gICovDQo+PiAtICB0cmVlIGRlY2wgPSBOVUxMX1RSRUU7 DQo+PiAtDQo+PiAtICAvKiBTZXQgZm9yIGFjY2Vzc2VzIHRvIGludGVyaW9yIHplcm8tbGVuZ3Ro IGFycmF5cy4gICovDQo+PiAtICBzcGVjaWFsX2FycmF5X21lbWJlciBzYW17IH07DQo+PiAtDQo+ PiAtICB0cmVlIHVwX2JvdW5kX3AxOw0KPj4gLQ0KPj4gLSAgaWYgKCF1cF9ib3VuZA0KPj4gLSAg ICAgIHx8IFRSRUVfQ09ERSAodXBfYm91bmQpICE9IElOVEVHRVJfQ1NUDQo+PiAtICAgICAgfHwg KHdhcm5fYXJyYXlfYm91bmRzIDwgMiAmJiB0cmFpbGluZ19hcnJheSAocmVmLCAmZGVjbCkpKQ0K Pj4gKyAgaWYgKCEoKnVwX2JvdW5kKQ0KPj4gKyAgICAgIHx8IFRSRUVfQ09ERSAoKnVwX2JvdW5k KSAhPSBJTlRFR0VSX0NTVA0KPj4gKyAgICAgIHx8ICgoZm9yX2FycmF5X2JvdW5kID8gKHdhcm5f YXJyYXlfYm91bmRzIDwgMikgOiB3YXJuX3N0cmljdF9mbGV4X2FycmF5cykNCj4+ICsJICAgJiYg dHJhaWxpbmdfYXJyYXkgKHJlZiwgZGVjbCkpKQ0KPj4gICAgIHsNCj4+ICAgICAgIC8qIEFjY2Vz c2VzIHRvIHRyYWlsaW5nIGFycmF5cyB2aWEgcG9pbnRlcnMgbWF5IGFjY2VzcyBzdG9yYWdlDQo+ PiAJIGJleW9uZCB0aGUgdHlwZXMgYXJyYXkgYm91bmRzLiAgRm9yIHN1Y2ggYXJyYXlzLCBvciBm b3IgZmxleGlibGUNCj4+IEBAIC0yMTMsOCArMTk1LDggQEAgYXJyYXlfYm91bmRzX2NoZWNrZXI6 OmNoZWNrX2FycmF5X3JlZiAobG9jYXRpb25fdCBsb2NhdGlvbiwgdHJlZSByZWYsDQo+PiAgICAg ICBpZiAoVFJFRV9DT0RFIChlbHRzaXplKSAhPSBJTlRFR0VSX0NTVA0KPj4gCSAgfHwgaW50ZWdl cl96ZXJvcCAoZWx0c2l6ZSkpDQo+PiAJew0KPj4gLQkgIHVwX2JvdW5kID0gTlVMTF9UUkVFOw0K Pj4gLQkgIHVwX2JvdW5kX3AxID0gTlVMTF9UUkVFOw0KPj4gKwkgICp1cF9ib3VuZCA9IE5VTExf VFJFRTsNCj4+ICsJICAqdXBfYm91bmRfcDEgPSBOVUxMX1RSRUU7DQo+PiAJfQ0KPj4gICAgICAg ZWxzZQ0KPj4gCXsNCj4+IEBAIC0yMjcsNyArMjA5LDggQEAgYXJyYXlfYm91bmRzX2NoZWNrZXI6 OmNoZWNrX2FycmF5X3JlZiAobG9jYXRpb25fdCBsb2NhdGlvbiwgdHJlZSByZWYsDQo+PiAJICAg IHsNCj4+IAkgICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSB0cmFpbGlu ZyBhcnJheSBmcm9tDQo+PiAJCSBpdHMgaW5pdGlhbGl6ZXIgKGlmIGl0IGhhcyBvbmUpLiAgKi8N Cj4+IC0JICAgICAgaWYgKHRyZWUgcmVmc2l6ZSA9IGNvbXBvbmVudF9yZWZfc2l6ZSAoYXJnLCAm c2FtKSkNCj4+ICsJICAgICAgaWYgKHRyZWUgcmVmc2l6ZQ0KPj4gKwkJICAgID0gY29tcG9uZW50 X3JlZl9zaXplIChhcmcsIE5VTEwsIGZvcl9hcnJheV9ib3VuZCkpDQo+PiAJCWlmIChUUkVFX0NP REUgKHJlZnNpemUpID09IElOVEVHRVJfQ1NUKQ0KPj4gCQkgIG1heGJvdW5kID0gcmVmc2l6ZTsN Cj4+IAkgICAgfQ0KPj4gQEAgLTI0Niw3ICsyMjksNyBAQCBhcnJheV9ib3VuZHNfY2hlY2tlcjo6 Y2hlY2tfYXJyYXlfcmVmIChsb2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIHJlZiwNCj4+IAkJICAg IHsNCj4+IAkJICAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgc2l6ZSBmcm9tIGEgcG9pbnRl ciB0bw0KPj4gCQkJIGFuIGFycmF5IGlmIEJBU0UgaXMgb25lLiAgKi8NCj4+IC0JCSAgICAgIGlm ICh0cmVlIHNpemUgPSBnZXRfcmVmX3NpemUgKGJhc2UsICZkZWNsKSkNCj4+ICsJCSAgICAgIGlm ICh0cmVlIHNpemUgPSBnZXRfcmVmX3NpemUgKGJhc2UsIGRlY2wpKQ0KPj4gCQkJbWF4Ym91bmQg PSBzaXplOw0KPj4gCQkgICAgfQ0KPj4gCQkgIGVsc2UgaWYgKCFjb21wcmVmICYmIERFQ0xfUCAo YmFzZSkpDQo+PiBAQCAtMjU0LDcgKzIzNyw3IEBAIGFycmF5X2JvdW5kc19jaGVja2VyOjpjaGVj a19hcnJheV9yZWYgKGxvY2F0aW9uX3QgbG9jYXRpb24sIHRyZWUgcmVmLA0KPj4gCQkgICAgICBp ZiAoVFJFRV9DT0RFIChiYXNlc2l6ZSkgPT0gSU5URUdFUl9DU1QpDQo+PiAJCQl7DQo+PiAJCQkg IG1heGJvdW5kID0gYmFzZXNpemU7DQo+PiAtCQkJICBkZWNsID0gYmFzZTsNCj4+ICsJCQkgICpk ZWNsID0gYmFzZTsNCj4+IAkJCX0NCj4+IA0KPj4gCQkgIGlmIChrbm93bl9ndCAob2ZmLCAwKSkN Cj4+IEBAIC0yNjYsNDAgKzI0OSw0NyBAQCBhcnJheV9ib3VuZHNfY2hlY2tlcjo6Y2hlY2tfYXJy YXlfcmVmIChsb2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIHJlZiwNCj4+IAkgIGVsc2UNCj4+IAkg ICAgbWF4Ym91bmQgPSBmb2xkX2NvbnZlcnQgKHNpemV0eXBlLCBtYXhib3VuZCk7DQo+PiANCj4+ IC0JICB1cF9ib3VuZF9wMSA9IGludF9jb25zdF9iaW5vcCAoVFJVTkNfRElWX0VYUFIsIG1heGJv dW5kLCBlbHRzaXplKTsNCj4+ICsJICAqdXBfYm91bmRfcDEgPSBpbnRfY29uc3RfYmlub3AgKFRS VU5DX0RJVl9FWFBSLCBtYXhib3VuZCwgZWx0c2l6ZSk7DQo+PiANCj4+IC0JICBpZiAodXBfYm91 bmRfcDEgIT0gTlVMTF9UUkVFKQ0KPj4gLQkgICAgdXBfYm91bmQgPSBpbnRfY29uc3RfYmlub3Ag KE1JTlVTX0VYUFIsIHVwX2JvdW5kX3AxLA0KPj4gKwkgIGlmICgqdXBfYm91bmRfcDEgIT0gTlVM TF9UUkVFKQ0KPj4gKwkgICAgKnVwX2JvdW5kID0gaW50X2NvbnN0X2Jpbm9wIChNSU5VU19FWFBS LCAqdXBfYm91bmRfcDEsDQo+PiAJCQkJCWJ1aWxkX2ludF9jc3QgKHB0cmRpZmZfdHlwZV9ub2Rl LCAxKSk7DQo+PiAJICBlbHNlDQo+PiAtCSAgICB1cF9ib3VuZCA9IE5VTExfVFJFRTsNCj4+ICsJ ICAgICp1cF9ib3VuZCA9IE5VTExfVFJFRTsNCj4+IAl9DQo+PiAgICAgfQ0KPj4gICBlbHNlDQo+ PiAtICAgIHVwX2JvdW5kX3AxID0gaW50X2NvbnN0X2Jpbm9wIChQTFVTX0VYUFIsIHVwX2JvdW5k LA0KPj4gLQkJCQkgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHVwX2JvdW5kKSwgMSkpOw0K Pj4gKyAgICAqdXBfYm91bmRfcDEgPSBpbnRfY29uc3RfYmlub3AgKFBMVVNfRVhQUiwgKnVwX2Jv dW5kLA0KPj4gKwkJCQkgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKCp1cF9ib3VuZCksIDEp KTsNCj4+ICsgIHJldHVybjsNCj4+ICt9DQo+PiANCj4+IC0gIHRyZWUgbG93X2JvdW5kID0gYXJy YXlfcmVmX2xvd19ib3VuZCAocmVmKTsNCj4+ICsvKiBHaXZlbiB0aGUgTE9XX1NVQl9PUkcsIExP V19TVUIgYW5kIFVQX1NVQiwgYW5kIHRoZSBjb21wdXRlZCBVUF9CT1VORA0KPj4gKyAgIGFuZCBV UF9CT1VORF9QMSwgY2hlY2sgd2hldGhlciB0aGUgYXJyYXkgcmVmZXJlbmNlIFJFRiBpcyBvdXQg b2YgYm91bmQuDQo+PiArICAgV2hlbiBvdXQgb2YgYm91bmRzLCBpc3N1ZSB3YXJuaW5ncyBpZiBG T1JfQVJSQVlfQk9VTkQgaXMgdHJ1ZS4NCj4+ICsgICBvdGhlcndpc2UsIHJldHVybiB0cnVlIHdp dGhvdXQgaXNzdWUgd2FybmluZ3MuICAqLw0KPj4gDQo+PiArc3RhdGljIGJvb2wNCj4+ICtjaGVj a19vdXRfb2ZfYm91bmRzX2FuZF93YXJuIChsb2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIHJlZiwN Cj4+ICsJCQkgICAgICB0cmVlIGxvd19zdWJfb3JnLCB0cmVlIGxvd19zdWIsIHRyZWUgdXBfc3Vi LA0KPj4gKwkJCSAgICAgIHRyZWUgdXBfYm91bmQsIHRyZWUgdXBfYm91bmRfcDEsDQo+PiArCQkJ ICAgICAgY29uc3QgdmFsdWVfcmFuZ2UgKnZyLA0KPj4gKwkJCSAgICAgIGJvb2wgaWdub3JlX29m Zl9ieV9vbmUsIGJvb2wgZm9yX2FycmF5X2JvdW5kKQ0KPj4gK3sNCj4+ICsgIHRyZWUgbG93X2Jv dW5kID0gYXJyYXlfcmVmX2xvd19ib3VuZCAocmVmKTsNCj4+ICAgdHJlZSBhcnR5cGUgPSBUUkVF X1RZUEUgKFRSRUVfT1BFUkFORCAocmVmLCAwKSk7DQo+PiANCj4+ICAgYm9vbCB3YXJuZWQgPSBm YWxzZTsNCj4+IA0KPj4gICAvKiBFbXB0eSBhcnJheS4gICovDQo+PiAgIGlmICh1cF9ib3VuZCAm JiB0cmVlX2ludF9jc3RfZXF1YWwgKGxvd19ib3VuZCwgdXBfYm91bmRfcDEpKQ0KPj4gLSAgICB3 YXJuZWQgPSB3YXJuaW5nX2F0IChsb2NhdGlvbiwgT1BUX1dhcnJheV9ib3VuZHMsDQo+PiAtCQkJ ICJhcnJheSBzdWJzY3JpcHQgJUUgaXMgb3V0c2lkZSBhcnJheSBib3VuZHMgb2YgJXFUIiwNCj4+ IC0JCQkgbG93X3N1YiwgYXJ0eXBlKTsNCj4+IC0NCj4+IC0gIGNvbnN0IHZhbHVlX3JhbmdlICp2 ciA9IE5VTEw7DQo+PiAtICBpZiAoVFJFRV9DT0RFIChsb3dfc3ViKSA9PSBTU0FfTkFNRSkNCj4+ ICAgICB7DQo+PiAtICAgICAgdnIgPSBnZXRfdmFsdWVfcmFuZ2UgKGxvd19zdWIsIHN0bXQpOw0K Pj4gLSAgICAgIGlmICghdnItPnVuZGVmaW5lZF9wICgpICYmICF2ci0+dmFyeWluZ19wICgpKQ0K Pj4gLQl7DQo+PiAtCSAgbG93X3N1YiA9IHZyLT5raW5kICgpID09IFZSX1JBTkdFID8gdnItPm1h eCAoKSA6IHZyLT5taW4gKCk7DQo+PiAtCSAgdXBfc3ViID0gdnItPmtpbmQgKCkgPT0gVlJfUkFO R0UgPyB2ci0+bWluICgpIDogdnItPm1heCAoKTsNCj4+IC0JfQ0KPj4gKyAgICAgIGlmIChmb3Jf YXJyYXlfYm91bmQpDQo+PiArCXdhcm5lZCA9IHdhcm5pbmdfYXQgKGxvY2F0aW9uLCBPUFRfV2Fy cmF5X2JvdW5kcywNCj4+ICsJCQkgICAgICJhcnJheSBzdWJzY3JpcHQgJUUgaXMgb3V0c2lkZSBh cnJheSINCj4+ICsJCQkgICAgICIgYm91bmRzIG9mICVxVCIsIGxvd19zdWJfb3JnLCBhcnR5cGUp Ow0KPj4gKyAgICAgIGVsc2UNCj4+ICsJd2FybmVkID0gdHJ1ZTsNCj4+ICAgICB9DQo+PiANCj4+ ICAgaWYgKHdhcm5lZCkNCj4+IEBAIC0zMTMsMjQgKzMwMywxMjcgQEAgYXJyYXlfYm91bmRzX2No ZWNrZXI6OmNoZWNrX2FycmF5X3JlZiAobG9jYXRpb25fdCBsb2NhdGlvbiwgdHJlZSByZWYsDQo+ PiAJICAgICAgOiB0cmVlX2ludF9jc3RfbGUgKHVwX2JvdW5kLCB1cF9zdWIpKQ0KPj4gCSAgJiYg VFJFRV9DT0RFIChsb3dfc3ViKSA9PSBJTlRFR0VSX0NTVA0KPj4gCSAgJiYgdHJlZV9pbnRfY3N0 X2xlIChsb3dfc3ViLCBsb3dfYm91bmQpKQ0KPj4gLQl3YXJuZWQgPSB3YXJuaW5nX2F0IChsb2Nh dGlvbiwgT1BUX1dhcnJheV9ib3VuZHMsDQo+PiAtCQkJICAgICAiYXJyYXkgc3Vic2NyaXB0IFsl RSwgJUVdIGlzIG91dHNpZGUgIg0KPj4gLQkJCSAgICAgImFycmF5IGJvdW5kcyBvZiAlcVQiLA0K Pj4gLQkJCSAgICAgbG93X3N1YiwgdXBfc3ViLCBhcnR5cGUpOw0KPj4gKwl7DQo+PiArCSAgaWYg KGZvcl9hcnJheV9ib3VuZCkNCj4+ICsJICAgIHdhcm5lZCA9IHdhcm5pbmdfYXQgKGxvY2F0aW9u LCBPUFRfV2FycmF5X2JvdW5kcywNCj4+ICsJCQkJICJhcnJheSBzdWJzY3JpcHQgWyVFLCAlRV0g aXMgb3V0c2lkZSAiDQo+PiArCQkJCSAiYXJyYXkgYm91bmRzIG9mICVxVCIsDQo+PiArCQkJCSBs b3dfc3ViLCB1cF9zdWIsIGFydHlwZSk7DQo+PiArCSAgZWxzZQ0KPj4gKwkgICAgd2FybmVkID0g dHJ1ZTsNCj4+ICsJfQ0KPj4gICAgIH0NCj4+ICAgZWxzZSBpZiAodXBfYm91bmQNCj4+IAkgICAm JiBUUkVFX0NPREUgKHVwX3N1YikgPT0gSU5URUdFUl9DU1QNCj4+IAkgICAmJiAoaWdub3JlX29m Zl9ieV9vbmUNCj4+IAkgICAgICAgPyAhdHJlZV9pbnRfY3N0X2xlICh1cF9zdWIsIHVwX2JvdW5k X3AxKQ0KPj4gCSAgICAgICA6ICF0cmVlX2ludF9jc3RfbGUgKHVwX3N1YiwgdXBfYm91bmQpKSkN Cj4+IC0gICAgd2FybmVkID0gd2FybmluZ19hdCAobG9jYXRpb24sIE9QVF9XYXJyYXlfYm91bmRz LA0KPj4gLQkJCSAiYXJyYXkgc3Vic2NyaXB0ICVFIGlzIGFib3ZlIGFycmF5IGJvdW5kcyBvZiAl cVQiLA0KPj4gLQkJCSB1cF9zdWIsIGFydHlwZSk7DQo+PiArICAgIHsNCj4+ICsgICAgICBpZiAo Zm9yX2FycmF5X2JvdW5kKQ0KPj4gKwl3YXJuZWQgPSB3YXJuaW5nX2F0IChsb2NhdGlvbiwgT1BU X1dhcnJheV9ib3VuZHMsDQo+PiArCQkJICAgICAiYXJyYXkgc3Vic2NyaXB0ICVFIGlzIGFib3Zl IGFycmF5IGJvdW5kcyBvZiAlcVQiLA0KPj4gKwkJCSAgICAgdXBfc3ViLCBhcnR5cGUpOw0KPj4g KyAgICAgIGVsc2UNCj4+ICsJd2FybmVkID0gdHJ1ZTsNCj4+ICsgICAgfQ0KPj4gICBlbHNlIGlm IChUUkVFX0NPREUgKGxvd19zdWIpID09IElOVEVHRVJfQ1NUDQo+PiAJICAgJiYgdHJlZV9pbnRf Y3N0X2x0IChsb3dfc3ViLCBsb3dfYm91bmQpKQ0KPj4gLSAgICB3YXJuZWQgPSB3YXJuaW5nX2F0 IChsb2NhdGlvbiwgT1BUX1dhcnJheV9ib3VuZHMsDQo+PiAtCQkJICJhcnJheSBzdWJzY3JpcHQg JUUgaXMgYmVsb3cgYXJyYXkgYm91bmRzIG9mICVxVCIsDQo+PiAtCQkJIGxvd19zdWIsIGFydHlw ZSk7DQo+PiArICAgIHsNCj4+ICsgICAgICBpZiAoZm9yX2FycmF5X2JvdW5kKQ0KPj4gKwl3YXJu ZWQgPSB3YXJuaW5nX2F0IChsb2NhdGlvbiwgT1BUX1dhcnJheV9ib3VuZHMsDQo+PiArCQkJICAg ICAiYXJyYXkgc3Vic2NyaXB0ICVFIGlzIGJlbG93IGFycmF5IGJvdW5kcyBvZiAlcVQiLA0KPj4g KwkJCSAgICAgbG93X3N1YiwgYXJ0eXBlKTsNCj4+ICsgICAgICBlbHNlDQo+PiArCXdhcm5lZCA9 IHRydWU7DQo+PiArICAgIH0NCj4+ICsgIHJldHVybiB3YXJuZWQ7DQo+PiArfQ0KPj4gKw0KPj4g Ky8qIENoZWNrcyBvbmUgQVJSQVlfUkVGIGluIFJFRiwgbG9jYXRlZCBhdCBMT0NVUy4gIElnbm9y ZXMgZmxleGlibGUNCj4+ICsgICBhcnJheXMgYW5kICJzdHJ1Y3QiIGhhY2tzLiAgSWYgVlJQIGNh biBkZXRlcm1pbmUgdGhhdCB0aGUgYXJyYXkNCj4+ICsgICBzdWJzY3JpcHQgaXMgYSBjb25zdGFu dCwgY2hlY2sgaWYgaXQgaXMgb3V0c2lkZSB2YWxpZCByYW5nZS4gIElmDQo+PiArICAgdGhlIGFy cmF5IHN1YnNjcmlwdCBpcyBhIFJBTkdFLCB3YXJuIGlmIGl0IGlzIG5vbi1vdmVybGFwcGluZyB3 aXRoDQo+PiArICAgdmFsaWQgcmFuZ2UuICBJR05PUkVfT0ZGX0JZX09ORSBpcyB0cnVlIGlmIHRo ZSBBUlJBWV9SRUYgaXMgaW5zaWRlDQo+PiArICAgYSBBRERSX0VYUFIuICBSZXR1cm4gIHRydWUg aWYgYSB3YXJuaW5nIGhhcyBiZWVuIGlzc3VlZCBvciBpZg0KPj4gKyAgIG5vLXdhcm5pbmcgaXMg c2V0LiAgKi8NCj4+ICsNCj4+ICtib29sDQo+PiArYXJyYXlfYm91bmRzX2NoZWNrZXI6OmNoZWNr X2FycmF5X3JlZiAobG9jYXRpb25fdCBsb2NhdGlvbiwgdHJlZSByZWYsDQo+PiArCQkJCSAgICAg ICBnaW1wbGUgKnN0bXQsIGJvb2wgaWdub3JlX29mZl9ieV9vbmUpDQo+PiArew0KPj4gKyAgaWYg KHdhcm5pbmdfc3VwcHJlc3NlZF9wIChyZWYsIE9QVF9XYXJyYXlfYm91bmRzKSkNCj4+ICsgICAg LyogUmV0dXJuIHRydWUgdG8gaGF2ZSB0aGUgY2FsbGVyIHByZXZlbnQgd2FybmluZ3MgZm9yIGVu Y2xvc2luZw0KPj4gKyAgICAgICByZWZzLiAgKi8NCj4+ICsgICAgcmV0dXJuIHRydWU7DQo+PiAr DQo+PiArICAvKiBVcHBlciBib3VuZCBhbmQgVXBwZXIgYm91bmQgcGx1cyBvbmUgZm9yIC1XYXJy YXktYm91bmRzLiAgKi8NCj4+ICsgIHRyZWUgdXBfYm91bmQgPSBhcnJheV9yZWZfdXBfYm91bmQg KHJlZik7DQo+PiArICB0cmVlIHVwX2JvdW5kX3AxID0gTlVMTF9UUkVFOw0KPj4gKw0KPj4gKyAg LyogVXBwZXIgYm91bmQgYW5kIHVwcGVyIGJvdW5kIHBsdXMgb25lIGZvciAtV3N0cmljdC1mbGV4 LWFycmF5LiAgKi8NCj4+ICsgIHRyZWUgdXBfYm91bmRfc3RyaWN0ID0gdXBfYm91bmQ7DQo+PiAr ICB0cmVlIHVwX2JvdW5kX3AxX3N0cmljdCA9IE5VTExfVFJFRTsNCj4+ICsNCj4+ICsgIC8qIFJl ZmVyZW5jZWQgZGVjbCBpZiBvbmUgY2FuIGJlIGRldGVybWluZWQuICAqLw0KPj4gKyAgdHJlZSBk ZWNsID0gTlVMTF9UUkVFOw0KPj4gKw0KPj4gKyAgLyogU2V0IHRvIHRoZSB0eXBlIG9mIHRoZSBz cGVjaWFsIGFycmF5IG1lbWJlciBmb3IgYSBDT01QT05FTlRfUkVGLiAgKi8NCj4+ICsgIHNwZWNp YWxfYXJyYXlfbWVtYmVyIHNhbXsgfTsNCj4+ICsNCj4+ICsgIHRyZWUgYXJnID0gVFJFRV9PUEVS QU5EIChyZWYsIDApOw0KPj4gKyAgY29uc3QgYm9vbCBjb21wcmVmID0gVFJFRV9DT0RFIChhcmcp ID09IENPTVBPTkVOVF9SRUY7DQo+PiArDQo+PiArICB1bnNpZ25lZCBpbnQgc3RyaWN0X2ZsZXhf YXJyYXlfbGV2ZWwgPSBmbGFnX3N0cmljdF9mbGV4X2FycmF5czsNCj4+ICsNCj4+ICsgIGlmIChj b21wcmVmKQ0KPj4gKyAgICB7DQo+PiArICAgICAgLyogVHJ5IHRvIGRldGVybWluZSBzcGVjaWFs IGFycmF5IG1lbWJlciB0eXBlIGZvciB0aGlzIENPTVBPTkVOVF9SRUYuICAqLw0KPj4gKyAgICAg IHNhbSA9IGNvbXBvbmVudF9yZWZfc2FtX3R5cGUgKGFyZyk7DQo+PiArICAgICAgLyogR2V0IHRo ZSBsZXZlbCBvZiBzdHJpY3RfZmxleF9hcnJheSBmb3IgdGhpcyBhcnJheSBmaWVsZC4gICovDQo+ PiArICAgICAgdHJlZSBhZmllbGRfZGVjbCA9IFRSRUVfT1BFUkFORCAoYXJnLCAxKTsNCj4+ICsg ICAgICBzdHJpY3RfZmxleF9hcnJheV9sZXZlbCA9IHN0cmljdF9mbGV4X2FycmF5X2xldmVsX29m IChhZmllbGRfZGVjbCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgIGlmICh3YXJuX2FycmF5X2Jv dW5kcykNCj4+ICsgICAgZ2V0X3VwX2JvdW5kc19mb3JfYXJyYXlfcmVmIChyZWYsICZkZWNsLCAm dXBfYm91bmQsICZ1cF9ib3VuZF9wMSwNCj4+ICsJCQkJIHRydWUpOw0KPj4gKyAgaWYgKHdhcm5f c3RyaWN0X2ZsZXhfYXJyYXlzKQ0KPj4gKyAgICBnZXRfdXBfYm91bmRzX2Zvcl9hcnJheV9yZWYg KHJlZiwgJmRlY2wsICZ1cF9ib3VuZF9zdHJpY3QsDQo+PiArCQkJCSAmdXBfYm91bmRfcDFfc3Ry aWN0LCBmYWxzZSk7DQo+PiArDQo+PiArDQo+PiArDQo+PiArICBib29sIHdhcm5lZCA9IGZhbHNl Ow0KPj4gKyAgYm9vbCBvdXRfb2ZfYm91bmQgPSBmYWxzZTsNCj4+ICsNCj4+ICsgIHRyZWUgYXJ0 eXBlID0gVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKHJlZiwgMCkpOw0KPj4gKyAgdHJlZSBsb3df c3ViX29yZyA9IFRSRUVfT1BFUkFORCAocmVmLCAxKTsNCj4+ICsgIHRyZWUgdXBfc3ViID0gbG93 X3N1Yl9vcmc7DQo+PiArICB0cmVlIGxvd19zdWIgPSBsb3dfc3ViX29yZzsNCj4+ICsNCj4+ICsg IGNvbnN0IHZhbHVlX3JhbmdlICp2ciA9IE5VTEw7DQo+PiArICBpZiAoVFJFRV9DT0RFIChsb3df c3ViX29yZykgPT0gU1NBX05BTUUpDQo+PiArICAgIHsNCj4+ICsgICAgICB2ciA9IGdldF92YWx1 ZV9yYW5nZSAobG93X3N1Yl9vcmcsIHN0bXQpOw0KPj4gKyAgICAgIGlmICghdnItPnVuZGVmaW5l ZF9wICgpICYmICF2ci0+dmFyeWluZ19wICgpKQ0KPj4gKwl7DQo+PiArCSAgbG93X3N1YiA9IHZy LT5raW5kICgpID09IFZSX1JBTkdFID8gdnItPm1heCAoKSA6IHZyLT5taW4gKCk7DQo+PiArCSAg dXBfc3ViID0gdnItPmtpbmQgKCkgPT0gVlJfUkFOR0UgPyB2ci0+bWluICgpIDogdnItPm1heCAo KTsNCj4+ICsJfQ0KPj4gKyAgICB9DQo+PiArDQo+PiArICBpZiAod2Fybl9hcnJheV9ib3VuZHMp DQo+PiArICAgIHdhcm5lZCA9IGNoZWNrX291dF9vZl9ib3VuZHNfYW5kX3dhcm4gKGxvY2F0aW9u LCByZWYsDQo+PiArCQkJCQkgICBsb3dfc3ViX29yZywgbG93X3N1YiwgdXBfc3ViLA0KPj4gKwkJ CQkJICAgdXBfYm91bmQsIHVwX2JvdW5kX3AxLCB2ciwNCj4+ICsJCQkJCSAgIGlnbm9yZV9vZmZf Ynlfb25lLCB0cnVlKTsNCj4+ICsNCj4+ICsgIGlmICh3YXJuX3N0cmljdF9mbGV4X2FycmF5cykN Cj4+ICsgICAgb3V0X29mX2JvdW5kID0gY2hlY2tfb3V0X29mX2JvdW5kc19hbmRfd2FybiAobG9j YXRpb24sIHJlZiwNCj4+ICsJCQkJCQkgbG93X3N1Yl9vcmcsIGxvd19zdWIsIHVwX3N1YiwNCj4+ ICsJCQkJCQkgdXBfYm91bmRfc3RyaWN0LA0KPj4gKwkJCQkJCSB1cF9ib3VuZF9wMV9zdHJpY3Qs IHZyLA0KPj4gKwkJCQkJCSBpZ25vcmVfb2ZmX2J5X29uZSwgZmFsc2UpOw0KPj4gDQo+PiAgIGlm ICghd2FybmVkICYmIHNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6aW50XzApDQo+PiAgICAg d2FybmVkID0gd2FybmluZ19hdCAobG9jYXRpb24sIE9QVF9XemVyb19sZW5ndGhfYm91bmRzLA0K Pj4gQEAgLTM0MSwxOSArNDM0LDU2IEBAIGFycmF5X2JvdW5kc19jaGVja2VyOjpjaGVja19hcnJh eV9yZWYgKGxvY2F0aW9uX3QgbG9jYXRpb24sIHRyZWUgcmVmLA0KPj4gCQkJICAgICAgICJvZiBh biBpbnRlcmlvciB6ZXJvLWxlbmd0aCBhcnJheSAlcVQiKSksDQo+PiAJCQkgbG93X3N1YiwgYXJ0 eXBlKTsNCj4+IA0KPj4gLSAgaWYgKHdhcm5lZCkNCj4+ICsgIGlmICh3YXJuZWQgfHwgb3V0X29m X2JvdW5kKQ0KPj4gICAgIHsNCj4+IC0gICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdz ICYgVERGX0RFVEFJTFMpKQ0KPj4gKyAgICAgIGlmICh3YXJuZWQgJiYgZHVtcF9maWxlICYmIChk dW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQ0KPj4gCXsNCj4+IAkgIGZwcmludGYgKGR1bXBfZmls ZSwgIkFycmF5IGJvdW5kIHdhcm5pbmcgZm9yICIpOw0KPj4gCSAgZHVtcF9nZW5lcmljX2V4cHIg KE1TR19OT1RFLCBUREZfU0xJTSwgcmVmKTsNCj4+IAkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxu Iik7DQo+PiAJfQ0KPj4gDQo+PiArICAgICAgLyogaXNzdWUgd2FybmluZ3MgZm9yIC1Xc3RyaWN0 LWZsZXgtYXJyYXlzIGFjY29yZGluZyB0byB0aGUgbGV2ZWwgb2YNCj4+ICsJIGZsYWdfc3RyaWN0 X2ZsZXhfYXJyYXlzLiAgKi8NCj4+ICsgICAgICBpZiAob3V0X29mX2JvdW5kICYmIHdhcm5fc3Ry aWN0X2ZsZXhfYXJyYXlzKQ0KPj4gKwlzd2l0Y2ggKHN0cmljdF9mbGV4X2FycmF5X2xldmVsKQ0K Pj4gKwkgIHsNCj4+ICsJICAgIGNhc2UgMzoNCj4+ICsJICAgICAgLyogSXNzdWUgYWRkaXRpb25h bCB3YXJuaW5ncyBmb3IgdHJhaWxpbmcgYXJyYXlzIFswXS4gICovDQo+PiArCSAgICAgIGlmIChz YW0gPT0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzApDQo+PiArCQl3YXJuZWQgPSB3YXJu aW5nX2F0IChsb2NhdGlvbiwgT1BUX1dzdHJpY3RfZmxleF9hcnJheXMsDQo+PiArCQkJCSAgICAg InRyYWlsaW5nIGFycmF5ICVxVCBzaG91bGQgbm90IGJlIHVzZWQgYXMgIg0KPj4gKwkJCQkgICAg ICJhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMyIsDQo+PiArCQkJCSAgICAgYXJ0 eXBlKTsNCj4+ICsJICAgICAgLyogRkFMTFRIUk9VR0guICAqLw0KPj4gKwkgICAgY2FzZSAyOg0K Pj4gKwkgICAgICAvKiBJc3N1ZSBhZGRpdGlvbmFsIHdhcm5pbmdzIGZvciB0cmFpbGluZyBhcnJh eXMgWzFdLiAgKi8NCj4+ICsJICAgICAgaWYgKHNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6 dHJhaWxfMSkNCj4+ICsJCXdhcm5lZCA9IHdhcm5pbmdfYXQgKGxvY2F0aW9uLCBPUFRfV3N0cmlj dF9mbGV4X2FycmF5cywNCj4+ICsJCQkJICAgICAidHJhaWxpbmcgYXJyYXkgJXFUIHNob3VsZCBu b3QgYmUgdXNlZCBhcyAiDQo+PiArCQkJCSAgICAgImEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZv ciBsZXZlbCAyIGFuZCAiDQo+PiArCQkJCSAgICAgImFib3ZlIiwgYXJ0eXBlKTsNCj4+ICsJICAg ICAgLyogRkFMTFRIUk9VR0guICAqLw0KPj4gKwkgICAgY2FzZSAxOg0KPj4gKwkgICAgICAvKiBJ c3N1ZSB3YXJuaW5ncyBmb3IgdHJhaWxpbmcgYXJyYXlzIFtuXS4gICovDQo+PiArCSAgICAgIGlm IChzYW0gPT0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsX24pDQo+PiArCQl3YXJuZWQgPSB3 YXJuaW5nX2F0IChsb2NhdGlvbiwgT1BUX1dzdHJpY3RfZmxleF9hcnJheXMsDQo+PiArCQkJCSAg ICAgInRyYWlsaW5nIGFycmF5ICVxVCBzaG91bGQgbm90IGJlIHVzZWQgYXMgIg0KPj4gKwkJCQkg ICAgICJhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQgIg0KPj4gKwkJCQkg ICAgICJhYm92ZSIsIGFydHlwZSk7DQo+PiArCSAgICAgIGJyZWFrOw0KPj4gKwkgICAgY2FzZSAw Og0KPj4gKwkgICAgICAvKiBEbyBub3RoaW5nLiAgKi8NCj4+ICsJICAgICAgYnJlYWs7DQo+PiAr CSAgICBkZWZhdWx0Og0KPj4gKwkgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQo+PiArCSAgfQ0K Pj4gKw0KPj4gICAgICAgLyogQXZvaWQgbW9yZSB3YXJuaW5ncyB3aGVuIGNoZWNraW5nIG1vcmUg c2lnbmlmaWNhbnQgc3Vic2NyaXB0cw0KPj4gCSBvZiB0aGUgc2FtZSBleHByZXNzaW9uLiAgKi8N Cj4+ICAgICAgIHJlZiA9IFRSRUVfT1BFUkFORCAocmVmLCAwKTsNCj4+ICAgICAgIHN1cHByZXNz X3dhcm5pbmcgKHJlZiwgT1BUX1dhcnJheV9ib3VuZHMpOw0KPj4gKyAgICAgIHN1cHByZXNzX3dh cm5pbmcgKHJlZiwgT1BUX1dzdHJpY3RfZmxleF9hcnJheXMpOw0KPj4gDQo+PiAgICAgICBpZiAo ZGVjbCkNCj4+IAlyZWYgPSBkZWNsOw0KPj4gZGlmZiAtLWdpdCBhL2djYy9vcHRzLmNjIGIvZ2Nj L29wdHMuY2MNCj4+IGluZGV4IGFlMDc5ZmNkMjBlLi5jYTE2MmFhNzgxYyAxMDA2NDQNCj4+IC0t LSBhL2djYy9vcHRzLmNjDQo+PiArKysgYi9nY2Mvb3B0cy5jYw0KPj4gQEAgLTE0MDksNiArMTQw OSwyMSBAQCBmaW5pc2hfb3B0aW9ucyAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLCBzdHJ1Y3Qg Z2NjX29wdGlvbnMgKm9wdHNfc2V0LA0KPj4gICAgICAgb3B0cy0+eF9wcm9maWxlX2ZsYWcgPSAw Ow0KPj4gICAgIH0NCj4+IA0KPj4gKyAgaWYgKG9wdHMtPnhfd2Fybl9hcnJheV9ib3VuZHMpDQo+ PiArICAgIGlmIChvcHRzLT54X2ZsYWdfc3RyaWN0X2ZsZXhfYXJyYXlzKQ0KPj4gKyAgICAgIHsN Cj4+ICsJd2FybmluZ19hdCAoVU5LTk9XTl9MT0NBVElPTiwgMCwNCj4+ICsJCSAgICAiJTwtV2Fy cmF5LWJvdW5kcyU+IGlzIG5vdCBpbXBhY3RlZCBieSAiDQo+PiArCQkgICAgIiU8LWZzdHJpY3Qt ZmxleC1hcnJheXMlPiIpOw0KPj4gKyAgICAgIH0NCj4+ICsgIGlmIChvcHRzLT54X3dhcm5fc3Ry aWN0X2ZsZXhfYXJyYXlzKQ0KPj4gKyAgICBpZiAob3B0cy0+eF9mbGFnX3N0cmljdF9mbGV4X2Fy cmF5cyA9PSAwKQ0KPj4gKyAgICAgIHsNCj4+ICsJb3B0cy0+eF93YXJuX3N0cmljdF9mbGV4X2Fy cmF5cyA9IDA7DQo+PiArCXdhcm5pbmdfYXQgKFVOS05PV05fTE9DQVRJT04sIDAsDQo+PiArCQkg ICAgIiU8LVdzdHJpY3QtZmxleC1hcnJheXMlPiBpcyBpZ25vcmVkIHdoZW4iDQo+PiArCQkgICAg IiAlPC1mc3RyaWN0LWZsZXgtYXJyYXlzJT4gZG9lcyBub3QgcHJlc2VudCIpOw0KPj4gKyAgICAg IH0NCj4+IA0KPj4gICBkaWFnbm9zZV9vcHRpb25zIChvcHRzLCBvcHRzX3NldCwgbG9jKTsNCj4+ IH0NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9Xc3RyaWN0LWZs ZXgtYXJyYXlzLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9Xc3RyaWN0LWZsZXgtYXJy YXlzLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMC4uNzJi NGI3YzY0MDYNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL1dzdHJpY3QtZmxleC1hcnJheXMuYw0KPj4gQEAgLTAsMCArMSw5IEBADQo+PiArLyog VGVzdCB0aGUgdXNhZ2Ugb2Ygb3B0aW9uIC1Xc3RyaWN0LWZsZXgtYXJyYXlzLiAgKi8NCj4+ICsv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPj4gKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1Xc3RyaWN0 LWZsZXgtYXJyYXlzIiB9ICovDQo+PiArDQo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkNCj4+ICt7DQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsvKiB7IGRnLXdhcm5p bmcgImlzIGlnbm9yZWQgd2hlbiBcJy1mc3RyaWN0LWZsZXgtYXJyYXlzXCcgZG9lcyBub3QgcHJl c2VudCIgIiIgeyB0YXJnZXQgKi0qLSogfSAwIH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9Xc3RyaWN0LWZsZXgtYXJyYXlzXzIuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL1dzdHJpY3QtZmxleC1hcnJheXNfMi5jDQo+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAuLmFmOWVjOTIyZGVhDQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9Xc3RyaWN0LWZsZXgtYXJy YXlzXzIuYw0KPj4gQEAgLTAsMCArMSw5IEBADQo+PiArLyogVGVzdCB0aGUgdXNhZ2Ugb2Ygb3B0 aW9uIC1Xc3RyaWN0LWZsZXgtYXJyYXlzLiAgKi8NCj4+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAq Lw0KPj4gKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1XYXJyYXktYm91bmRzIC1mc3RyaWN0LWZsZXgt YXJyYXlzIiB9ICovDQo+PiArDQo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkN Cj4+ICt7DQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsvKiB7IGRnLXdhcm5pbmcgIlwn LVdhcnJheS1ib3VuZHNcJyBpcyBub3QgaW1wYWN0ZWQgYnkgXCctZnN0cmljdC1mbGV4LWFycmF5 c1wnIiAiIiB7IHRhcmdldCAqLSotKiB9IDAgfSAqLw0KPj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvV3N0cmljdC1mbGV4LWFycmF5cy0yLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBp bmRleCAwMDAwMDAwMDAwMC4uNTlkNWE1ZmNiMjMNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtMi5jDQo+PiBAQCAtMCww ICsxLDQ2IEBADQo+PiArLyogVGVzdCAtV3N0cmljdC1mbGV4LWFycmF5cy4gICovDQo+PiArLyog eyBkZy1kbyBydW4gfSAqLw0KPj4gKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1Xc3RyaWN0LWZsZXgt YXJyYXlzIC1mc3RyaWN0LWZsZXgtYXJyYXlzPTIiIH0gKi8NCj4+ICsNCj4+ICtzdHJ1Y3QgdHJh aWxpbmdfYXJyYXlfMSB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAg aW50IGNbNF07IA0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgew0K Pj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjWzFdOyANCj4+ICt9 Ow0KPj4gKw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8zIHsNCj4+ICsgICAgaW50IGE7DQo+ PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1swXTsNCj4+ICt9Ow0KPj4gK3N0cnVjdCB0cmFp bGluZ19hcnJheV80IHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBp bnQgY1tdOw0KPj4gK307DQo+PiArDQo+PiArdm9pZCBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5l X18pKSBzdHVmZigNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwNCj4+ ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgKnRyYWlsaW5nXzEsDQo+PiArICAgIHN0cnVj dCB0cmFpbGluZ19hcnJheV8zICp0cmFpbGluZ18wLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdf YXJyYXlfNCAqdHJhaWxpbmdfZmxleCkNCj4+ICt7DQo+PiArICAgIG5vcm1hbC0+Y1s1XSA9IDU7 IAkvKnsgZGctd2FybmluZyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkg bWVtYmVyIGZvciBsZXZlbCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18xLT5j WzJdID0gMjsgLyogeyBkZy13YXJuaW5nICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJs ZSBhcnJheSBtZW1iZXIgZm9yIGxldmVsIDIgYW5kIGFib3ZlIiB9ICovDQo+PiArICAgIHRyYWls aW5nXzAtPmNbMV0gPSAxOyAvKiB7IGRnLWJvZ3VzICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBm bGV4aWJsZSBhcnJheSBtZW1iZXIgZm9yIGxldmVsIDIgYW5kIGFib3ZlIiB9ICovDQo+PiArICAg IHRyYWlsaW5nX2ZsZXgtPmNbMTBdID0gMTA7IC8qIHsgZGctYm9ndXMgInNob3VsZCBub3QgYmUg dXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMiBhbmQgYWJvdmUiIH0g Ki8NCj4+ICsNCj4+ICt9DQo+PiArDQo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkNCj4+ICt7DQo+PiArICAgIHN0dWZmKCh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBd LCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSk7DQo+PiArDQo+PiArICAgIHJldHVy biAwOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0 LWZsZXgtYXJyYXlzLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJh eXMtMy5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAuLjJm NjYxNTFlOTI3DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTMuYw0KPj4gQEAgLTAsMCArMSw0NiBAQA0KPj4gKy8qIFRl c3QgLVdzdHJpY3QtZmxleC1hcnJheXMuICAqLw0KPj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4+ ICsvKiB7IGRnLW9wdGlvbnMgIi1PMiAtV3N0cmljdC1mbGV4LWFycmF5cyAtZnN0cmljdC1mbGV4 LWFycmF5cz0zIiB9ICovDQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgew0KPj4g KyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjWzRdOyANCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8yIHsNCj4+ICsgICAgaW50IGE7DQo+PiAr ICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1sxXTsgDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3Qg dHJhaWxpbmdfYXJyYXlfMyB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsg ICAgaW50IGNbMF07DQo+PiArfTsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7DQo+PiAr ICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbXTsNCj4+ICt9Ow0KPj4g Kw0KPj4gK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3R1ZmYoDQo+PiArICAg IHN0cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsDQo+PiArICAgIHN0cnVjdCB0cmFpbGlu Z19hcnJheV8yICp0cmFpbGluZ18xLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyAq dHJhaWxpbmdfMCwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2Zs ZXgpDQo+PiArew0KPj4gKyAgICBub3JtYWwtPmNbNV0gPSA1OyAJLyp7IGRnLXdhcm5pbmcgInNo b3VsZCBub3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBh bmQgYWJvdmUiIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfMS0+Y1syXSA9IDI7IC8qIHsgZGctd2Fy bmluZyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBs ZXZlbCAyIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18wLT5jWzFdID0gMTsgLyog eyBkZy13YXJuaW5nICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1i ZXIgZm9yIGxldmVsIDMiIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfZmxleC0+Y1sxMF0gPSAxMDsg LyogeyBkZy1ib2d1cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVt YmVyIGZvciBsZXZlbCAzIiB9ICovDQo+PiArDQo+PiArfQ0KPj4gKw0KPj4gK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pDQo+PiArew0KPj4gKyAgICBzdHVmZigodm9pZCAqKWFyZ3Zb MF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0pOw0K Pj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTQuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGlu ZGV4IDAwMDAwMDAwMDAwLi42YTQ1NzY1NjhhYw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy00LmMNCj4+IEBAIC0wLDAg KzEsNDkgQEANCj4+ICsvKiBUZXN0IC1Xc3RyaWN0LWZsZXgtYXJyYXlzICsgLVdhcnJheS1ib3Vu ZHMuICAqLw0KPj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4+ICsvKiB7IGRnLW9wdGlvbnMgIi1P MiAtV3N0cmljdC1mbGV4LWFycmF5cyAtZnN0cmljdC1mbGV4LWFycmF5cz0xIC1XYXJyYXktYm91 bmRzIiB9ICovDQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgew0KPj4gKyAgICBp bnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjWzRdOyANCj4+ICt9Ow0KPj4gKw0K Pj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8yIHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGlu dCBiOw0KPj4gKyAgICBpbnQgY1sxXTsgDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxp bmdfYXJyYXlfMyB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50 IGNbMF07DQo+PiArfTsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7DQo+PiArICAgIGlu dCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbXTsNCj4+ICt9Ow0KPj4gKw0KPj4g K3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3R1ZmYoDQo+PiArICAgIHN0cnVj dCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJh eV8yICp0cmFpbGluZ18xLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyAqdHJhaWxp bmdfMCwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2ZsZXgpDQo+ PiArew0KPj4gKyAgICBub3JtYWwtPmNbNV0gPSA1OyAJLyp7IGRnLXdhcm5pbmcgInNob3VsZCBu b3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQgYWJv dmUiIH0gKi8NCj4+ICsgICAgCQkJIC8qeyBkZy13YXJuaW5nICJhcnJheSBzdWJzY3JpcHQgNSBp cyBhYm92ZSBhcnJheSBib3VuZHMgb2YiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8NCj4+ ICsgICAgdHJhaWxpbmdfMS0+Y1syXSA9IDI7IC8qIHsgZGctYm9ndXMgInNob3VsZCBub3QgYmUg dXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQgYWJvdmUiIH0g Ki8NCj4+ICsgICAgdHJhaWxpbmdfMC0+Y1sxXSA9IDE7IC8qIHsgZGctYm9ndXMgInNob3VsZCBu b3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQgYWJv dmUiIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfZmxleC0+Y1sxMF0gPSAxMDsgLyogeyBkZy1ib2d1 cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZl bCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKw0KPj4gK30NCj4+ICsNCj4+ICtpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQ0KPj4gK3sNCj4+ICsgICAgc3R1ZmYoKHZvaWQgKilhcmd2WzBd LCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdKTsNCj4+ ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8qIHsgZGctd2FybmluZyAi XCctV2FycmF5LWJvdW5kc1wnIGlzIG5vdCBpbXBhY3RlZCBieSBcJy1mc3RyaWN0LWZsZXgtYXJy YXlzXCciICIiIHsgdGFyZ2V0ICotKi0qIH0gMCB9ICovDQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy01LmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTUuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+ IGluZGV4IDAwMDAwMDAwMDAwLi5lNTUwZmJkMjRlMQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy01LmMNCj4+IEBAIC0w LDAgKzEsNDggQEANCj4+ICsvKiBUZXN0IC1Xc3RyaWN0LWZsZXgtYXJyYXlzICsgLVdhcnJheS1i b3VuZHMuICAqLw0KPj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4+ICsvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtV3N0cmljdC1mbGV4LWFycmF5cyAtZnN0cmljdC1mbGV4LWFycmF5cz0yIC1XYXJyYXkt Ym91bmRzIiB9ICovDQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgew0KPj4gKyAg ICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjWzRdOyANCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8yIHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAg IGludCBiOw0KPj4gKyAgICBpbnQgY1sxXTsgDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJh aWxpbmdfYXJyYXlfMyB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAg aW50IGNbMF07DQo+PiArfTsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7DQo+PiArICAg IGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbXTsNCj4+ICt9Ow0KPj4gKw0K Pj4gK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3R1ZmYoDQo+PiArICAgIHN0 cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19h cnJheV8yICp0cmFpbGluZ18xLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyAqdHJh aWxpbmdfMCwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2ZsZXgp DQo+PiArew0KPj4gKyAgICBub3JtYWwtPmNbNV0gPSA1OyAJLyp7IGRnLXdhcm5pbmcgInNob3Vs ZCBub3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQg YWJvdmUiIH0gKi8NCj4+ICsgICAgCQkJIC8qeyBkZy13YXJuaW5nICJhcnJheSBzdWJzY3JpcHQg NSBpcyBhYm92ZSBhcnJheSBib3VuZHMgb2YiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8N Cj4+ICsgICAgdHJhaWxpbmdfMS0+Y1syXSA9IDI7IC8qIHsgZGctd2FybmluZyAic2hvdWxkIG5v dCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZlbCAyIGFuZCBhYm92 ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18wLT5jWzFdID0gMTsgLyogeyBkZy1ib2d1cyAic2hv dWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZlbCAyIGFu ZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ19mbGV4LT5jWzEwXSA9IDEwOyAvKiB7IGRn LWJvZ3VzICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgZm9y IGxldmVsIDIgYW5kIGFib3ZlIiB9ICovDQo+PiArDQo+PiArfQ0KPj4gKw0KPj4gK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+PiArew0KPj4gKyAgICBzdHVmZigodm9pZCAqKWFy Z3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0p Ow0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArLyogeyBkZy13YXJuaW5nICJc Jy1XYXJyYXktYm91bmRzXCcgaXMgbm90IGltcGFjdGVkIGJ5IFwnLWZzdHJpY3QtZmxleC1hcnJh eXNcJyIgIiIgeyB0YXJnZXQgKi0qLSogfSAwIH0gKi8NCj4+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTYuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL1dzdHJpY3QtZmxleC1hcnJheXMtNi5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4g aW5kZXggMDAwMDAwMDAwMDAuLmQ1YjYxMTM2YjNhDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTYuYw0KPj4gQEAgLTAs MCArMSw0OCBAQA0KPj4gKy8qIFRlc3QgLVdzdHJpY3QtZmxleC1hcnJheXMuICAqLw0KPj4gKy8q IHsgZGctZG8gcnVuIH0gKi8NCj4+ICsvKiB7IGRnLW9wdGlvbnMgIi1PMiAtV3N0cmljdC1mbGV4 LWFycmF5cyAtZnN0cmljdC1mbGV4LWFycmF5cz0zIC1XYXJyYXktYm91bmRzIiB9ICovDQo+PiAr DQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAg aW50IGI7DQo+PiArICAgIGludCBjWzRdOyANCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCB0cmFp bGluZ19hcnJheV8yIHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBp bnQgY1sxXTsgDQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyB7DQo+ PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbMF07DQo+PiArfTsN Cj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBp bnQgYjsNCj4+ICsgICAgaW50IGNbXTsNCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgX19hdHRyaWJ1 dGVfXygoX19ub2lubGluZV9fKSkgc3R1ZmYoDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJh eV8xICpub3JtYWwsDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8yICp0cmFpbGluZ18x LA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyAqdHJhaWxpbmdfMCwNCj4+ICsgICAg c3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2ZsZXgpDQo+PiArew0KPj4gKyAgICBu b3JtYWwtPmNbNV0gPSA1OyAJLyp7IGRnLXdhcm5pbmcgInNob3VsZCBub3QgYmUgdXNlZCBhcyBh IGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMSBhbmQgYWJvdmUiIH0gKi8NCj4+ICsg ICAJCQkvKnsgZGctd2FybmluZyAiYXJyYXkgc3Vic2NyaXB0IDUgaXMgYWJvdmUgYXJyYXkgYm91 bmRzIG9mIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovIA0KPj4gKyAgICB0cmFpbGluZ18x LT5jWzJdID0gMjsgLyogeyBkZy13YXJuaW5nICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4 aWJsZSBhcnJheSBtZW1iZXIgZm9yIGxldmVsIDIgYW5kIGFib3ZlIiB9ICovDQo+PiArICAgIHRy YWlsaW5nXzAtPmNbMV0gPSAxOyAvKiB7IGRnLXdhcm5pbmcgInNob3VsZCBub3QgYmUgdXNlZCBh cyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMyIgfSAqLw0KPj4gKyAgICB0cmFp bGluZ19mbGV4LT5jWzEwXSA9IDEwOyAvKiB7IGRnLWJvZ3VzICJzaG91bGQgbm90IGJlIHVzZWQg YXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgZm9yIGxldmVsIDMiIH0gKi8NCj4+ICsNCj4+ICt9 DQo+PiArDQo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4+ICt7DQo+PiAr ICAgIHN0dWZmKCh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3Zb MF0sICh2b2lkICopYXJndlswXSk7DQo+PiArDQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ ICsvKiB7IGRnLXdhcm5pbmcgIlwnLVdhcnJheS1ib3VuZHNcJyBpcyBub3QgaW1wYWN0ZWQgYnkg XCctZnN0cmljdC1mbGV4LWFycmF5c1wnIiAiIiB7IHRhcmdldCAqLSotKiB9IDAgfSAqLw0KPj4g ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtNy5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy03LmMNCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwMC4uZWI4MmE2MGMyNjENCj4+IC0t LSAvZGV2L251bGwNCj4+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1h cnJheXMtNy5jDQo+PiBAQCAtMCwwICsxLDUwIEBADQo+PiArLyogVGVzdCAtV3N0cmljdC1mbGV4 LWFycmF5cyArIC1XYXJyYXktYm91bmRzPTIuICAqLw0KPj4gKy8qIHsgZGctZG8gcnVuIH0gKi8N Cj4+ICsvKiB7IGRnLW9wdGlvbnMgIi1PMiAtV3N0cmljdC1mbGV4LWFycmF5cyAtZnN0cmljdC1m bGV4LWFycmF5cz0xIC1XYXJyYXktYm91bmRzPTIiIH0gKi8NCj4+ICsNCj4+ICtzdHJ1Y3QgdHJh aWxpbmdfYXJyYXlfMSB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAg aW50IGNbNF07IA0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgew0K Pj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjWzFdOyANCj4+ICt9 Ow0KPj4gKw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8zIHsNCj4+ICsgICAgaW50IGE7DQo+ PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1swXTsNCj4+ICt9Ow0KPj4gK3N0cnVjdCB0cmFp bGluZ19hcnJheV80IHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBp bnQgY1tdOw0KPj4gK307DQo+PiArDQo+PiArdm9pZCBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5l X18pKSBzdHVmZigNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwNCj4+ ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgKnRyYWlsaW5nXzEsDQo+PiArICAgIHN0cnVj dCB0cmFpbGluZ19hcnJheV8zICp0cmFpbGluZ18wLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdf YXJyYXlfNCAqdHJhaWxpbmdfZmxleCkNCj4+ICt7DQo+PiArICAgIG5vcm1hbC0+Y1s1XSA9IDU7 IAkvKnsgZGctd2FybmluZyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkg bWVtYmVyIGZvciBsZXZlbCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICAJCQkgLyp7IGRnLXdh cm5pbmcgImFycmF5IHN1YnNjcmlwdCA1IGlzIGFib3ZlIGFycmF5IGJvdW5kcyBvZiIgIiIgeyB0 YXJnZXQgKi0qLSogfSAuLTEgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18xLT5jWzJdID0gMjsgLyog eyBkZy1ib2d1cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVy IGZvciBsZXZlbCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICAJCQkgLyp7IGRnLXdhcm5pbmcg ImFycmF5IHN1YnNjcmlwdCAyIGlzIGFib3ZlIGFycmF5IGJvdW5kcyBvZiIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTEgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18wLT5jWzFdID0gMTsgLyogeyBkZy1i b2d1cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBs ZXZlbCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ19mbGV4LT5jWzEwXSA9IDEw OyAvKiB7IGRnLWJvZ3VzICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBt ZW1iZXIgZm9yIGxldmVsIDEgYW5kIGFib3ZlIiB9ICovDQo+PiArDQo+PiArfQ0KPj4gKw0KPj4g K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+PiArew0KPj4gKyAgICBzdHVmZigo dm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAq KWFyZ3ZbMF0pOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyog eyBkZy13YXJuaW5nICJcJy1XYXJyYXktYm91bmRzXCcgaXMgbm90IGltcGFjdGVkIGJ5IFwnLWZz dHJpY3QtZmxleC1hcnJheXNcJyIgIiIgeyB0YXJnZXQgKi0qLSogfSAwIH0gKi8NCj4+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTguYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMtOC5jDQo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAuLmY0OGE1MGUwNGY1DQo+PiAtLS0gL2Rl di9udWxsDQo+PiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlz LTguYw0KPj4gQEAgLTAsMCArMSw0OSBAQA0KPj4gKy8qIFRlc3QgLVdzdHJpY3QtZmxleC1hcnJh eXMgKyAtV2FycmF5LWJvdW5kcz0yLiAgKi8NCj4+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+PiAr LyogeyBkZy1vcHRpb25zICItTzIgLVdzdHJpY3QtZmxleC1hcnJheXMgLWZzdHJpY3QtZmxleC1h cnJheXM9MiAtV2FycmF5LWJvdW5kcz0yIiB9ICovDQo+PiArDQo+PiArc3RydWN0IHRyYWlsaW5n X2FycmF5XzEgew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBj WzRdOyANCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8yIHsNCj4+ICsg ICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1sxXTsgDQo+PiArfTsNCj4+ ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyB7DQo+PiArICAgIGludCBhOw0KPj4gKyAg ICBpbnQgYjsNCj4+ICsgICAgaW50IGNbMF07DQo+PiArfTsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdf YXJyYXlfNCB7DQo+PiArICAgIGludCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNb XTsNCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkg c3R1ZmYoDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsDQo+PiArICAg IHN0cnVjdCB0cmFpbGluZ19hcnJheV8yICp0cmFpbGluZ18xLA0KPj4gKyAgICBzdHJ1Y3QgdHJh aWxpbmdfYXJyYXlfMyAqdHJhaWxpbmdfMCwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5 XzQgKnRyYWlsaW5nX2ZsZXgpDQo+PiArew0KPj4gKyAgICBub3JtYWwtPmNbNV0gPSA1OyAJLyp7 IGRnLXdhcm5pbmcgInNob3VsZCBub3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJl ciBmb3IgbGV2ZWwgMSBhbmQgYWJvdmUiIH0gKi8NCj4+ICsgICAgCQkJIC8qeyBkZy13YXJuaW5n ICJhcnJheSBzdWJzY3JpcHQgNSBpcyBhYm92ZSBhcnJheSBib3VuZHMgb2YiICIiIHsgdGFyZ2V0 ICotKi0qIH0gLi0xIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfMS0+Y1syXSA9IDI7IC8qIHsgZGct d2FybmluZyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZv ciBsZXZlbCAyIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICAJCQkgIC8qeyBkZy13YXJuaW5nICJh cnJheSBzdWJzY3JpcHQgMiBpcyBhYm92ZSBhcnJheSBib3VuZHMgb2YiICIiIHsgdGFyZ2V0ICot Ki0qIH0gLi0xIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfMC0+Y1sxXSA9IDE7IC8qIHsgZGctYm9n dXMgInNob3VsZCBub3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2 ZWwgMiBhbmQgYWJvdmUiIH0gKi8NCj4+ICsgICAgdHJhaWxpbmdfZmxleC0+Y1sxMF0gPSAxMDsg LyogeyBkZy1ib2d1cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVt YmVyIGZvciBsZXZlbCAyIGFuZCBhYm92ZSIgfSAqLw0KPj4gKw0KPj4gK30NCj4+ICsNCj4+ICtp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPj4gK3sNCj4+ICsgICAgc3R1ZmYoKHZv aWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilh cmd2WzBdKTsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKy8qIHsgZGctd2Fy bmluZyAiXCctV2FycmF5LWJvdW5kc1wnIGlzIG5vdCBpbXBhY3RlZCBieSBcJy1mc3RyaWN0LWZs ZXgtYXJyYXlzXCciICIiIHsgdGFyZ2V0ICotKi0qIH0gMCB9ICovDQo+PiBkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy05LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9Xc3RyaWN0LWZsZXgtYXJyYXlzLTkuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAwLi45ZjI4NzdlZjRlMQ0KPj4gLS0tIC9kZXYvbnVsbA0K Pj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0cmljdC1mbGV4LWFycmF5cy05LmMNCj4+ IEBAIC0wLDAgKzEsNDkgQEANCj4+ICsvKiBUZXN0IC1Xc3RyaWN0LWZsZXgtYXJyYXlzICsgLVdh cnJheS1ib3VuZHM9Mi4gICovDQo+PiArLyogeyBkZy1kbyBydW4gfSAqLw0KPj4gKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1Xc3RyaWN0LWZsZXgtYXJyYXlzIC1mc3RyaWN0LWZsZXgtYXJyYXlzPTMg LVdhcnJheS1ib3VuZHM9MiIgfSAqLw0KPj4gKw0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8x IHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1s0XTsgDQo+ PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMiB7DQo+PiArICAgIGludCBh Ow0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbMV07IA0KPj4gK307DQo+PiArDQo+PiAr c3RydWN0IHRyYWlsaW5nX2FycmF5XzMgew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7 DQo+PiArICAgIGludCBjWzBdOw0KPj4gK307DQo+PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzQg ew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50IGI7DQo+PiArICAgIGludCBjW107DQo+PiAr fTsNCj4+ICsNCj4+ICt2b2lkIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpIHN0dWZmKA0K Pj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMSAqbm9ybWFsLA0KPj4gKyAgICBzdHJ1Y3Qg dHJhaWxpbmdfYXJyYXlfMiAqdHJhaWxpbmdfMSwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2Fy cmF5XzMgKnRyYWlsaW5nXzAsDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV80ICp0cmFp bGluZ19mbGV4KQ0KPj4gK3sNCj4+ICsgICAgbm9ybWFsLT5jWzVdID0gNTsgCS8qeyBkZy13YXJu aW5nICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgZm9yIGxl dmVsIDEgYW5kIGFib3ZlIiB9ICovDQo+PiArICAgCQkJLyp7IGRnLXdhcm5pbmcgImFycmF5IHN1 YnNjcmlwdCA1IGlzIGFib3ZlIGFycmF5IGJvdW5kcyBvZiIgIiIgeyB0YXJnZXQgKi0qLSogfSAu LTEgfSAqLyANCj4+ICsgICAgdHJhaWxpbmdfMS0+Y1syXSA9IDI7IC8qIHsgZGctd2FybmluZyAi c2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZlbCAy IGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICAJCQkvKnsgZGctd2FybmluZyAiYXJyYXkgc3Vic2Ny aXB0IDIgaXMgYWJvdmUgYXJyYXkgYm91bmRzIG9mIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9 ICovDQo+PiArICAgIHRyYWlsaW5nXzAtPmNbMV0gPSAxOyAvKiB7IGRnLXdhcm5pbmcgInNob3Vs ZCBub3QgYmUgdXNlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBmb3IgbGV2ZWwgMyIgfSAq Lw0KPj4gKyAgICB0cmFpbGluZ19mbGV4LT5jWzEwXSA9IDEwOyAvKiB7IGRnLWJvZ3VzICJzaG91 bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgZm9yIGxldmVsIDMiIH0g Ki8NCj4+ICsNCj4+ICt9DQo+PiArDQo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkNCj4+ICt7DQo+PiArICAgIHN0dWZmKCh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBd LCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSk7DQo+PiArDQo+PiArICAgIHJldHVy biAwOw0KPj4gK30NCj4+ICsvKiB7IGRnLXdhcm5pbmcgIlwnLVdhcnJheS1ib3VuZHNcJyBpcyBu b3QgaW1wYWN0ZWQgYnkgXCctZnN0cmljdC1mbGV4LWFycmF5c1wnIiAiIiB7IHRhcmdldCAqLSot KiB9IDAgfSAqLw0KPj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3Qt ZmxleC1hcnJheXMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL1dzdHJpY3QtZmxleC1hcnJheXMu Yw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAwLi40M2E5MDk4 ZjEzOA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvV3N0 cmljdC1mbGV4LWFycmF5cy5jDQo+PiBAQCAtMCwwICsxLDQ2IEBADQo+PiArLyogVGVzdCAtV3N0 cmljdC1mbGV4LWFycmF5cy4gICovDQo+PiArLyogeyBkZy1kbyBydW4gfSAqLw0KPj4gKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1Xc3RyaWN0LWZsZXgtYXJyYXlzIC1mc3RyaWN0LWZsZXgtYXJyYXlz PTEiIH0gKi8NCj4+ICsNCj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMSB7DQo+PiArICAgIGlu dCBhOw0KPj4gKyAgICBpbnQgYjsNCj4+ICsgICAgaW50IGNbNF07IA0KPj4gK307DQo+PiArDQo+ PiArc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgew0KPj4gKyAgICBpbnQgYTsNCj4+ICsgICAgaW50 IGI7DQo+PiArICAgIGludCBjWzFdOyANCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCB0cmFpbGlu Z19hcnJheV8zIHsNCj4+ICsgICAgaW50IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQg Y1swXTsNCj4+ICt9Ow0KPj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV80IHsNCj4+ICsgICAgaW50 IGE7DQo+PiArICAgIGludCBiOw0KPj4gKyAgICBpbnQgY1tdOw0KPj4gK307DQo+PiArDQo+PiAr dm9pZCBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKSBzdHVmZigNCj4+ICsgICAgc3RydWN0 IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwNCj4+ICsgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5 XzIgKnRyYWlsaW5nXzEsDQo+PiArICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8zICp0cmFpbGlu Z18wLA0KPj4gKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCAqdHJhaWxpbmdfZmxleCkNCj4+ ICt7DQo+PiArICAgIG5vcm1hbC0+Y1s1XSA9IDU7IAkvKnsgZGctd2FybmluZyAic2hvdWxkIG5v dCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZlbCAxIGFuZCBhYm92 ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18xLT5jWzJdID0gMjsgLyogeyBkZy1ib2d1cyAic2hv dWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZlbCAxIGFu ZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ18wLT5jWzFdID0gMTsgLyogeyBkZy1ib2d1 cyAic2hvdWxkIG5vdCBiZSB1c2VkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGZvciBsZXZl bCAxIGFuZCBhYm92ZSIgfSAqLw0KPj4gKyAgICB0cmFpbGluZ19mbGV4LT5jWzEwXSA9IDEwOyAv KiB7IGRnLWJvZ3VzICJzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1i ZXIgZm9yIGxldmVsIDEgYW5kIGFib3ZlIiB9ICovDQo+PiArDQo+PiArfQ0KPj4gKw0KPj4gK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+PiArew0KPj4gKyAgICBzdHVmZigodm9p ZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFy Z3ZbMF0pOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEv Z2NjL3RyZWUtdnJwLmNjIGIvZ2NjL3RyZWUtdnJwLmNjDQo+PiBpbmRleCBlNWEyOTJiYjg3NS4u MWYxYjU2YzFhNTIgMTAwNjQ0DQo+PiAtLS0gYS9nY2MvdHJlZS12cnAuY2MNCj4+ICsrKyBiL2dj Yy90cmVlLXZycC5jYw0KPj4gQEAgLTQyMjksMTIgKzQyMjksMTIgQEAgZXhlY3V0ZV92cnAgKHN0 cnVjdCBmdW5jdGlvbiAqZnVuLCBib29sIHdhcm5fYXJyYXlfYm91bmRzX3ApDQo+PiAgICAgIHRo ZSBmbGFnIG9uIGV2ZXJ5IGVkZ2Ugbm93LCByYXRoZXIgdGhhbiBpbg0KPj4gICAgICBjaGVja19h cnJheV9ib3VuZHNfZG9tX3dhbGtlcidzIGN0b3I7IHZycF9mb2xkZXIgbWF5IGNsZWFyDQo+PiAg ICAgIGl0IGZyb20gc29tZSBlZGdlcy4gICovDQo+PiAtICBpZiAod2Fybl9hcnJheV9ib3VuZHMg JiYgd2Fybl9hcnJheV9ib3VuZHNfcCkNCj4+ICsgIGlmICgod2Fybl9hcnJheV9ib3VuZHMgfHwg d2Fybl9zdHJpY3RfZmxleF9hcnJheXMpICYmIHdhcm5fYXJyYXlfYm91bmRzX3ApDQo+PiAgICAg c2V0X2FsbF9lZGdlc19hc19leGVjdXRhYmxlIChmdW4pOw0KPj4gDQo+PiAgIGZvbGRlci5zdWJz dGl0dXRlX2FuZF9mb2xkICgpOw0KPj4gDQo+PiAtICBpZiAod2Fybl9hcnJheV9ib3VuZHMgJiYg d2Fybl9hcnJheV9ib3VuZHNfcCkNCj4+ICsgIGlmICgod2Fybl9hcnJheV9ib3VuZHMgfHwgd2Fy bl9zdHJpY3RfZmxleF9hcnJheXMpICYmIHdhcm5fYXJyYXlfYm91bmRzX3ApDQo+PiAgICAgew0K Pj4gICAgICAgYXJyYXlfYm91bmRzX2NoZWNrZXIgYXJyYXlfY2hlY2tlciAoZnVuLCAmdnJwX3Zy X3ZhbHVlcyk7DQo+PiAgICAgICBhcnJheV9jaGVja2VyLmNoZWNrICgpOw0KPj4gQEAgLTQzNTMs NyArNDM1Myw3IEBAIGV4ZWN1dGVfcmFuZ2VyX3ZycCAoc3RydWN0IGZ1bmN0aW9uICpmdW4sIGJv b2wgd2Fybl9hcnJheV9ib3VuZHNfcCkNCj4+ICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFn cyAmIFRERl9ERVRBSUxTKSkNCj4+ICAgICByYW5nZXItPmR1bXAgKGR1bXBfZmlsZSk7DQo+PiAN Cj4+IC0gIGlmICh3YXJuX2FycmF5X2JvdW5kcyAmJiB3YXJuX2FycmF5X2JvdW5kc19wKQ0KPj4g KyAgaWYgKCh3YXJuX2FycmF5X2JvdW5kcyB8fCB3YXJuX3N0cmljdF9mbGV4X2FycmF5cykgJiYg d2Fybl9hcnJheV9ib3VuZHNfcCkNCj4+ICAgICB7DQo+PiAgICAgICAvLyBTZXQgYWxsIGVkZ2Vz IGFzIGV4ZWN1dGFibGUsIGV4Y2VwdCB0aG9zZSByYW5nZXIgc2F5cyBhcmVuJ3QuDQo+PiAgICAg ICBpbnQgbm9uX2V4ZWNfZmxhZyA9IHJhbmdlci0+bm9uX2V4ZWN1dGFibGVfZWRnZV9mbGFnOw0K Pj4gZGlmZiAtLWdpdCBhL2djYy90cmVlLmNjIGIvZ2NjL3RyZWUuY2MNCj4+IGluZGV4IGQyYjBi MzRhNzI1Li4wZjVmNzE1MWI2YiAxMDA2NDQNCj4+IC0tLSBhL2djYy90cmVlLmNjDQo+PiArKysg Yi9nY2MvdHJlZS5jYw0KPj4gQEAgLTEyNzI2LDE1ICsxMjcyNiwyMSBAQCBhcnJheV9yZWZfdXBf Ym91bmQgKHRyZWUgZXhwKQ0KPj4gICAgaW50IHRlc3QgKHVpbnQ4X3QgKnAsIHVpbnQzMl90IHRb MV1bMV0sIGludCBuKSB7DQo+PiAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKywgcCsrKQ0K Pj4gICAgICB0W2ldWzBdID0gLi4uOw0KPj4gKw0KPj4gKyAgIElmIG5vbi1udWxsLCBzZXQgSVNf VFJBSUxJTkdfQVJSQVkgdG8gdHJ1ZSBpZiB0aGUgcmVmIGlzIHRoZSBhYm92ZSBjYXNlIEEuDQo+ PiAqLw0KPj4gDQo+PiBib29sDQo+PiAtYXJyYXlfcmVmX2ZsZXhpYmxlX3NpemVfcCAodHJlZSBy ZWYpDQo+PiArYXJyYXlfcmVmX2ZsZXhpYmxlX3NpemVfcCAodHJlZSByZWYsIGJvb2wgKmlzX3Ry YWlsaW5nX2FycmF5IC8qID0gTlVMTCAqLykNCj4+IHsNCj4+IC0gIC8qIHRoZSBUWVBFIGZvciB0 aGlzIGFycmF5IHJlZmVyZWNlLiAgKi8NCj4+ICsgIC8qIFRoZSBUWVBFIGZvciB0aGlzIGFycmF5 IHJlZmVyZWNlLiAgKi8NCj4+ICAgdHJlZSBhdHlwZSA9IE5VTExfVFJFRTsNCj4+IC0gIC8qIHRo ZSBGSUVMRF9ERUNMIGZvciB0aGUgYXJyYXkgZmllbGQgaW4gdGhlIGNvbnRhaW5pbmcgc3RydWN0 dXJlLiAgKi8NCj4+ICsgIC8qIFRoZSBGSUVMRF9ERUNMIGZvciB0aGUgYXJyYXkgZmllbGQgaW4g dGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlLiAgKi8NCj4+ICAgdHJlZSBhZmllbGRfZGVjbCA9IE5V TExfVFJFRTsNCj4+ICsgIC8qIFdoZXRoZXIgdGhpcyBhcnJheSBpcyB0aGUgdHJhaWxpbmcgYXJy YXkgb2YgYSBzdHJ1Y3R1cmUuICAqLw0KPj4gKyAgYm9vbCBpc190cmFpbGluZ19hcnJheV90bXAg PSBmYWxzZTsNCj4+ICsgIGlmICghaXNfdHJhaWxpbmdfYXJyYXkpDQo+PiArICAgIGlzX3RyYWls aW5nX2FycmF5ID0gJmlzX3RyYWlsaW5nX2FycmF5X3RtcDsNCj4+IA0KPj4gICBpZiAoVFJFRV9D T0RFIChyZWYpID09IEFSUkFZX1JFRg0KPj4gICAgICAgfHwgVFJFRV9DT0RFIChyZWYpID09IEFS UkFZX1JBTkdFX1JFRikNCj4+IEBAIC0xMjgyMiw3ICsxMjgyOCwxMCBAQCBhcnJheV9yZWZfZmxl eGlibGVfc2l6ZV9wICh0cmVlIHJlZikNCj4+ICAgaWYgKCEgVFlQRV9TSVpFIChhdHlwZSkNCj4+ ICAgICAgIHx8ICEgVFlQRV9ET01BSU4gKGF0eXBlKQ0KPj4gICAgICAgfHwgISBUWVBFX01BWF9W QUxVRSAoVFlQRV9ET01BSU4gKGF0eXBlKSkpDQo+PiAtICAgIHJldHVybiBhZmllbGRfZGVjbCA/ ICFERUNMX05PVF9GTEVYQVJSQVkgKGFmaWVsZF9kZWNsKSA6IHRydWU7DQo+PiArICAgIHsNCj4+ ICsgICAgICAqaXNfdHJhaWxpbmdfYXJyYXkgPSBhZmllbGRfZGVjbCAmJiBUUkVFX0NPREUgKGFm aWVsZF9kZWNsKSA9PSBGSUVMRF9ERUNMOw0KPj4gKyAgICAgIHJldHVybiBhZmllbGRfZGVjbCA/ ICFERUNMX05PVF9GTEVYQVJSQVkgKGFmaWVsZF9kZWNsKSA6IHRydWU7DQo+PiArICAgIH0NCj4+ IA0KPj4gICAvKiBJZiB0aGUgcmVmZXJlbmNlIGlzIGJhc2VkIG9uIGEgZGVjbGFyZWQgZW50aXR5 LCB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkNCj4+ICAgICAgaXMgY29uc3RyYWluZWQgYnkgaXRzIGdp dmVuIGRvbWFpbi4gIChEbyBub3QgdHJ1c3QgY29tbW9ucyBQUi82OTM2OCkuICAqLw0KPj4gQEAg LTEyODQ0LDkgKzEyODUzLDE3IEBAIGFycmF5X3JlZl9mbGV4aWJsZV9zaXplX3AgKHRyZWUgcmVm KQ0KPj4gICAgICAgaWYgKFRSRUVfQ09ERSAoVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoYXR5 cGUpKSkgIT0gSU5URUdFUl9DU1QNCj4+IAkgIHx8IFRSRUVfQ09ERSAoVFlQRV9NQVhfVkFMVUUg KFRZUEVfRE9NQUlOIChhdHlwZSkpKSAhPSBJTlRFR0VSX0NTVA0KPj4gICAgICAgICAgIHx8IFRS RUVfQ09ERSAoVFlQRV9NSU5fVkFMVUUgKFRZUEVfRE9NQUlOIChhdHlwZSkpKSAhPSBJTlRFR0VS X0NTVCkNCj4+IC0JcmV0dXJuIGFmaWVsZF9kZWNsID8gIURFQ0xfTk9UX0ZMRVhBUlJBWSAoYWZp ZWxkX2RlY2wpIDogdHJ1ZTsNCj4+ICsJew0KPj4gKwkgICppc190cmFpbGluZ19hcnJheQ0KPj4g KwkgICAgPSBhZmllbGRfZGVjbCAmJiBUUkVFX0NPREUgKGFmaWVsZF9kZWNsKSA9PSBGSUVMRF9E RUNMOw0KPj4gKwkgIHJldHVybiBhZmllbGRfZGVjbCA/ICFERUNMX05PVF9GTEVYQVJSQVkgKGFm aWVsZF9kZWNsKSA6IHRydWU7DQo+PiArCX0NCj4+ICAgICAgIGlmICghIGdldF9hZGRyX2Jhc2Vf YW5kX3VuaXRfb2Zmc2V0IChyZWZfdG9fYXJyYXksICZvZmZzZXQpKQ0KPj4gLQlyZXR1cm4gYWZp ZWxkX2RlY2wgPyAhREVDTF9OT1RfRkxFWEFSUkFZIChhZmllbGRfZGVjbCkgOiB0cnVlOw0KPj4g Kwl7DQo+PiArCSAgKmlzX3RyYWlsaW5nX2FycmF5DQo+PiArCSAgICA9IGFmaWVsZF9kZWNsICYm IFRSRUVfQ09ERSAoYWZpZWxkX2RlY2wpID09IEZJRUxEX0RFQ0w7DQo+PiArCSAgcmV0dXJuIGFm aWVsZF9kZWNsID8gIURFQ0xfTk9UX0ZMRVhBUlJBWSAoYWZpZWxkX2RlY2wpIDogdHJ1ZTsNCj4+ ICsJfQ0KPj4gDQo+PiAgICAgICAvKiBJZiBhdCBsZWFzdCBvbmUgZXh0cmEgZWxlbWVudCBmaXRz IGl0IGlzIGEgZmxleGFycmF5LiAgKi8NCj4+ICAgICAgIGlmIChrbm93bl9sZSAoKHdpOjp0b19v ZmZzZXQgKFRZUEVfTUFYX1ZBTFVFIChUWVBFX0RPTUFJTiAoYXR5cGUpKSkNCj4+IEBAIC0xMjg1 NCwxMSArMTI4NzEsMTYgQEAgYXJyYXlfcmVmX2ZsZXhpYmxlX3NpemVfcCAodHJlZSByZWYpDQo+ PiAJCSAgICAgKyAyKQ0KPj4gCQkgICAgKiB3aTo6dG9fb2Zmc2V0IChUWVBFX1NJWkVfVU5JVCAo VFJFRV9UWVBFIChhdHlwZSkpKSwNCj4+IAkJICAgIHdpOjp0b19vZmZzZXQgKERFQ0xfU0laRV9V TklUIChyZWYpKSAtIG9mZnNldCkpDQo+PiAtCXJldHVybiBhZmllbGRfZGVjbCA/ICFERUNMX05P VF9GTEVYQVJSQVkgKGFmaWVsZF9kZWNsKSA6IHRydWU7DQo+PiArCXsNCj4+ICsJICAqaXNfdHJh aWxpbmdfYXJyYXkNCj4+ICsJICAgID0gYWZpZWxkX2RlY2wgJiYgVFJFRV9DT0RFIChhZmllbGRf ZGVjbCkgPT0gRklFTERfREVDTDsNCj4+ICsJICByZXR1cm4gYWZpZWxkX2RlY2wgPyAhREVDTF9O T1RfRkxFWEFSUkFZIChhZmllbGRfZGVjbCkgOiB0cnVlOw0KPj4gKwl9DQo+PiANCj4+ICAgICAg IHJldHVybiBmYWxzZTsNCj4+ICAgICB9DQo+PiANCj4+ICsgICppc190cmFpbGluZ19hcnJheSA9 IGFmaWVsZF9kZWNsICYmIFRSRUVfQ09ERSAoYWZpZWxkX2RlY2wpID09IEZJRUxEX0RFQ0w7DQo+ PiAgIHJldHVybiBhZmllbGRfZGVjbCA/ICFERUNMX05PVF9GTEVYQVJSQVkgKGFmaWVsZF9kZWNs KSA6IHRydWU7DQo+PiB9DQo+PiANCj4+IEBAIC0xMjkyMCwyNCArMTI5NDIsODEgQEAgZ2V0X2lu aXRpYWxpemVyX2ZvciAodHJlZSBpbml0LCB0cmVlIGRlY2wpDQo+PiAgIHJldHVybiBOVUxMX1RS RUU7DQo+PiB9DQo+PiANCj4+ICsvKiBEZXRlcm1pbmVzIHRoZSBzcGVjaWFsIGFycmF5IG1lbWJl ciB0eXBlIGZvciB0aGUgYXJyYXkgcmVmZXJlbmNlIFJFRi4gICovDQo+PiArc3BlY2lhbF9hcnJh eV9tZW1iZXINCj4+ICtjb21wb25lbnRfcmVmX3NhbV90eXBlICh0cmVlIHJlZikNCj4+ICt7DQo+ PiArICBzcGVjaWFsX2FycmF5X21lbWJlciBzYW1fdHlwZSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVy Ojpub25lOw0KPj4gKw0KPj4gKyAgdHJlZSBtZW1iZXIgPSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7 DQo+PiArICB0cmVlIG1lbXNpemUgPSBERUNMX1NJWkVfVU5JVCAobWVtYmVyKTsNCj4+ICsgIGlm IChtZW1zaXplKQ0KPj4gKyAgICB7DQo+PiArICAgICAgdHJlZSBtZW10eXBlID0gVFJFRV9UWVBF IChtZW1iZXIpOw0KPj4gKyAgICAgIGlmIChUUkVFX0NPREUgKG1lbXR5cGUpICE9IEFSUkFZX1RZ UEUpDQo+PiArCXJldHVybiBzYW1fdHlwZTsNCj4+ICsNCj4+ICsgICAgICBib29sIHRyYWlsaW5n ID0gZmFsc2U7DQo+PiArICAgICAgKHZvaWQpYXJyYXlfcmVmX2ZsZXhpYmxlX3NpemVfcCAocmVm LCAmdHJhaWxpbmcpOw0KPj4gKyAgICAgIGJvb2wgemVyb19sZW5ndGggPSBpbnRlZ2VyX3plcm9w IChtZW1zaXplKTsNCj4+ICsgICAgICBpZiAoIXRyYWlsaW5nICYmICF6ZXJvX2xlbmd0aCkNCj4+ ICsJLyogTUVNQkVSIGlzIGFuIGludGVyaW9yIGFycmF5IHdpdGgNCj4+ICsJICBtb3JlIHRoYW4g b25lIGVsZW1lbnQuICAqLw0KPj4gKwlyZXR1cm4gc3BlY2lhbF9hcnJheV9tZW1iZXI6OmludF9u Ow0KPj4gKw0KPj4gKyAgICAgIGlmICh6ZXJvX2xlbmd0aCkNCj4+ICsJew0KPj4gKwkgIGlmICh0 cmFpbGluZykNCj4+ICsJICAgIHJldHVybiBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMDsN Cj4+ICsJICBlbHNlDQo+PiArCSAgICByZXR1cm4gc3BlY2lhbF9hcnJheV9tZW1iZXI6OmludF8w Ow0KPj4gKwl9DQo+PiArDQo+PiArICAgICAgaWYgKCF6ZXJvX2xlbmd0aCkNCj4+ICsJaWYgKHRy ZWUgZG9tID0gVFlQRV9ET01BSU4gKG1lbXR5cGUpKQ0KPj4gKwkgIGlmICh0cmVlIG1pbiA9IFRZ UEVfTUlOX1ZBTFVFIChkb20pKQ0KPj4gKwkgICAgaWYgKHRyZWUgbWF4ID0gVFlQRV9NQVhfVkFM VUUgKGRvbSkpDQo+PiArCSAgICAgIGlmIChUUkVFX0NPREUgKG1pbikgPT0gSU5URUdFUl9DU1QN Cj4+ICsJCSAgJiYgVFJFRV9DT0RFIChtYXgpID09IElOVEVHRVJfQ1NUKQ0KPj4gKwkJew0KPj4g KwkJICBvZmZzZXRfaW50IG1pbmlkeCA9IHdpOjp0b19vZmZzZXQgKG1pbik7DQo+PiArCQkgIG9m ZnNldF9pbnQgbWF4aWR4ID0gd2k6OnRvX29mZnNldCAobWF4KTsNCj4+ICsJCSAgb2Zmc2V0X2lu dCBuZWx0c20xID0gbWF4aWR4IC0gbWluaWR4Ow0KPj4gKwkJICBpZiAobmVsdHNtMSA+IDApDQo+ PiArCQkgICAgLyogTUVNQkVSIGlzIGEgdHJhaWxpbmcgYXJyYXkgd2l0aCBtb3JlIHRoYW4NCj4+ ICsJCSAgICAgICBvbmUgZWxlbWVudHMuICAqLw0KPj4gKwkJICAgIHJldHVybiBzcGVjaWFsX2Fy cmF5X21lbWJlcjo6dHJhaWxfbjsNCj4+ICsNCj4+ICsJCSAgaWYgKG5lbHRzbTEgPT0gMCkNCj4+ ICsJCSAgICByZXR1cm4gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzE7DQo+PiArCQl9DQo+ PiArICAgIH0NCj4+ICsNCj4+ICsgIHJldHVybiBzYW1fdHlwZTsNCj4+ICt9DQo+PiArDQo+PiAv KiBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIgcmVmZXJlbmNlZCBieSB0aGUgQ09N UE9ORU5UX1JFRg0KPj4gICAgUkVGLCB1c2luZyBpdHMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBp ZiBuZWNlc3NhcnkgaW4gb3JkZXIgdG8NCj4+ICAgIGRldGVybWluZSB0aGUgc2l6ZSBvZiBhbiBp bml0aWFsaXplZCBmbGV4aWJsZSBhcnJheSBtZW1iZXIuDQo+PiAtICAgSWYgbm9uLW51bGwsIHNl dCAqQVJLIHdoZW4gUkVGIHJlZmVycyB0byBhbiBpbnRlcmlvciB6ZXJvLWxlbmd0aA0KPj4gKyAg IElmIG5vbi1udWxsLCBzZXQgKlNBTSB3aGVuIFJFRiByZWZlcnMgdG8gYW4gaW50ZXJpb3IgemVy by1sZW5ndGgNCj4+ICAgIGFycmF5IG9yIGEgdHJhaWxpbmcgb25lLWVsZW1lbnQgYXJyYXkuDQo+ PiAgICBSZXR1cm5zIHRoZSBzaXplIGFzIHNpemV0eXBlICh3aGljaCBtaWdodCBiZSB6ZXJvIGZv ciBhbiBvYmplY3QNCj4+ICAgIHdpdGggYW4gdW5pbml0aWFsaXplZCBmbGV4aWJsZSBhcnJheSBt ZW1iZXIpIG9yIG51bGwgaWYgdGhlIHNpemUNCj4+IC0gICBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4g ICovDQo+PiArICAgY2Fubm90IGJlIGRldGVybWluZWQuDQo+PiArICAgd2hlbiBGT1JfQVJSQVlf Qk9VTkRfQ0hFQ0sgaXMgdHJ1ZSwgdGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmb3INCj4+ICsgICAt V2FycmF5LWJvdW5kcyBjaGVjayBvbmx5LCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb24sIHRoZSBM RVZFTA0KPj4gKyAgIG9mIC1XYXJyYXktYm91bmRzPUxFVkVMIGlzIG5vdCBjb250cm9sZWQgYnkg LWZzdHJpY3QtZmxleC1hcnJheXMuICAqLw0KPj4gDQo+PiB0cmVlDQo+PiAtY29tcG9uZW50X3Jl Zl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5VTEwgKi8p DQo+PiArY29tcG9uZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIg KnNhbSAvKiA9IE5VTEwgKi8sDQo+PiArCQkgICAgYm9vbCBmb3JfYXJyYXlfYm91bmRfY2hlY2sg LyogPSBGQUxTRSAqLykNCj4+IHsNCj4+ICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChyZWYpID09 IENPTVBPTkVOVF9SRUYpOw0KPj4gDQo+PiAgIHNwZWNpYWxfYXJyYXlfbWVtYmVyIHNhbWJ1ZjsN Cj4+ICAgaWYgKCFzYW0pDQo+PiAgICAgc2FtID0gJnNhbWJ1ZjsNCj4+IC0gICpzYW0gPSBzcGVj aWFsX2FycmF5X21lbWJlcjo6bm9uZTsNCj4+ICsgICpzYW0gPSBjb21wb25lbnRfcmVmX3NhbV90 eXBlIChyZWYpOw0KPj4gDQo+PiAgIC8qIFRoZSBvYmplY3QvYXJndW1lbnQgcmVmZXJlbmNlZCBi eSB0aGUgQ09NUE9ORU5UX1JFRiBhbmQgaXRzIHR5cGUuICAqLw0KPj4gICB0cmVlIGFyZyA9IFRS RUVfT1BFUkFORCAocmVmLCAwKTsNCj4+IEBAIC0xMjk1OCw0MSArMTMwMzcsNDkgQEAgY29tcG9u ZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5V TEwgKi8pDQo+PiAJcmV0dXJuICh0cmVlX2ludF9jc3RfZXF1YWwgKG1lbXNpemUsIFRZUEVfU0la RV9VTklUIChtZW10eXBlKSkNCj4+IAkJPyBtZW1zaXplIDogTlVMTF9UUkVFKTsNCj4+IA0KPj4g LSAgICAgIGJvb2wgdHJhaWxpbmcgPSBhcnJheV9yZWZfZmxleGlibGVfc2l6ZV9wIChyZWYpOw0K Pj4gLSAgICAgIGJvb2wgemVyb19sZW5ndGggPSBpbnRlZ2VyX3plcm9wIChtZW1zaXplKTsNCj4+ IC0gICAgICBpZiAoIXRyYWlsaW5nICYmICF6ZXJvX2xlbmd0aCkNCj4+IC0JLyogTUVNQkVSIGlz IGVpdGhlciBhbiBpbnRlcmlvciBhcnJheSBvciBpcyBhbiBhcnJheSB3aXRoDQo+PiAtCSAgIG1v cmUgdGhhbiBvbmUgZWxlbWVudC4gICovDQo+PiArICAgICAgLyogMi1vci1tb3JlIGVsZW1lbnRz IGFycmF5cyBhcmUgdHJlYXRlZCBhcyBub3JtYWwgYXJyYXlzIGJ5IGRlZmF1bHQuICAqLw0KPj4g KyAgICAgIGlmICgqc2FtID09IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRfbg0KPj4gKwkgIHx8 ICpzYW0gPT0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsX24pDQo+PiAJcmV0dXJuIG1lbXNp emU7DQo+PiANCj4+IC0gICAgICBpZiAoemVyb19sZW5ndGgpDQo+PiArICAgICAgLyogRm9yIC1X YXJyYXktYm91bmRzPUxFVkVMIGNoZWNrLCBoaXN0b3JpY2FsbHkgd2UgaGF2ZSB0byB0cmVhdA0K Pj4gKwkgdHJhaWxfMCBhbmQgdHJhaWxfMSBhcyBmbGV4aWJsZSBhcnJheXMgYnkgZGVmYXVsdCB3 aGVuIExFVkVMPTEuDQo+PiArCSBmb3Igb3RoZXIgY2FzZXMsIGZsYWdfc3RyaWN0X2ZsZXhfYXJy YXlzIHdpbGwgY29udHJvbCBob3cgdG8gdHJlYXQNCj4+ICsJIHRoZSB0cmFpbGluZyBhcnJheXMg YXMgZmxleGlhYmxlIGFycmF5IG1lbWJlcnMuICAqLw0KPj4gKw0KPj4gKyAgICAgIHRyZWUgYWZp ZWxkX2RlY2wgPSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7DQo+PiArICAgICAgdW5zaWduZWQgaW50 IHN0cmljdF9mbGV4X2FycmF5X2xldmVsDQo+PiArCT0gc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWxf b2YgKGFmaWVsZF9kZWNsKTsNCj4+ICsNCj4+ICsgICAgICBpZiAoIWZvcl9hcnJheV9ib3VuZF9j aGVjaykNCj4+IAl7DQo+PiAtCSAgaWYgKHRyYWlsaW5nKQ0KPj4gLQkgICAgKnNhbSA9IHNwZWNp YWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8wOw0KPj4gLQkgIGVsc2UNCj4+ICsJICBzd2l0Y2ggKHN0 cmljdF9mbGV4X2FycmF5X2xldmVsKQ0KPj4gCSAgICB7DQo+PiAtCSAgICAgICpzYW0gPSBzcGVj aWFsX2FycmF5X21lbWJlcjo6aW50XzA7DQo+PiAtCSAgICAgIG1lbXNpemUgPSBOVUxMX1RSRUU7 DQo+PiArCSAgICAgIGNhc2UgMzoNCj4+ICsJCS8qIFRyZWFpbmcgMC1sZW5ndGggdHJhaWxpbmcg YXJyYXlzIGFzIG5vcm1hbCBhcnJheS4gICovDQo+PiArCQlpZiAoKnNhbSA9PSBzcGVjaWFsX2Fy cmF5X21lbWJlcjo6dHJhaWxfMCkNCj4+ICsJCSAgcmV0dXJuIHNpemVfemVyb19ub2RlOw0KPj4g KwkJLyogRkFMTFRIUk9VR0guICAqLw0KPj4gKwkgICAgICBjYXNlIDI6DQo+PiArCQkvKiBUcmVh dGluZyAxLWVsZW1lbnQgdHJhaWxpbmcgYXJyYXlzIGFzIG5vcm1hbCBhcnJheS4gICovDQo+PiAr CQlpZiAoKnNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMSkNCj4+ICsJCSAgcmV0 dXJuIG1lbXNpemU7DQo+PiArCQkvKiBGQUxMVEhST1VHSC4gICovDQo+PiArCSAgICAgIGNhc2Ug MToNCj4+ICsJCS8qIFRyZWF0aW5nIDItb3ItbW9yZSBlbGVtZW50cyB0cmFpbGluZyBhcnJheXMg YXMgbm9ybWFsDQo+PiArCQkgICBhcnJheS4gICovDQo+PiArCQlpZiAoKnNhbSA9PSBzcGVjaWFs X2FycmF5X21lbWJlcjo6dHJhaWxfbikNCj4+ICsJCSAgcmV0dXJuIG1lbXNpemU7DQo+PiArCQkv KiBGQUxMVEhST1VHSC4gICovDQo+PiArCSAgICAgIGNhc2UgMDoNCj4+ICsJCWJyZWFrOw0KPj4g KwkgICAgICBkZWZhdWx0Og0KPj4gKwkJZ2NjX3VucmVhY2hhYmxlICgpOw0KPj4gCSAgICB9DQo+ PiAJfQ0KPj4gDQo+PiAtICAgICAgaWYgKCF6ZXJvX2xlbmd0aCkNCj4+IC0JaWYgKHRyZWUgZG9t ID0gVFlQRV9ET01BSU4gKG1lbXR5cGUpKQ0KPj4gLQkgIGlmICh0cmVlIG1pbiA9IFRZUEVfTUlO X1ZBTFVFIChkb20pKQ0KPj4gLQkgICAgaWYgKHRyZWUgbWF4ID0gVFlQRV9NQVhfVkFMVUUgKGRv bSkpDQo+PiAtCSAgICAgIGlmIChUUkVFX0NPREUgKG1pbikgPT0gSU5URUdFUl9DU1QNCj4+IC0J CSAgJiYgVFJFRV9DT0RFIChtYXgpID09IElOVEVHRVJfQ1NUKQ0KPj4gLQkJew0KPj4gLQkJICBv ZmZzZXRfaW50IG1pbmlkeCA9IHdpOjp0b19vZmZzZXQgKG1pbik7DQo+PiAtCQkgIG9mZnNldF9p bnQgbWF4aWR4ID0gd2k6OnRvX29mZnNldCAobWF4KTsNCj4+IC0JCSAgb2Zmc2V0X2ludCBuZWx0 c20xID0gbWF4aWR4IC0gbWluaWR4Ow0KPj4gLQkJICBpZiAobmVsdHNtMSA+IDApDQo+PiAtCQkg ICAgLyogTUVNQkVSIGlzIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIG9uZSBlbGVtZW50LiAgKi8N Cj4+IC0JCSAgICByZXR1cm4gbWVtc2l6ZTsNCj4+IC0NCj4+IC0JCSAgaWYgKG5lbHRzbTEgPT0g MCkNCj4+IC0JCSAgICAqc2FtID0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzE7DQo+PiAt CQl9DQo+PiArCWlmICgqc2FtID09IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRfMCkNCj4+ICsJ ICBtZW1zaXplID0gTlVMTF9UUkVFOw0KPj4gDQo+PiAgICAgICAvKiBGb3IgYSByZWZlcmVuY2Ug dG8gYSB6ZXJvLSBvciBvbmUtZWxlbWVudCBhcnJheSBtZW1iZXIgb2YgYSB1bmlvbg0KPj4gCSB1 c2UgdGhlIHNpemUgb2YgdGhlIHVuaW9uIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgdGhlIG1lbWJl ci4gICovDQo+PiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuaCBiL2djYy90cmVlLmgNCj4+IGluZGV4 IDBmY2RkNmIwNmQwLi5mODFhMWY2ZWZhMSAxMDA2NDQNCj4+IC0tLSBhL2djYy90cmVlLmgNCj4+ ICsrKyBiL2djYy90cmVlLmgNCj4+IEBAIC01NTUxLDI4ICs1NTUxLDMzIEBAIGV4dGVybiB0cmVl IGFycmF5X3JlZl9sb3dfYm91bmQgKHRyZWUpOw0KPj4gLyogUmV0dXJucyB0cnVlIGlmIFJFRiBp cyBhbiBhcnJheSByZWZlcmVuY2UsIGEgY29tcG9uZW50IHJlZmVyZW5jZSwNCj4+ICAgIG9yIGEg bWVtb3J5IHJlZmVyZW5jZSB0byBhbiBhcnJheSB3aG9zZSBhY3R1YWwgc2l6ZSBtaWdodCBiZSBs YXJnZXINCj4+ICAgIHRoYW4gaXRzIHVwcGVyIGJvdW5kIGltcGxpZXMuICAqLw0KPj4gLWV4dGVy biBib29sIGFycmF5X3JlZl9mbGV4aWJsZV9zaXplX3AgKHRyZWUpOw0KPj4gK2V4dGVybiBib29s IGFycmF5X3JlZl9mbGV4aWJsZV9zaXplX3AgKHRyZWUsIGJvb2wgKiA9IE5VTEwpOw0KPj4gDQo+ PiAvKiBSZXR1cm4gYSB0cmVlIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0LCBpbiBieXRlcywgb2Yg dGhlIGZpZWxkIHJlZmVyZW5jZWQNCj4+ICAgIGJ5IEVYUC4gIFRoaXMgZG9lcyBub3QgaW5jbHVk ZSBhbnkgb2Zmc2V0IGluIERFQ0xfRklFTERfQklUX09GRlNFVC4gICovDQo+PiBleHRlcm4gdHJl ZSBjb21wb25lbnRfcmVmX2ZpZWxkX29mZnNldCAodHJlZSk7DQo+PiANCj4+IC0vKiBEZXNjcmli ZXMgYSAic3BlY2lhbCIgYXJyYXkgbWVtYmVyIGR1ZSB0byB3aGljaCBjb21wb25lbnRfcmVmX3Np emUNCj4+IC0gICByZXR1cm5zIG51bGwuICAqLw0KPj4gKy8qIERlc2NyaWJlcyBhICJzcGVjaWFs IiBhcnJheSBtZW1iZXIgZm9yIGEgQ09NUE9ORU5UX1JFRi4gICovDQo+PiBlbnVtIHN0cnVjdCBz cGVjaWFsX2FycmF5X21lbWJlcg0KPj4gICB7DQo+PiAgICAgbm9uZSwJLyogTm90IGEgc3BlY2lh bCBhcnJheSBtZW1iZXIuICAqLw0KPj4gICAgIGludF8wLAkvKiBJbnRlcmlvciBhcnJheSBtZW1i ZXIgd2l0aCBzaXplIHplcm8uICAqLw0KPj4gICAgIHRyYWlsXzAsCS8qIFRyYWlsaW5nIGFycmF5 IG1lbWJlciB3aXRoIHNpemUgemVyby4gICovDQo+PiAtICAgIHRyYWlsXzEJLyogVHJhaWxpbmcg YXJyYXkgbWVtYmVyIHdpdGggb25lIGVsZW1lbnQuICAqLw0KPj4gKyAgICB0cmFpbF8xLAkvKiBU cmFpbGluZyBhcnJheSBtZW1iZXIgd2l0aCBvbmUgZWxlbWVudC4gICovDQo+PiArICAgIHRyYWls X24sCS8qIFRyYWlsaW5nIGFycmF5IG1lbWJlciB3aXRoIHR3byBvciBtb3JlIGVsZW1lbnRzLiAg Ki8NCj4+ICsgICAgaW50X24JLyogSW50ZXJpb3IgYXJyYXkgbWVtYmVyIHdpdGggb25lIG9yIG1v cmUgZWxlbWVudHMuICAqLw0KPj4gICB9Ow0KPj4gDQo+PiArLyogRGV0ZXJtaW5lcyB0aGUgc3Bl Y2lhbCBhcnJheSBtZW1iZXIgdHlwZSBmb3IgYSBDT01QT05FTlRfUkVGLiAgKi8NCj4+ICtleHRl cm4gc3BlY2lhbF9hcnJheV9tZW1iZXIgY29tcG9uZW50X3JlZl9zYW1fdHlwZSAodHJlZSk7DQo+ PiArDQo+PiAvKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG1lbWJlciByZWZlcmVuY2VkIGJ5IHRo ZSBDT01QT05FTlRfUkVGLCB1c2luZw0KPj4gICAgaXRzIGluaXRpYWxpemVyIGV4cHJlc3Npb24g aWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgc2l6ZQ0KPj4gICAgb2YgYW4g aW5pdGlhbGl6ZWQgZmxleGlibGUgYXJyYXkgbWVtYmVyLiAgVGhlIHNpemUgbWlnaHQgYmUgemVy byBmb3INCj4+ICAgIGFuIG9iamVjdCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgZmxleGlibGUgYXJy YXkgbWVtYmVyIG9yIG51bGwgaWYgaXQNCj4+ICAgIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgKi8N Cj4+IC1leHRlcm4gdHJlZSBjb21wb25lbnRfcmVmX3NpemUgKHRyZWUsIHNwZWNpYWxfYXJyYXlf bWVtYmVyICogPSBOVUxMKTsNCj4+ICtleHRlcm4gdHJlZSBjb21wb25lbnRfcmVmX3NpemUgKHRy ZWUsIHNwZWNpYWxfYXJyYXlfbWVtYmVyICogPSBOVUxMLA0KPj4gKwkJCQlib29sID0gZmFsc2Up Ow0KPj4gDQo+PiBleHRlcm4gaW50IHRyZWVfbWFwX2Jhc2VfZXEgKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqKTsNCj4+IGV4dGVybiB1bnNpZ25lZCBpbnQgdHJlZV9tYXBfYmFzZV9oYXNoIChj b25zdCB2b2lkICopOw0KPj4gDQo+IA0KPiAtLSANCj4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhl ckBzdXNlLmRlPg0KPiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgsIEZyYW5r ZW5zdHJhc3NlIDE0NiwgOTA0NjEgTnVlcm5iZXJnLA0KPiBHZXJtYW55OyBHRjogSXZvIFRvdGV2 LCBBbmRyZXcgTXllcnMsIEFuZHJldyBNY0RvbmFsZCwgQm91ZGllbiBNb2VybWFuOw0KPiBIUkIg MzY4MDkgKEFHIE51ZXJuYmVyZykNCg0K