From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 599C4C38A2D for ; Wed, 26 Oct 2022 07:40:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233283AbiJZHk4 (ORCPT ); Wed, 26 Oct 2022 03:40:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233302AbiJZHkh (ORCPT ); Wed, 26 Oct 2022 03:40:37 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FDE53C153 for ; Wed, 26 Oct 2022 00:40:31 -0700 (PDT) Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29Q1nZWO017455; Wed, 26 Oct 2022 07:40:27 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=DmvtAa0fEuSJGBAKv+HVjzZap7uLOcwPUtJA2LxqWQU=; b=FxxXGEKueUnYRhaKo+tzertMvDkGWtfo2A7sOZsfQJRNX3QYO+FpmvN+m3sa67HxX5hl RJiBEurPClrMvvQLjPqxfrux6G53Ax1wZ1lclZpBCGU1BQAAGO2vLXiAXeZF4rDYWbFn dElzCpXyujwU8OKfLG1AHOnRM6lThrppSVVUokEdX+OVlak5YpZeppvE8vjihkii298f l6c4vYIULMmOOJCVYQ2BBF8yLMiSEWo9imfgfEfJUpv43eMnCeH2oFdVjnBSnEAxEeMO aVqHxSsLXUoic1rxob3bb3g74FDYuzSx8iJgql3twJfS/TPpkaYs7htK37TxM9VXYlTw aQ== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kc939eacs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Oct 2022 07:40:27 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 29Q7C2gw017235; Wed, 26 Oct 2022 07:40:26 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2170.outbound.protection.outlook.com [104.47.59.170]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3kc6y5py6d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Oct 2022 07:40:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YJIiciCnRVJ3zEjLJIQtx+UUS2WyV2J8yY8z9D0U+KugdcvD+6nu33dwl6KFOg3kaHYvQ91sAV9Q7nBwRLJajGsgsMV8A+ULTYmE+uJsZjAZN5Pkb2K/VIYfnaaJ6W9VHCYLueXW7OwQfQ2nVnrGIHFNsvqFI7Cq/E2mCwRF4AhgAXYvlxDdCcIHWZ3Ts31MxYSRGRc4b1fTzXKm4AgjQF3M01LJa5RcTAnezbpFYtmt51mjzPeeQ9nNY1Dw74VrkH91k2WsSXzFmmlL0+hPgGjHDb9dVc144a0WSxIsPWN2SJdigM+SP3pk7g+GGios0xVvCTDuIUrayKbCRSe5Ww== 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=DmvtAa0fEuSJGBAKv+HVjzZap7uLOcwPUtJA2LxqWQU=; b=RhS2NTtPEZ0+r+rxzc5muFUtSQhSE3YmDzvlTdTRb2Hxxy9YCgTD8/2PotAXT8p/qUaWfRaCCIJw/u/AjbzvNgSL0ffzNPaM8x0EOaQ2jWU5PXV2NJ4MSkZKYSel4Ui/JbFWykjsOTds9rbSK2unM3dHR00IKjiPZl87TYlTmQ3R6a1ndc3L1re0sMS7gECH6ulvZNft1Xu4BCtIqbFXYsxy0+iE1kYh87LFSmWu3aKqG/6wC0DbEkm/MEHZeNwhArqOelSkfteYTNBhrnwE4srMqWsEzygo8IsNCmzolzqBf0KxhkcFSQr2hpklvb3o6m0Z5TeHSAMLZdzzYRD1Ww== 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=DmvtAa0fEuSJGBAKv+HVjzZap7uLOcwPUtJA2LxqWQU=; b=vZ09Vf+q5PYBg/3NHhdfB7M0HF5GTpn68zDIlEMRSIZl1WXfM4Z02c2jkmo4B0Q7pwEFXlZ0kZW7cUrCRsd9TS4Kav9LuW2FS91DfHJbqQq2aLEidLBoLjrjVixMfYl89VQM/WNkmbwq0B5nQUdCCMG1SOQK2akLyCe2ZOmyXrw= Received: from BY5PR10MB4306.namprd10.prod.outlook.com (2603:10b6:a03:211::7) by DM4PR10MB5991.namprd10.prod.outlook.com (2603:10b6:8:b0::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.33; Wed, 26 Oct 2022 07:40:24 +0000 Received: from BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::c3f2:bf22:a83d:beb3]) by BY5PR10MB4306.namprd10.prod.outlook.com ([fe80::c3f2:bf22:a83d:beb3%3]) with mapi id 15.20.5746.023; Wed, 26 Oct 2022 07:40:24 +0000 From: Allison Henderson To: "djwong@kernel.org" CC: "linux-xfs@vger.kernel.org" Subject: Re: [PATCH v4 14/27] xfs: extend transaction reservations for parent attributes Thread-Topic: [PATCH v4 14/27] xfs: extend transaction reservations for parent attributes Thread-Index: AQHY5Zympprs0ttNH0+Le8GRuwzWeq4fnOaAgAC0SoA= Date: Wed, 26 Oct 2022 07:40:24 +0000 Message-ID: <5f987f3e2a8cd8b20b33f2f5cc62560ed9d7828e.camel@oracle.com> References: <20221021222936.934426-1-allison.henderson@oracle.com> <20221021222936.934426-15-allison.henderson@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.1-0ubuntu1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BY5PR10MB4306:EE_|DM4PR10MB5991:EE_ x-ms-office365-filtering-correlation-id: be7280cf-5ceb-45b4-a5a6-08dab72557ec x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TlXYG1KE/t/JGinBdIWEp1I+TjxxQyz4HfMXIbI3ldkWaOPrFys9uA6IVbClOBJqie+LxHGZX/8s7WN7TixjL5QQbFFjuliC+U+fhGM+ZWwVefIQvX3ynY6zzzsCc7UuHGmaa7hqlVoztgThuy+9ymyZPGQwKtflHjX99KsPq5fF+Ga6mCK5sAYAL+wkZJmrlBg0htD5A6aGVfswScDMcCixh6xhikNHljg2/lCINC6yreR+e+S1uT4JkkW1aQEzYW5QUWitb2eI7fcg0Qtpcp8VZvloDnd4xFu9hJLEKYgUF81TZTgRaPpF3bOQuyy22IzCUWGnomWdwQSP4WpdbZX6gn5PHWlFfQXoPs6lIff2fsQmfR8Oel4VFTil9EcMuVy+JPqss80hAHIT3OGWTIWDYSzmonOQ4t64TUQJsCnjAyDYvvIW1Wkl2SbM9fjdYDxiCZ3li1Fh6IQEyYNn0VjkcFlndUyXKrWWGNjDgS7NNMdhQUUOU5NJxmt+VA8twsX0nkW/C2oHFT2BHdNF0ob0Tlqp+IpE45UtCLEA+/7EzebNiVK4KONtND157VEgltecgqqPtGq1YaMnl28PXHPk0oiV4QeHo75K6YvWy8Vf2LlFahonH3kNvjhteeAucIFclNfgaO60fl8Hr9KfFUpGEhByivXv6qcFIyW3E22mo9ZwpMLA8e7G5sr8t9nJcCJNUDp5Ep8/peApDGglVWtK6ViIxJ+9YMC+IyR8HVeHEY10B7xVza541IEcgp8R x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4306.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(396003)(376002)(39860400002)(346002)(136003)(451199015)(316002)(66556008)(44832011)(86362001)(66476007)(66446008)(4326008)(6916009)(76116006)(83380400001)(66946007)(2906002)(2616005)(186003)(64756008)(41300700001)(8676002)(8936002)(6512007)(478600001)(26005)(71200400001)(38070700005)(30864003)(4001150100001)(38100700002)(6506007)(122000001)(36756003)(5660300002)(6486002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cmQrdmcxT0VXUFdZSlV6MWM5cWFHZW02TU9HL1d2Y3NkT2NyQWpGekJBSy9s?= =?utf-8?B?WlVjejcyeGlZUkF6eGpYd29vYndIcDE1U0d6bFZmRzE0QkdjcWFLcUcwT0pR?= =?utf-8?B?cEdZOGFrNGx1ODF2YXJoLzFLODBORElIU05neExtREQwNkZBSVhhcVlBQkVh?= =?utf-8?B?NUxhMWtMdms5bDF0MTJGaDRxWVlXTHk4Qmxjb3VhN0REM0sreWgxRkhraU83?= =?utf-8?B?S0RSd1RTL0g5bzhEVklDWFJwaHVvaTNRSXFxT1JXWnAzMVgwSTZSaWwxRUJk?= =?utf-8?B?ZWNaZ3BwL1ZMdVlMa1VXLzZKUEVzYUh0QkxiUmVsMEUrTlZzRU9YVld5MThW?= =?utf-8?B?RkNhbHFsZmpYUlluZ3ZNM0ZvU1F3akhpbEJTMWk0RlFLRmdnQjViaFZNT1BW?= =?utf-8?B?UU1jSHo5WjRBb2VGN2xzMEZjVTR6RVMvYnh4ZUo0d0UrRzhCamtmeXAwYjd3?= =?utf-8?B?L1VjT1dMYkhxYktiRTg4MUlwdmdjYVZ3RGxxRDJRMWlDdU9zdnY5VkhjSXpY?= =?utf-8?B?QkRidkc2cjVhNk5hZnBPM3NCY0ZWbnFwUkZ5aUtzVE1rVXhpT3krbW13M25P?= =?utf-8?B?cGMvb21hWXFqblRSbkpVb1ZXMlVWUkNjNjVKZURZVjZnNWNmRVQ1NzVIM28v?= =?utf-8?B?WG1SR1pPZlpYZzA2WlU3QWJPRmFBbTU1anN5OWJROGRSUlJrY2dJUG1NZTJ4?= =?utf-8?B?SE9ReG9sZGRYWEg0NC9vQXQzVk5nYmVYOE1vR0I0bHBmRCtYaHpFTFovME9w?= =?utf-8?B?OFh3TEVnb0N4cGQ3N2dtOUlrTTlyMWMyeUl6c2VpNFBSNVpsbzJtUmQ4d2JZ?= =?utf-8?B?Z3VDRXdjNTZ3ZmxjemdiTTNMSG8wdUljR1ROUG5wZE9lTjhCVS9mL1JudkxG?= =?utf-8?B?N0NwWmNDNGw4QzFhUnNjZmZHSzdEZXRwcmNOWFVFckdwUm93ZUZnbEVoeHhB?= =?utf-8?B?SDIyQTRLcFZxalgzUkEwaXM2NEFEWXRDeXMvemQrWWl2Nk40K1F4MUp1LzdS?= =?utf-8?B?UHlHT2xabXF0Qm1RT3dFRmNCKzhoU3dlNjFGODZPdmxRY29MSkZVYmdvMFQ5?= =?utf-8?B?Y3RHRGpydElla2ovRVNQbHB0SHJ2MUZVVUdJZ1M3MHBuaVUvcjBNakpCYnA4?= =?utf-8?B?dW4rcFA4S01TZVI5ZGlTKzZ6RW10djl4ekxsZ2Zxb0ZjN1NQNVR3WUFRU3o5?= =?utf-8?B?U3ZldlR5eksrVmVsVGdhUmQrMHFZcmJyNDRxSmNYZEFrSFQyOEtydnBRSzBU?= =?utf-8?B?Rm0vWlQwQk4xM0I5WmtmWmMwOFUwU2hYRngzb1FPa0xGSENaNmdyWEZodC9r?= =?utf-8?B?RytJSnVrcVNROTJYbXExOThMTVdHaTFIYmZNWDhBV0w5RkZISWkzZ09wK2Fy?= =?utf-8?B?WGpDSE12dVpwOVBubGpyQkNocUNxY1BRemJ2all2dWRmcTE2elRGa012dWRz?= =?utf-8?B?b0tjT0pNaW9nZSt5cURSQVk1TDJ3SVFEK1ZKS2V4cTljcXN1ZTBCQ1VQUzBa?= =?utf-8?B?Y3ByalpKaUJyd0lRK3V6NVBZejQyd1dmdTNuTUFWRG5lZWxXb2NqeHdtTnRU?= =?utf-8?B?L0dUMXRaL21FOEJiN1FHV2xldkRsWDVoNVJFNDB6bzFVTW8vVkF0TVFYLzZz?= =?utf-8?B?dTRpb2x2Z2pzWGU2R00yN2pHQlA5Y3RpbFlOZTlORENZWHNrYlpYUCtpRkJm?= =?utf-8?B?L1VuNFNkV0VYa0RvZkMvbjVjcDIvalRoU3hUMWd2NnBzMEVaOGl0Nnh2SVox?= =?utf-8?B?d25ldVlPZGNOVXlaRHFybFdCdm9OTFVUSmZzdkRKdXZtanJTYmRBYlIramE0?= =?utf-8?B?Q0FJOTV4eXM5VnY2bU9yb0VkQjhiTGRzQzBRSGlrUE9jWFhDa25DQUpWQisw?= =?utf-8?B?NTNUbXBiSW95UUdFMWFmcS9OM0lnR1hid1lIeXlBcVpOQ3VUM2FOSVFTUk9W?= =?utf-8?B?SUx0QWJBSmN3N01YK0FicmZBbkhpTndhQnE3RG5zdExTaDBEbFdjNC9Wem1j?= =?utf-8?B?WXQvL1M0RktxNEcxZmpUSGdqc0ZLRENTcTNPS3Q0d1E0bS9PbWx6SXRaQk9U?= =?utf-8?B?b1F2S010ajBabjczMVVTcWJyZjlHUTluVzVJNDdzYUtjQzE5OVdrbjFkd2VY?= =?utf-8?B?clNMNm1ySDdlTUtJdmZaaHZXVGZkdXh2cjgxRVpoVTE5WEFWbEswNGNveDl4?= =?utf-8?B?TWc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <84E1CC2E8037124081E5EF2621AC3778@namprd10.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4306.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: be7280cf-5ceb-45b4-a5a6-08dab72557ec X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2022 07:40:24.2989 (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: KGT+TOXyEUW3XrFbA+NIfDHlYtc+NoKV1MsCs7DVu4K6YTEVLL1a2x7QvyktnaL7Xrs9KNNCBMrsN3mBg5q5Wg1uu3nIJHtcUBkF0CUHnOA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR10MB5991 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-26_04,2022-10-25_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2209130000 definitions=main-2210260042 X-Proofpoint-GUID: dfz16OqoMU1Cu80tKZdnpWhrHKXAQxGx X-Proofpoint-ORIG-GUID: dfz16OqoMU1Cu80tKZdnpWhrHKXAQxGx Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org T24gVHVlLCAyMDIyLTEwLTI1IGF0IDEzOjU1IC0wNzAwLCBEYXJyaWNrIEouIFdvbmcgd3JvdGU6 Cj4gT24gRnJpLCBPY3QgMjEsIDIwMjIgYXQgMDM6Mjk6MjNQTSAtMDcwMCwKPiBhbGxpc29uLmhl bmRlcnNvbkBvcmFjbGUuY29twqB3cm90ZToKPiA+IEZyb206IEFsbGlzb24gSGVuZGVyc29uIDxh bGxpc29uLmhlbmRlcnNvbkBvcmFjbGUuY29tPgo+ID4gCj4gPiBXZSBuZWVkIHRvIGFkZCwgcmVt b3ZlIG9yIG1vZGlmeSBwYXJlbnQgcG9pbnRlciBhdHRyaWJ1dGVzIGR1cmluZwo+ID4gY3JlYXRl L2xpbmsvdW5saW5rL3JlbmFtZSBvcGVyYXRpb25zIGF0b21pY2FsbHkgd2l0aCB0aGUgZGlyZW50 cyBpbgo+ID4gdGhlCj4gPiBwYXJlbnQgZGlyZWN0b3JpZXMgYmVpbmcgbW9kaWZpZWQuIFRoaXMg bWVhbnMgdGhleSBuZWVkIHRvIGJlCj4gPiBtb2RpZmllZAo+ID4gaW4gdGhlIHNhbWUgdHJhbnNh Y3Rpb24gYXMgdGhlIHBhcmVudCBkaXJlY3RvcmllcywgYW5kIHNvIHdlIG5lZWQKPiA+IHRvIGFk ZAo+ID4gdGhlIHJlcXVpcmVkIHNwYWNlIGZvciB0aGUgYXR0cmlidXRlIG1vZGlmaWNhdGlvbnMg dG8gdGhlCj4gPiB0cmFuc2FjdGlvbgo+ID4gcmVzZXJ2YXRpb25zLgo+ID4gCj4gPiBTaWduZWQt b2ZmLWJ5OiBEYXZlIENoaW5uZXIgPGRjaGlubmVyQHJlZGhhdC5jb20+Cj4gPiBTaWduZWQtb2Zm LWJ5OiBBbGxpc29uIEhlbmRlcnNvbiA8YWxsaXNvbi5oZW5kZXJzb25Ab3JhY2xlLmNvbT4KPiA+ IC0tLQo+ID4gwqBmcy94ZnMvbGlieGZzL3hmc190cmFuc19yZXN2LmMgfCAzMDMgKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KPiA+IC0tLS0KPiA+IMKgMSBmaWxlIGNoYW5nZWQsIDI0OSBp bnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2ZzL3hm cy9saWJ4ZnMveGZzX3RyYW5zX3Jlc3YuYwo+ID4gYi9mcy94ZnMvbGlieGZzL3hmc190cmFuc19y ZXN2LmMKPiA+IGluZGV4IDViMmYyN2NiZGI4MC4uNzU2YjZmMzhjMzg1IDEwMDY0NAo+ID4gLS0t IGEvZnMveGZzL2xpYnhmcy94ZnNfdHJhbnNfcmVzdi5jCj4gPiArKysgYi9mcy94ZnMvbGlieGZz L3hmc190cmFuc19yZXN2LmMKPiA+IEBAIC0xOSw2ICsxOSw5IEBACj4gPiDCoCNpbmNsdWRlICJ4 ZnNfdHJhbnMuaCIKPiA+IMKgI2luY2x1ZGUgInhmc19xbS5oIgo+ID4gwqAjaW5jbHVkZSAieGZz X3RyYW5zX3NwYWNlLmgiCj4gPiArI2luY2x1ZGUgInhmc19hdHRyX2l0ZW0uaCIKPiA+ICsjaW5j bHVkZSAieGZzX2xvZy5oIgo+ID4gKyNpbmNsdWRlICJ4ZnNfZGFfZm9ybWF0LmgiCj4gPiDCoAo+ ID4gwqAjZGVmaW5lIF9BTExPQ8KgdHJ1ZQo+ID4gwqAjZGVmaW5lIF9GUkVFwqDCoGZhbHNlCj4g PiBAQCAtNDI2LDIzICs0MjksNjIgQEAgeGZzX2NhbGNfaXRydW5jYXRlX3Jlc2VydmF0aW9uX21p bmxvZ3NpemUoCj4gPiDCoCAqwqDCoMKgIHRoZSB0d28gZGlyZWN0b3J5IGJ0cmVlczogMiAqICht YXggZGVwdGggKyB2MikgKiBkaXIgYmxvY2sKPiA+IHNpemUKPiA+IMKgICrCoMKgwqAgdGhlIHR3 byBkaXJlY3RvcnkgYm1hcCBidHJlZXM6IDIgKiBtYXggZGVwdGggKiBibG9jayBzaXplCj4gPiDC oCAqIEFuZCB0aGUgYm1hcF9maW5pc2ggdHJhbnNhY3Rpb24gY2FuIGZyZWUgZGlyIGFuZCBibWFw IGJsb2Nrcwo+ID4gKHR3byBzZXRzCj4gPiAtICrCoMKgwqDCoMKgb2YgYm1hcCBibG9ja3MpIGdp dmluZzoKPiA+ICsgKsKgwqDCoMKgwqBvZiBibWFwIGJsb2NrcykgZ2l2aW5nICh0Mik6Cj4gPiDC oCAqwqDCoMKgIHRoZSBhZ2YgZm9yIHRoZSBhZ3MgaW4gd2hpY2ggdGhlIGJsb2NrcyBsaXZlOiAz ICogc2VjdG9yCj4gPiBzaXplCj4gPiDCoCAqwqDCoMKgIHRoZSBhZ2ZsIGZvciB0aGUgYWdzIGlu IHdoaWNoIHRoZSBibG9ja3MgbGl2ZTogMyAqIHNlY3Rvcgo+ID4gc2l6ZQo+ID4gwqAgKsKgwqDC oCB0aGUgc3VwZXJibG9jayBmb3IgdGhlIGZyZWUgYmxvY2sgY291bnQ6IHNlY3RvciBzaXplCj4g PiDCoCAqwqDCoMKgIHRoZSBhbGxvY2F0aW9uIGJ0cmVlczogMyBleHRzICogMiB0cmVlcyAqICgy ICogbWF4IGRlcHRoIC0KPiA+IDEpICogYmxvY2sgc2l6ZQo+ID4gKyAqIElmIHBhcmVudCBwb2lu dGVycyBhcmUgZW5hYmxlZCAodDMpLCB0aGVuIGVhY2ggdHJhbnNhY3Rpb24gaW4KPiA+IHRoZSBj aGFpbgo+ID4gKyAqwqDCoMKgIG11c3QgYmUgY2FwYWJsZSBvZiBzZXR0aW5nIG9yIHJlbW92aW5n IHRoZSBleHRlbmRlZAo+ID4gYXR0cmlidXRlCj4gPiArICrCoMKgwqAgY29udGFpbmluZyB0aGUg cGFyZW50IGluZm9ybWF0aW9uLsKgIEl0IG11c3QgYWxzbyBiZSBhYmxlIHRvCj4gPiBoYW5kbGUK PiA+ICsgKsKgwqDCoCB0aGUgdGhyZWUgeGF0dHIgaW50ZW50IGl0ZW1zIHRoYXQgdHJhY2sgdGhl IHByb2dyZXNzIG9mIHRoZQo+ID4gcGFyZW50Cj4gPiArICrCoMKgwqAgcG9pbnRlciB1cGRhdGUu Cj4gCj4gVG8gY2hlY2sgbXkgYXNzdW1wdGlvbnMgaGVyZTogRm9yIGEgc3RhbmRhcmQgcmVuYW1l LCB0aGUgdGhyZWUgeGF0dHIKPiBpbnRlbnQgaXRlbXMgYXJlICgxKSByZXBsYWNpbmcgdGhlIHBw dHIgZm9yIHRoZSBzb3VyY2UgZmlsZTsgKDIpCj4gcmVtb3ZpbmcgdGhlIHBwdHIgb24gdGhlIGRl c3QgZmlsZTsgYW5kICgzKSBhZGRpbmcgYSBwcHRyIGZvciB0aGUKPiB3aGl0ZW91dCBmaWxlIGlu IHRoZSBzcmMgZGlyPwo+IAo+IEZvciBhbiBSRU5BTUVfRVhDSEFOR0UsIHRoZXJlIGFyZSB0d28g eGF0dHIgaW50ZW50IGl0ZW1zIHRvIHJlcGxhY2UKPiB0aGUKPiBwcHRyIGZvciBib3RoIHNyYyBh bmQgZGVzdCBmaWxlcy7CoCBMaW5rIGNvdW50cyBkb24ndCBjaGFuZ2UgYW5kIHRoZXJlCj4gaXMK PiBubyB3aGl0ZW91dCwgY29ycmVjdD8KPiAKPiA+IMKgICovCj4gPiDCoFNUQVRJQyB1aW50Cj4g PiDCoHhmc19jYWxjX3JlbmFtZV9yZXNlcnZhdGlvbigKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGZzX21vdW50wqDCoMKgwqDCoMKgwqDCoCptcCkKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDC oMKgcmV0dXJuIFhGU19EUVVPVF9MT0dSRVMobXApICsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtYXgoKHhmc19jYWxjX2lub2RlX3JlcyhtcCwgNSkgKwo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhmc19jYWxjX2J1Zl9yZXMoMiAqIFhGU19E SVJPUF9MT0dfQ09VTlQobXApLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRlNfRlNCX1RPX0IobXAs IDEpKSksCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh4ZnNfY2Fs Y19idWZfcmVzKDcsIG1wLT5tX3NiLnNiX3NlY3RzaXplKSArCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGZzX2NhbGNfYnVmX3Jlcyh4ZnNfYWxsb2NmcmVlX2Js b2NrX2NvdW50KG1wLAo+ID4gMyksCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhGU19GU0JfVE9fQiht cCwgMSkpKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBvdmVyaGVhZCA9IFhGU19EUVVPVF9MT0dSRVMobXApOwo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHhmc190cmFuc19yZXN2wqDCoMKgKnJlc3AgPSBNX1JFUyhtcCk7Cj4gPiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0MSwgdDIsIHQz ID0gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHQxID0geGZzX2NhbGNfaW5vZGVfcmVzKG1w LCA1KSArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZnNfY2FsY19idWZfcmVzKDIgKiBY RlNfRElST1BfTE9HX0NPVU5UKG1wKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgWEZTX0ZTQl9UT19CKG1wLCAxKSk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqB0MiA9IHhmc19jYWxjX2J1Zl9yZXMoNywgbXAtPm1fc2Iuc2Jfc2VjdHNpemUpICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhmc19jYWxjX2J1Zl9yZXMoeGZzX2FsbG9jZnJl ZV9ibG9ja19jb3VudChtcCwgMyksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFhGU19GU0JfVE9fQihtcCwgMSkpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHhmc19oYXNfcGFyZW50KG1wKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHQzID0gbWF4KHJlc3AtPnRyX2F0dHJzZXRtLnRyX2xvZ3JlcywKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJlc3AtPnRyX2F0dHJybS50cl9sb2dyZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG92ZXJoZWFkICs9IDQgKiAoc2l6ZW9mKHN0cnVjdCB4ZnNfYXR0cmlfbG9nX2l0ZW0p Cj4gPiArCj4gCj4gSSdtIG5vdCBzdXJlIHdoeSB0aGlzIG11bHRpcGxpZXMgYnkgZm91ciB0aGVu Pwo+IAo+IFRoZSBsb2cgcmVzZXJ2YXRpb24gaXMgZm9yIHRoZSBvbmRpc2sgc3RydWN0dXJlcywg c28gdGhlIHNpemVvZgo+IHNob3VsZAo+IGJlIGZvciB4ZnNfYXR0cmlfbG9nX2Zvcm1hdCwgbm90 IHhmc19hdHRyaV9sb2dfaXRlbS4KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMiAqCj4gPiB4bG9nX2NhbGNfaW92 ZWNfbGVuKFhBVFRSX05BTUVfTUFYKSkgKwo+IAo+IEkgZ3Vlc3MgdGhlIDIgKiBYQVRUUl9OQU1F X01BWCBpcyB0byBsb2cgcmVwbGFjaW5nIHRoZSBvbGQgbmFtZSB3aXRoCj4gdGhlIG5ldyBuYW1l Pwo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHhsb2dfY2FsY19pb3ZlY19sZW4oCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2l6ZW9mKHN0cnVjdAo+ID4geGZzX3BhcmVudF9uYW1lX3JlYykpKTsKPiAKPiBBbmQg dGhpcyBsYXN0IG9uZSBpcyBmb3IgdGhlIHhhdHRyICJuYW1lIiwgd2hpY2ggaXMganVzdCB0aGUg KHBhcmVudCwKPiBnZW4sIGRpcm9mZnNldCkgc3RydWN0dXJlPwo+IAo+IEknbSBjb25jZXJuZWQg YWJvdXQgdGhlIG92ZXJoZWFkIGJlY29taW5nIHVubmVjZXNzYXJpbHkgbGFyZ2UgaGVyZSwKPiBz aW5jZSB0aGF0IGFsbCBjb21lcyBvdXQgdG86Cj4gCj4gwqDCoMKgwqDCoMKgwqDCoDQgKiAoNDgg Kwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMiAqIDI1NikgKwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAxNikKPiAKPiDCoMKgwqDCoMKgwqDCoMKgPSAyMzA0IGJ5dGVzP8KgIE9yIDE3 MjggYnl0ZXMgaWYgd2Ugb25seSBtdWx0aXBseSBieSAzPwpJIHRoaW5rIGl0J3MgMywgSSBkdWcg YmFjayB0aHJvdWdoIHRoZSByZXZpc2lvbnMgYW5kIEkgdGhpbmsgSSBtdXN0CmhhdmUgbWlzdGFr ZW5seSBzd2l0Y2hlZCBpbm9kZSBjb3VudCBhbmQgcHB0cnMKCj4gCj4gT2ssIG1heWJlIEknbSBu b3Qgc28gY29uY2VybmVkIGFmdGVyIGFsbDsgMi4zayBpc24ndCB0aGF0IGxhcmdlIGFzCj4gY29t cGFyZWQgdG8gbG9nZ2luZyBlbnRpcmUgZnNibG9jayBidWZmZXJzLsKgIFRoZXNlIG5hbWVzcGFj ZQo+IHRyYW5zYWN0aW9ucyBhcmUgMzAwLTQwMEtCIGluIHNpemUuwqAgQ291bGQgdGhpcyBiZSBy ZWR1Y2VkIGZ1cnRoZXIsCj4gdGhvdWdoPwo+IAo+IEZvciBhIHJlZ3VsYXIgcmVuYW1lLCB3ZSdy ZSBkb2luZyBhIHJlcGxhY2UsIGEgbGluaywgYW5kIGFuIHVubGluay4KPiAKPiDCoMKgwqDCoMKg wqDCoMKgKDQ4ICsgKDIgKiAyNTYpKSArCj4gwqDCoMKgwqDCoMKgwqDCoCg0OCArIDI1NikgKwo+ IMKgwqDCoMKgwqDCoMKgwqAoNDgpCj4gCj4gwqDCoMKgwqDCoMKgwqDCoD0gOTEyIGJ5dGVzCj4g Cj4gRm9yIGEgUkVOQU1FX0VYQ0hBTkdFLCB3ZSdyZSBkb2luZyB0d28gcmVwbGFjZXM6Cj4gCj4g wqDCoMKgwqDCoMKgwqDCoCg0OCArICgyICogMjU2KSkgKwo+IMKgwqDCoMKgwqDCoMKgwqAoNDgg KyAoMiAqIDI1NikpCj4gCj4gwqDCoMKgwqDCoMKgwqDCoD0gMTEyMCBieXRlcwo+IAo+IEknbSBn bGFkIHRoYXQgMTcyOCBpcyBsYXJnZXIgdGhhbiBib3RoIG9mIHRob3NlLiA6KQo+IAo+IExvb2tp bmcgZm9yd2FyZCBpbiB0aGlzIHBhdGNoLCBJIHNlZSB0aGUgc2FtZSBvcGVuLWNvZGVkIG92ZXJo ZWFkCj4gY2FsY3VsYXRpb25zIGFuZCB3b25kZXIgd2hhdCB5b3UgdGhpbmsgb2YgdGhlIGZvbGxv d2luZyByZWZhY3RvcmluZzoKPiAKPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ZnNfY2Fs Y19wcHRyX2xpbmtfb3ZlcmhlYWQodm9pZCkKPiB7Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBz aXplb2Yoc3RydWN0IHhmc19hdHRyaV9sb2dfZm9ybWF0KSArCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGxvZ19jYWxjX2lvdmVjX2xlbihYQVRUUl9O QU1FX01BWCkgKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhsb2dfY2FsY19pb3ZlY19sZW4oc2l6ZW9mKHN0cnVjdAo+IHhmc19wYXJlbnRfbmFtZV9y ZWMpKTsKPiB9Cj4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGZzX2NhbGNfcHB0cl91bmxp bmtfb3ZlcmhlYWQodm9pZCkKPiB7Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzaXplb2Yoc3Ry dWN0IHhmc19hdHRyaV9sb2dfZm9ybWF0KSArCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeGxvZ19jYWxjX2lvdmVjX2xlbihzaXplb2Yoc3RydWN0Cj4g eGZzX3BhcmVudF9uYW1lX3JlYykpOwo+IH0KPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4 ZnNfY2FsY19wcHRyX3JlcGxhY2Vfb3ZlcmhlYWQodm9pZCkKPiB7Cj4gwqDCoMKgwqDCoMKgwqDC oHJldHVybiBzaXplb2Yoc3RydWN0IHhmc19hdHRyaV9sb2dfZm9ybWF0KSArCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGxvZ19jYWxjX2lvdmVjX2xl bihYQVRUUl9OQU1FX01BWCkgKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHhsb2dfY2FsY19pb3ZlY19sZW4oWEFUVFJfTkFNRV9NQVgpICsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4bG9nX2NhbGNfaW92 ZWNfbGVuKHNpemVvZihzdHJ1Y3QKPiB4ZnNfcGFyZW50X25hbWVfcmVjKSk7Cj4gfQpJIHRoaW5r IHRoYXQncyBhIGRlc2NlbnQgY2xlYW4gdXAsIEknbGwgc2VlIGlmIEkgY2FuIHdvcmsgdGhvc2Ug aW4KCj4gCj4gQW5kIHRoZW4gdGhlIGFib3ZlIGJlY29tZXM6Cj4gCj4gwqDCoMKgwqDCoMKgwqDC oGlmICh4ZnNfaGFzX3BhcmVudChtcCkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHVuc2lnbmVkIGludMKgwqDCoMKgcmVuYW1lX292ZXJoZWFkLCBleGNoYW5nZV9vdmVyaGVh ZDsKPiAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHQzID0gbWF4KHJlc3AtPnRy X2F0dHJzZXRtLnRyX2xvZ3JlcywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmVzcC0+dHJfYXR0cnJtLnRyX2xvZ3Jlcyk7Cj4gCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogRm9yIGEgc3RhbmRhcmQgcmVuYW1lLCB0aGUgdGhyZWUgeGF0dHIgaW50ZW50IGxvZwo+ IGl0ZW1zCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBhcmUgKDEpIHJlcGxh Y2luZyB0aGUgcHB0ciBmb3IgdGhlIHNvdXJjZSBmaWxlOwo+ICgyKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogcmVtb3ZpbmcgdGhlIHBwdHIgb24gdGhlIGRlc3QgZmlsZTsg YW5kICgzKSBhZGRpbmcKPiBhCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBw cHRyIGZvciB0aGUgd2hpdGVvdXQgZmlsZSBpbiB0aGUgc3JjIGRpci4KPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBGb3IgYW4gUkVOQU1FX0VYQ0hBTkdFLCB0aGVyZSBhcmUgdHdvIHhhdHRyIGludGVudAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaXRlbXMgdG8gcmVwbGFjZSB0aGUgcHB0 ciBmb3IgYm90aCBzcmMgYW5kIGRlc3QKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIGZpbGVzLsKgIExpbmsgY291bnRzIGRvbid0IGNoYW5nZSBhbmQgdGhlcmUgaXMgbm8KPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdoaXRlb3V0Lgo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIEluIHRoZSB3b3JzdCBjYXNlIHdlIGNhbiBlbmQgdXAgcmVsb2dnaW5nIGFsbCBsb2cKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGludGVudCBpdGVtcyB0byBhbGxvdyB0 aGUgbG9nIHRhaWwgdG8gbW92ZSBhaGVhZCwKPiBzbwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICogdGhleSBiZWNvbWUgb3ZlcmhlYWQgYWRkZWQgdG8gZWFjaCB0cmFuc2FjdGlv biBpbgo+IGEKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHByb2Nlc3Npbmcg Y2hhaW4uCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlbmFtZV9vdmVyaGVhZCA9IHhmc19jYWxjX3BwdHJfcmVw bGFjZV9vdmVyaGVhZCgpICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGZzX2NhbGNfcHB0cl91bmxpbmtfb3Zlcmhl YWQoKSArCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHhmc19jYWxjX3BwdHJfbGlua19vdmVyaGVhZCgpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhjaGFuZ2Vfb3ZlcmhlYWQgPSAyICoKPiB4ZnNf Y2FsY19wcHRyX3JlcGxhY2Vfb3ZlcmhlYWQoKTsKPiAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG92ZXJoZWFkICs9IG1heChyZW5hbWVfb3ZlcmhlYWQsIGV4Y2hhbmdlX292ZXJo ZWFkKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IAo+IFlvdSBtaWdodCB3YW50IHRvIGNvbWUgdXAg d2l0aCBiZXR0ZXIgbmFtZXMgdGhvdWdoLgoKeGZzX2NhbGNfKl9wYXJlbnRfb3ZlcmhlYWQ/ICBJ J20gbm90IHN1cGVyIHBpY2t5IHdpdGggbmFtZXMsIHNvIGlmCnRoZXJlJ3Mgc29tZXRoaW5nIGZv bGtzIHByZWZlciBsZXQgbWUga25vdy4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gb3ZlcmhlYWQgKyBtYXgzKHQxLCB0MiwgdDMpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAo+ID4gK3hmc19yZW5hbWVf bG9nX2NvdW50KAo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhmc19tb3VudMKgwqDCoMKgwqDC oMKgwqAqbXAsCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jlc3bCoMKgwqAq cmVzcCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqAvKiBPbmUgZm9yIHRoZSByZW5hbWUsIG9u ZSBtb3JlIGZvciBmcmVlaW5nIGJsb2NrcyAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQg aW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gWEZTX1JFTkFNRV9MT0dfQ09VTlQ7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogUHJlLXJlc2Vy dmUgZW5vdWdoIGxvZyByZXNlcnZhdGlvbiB0byBoYW5kbGUgdGhlCj4gPiB0cmFuc2FjdGlvbgo+ ID4gK8KgwqDCoMKgwqDCoMKgICogcm9sbGluZyBuZWVkZWQgdG8gcmVtb3ZlIG9yIGFkZCBvbmUg cGFyZW50IHBvaW50ZXIuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oGlmICh4ZnNfaGFzX3BhcmVudChtcCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ICs9IG1heChyZXNwLT50cl9hdHRyc2V0bS50cl9sb2djb3VudCwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXNwLT50cl9hdHRy cm0udHJfbG9nY291bnQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ IMKgfQo+ID4gwqAKPiA+IMKgLyoKPiA+IEBAIC00NTksNiArNTAxLDIzIEBAIHhmc19jYWxjX2l1 bmxpbmtfcmVtb3ZlX3Jlc2VydmF0aW9uKAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAyICogTV9JR0VPKG1wKS0+aW5vZGVfY2x1c3Rlcl9zaXplOwo+ID4gwqB9Cj4gPiDCoAo+ID4g K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cj4gPiAreGZzX2xpbmtfbG9nX2NvdW50KAo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IHhmc19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXAsCj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jlc3bCoMKgwqAqcmVzcCkKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSBYRlNfTElOS19MT0dfQ09VTlQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gK8Kg wqDCoMKgwqDCoMKgICogUHJlLXJlc2VydmUgZW5vdWdoIGxvZyByZXNlcnZhdGlvbiB0byBoYW5k bGUgdGhlCj4gPiB0cmFuc2FjdGlvbgo+ID4gK8KgwqDCoMKgwqDCoMKgICogcm9sbGluZyBuZWVk ZWQgdG8gYWRkIG9uZSBwYXJlbnQgcG9pbnRlci4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHhmc19oYXNfcGFyZW50KG1wKSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgKz0gcmVzcC0+dHJfYXR0cnNldG0udHJfbG9nY291bnQ7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+IMKgLyoK PiA+IMKgICogRm9yIGNyZWF0aW5nIGEgbGluayB0byBhbiBpbm9kZToKPiA+IMKgICrCoMKgwqAg dGhlIHBhcmVudCBkaXJlY3RvcnkgaW5vZGU6IGlub2RlIHNpemUKPiA+IEBAIC00NzUsMTQgKzUz NCwyNyBAQCBTVEFUSUMgdWludAo+ID4gwqB4ZnNfY2FsY19saW5rX3Jlc2VydmF0aW9uKAo+ID4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZnNfbW91bnTCoMKgwqDCoMKgwqDCoMKgKm1wKQo+ID4g wqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gWEZTX0RRVU9UX0xPR1JFUyhtcCkgKwo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmc19jYWxjX2l1bmxpbmtfcmVtb3ZlX3Jl c2VydmF0aW9uKG1wKSArCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWF4KCh4 ZnNfY2FsY19pbm9kZV9yZXMobXAsIDIpICsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB4ZnNfY2FsY19idWZfcmVzKFhGU19ESVJPUF9MT0dfQ09VTlQobXApLAo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBYRlNfRlNCX1RPX0IobXAsIDEpKSksCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh4ZnNfY2FsY19idWZfcmVzKDMsIG1wLT5tX3Ni LnNiX3NlY3RzaXplKSArCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgeGZzX2NhbGNfYnVmX3Jlcyh4ZnNfYWxsb2NmcmVlX2Jsb2NrX2NvdW50KG1wLAo+ID4gMSks Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhGU19GU0JfVE9fQihtcCwgMSkpKSk7Cj4gPiArwqDCoMKg wqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG92ZXJoZWFkID0gWEZT X0RRVU9UX0xPR1JFUyhtcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jl c3bCoMKgICpyZXNwID0gTV9SRVMobXApOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0MSwgdDIsIHQyXzEsIHQyXzIsIHQzID0gMDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHQxID0geGZzX2NhbGNfaXVubGlua19yZW1vdmVfcmVzZXJ2YXRp b24obXApOwo+ID4gK8KgwqDCoMKgwqDCoMKgdDJfMSA9IHhmc19jYWxjX2lub2RlX3JlcyhtcCwg MikgKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhmc19jYWxjX2J1Zl9yZXMoWEZT X0RJUk9QX0xPR19DT1VOVChtcCksCj4gPiBYRlNfRlNCX1RPX0IobXAsIDEpKTsKPiA+ICvCoMKg wqDCoMKgwqDCoHQyXzIgPSB4ZnNfY2FsY19idWZfcmVzKDMsIG1wLT5tX3NiLnNiX3NlY3RzaXpl KSArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGZzX2NhbGNfYnVmX3Jlcyh4ZnNf YWxsb2NmcmVlX2Jsb2NrX2NvdW50KG1wLCAxKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFhGU19GU0JfVE9fQihtcCwg MSkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdDIgPSBtYXgodDJfMSwgdDJfMik7Cj4gCj4gQWRkIHhm c19jYWxjX2l1bmxpbmtfcmVtb3ZlX3Jlc2VydmF0aW9uIHRvIG92ZXJoZWFkLCByZW5hbWUgdDJf MSB0bwo+IHQxCj4gYW5kIHQyXzIgdG8gdDIsIGFuZCB0aGUgcmV0dXJuIHN0YXRlbWVudCBjYW4g YmVjb21lOgo+IAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gb3ZlcmhlYWQgKyBtYXgzKHQxLCB0 MiwgdDMpOwpPaywgd2lsbCB1cGRhdGUKCj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo eGZzX2hhc19wYXJlbnQobXApKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dDMgPSByZXNwLT50cl9hdHRyc2V0bS50cl9sb2dyZXM7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgb3ZlcmhlYWQgKz0gc2l6ZW9mKHN0cnVjdCB4ZnNfYXR0cmlfbG9nX2l0ZW0p ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHhsb2dfY2FsY19pb3ZlY19sZW4oWEFUVFJfTkFNRV9NQVgpICsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhsb2dfY2FsY19pb3Zl Y19sZW4oCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0cnVjdAo+ID4geGZzX3Bh cmVudF9uYW1lX3JlYykpOwo+IAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3Zl cmhlYWQgKz0geGZzX2NhbGNfcHB0cl9saW5rX292ZXJoZWFkKCk7Ck9rLCB3aWxsIGFkZAo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG92ZXJoZWFk ICsgdDEgKyB0MiArIHQzOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqAvKgo+ID4gQEAgLTQ5Nyw2ICs1 NjksMjMgQEAgeGZzX2NhbGNfaXVubGlua19hZGRfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QKPiA+ ICptcCkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oE1fSUdFTyhtcCktPmlub2RlX2NsdXN0ZXJfc2l6ZTsKPiA+IMKgfQo+ID4gwqAKPiA+ICtzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludAo+ID4gK3hmc19yZW1vdmVfbG9nX2NvdW50KAo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHhmc19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXAsCj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jlc3bCoMKgwqAqcmVzcCkKPiA+ICt7Cj4gPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBY RlNfUkVNT1ZFX0xPR19DT1VOVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDC oMKgwqDCoMKgwqAgKiBQcmUtcmVzZXJ2ZSBlbm91Z2ggbG9nIHJlc2VydmF0aW9uIHRvIGhhbmRs ZSB0aGUKPiA+IHRyYW5zYWN0aW9uCj4gPiArwqDCoMKgwqDCoMKgwqAgKiByb2xsaW5nIG5lZWRl ZCB0byBhZGQgb25lIHBhcmVudCBwb2ludGVyLgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoeGZzX2hhc19wYXJlbnQobXApKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCArPSByZXNwLT50cl9hdHRycm0udHJfbG9nY291bnQ7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+IMKgLyoKPiA+ IMKgICogRm9yIHJlbW92aW5nIGEgZGlyZWN0b3J5IGVudHJ5IHdlIGNhbiBtb2RpZnk6Cj4gPiDC oCAqwqDCoMKgIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlub2RlOiBpbm9kZSBzaXplCj4gPiBAQCAt NTEzLDE0ICs2MDIsMjcgQEAgU1RBVElDIHVpbnQKPiA+IMKgeGZzX2NhbGNfcmVtb3ZlX3Jlc2Vy dmF0aW9uKAo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZnNfbW91bnTCoMKgwqDCoMKgwqDC oMKgKm1wKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gWEZTX0RRVU9UX0xPR1JF UyhtcCkgKwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmc19jYWxjX2l1bmxp bmtfYWRkX3Jlc2VydmF0aW9uKG1wKSArCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbWF4KCh4ZnNfY2FsY19pbm9kZV9yZXMobXAsIDIpICsKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZnNfY2FsY19idWZfcmVzKFhGU19ESVJPUF9MT0dfQ09V TlQobXApLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRlNfRlNCX1RPX0IobXAsIDEpKSksCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh4ZnNfY2FsY19idWZfcmVzKDQs IG1wLT5tX3NiLnNiX3NlY3RzaXplKSArCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgeGZzX2NhbGNfYnVmX3Jlcyh4ZnNfYWxsb2NmcmVlX2Jsb2NrX2NvdW50KG1w LAo+ID4gMiksCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhGU19GU0JfVE9fQihtcCwgMSkpKSk7Cj4g PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG92ZXJo ZWFkID0gWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZz X3RyYW5zX3Jlc3bCoMKgICpyZXNwID0gTV9SRVMobXApOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0MSwgdDIsIHQyXzEsIHQyXzIsIHQzID0g MDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHQxID0geGZzX2NhbGNfaXVubGlua19hZGRfcmVz ZXJ2YXRpb24obXApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgdDJfMSA9IHhmc19jYWxjX2lu b2RlX3JlcyhtcCwgMikgKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhmc19jYWxj X2J1Zl9yZXMoWEZTX0RJUk9QX0xPR19DT1VOVChtcCksCj4gPiBYRlNfRlNCX1RPX0IobXAsIDEp KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHQyXzIgPSB4ZnNfY2FsY19idWZfcmVzKDQsIG1wLT5tX3Ni LnNiX3NlY3RzaXplKSArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGZzX2NhbGNf YnVmX3Jlcyh4ZnNfYWxsb2NmcmVlX2Jsb2NrX2NvdW50KG1wLCAyKSwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFhGU19G U0JfVE9fQihtcCwgMSkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdDIgPSBtYXgodDJfMSwgdDJfMik7 Cj4gCj4gU2ltaWxhciB0byB0aGUgbGFzdCBfcmVzZXJ2YXRpb24gZnVuY3Rpb24gLS0gYWRkCj4g eGZzX2NhbGNfaXVubGlua19hZGRfcmVzZXJ2YXRpb24gdG8gb3ZlcmhlYWQsIHJlbmFtZSB0Ml8x IHRvIHQxIGFuZAo+IHQyXzIKPiB0byB0MiBhbmQgdGhlIHJldHVybiBzdGF0ZW1lbnQgYmVjb21l czoKPiAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG92ZXJoZWFkICsgbWF4Myh0MSwgdDIsIHQz KTsKPiAKUmlnaHQsIHNhbWUgdGhpbmcgaGVyZQoKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZnNf aGFzX3BhcmVudChtcCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0MyA9 IHJlc3AtPnRyX2F0dHJybS50cl9sb2dyZXM7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgb3ZlcmhlYWQgKz0gc2l6ZW9mKHN0cnVjdCB4ZnNfYXR0cmlfbG9nX2l0ZW0pICsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhs b2dfY2FsY19pb3ZlY19sZW4oCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0cnVj dAo+ID4geGZzX3BhcmVudF9uYW1lX3JlYykpOwo+IAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgb3ZlcmhlYWQgKz0geGZzX2NhbGNfcHB0cl91bmxpbmtfb3ZlcmhlYWQoKTsKPiAK V2lsbCB1cGRhdGUKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBvdmVyaGVhZCArIHQxICsgdDIgKyB0MzsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgLyoK PiA+IEBAIC01NjksMTIgKzY3MSwzOSBAQCB4ZnNfY2FsY19pY3JlYXRlX3Jlc3ZfYWxsb2MoCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmc19jYWxjX2Zpbm9idF9yZXMobXAp Owo+ID4gwqB9Cj4gPiDCoAo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cj4gPiAreGZz X2ljcmVhdGVfbG9nX2NvdW50KAo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhmc19tb3VudMKg wqDCoMKgwqDCoMKgwqAqbXAsCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jl c3bCoMKgwqAqcmVzcCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBYRlNfQ1JFQVRFX0xPR19DT1VOVDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBQcmUtcmVzZXJ2ZSBlbm91 Z2ggbG9nIHJlc2VydmF0aW9uIHRvIGhhbmRsZSB0aGUKPiA+IHRyYW5zYWN0aW9uCj4gPiArwqDC oMKgwqDCoMKgwqAgKiByb2xsaW5nIG5lZWRlZCB0byBhZGQgb25lIHBhcmVudCBwb2ludGVyLgo+ ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoeGZzX2hhc19wYXJl bnQobXApKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCArPSByZXNwLT50 cl9hdHRyc2V0bS50cl9sb2djb3VudDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gwqBTVEFUSUMgdWludAo+ID4gLXhmc19jYWxjX2ljcmVhdGVf cmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQo+ID4gK3hmc19jYWxjX2ljcmVhdGVfcmVzZXJ2 YXRpb24oCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX21vdW50wqDCoMKgwqDCoMKgwqDC oCptcCkKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIFhGU19EUVVPVF9MT0dSRVMo bXApICsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXgoeGZzX2NhbGNfaWNy ZWF0ZV9yZXN2X2FsbG9jKG1wKSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgeGZzX2NhbGNfY3JlYXRlX3Jlc3ZfbW9kaWZ5KG1wKSk7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGZzX3RyYW5zX3Jlc3bCoMKgICpyZXNwID0gTV9SRVMobXApOwo+ID4gK8KgwqDC oMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gWEZTX0RR VU9UX0xPR1JFUyhtcCkgKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gbWF4KHhmc19jYWxjX2lj cmVhdGVfcmVzdl9hbGxvYyhtcCksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiB4ZnNfY2FsY19j cmVhdGVfcmVzdl9tb2RpZnkobXApKTsKPiAKPiBTdHlsaXN0aWMgY29tcGxhaW50OiBQbGVhc2Ug Zm9sbG93IHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3RoZXIgX2NhbGMKPiBmdW5jdGlvbnM6Cj4g Cj4gwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG92 ZXJoZWFkID0gWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cj4gwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHQxLCB0MiwgdDMgPSAwOwo+IAo+IMKgwqDCoMKg wqDCoMKgwqB0MSA9IHhmc19jYWxjX2ljcmVhdGVfcmVzdl9hbGxvYyhtcCk7Cj4gwqDCoMKgwqDC oMKgwqDCoHQyID0geGZzX2NhbGNfY3JlYXRlX3Jlc3ZfbW9kaWZ5KG1wKTsKPiAKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKHhmc19oYXNfcGFyZW50KG1wKSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdDMgPSByZXNwLT50cl9hdHRyc2V0bS50cl9sb2dyZXM7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvdmVyaGVhZCArPSB4ZnNfY2FsY19wcHRyX2xpbmtfb3Zl cmhlYWQoKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g b3ZlcmhlYWQgKyBtYXgzKHQxLCB0MiwgdDMpOwo+IApTdXJlLCB3aWxsIHVwZGF0ZQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHhmc19oYXNfcGFyZW50KG1wKSkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgKz0gcmVzcC0+dHJfYXR0cnNldG0udHJfbG9ncmVzICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0 cnVjdCB4ZnNfYXR0cmlfbG9nX2l0ZW0pICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgeGxvZ19jYWxjX2lvdmVjX2xlbihYQVRUUl9OQU1FX01BWCkgKwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4bG9nX2NhbGNf aW92ZWNfbGVuKAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3QKPiA+IHhm c19wYXJlbnRfbmFtZV9yZWMpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiDC oH0KPiA+IMKgCj4gPiDCoFNUQVRJQyB1aW50Cj4gPiBAQCAtNTg3LDYgKzcxNiwyMyBAQCB4ZnNf Y2FsY19jcmVhdGVfdG1wZmlsZV9yZXNlcnZhdGlvbigKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmVzICsgeGZzX2NhbGNfaXVubGlua19hZGRfcmVzZXJ2YXRpb24obXApOwo+ID4gwqB9Cj4g PiDCoAo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cj4gPiAreGZzX21rZGlyX2xvZ19j b3VudCgKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZnNfbW91bnTCoMKgwqDCoMKgwqDCoMKg Km1wLAo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhmc190cmFuc19yZXN2wqDCoMKgKnJlc3Ap Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gWEZTX01LRElSX0xPR19DT1VOVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBQcmUtcmVzZXJ2ZSBlbm91Z2ggbG9nIHJlc2VydmF0 aW9uIHRvIGhhbmRsZSB0aGUKPiA+IHRyYW5zYWN0aW9uCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBy b2xsaW5nIG5lZWRlZCB0byBhZGQgb25lIHBhcmVudCBwb2ludGVyLgo+ID4gK8KgwqDCoMKgwqDC oMKgICovCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoeGZzX2hhc19wYXJlbnQobXApKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCArPSByZXNwLT50cl9hdHRyc2V0bS50cl9s b2djb3VudDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4g Kwo+ID4gwqAvKgo+ID4gwqAgKiBNYWtpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIHRoZSBzYW1lIGFz IGNyZWF0aW5nIGEgbmV3IGZpbGUuCj4gPiDCoCAqLwo+ID4gQEAgLTU5Nyw2ICs3NDMsMjIgQEAg eGZzX2NhbGNfbWtkaXJfcmVzZXJ2YXRpb24oCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHhm c19jYWxjX2ljcmVhdGVfcmVzZXJ2YXRpb24obXApOwo+ID4gwqB9Cj4gPiDCoAo+ID4gK3N0YXRp YyBpbmxpbmUgdW5zaWduZWQgaW50Cj4gPiAreGZzX3N5bWxpbmtfbG9nX2NvdW50KAo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHhmc19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXAsCj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGZzX3RyYW5zX3Jlc3bCoMKgwqAqcmVzcCkKPiA+ICt7Cj4gPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBY RlNfU1lNTElOS19MT0dfQ09VTlQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gK8Kg wqDCoMKgwqDCoMKgICogUHJlLXJlc2VydmUgZW5vdWdoIGxvZyByZXNlcnZhdGlvbiB0byBoYW5k bGUgdGhlCj4gPiB0cmFuc2FjdGlvbgo+ID4gK8KgwqDCoMKgwqDCoMKgICogcm9sbGluZyBuZWVk ZWQgdG8gYWRkIG9uZSBwYXJlbnQgcG9pbnRlci4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHhmc19oYXNfcGFyZW50KG1wKSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgKz0gcmVzcC0+dHJfYXR0cnNldG0udHJfbG9nY291bnQ7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+IMKgCj4gPiDCoC8q Cj4gPiDCoCAqIE1ha2luZyBhIG5ldyBzeW1wbGluayBpcyB0aGUgc2FtZSBhcyBjcmVhdGluZyBh IG5ldyBmaWxlLCBidXQKPiA+IEBAIC02MDcsOCArNzY5LDE3IEBAIFNUQVRJQyB1aW50Cj4gPiDC oHhmc19jYWxjX3N5bWxpbmtfcmVzZXJ2YXRpb24oCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IHhmc19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXApCj4gPiDCoHsKPiA+IC3CoMKgwqDCoMKgwqDC oHJldHVybiB4ZnNfY2FsY19pY3JlYXRlX3Jlc2VydmF0aW9uKG1wKSArCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgeGZzX2NhbGNfYnVmX3JlcygxLCBYRlNfU1lNTElOS19NQVhMRU4p Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhmc190cmFuc19yZXN2wqDCoCAqcmVzcCA9IE1f UkVTKG1wKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldCA9Cj4gPiB4ZnNfY2FsY19pY3JlYXRlX3Jlc2VydmF0aW9uKG1wKSArCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHhmc19jYWxjX2J1Zl9yZXMoMSwKPiA+IFhGU19TWU1MSU5LX01BWExF Tik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoeGZzX2hhc19wYXJlbnQobXApKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCArPSByZXNwLT50cl9hdHRyc2V0bS50 cl9sb2dyZXMgKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplb2Yoc3RydWN0IHhmc19hdHRyaV9sb2dfaXRlbSkgKwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4bG9nX2NhbGNfaW92ZWNfbGVuKFhBVFRSX05B TUVfTUFYKSArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHhsb2dfY2FsY19pb3ZlY19sZW4oCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHN0 cnVjdAo+ID4geGZzX3BhcmVudF9uYW1lX3JlYykpOwo+IAo+IERpZG4ndCB3ZSBhbHJlYWR5IGFj Y291bnQgZm9yIHRoZSBwcHRyIGxvZyBpdGVtIG92ZXJoZWFkIGluCj4geGZzX2NhbGNfaWNyZWF0 ZV9yZXNlcnZhdGlvbj8KPiAKT2gsIEkgdGhpbmsgeW91cmUgcmlnaHQsIHNvIHRoaXMgb25lIGNh biBnbyBhd2F5LgoKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiDCoH0KPiA+IMKg Cj4gPiDCoC8qCj4gPiBAQCAtOTA5LDU0ICsxMDgwLDc2IEBAIHhmc19jYWxjX3NiX3Jlc2VydmF0 aW9uKAo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiB4ZnNfY2FsY19idWZfcmVzKDEsIG1wLT5t X3NiLnNiX3NlY3RzaXplKTsKPiA+IMKgfQo+ID4gwqAKPiA+IC12b2lkCj4gPiAteGZzX3RyYW5z X3Jlc3ZfY2FsYygKPiA+ICsvKgo+ID4gKyAqIE5hbWVzcGFjZSByZXNlcnZhdGlvbnMuCj4gPiAr ICoKPiA+ICsgKiBUaGVzZSBnZXQgdHJpY2t5IHdoZW4gcGFyZW50IHBvaW50ZXJzIGFyZSBlbmFi bGVkIGFzIHdlIGhhdmUKPiA+IGF0dHJpYnV0ZQo+ID4gKyAqIG1vZGlmaWNhdGlvbnMgb2NjdXJy aW5nIGZyb20gd2l0aGluIHRoZXNlIHRyYW5zYWN0aW9ucy4gUmF0aGVyCj4gPiB0aGFuIGNvbmZ1 c2UKPiA+ICsgKiBlYWNoIG9mIHRoZXNlIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9ucyB3aXRoIHRo ZSBjb25kaXRpb25hbAo+ID4gYXR0cmlidXRlCj4gPiArICogcmVzZXJ2YXRpb25zLCBhZGQgdGhl bSBoZXJlIGluIGEgY2xlYXIgYW5kIGNvbmNpc2UgbWFubmVyLiBUaGlzCj4gPiBhc3N1bWVzIHRo YXQKPiAKPiBzL2Fzc3VtZXMvcmVxdWlyZXMvIHNpbmNlIHlvdSBwdXQgaW4gQVNTRVJUcyA6KQo+ IApTdXJlLCB3aWxsIHVwZGF0ZS4gIFRoYW5rcyBmb3IgdGhlIHJldmlld3MhCkFsbGlzb24KCj4g LS1ECj4gCj4gPiArICogdGhlIGF0dHJpYnV0ZSByZXNlcnZhdGlvbnMgaGF2ZSBhbHJlYWR5IGJl ZW4gY2FsY3VsYXRlZC4KPiA+ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCB3ZSBvbmx5IGluY2x1ZGUg dGhlIHN0YXRpYyBhdHRyaWJ1dGUgcmVzZXJ2YXRpb24KPiA+IGhlcmU7IHRoZSBydW50aW1lCj4g PiArICogcmVzZXJ2YXRpb24gd2lsbCBoYXZlIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBzaXplIG9m IHRoZQo+ID4gYXR0cmlidXRlcyBiZWluZwo+ID4gKyAqIGFkZGVkL3JlbW92ZWQvbW9kaWZpZWQu IFNlZSB0aGUgY29tbWVudHMgb24gdGhlIGF0dHJpYnV0ZQo+ID4gcmVzZXJ2YXRpb24KPiA+ICsg KiBjYWxjdWxhdGlvbnMgZm9yIG1vcmUgZGV0YWlscy4KPiA+ICsgKi8KPiA+ICtTVEFUSUMgdm9p ZAo+ID4gK3hmc19jYWxjX25hbWVzcGFjZV9yZXNlcnZhdGlvbnMoCj4gPiDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHhmc19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXAsCj4gPiDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHhmc190cmFuc19yZXN2wqDCoMKgKnJlc3ApCj4gPiDCoHsKPiA+IC3CoMKgwqDC oMKgwqDCoGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvZ2Nv dW50X2FkaiA9IDA7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqAvKgo+ID4gLcKgwqDCoMKgwqDC oMKgICogVGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbnMgYXJlIGxvZ2dlZCBpbiBwaHlzaWNhbCBm b3JtYXQKPiA+IGFuZAo+ID4gLcKgwqDCoMKgwqDCoMKgICogcmVxdWlyZSBhIHBlcm1hbmVudCBy ZXNlcnZhdGlvbiBvbiBzcGFjZS4KPiA+IC3CoMKgwqDCoMKgwqDCoCAqLwo+ID4gLcKgwqDCoMKg wqDCoMKgcmVzcC0+dHJfd3JpdGUudHJfbG9ncmVzID0geGZzX2NhbGNfd3JpdGVfcmVzZXJ2YXRp b24obXAsCj4gPiBmYWxzZSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXNwLT50cl93cml0ZS50cl9s b2djb3VudCA9IFhGU19XUklURV9MT0dfQ09VTlQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXNwLT50 cl93cml0ZS50cl9sb2dmbGFncyB8PSBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTOwo+ID4gLQo+ID4g LcKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfaXRydW5jYXRlLnRyX2xvZ3JlcyA9Cj4gPiB4ZnNfY2Fs Y19pdHJ1bmNhdGVfcmVzZXJ2YXRpb24obXAsIGZhbHNlKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHJl c3AtPnRyX2l0cnVuY2F0ZS50cl9sb2djb3VudCA9IFhGU19JVFJVTkNBVEVfTE9HX0NPVU5UOwo+ ID4gLcKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfaXRydW5jYXRlLnRyX2xvZ2ZsYWdzIHw9IFhGU19U UkFOU19QRVJNX0xPR19SRVM7Cj4gPiArwqDCoMKgwqDCoMKgwqBBU1NFUlQocmVzcC0+dHJfYXR0 cnNldG0udHJfbG9ncmVzID4gMCk7Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoHJlc3AtPnRy X3JlbmFtZS50cl9sb2dyZXMgPQo+ID4geGZzX2NhbGNfcmVuYW1lX3Jlc2VydmF0aW9uKG1wKTsK PiA+IC3CoMKgwqDCoMKgwqDCoHJlc3AtPnRyX3JlbmFtZS50cl9sb2djb3VudCA9IFhGU19SRU5B TUVfTE9HX0NPVU5UOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfcmVuYW1lLnRyX2xvZ2Nv dW50ID0geGZzX3JlbmFtZV9sb2dfY291bnQobXAsCj4gPiByZXNwKTsKPiA+IMKgwqDCoMKgwqDC oMKgwqByZXNwLT50cl9yZW5hbWUudHJfbG9nZmxhZ3MgfD0gWEZTX1RSQU5TX1BFUk1fTE9HX1JF UzsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfbGluay50cl9sb2dyZXMgPSB4 ZnNfY2FsY19saW5rX3Jlc2VydmF0aW9uKG1wKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHJlc3AtPnRy X2xpbmsudHJfbG9nY291bnQgPSBYRlNfTElOS19MT0dfQ09VTlQ7Cj4gPiArwqDCoMKgwqDCoMKg wqByZXNwLT50cl9saW5rLnRyX2xvZ2NvdW50ID0geGZzX2xpbmtfbG9nX2NvdW50KG1wLCByZXNw KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXNwLT50cl9saW5rLnRyX2xvZ2ZsYWdzIHw9IFhGU19U UkFOU19QRVJNX0xPR19SRVM7Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoHJlc3AtPnRyX3Jl bW92ZS50cl9sb2dyZXMgPQo+ID4geGZzX2NhbGNfcmVtb3ZlX3Jlc2VydmF0aW9uKG1wKTsKPiA+ IC3CoMKgwqDCoMKgwqDCoHJlc3AtPnRyX3JlbW92ZS50cl9sb2djb3VudCA9IFhGU19SRU1PVkVf TE9HX0NPVU5UOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfcmVtb3ZlLnRyX2xvZ2NvdW50 ID0geGZzX3JlbW92ZV9sb2dfY291bnQobXAsCj4gPiByZXNwKTsKPiA+IMKgwqDCoMKgwqDCoMKg wqByZXNwLT50cl9yZW1vdmUudHJfbG9nZmxhZ3MgfD0gWEZTX1RSQU5TX1BFUk1fTE9HX1JFUzsK PiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfc3ltbGluay50cl9sb2dyZXMgPQo+ ID4geGZzX2NhbGNfc3ltbGlua19yZXNlcnZhdGlvbihtcCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBy ZXNwLT50cl9zeW1saW5rLnRyX2xvZ2NvdW50ID0gWEZTX1NZTUxJTktfTE9HX0NPVU5UOwo+ID4g K8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfc3ltbGluay50cl9sb2djb3VudCA9IHhmc19zeW1saW5r X2xvZ19jb3VudChtcCwKPiA+IHJlc3ApOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHJlc3AtPnRyX3N5 bWxpbmsudHJfbG9nZmxhZ3MgfD0gWEZTX1RSQU5TX1BFUk1fTE9HX1JFUzsKPiA+IMKgCj4gPiDC oMKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfY3JlYXRlLnRyX2xvZ3JlcyA9Cj4gPiB4ZnNfY2FsY19p Y3JlYXRlX3Jlc2VydmF0aW9uKG1wKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHJlc3AtPnRyX2NyZWF0 ZS50cl9sb2djb3VudCA9IFhGU19DUkVBVEVfTE9HX0NPVU5UOwo+ID4gK8KgwqDCoMKgwqDCoMKg cmVzcC0+dHJfY3JlYXRlLnRyX2xvZ2NvdW50ID0geGZzX2ljcmVhdGVfbG9nX2NvdW50KG1wLAo+ ID4gcmVzcCk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfY3JlYXRlLnRyX2xvZ2ZsYWdz IHw9IFhGU19UUkFOU19QRVJNX0xPR19SRVM7Cj4gPiDCoAo+ID4gK8KgwqDCoMKgwqDCoMKgcmVz cC0+dHJfbWtkaXIudHJfbG9ncmVzID0geGZzX2NhbGNfbWtkaXJfcmVzZXJ2YXRpb24obXApOwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfbWtkaXIudHJfbG9nY291bnQgPSB4ZnNfbWtkaXJf bG9nX2NvdW50KG1wLCByZXNwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlc3AtPnRyX21rZGlyLnRy X2xvZ2ZsYWdzIHw9IFhGU19UUkFOU19QRVJNX0xPR19SRVM7Cj4gPiArfQo+ID4gKwo+ID4gK3Zv aWQKPiA+ICt4ZnNfdHJhbnNfcmVzdl9jYWxjKAo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhm c19tb3VudMKgwqDCoMKgwqDCoMKgwqAqbXAsCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGZz X3RyYW5zX3Jlc3bCoMKgwqAqcmVzcCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsb2djb3VudF9hZGogPSAwOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFRoZSBmb2xs b3dpbmcgdHJhbnNhY3Rpb25zIGFyZSBsb2dnZWQgaW4gcGh5c2ljYWwgZm9ybWF0Cj4gPiBhbmQK PiA+ICvCoMKgwqDCoMKgwqDCoCAqIHJlcXVpcmUgYSBwZXJtYW5lbnQgcmVzZXJ2YXRpb24gb24g c3BhY2UuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHJlc3AtPnRy X3dyaXRlLnRyX2xvZ3JlcyA9IHhmc19jYWxjX3dyaXRlX3Jlc2VydmF0aW9uKG1wLAo+ID4gZmFs c2UpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfd3JpdGUudHJfbG9nY291bnQgPSBYRlNf V1JJVEVfTE9HX0NPVU5UOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzcC0+dHJfd3JpdGUudHJfbG9n ZmxhZ3MgfD0gWEZTX1RSQU5TX1BFUk1fTE9HX1JFUzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJlc3AtPnRyX2l0cnVuY2F0ZS50cl9sb2dyZXMgPQo+ID4geGZzX2NhbGNfaXRydW5jYXRlX3Jl c2VydmF0aW9uKG1wLCBmYWxzZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXNwLT50cl9pdHJ1bmNh dGUudHJfbG9nY291bnQgPSBYRlNfSVRSVU5DQVRFX0xPR19DT1VOVDsKPiA+ICvCoMKgwqDCoMKg wqDCoHJlc3AtPnRyX2l0cnVuY2F0ZS50cl9sb2dmbGFncyB8PSBYRlNfVFJBTlNfUEVSTV9MT0df UkVTOwo+ID4gKwo+ID4gwqDCoMKgwqDCoMKgwqDCoHJlc3AtPnRyX2NyZWF0ZV90bXBmaWxlLnRy X2xvZ3JlcyA9Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZnNfY2FsY19jcmVhdGVfdG1wZmlsZV9yZXNlcnZhdGlvbihtcCk7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgcmVzcC0+dHJfY3JlYXRlX3RtcGZpbGUudHJfbG9nY291bnQgPQo+ID4gWEZTX0NS RUFURV9UTVBGSUxFX0xPR19DT1VOVDsKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXNwLT50cl9jcmVh dGVfdG1wZmlsZS50cl9sb2dmbGFncyB8PQo+ID4gWEZTX1RSQU5TX1BFUk1fTE9HX1JFUzsKPiA+ IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqByZXNwLT50cl9ta2Rpci50cl9sb2dyZXMgPSB4ZnNfY2Fs Y19ta2Rpcl9yZXNlcnZhdGlvbihtcCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXNwLT50cl9ta2Rp ci50cl9sb2djb3VudCA9IFhGU19NS0RJUl9MT0dfQ09VTlQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqBy ZXNwLT50cl9ta2Rpci50cl9sb2dmbGFncyB8PSBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTOwo+ID4g LQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJlc3AtPnRyX2lmcmVlLnRyX2xvZ3JlcyA9IHhmc19jYWxj X2lmcmVlX3Jlc2VydmF0aW9uKG1wKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXNwLT50cl9pZnJl ZS50cl9sb2djb3VudCA9IFhGU19JTkFDVElWRV9MT0dfQ09VTlQ7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgcmVzcC0+dHJfaWZyZWUudHJfbG9nZmxhZ3MgfD0gWEZTX1RSQU5TX1BFUk1fTE9HX1JFUzsK PiA+IEBAIC05ODYsNiArMTE3OSw4IEBAIHhmc190cmFuc19yZXN2X2NhbGMoCj4gPiDCoMKgwqDC oMKgwqDCoMKgcmVzcC0+dHJfcW1fZHFhbGxvYy50cl9sb2djb3VudCA9IFhGU19XUklURV9MT0df Q09VTlQ7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmVzcC0+dHJfcW1fZHFhbGxvYy50cl9sb2dmbGFn cyB8PSBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTOwo+ID4gwqAKPiA+ICvCoMKgwqDCoMKgwqDCoHhm c19jYWxjX25hbWVzcGFjZV9yZXNlcnZhdGlvbnMobXAsIHJlc3ApOwo+ID4gKwo+ID4gwqDCoMKg wqDCoMKgwqDCoC8qCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogVGhlIGZvbGxvd2luZyB0cmFuc2Fj dGlvbnMgYXJlIGxvZ2dlZCBpbiBsb2dpY2FsIGZvcm1hdAo+ID4gd2l0aAo+ID4gwqDCoMKgwqDC oMKgwqDCoCAqIGEgZGVmYXVsdCBsb2cgY291bnQuCj4gPiAtLSAKPiA+IDIuMjUuMQo+ID4gCgo=