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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BAC48E7716B for ; Wed, 4 Dec 2024 02:19:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2699F10E290; Wed, 4 Dec 2024 02:19:53 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="k2RABc1o"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D13310E290 for ; Wed, 4 Dec 2024 02:19:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1733278791; x=1764814791; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ZOP5gui4fs3ItGzzNGXNk4wQS3m/hz3OjadQQc6tXrc=; b=k2RABc1oPgxcndSEIKR7mN9CtvZKMD5haxyLzR+/JgWhmwdfP//dBQEc zqcs6decEcIts/uGx5rVr9st4f/sPi7kJgwM9ffMUH91Px5gGZYyxElPg YLejplwPhs4LT7bVG0a5fqmUoGVFbg47a4rFIUAKRHCA5K6Nvt+FaTD+u OXNV6atUC0gWIUvU/1/rCEB1GFGO/y1cdKYu6T9WjGfJo9kdjn4NGOXM4 b/C+kZ4nfV/pdfR+/YMatZo0zUZC7VTQYm4Jx6tb7Az2kvGZf0UA7cpUv Sxpxo0DfEDlwErdMDcLmHWng39q+deo3R8dFtSZtRWkKDJlyMTD5x2KV6 Q==; X-CSE-ConnectionGUID: e/Xq3U4iTt+VQuDSTYTE/A== X-CSE-MsgGUID: pcnusgs7SAyWepG281ezxg== X-IronPort-AV: E=McAfee;i="6700,10204,11275"; a="37465066" X-IronPort-AV: E=Sophos;i="6.12,206,1728975600"; d="scan'208";a="37465066" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Dec 2024 18:19:49 -0800 X-CSE-ConnectionGUID: j8S+/YjgQeWdI0IputLM6w== X-CSE-MsgGUID: +DnHi5L6RNyL6JMfRDpB3g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,206,1728975600"; d="scan'208";a="93285408" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa006.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 03 Dec 2024 18:19:48 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 3 Dec 2024 18:19:47 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Tue, 3 Dec 2024 18:19:47 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Tue, 3 Dec 2024 18:19:47 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g2yBc56wuri5ljIQXQn2/CUpAdEhp8nQCiSwfQFLdwTe1NGwPs76h2eJ2aWeclyYdFXWqoeK+lHuqBi977pyz01PruloR7fntsWHeFXdKV4OqEv1W5df48QrPcLwP9nZJPDhxAOxx5tuOiAvGRmltc3wRDnucBCM2ND/hWr1ytr4epGWuuNgV+K6cJprVNZ60Pca1tovibpohlOvPgMTRS0VAmVG8DwICLCHPN2RlVgs4Pqhs8Q09dOCINhxTN9tBmBACQWkYoQvV2jOc3AO+o/0R6FbAnd/fVFs1qh5hZOBx3gvdZJCNT+/pquakOGfiOiAKjC5HM/kak3inmVYmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ZOP5gui4fs3ItGzzNGXNk4wQS3m/hz3OjadQQc6tXrc=; b=YjHFXpK0+X8DD2N5S07w+MR1ubBz9v09nAfeYs00G8RQJQ51dBoGgL3mLv3jw7B/NSYnYVyVPOHjBGJ/7WVWIFcimrBNym2dnOuY/XSBEtNTUZ1QgqtTyOEptVBDB7ehlNVjXhlBK7p4ozPlsKL1wasgdgi5/2A+9qJPm865erBgvOILwuWO0zTkk9s1FkjF/2jRJa7z+w5mJsLdIQLPA17n40XHhu6ZBfvhlL147EyZivKiWiwM6XEdlmdqf0XzQpdOCBHOS/FmHoZ6UA3iV+hJAY3wzX0lpbAYyA59mb412xN4qnQaoTwjOdHj4KW5o57OKmXcSHl8n942EUybxQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM8PR11MB5751.namprd11.prod.outlook.com (2603:10b6:8:12::16) by CY8PR11MB7243.namprd11.prod.outlook.com (2603:10b6:930:96::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8207.18; Wed, 4 Dec 2024 02:19:44 +0000 Received: from DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842]) by DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842%6]) with mapi id 15.20.8207.017; Wed, 4 Dec 2024 02:19:44 +0000 From: "Teres Alexis, Alan Previn" To: "Dong, Zhanjun" , "igt-dev@lists.freedesktop.org" CC: "Senna, Peter" , "kamil.konieczny@linux.intel.com" Subject: Re: [PATCH v5] tests/intel/xe_exec_capture: Add xe_exec_capture test Thread-Topic: [PATCH v5] tests/intel/xe_exec_capture: Add xe_exec_capture test Thread-Index: AQHbO6R4c1RC5CB2bkC0R+obtCecr7LVbqsA Date: Wed, 4 Dec 2024 02:19:44 +0000 Message-ID: <02c90f012873bcea60e1b39d2052b72da84d9bcd.camel@intel.com> References: <20241120233215.1637981-1-zhanjun.dong@intel.com> In-Reply-To: <20241120233215.1637981-1-zhanjun.dong@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM8PR11MB5751:EE_|CY8PR11MB7243:EE_ x-ms-office365-filtering-correlation-id: 8e0f5a02-6008-43a3-a40a-08dd140a1e4e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?VWM4MnpEMEpNeXlpeGErT2dEQ2c3Zy9iNlZ1V0lsT0RQNXhnOXFVWjFadVJJ?= =?utf-8?B?b2oyeUtDbVZZZGdEZzdQS0RXaFN2ck04NnRQOUFTZG5naFJWV2lBRkQwTXpr?= =?utf-8?B?MXVDUkFJanYwVzZYQ1NxbEUzek4vbVFaWmtBKzU4QmFYcEJTZ1crOGptQWY0?= =?utf-8?B?T05uSDg3RXBuQVRHNzk5L3FGczk3a3phWWlGRkpVS25ycXhlWW5uZnhXdlpJ?= =?utf-8?B?M01kcWZ0L2FDVU5FU2hLTmMvZFA0emRoSVdYWG0wS25HUmxRLzhoQXJPMnVy?= =?utf-8?B?MVRjc1RIbXRzcW00Skh0cCt0RndPcWhFaGRDZk9lbHBmWHV2YXJBTDkzNzAy?= =?utf-8?B?SmI4dDBPL2pRTmxXUzFCKzhRSzc1alJLVXJ4NklGNm1PMHlrSlJMRElZY01D?= =?utf-8?B?dDNlMVdSbUIwSmkzbGN3OU93NnErQ09VcGhpK2JjV2dEdmFoRVpQUU5jbUN3?= =?utf-8?B?LzRhV0xMVDJNeDRab3pNT3pZaFk5Q3FCL1QrVmxJWWZ3Tmp2T05DdDExSER5?= =?utf-8?B?a2RBb0M0T1V4T2ZaMjRIVzJYVW5FSFY0L2k4MXBZNGNKaklOQk1UV0NibFIx?= =?utf-8?B?b1dLWFhUQVZERGVSSDZyVXZhT2ZhMyt3NEQrV3FTbHlnWldyOEM3dnNkZjA0?= =?utf-8?B?NEdjY3pWZ2NSZEZnZGl3Y2gzYk0ya0l2OUd1ZDdSRDVtcFdQcURraVpka0R4?= =?utf-8?B?WUErWjR2cURXREZkeFFGb1gwR0F6VUtzcVpLZy8vQ202dmo1b0JMOXFCNW9Q?= =?utf-8?B?M253UTNuOWIwckxPODIzNG9IMjIwTHJiTCttNWR1cmMyUWxLbnFOWHpnQTVU?= =?utf-8?B?SElBc1EvbkROM1FCaTg0UFVEbkZwZ2tmS3VRZmliZnlCUFpPYVFGUDRWK0hp?= =?utf-8?B?UnhxUXIwMklUTm9YOWdFOUlTczN4U2NSVzJ4Zk8xbldHQU9qWjZOOGdITTh1?= =?utf-8?B?RHRvbHhMWW1kaHhPeUtyWk4zSVAzSVpLY0R0TEpQR3ZaQVVEVXk1T1ZTemVp?= =?utf-8?B?ZEhUM1ZGNG5iVUNvWTM4L0V2UXNHeXFnanhOK3E3STNjbHVJQWF0SDZ4M1I3?= =?utf-8?B?dTBGMGZNamdRcDdHVHlyZEJwN3JRTHpUYTFDWkxwWmZSajVWTG5NWUxndHp0?= =?utf-8?B?RXVzSmtDS1NGaVd5U1pzZ1pwcHpIY0d4dGRJT0o3L3N5VGlSNHBwdUkxQU1z?= =?utf-8?B?UjBINmhFRDBxQ1pxV0pBeStON21VNnhXbkFVRlN3a0w3WXdJbDlQNEcyaFpn?= =?utf-8?B?SkJrS3hqRUcwcmQ1NjJORm4zalJaNkMyZCtTWG53T2t5SzBrWERzdGNGS0po?= =?utf-8?B?WGRoRWhtUGFYMDdJOVp4RktNL1pLZ1E1Znl1QzFGN3Z1QjM3aHBaZWt4QjBu?= =?utf-8?B?TG5UVktkb2ljNkZaSXkrNlhwdjNFdStRSkF3OXFib0w1Y1RzakpwZUJSb0Ur?= =?utf-8?B?Y0k5bnR0aW9OMGJKSzFobWh2TDhLT0hNRU1obUE3d1VVOE96dmZOVmkvYVlw?= =?utf-8?B?WWVFVHlBZWxWSUY1WWN6KzNYeC80SVBrSXdnVEpvcTRyWVArR0dIaXlNcWhV?= =?utf-8?B?TG9MOFYrN3RMOGwyWHUxNjVidFpMWUp2bURaNU5KT0ZvQ2ZhL2JMOXZrM0xo?= =?utf-8?B?d2dqVGhWZzlUOU01QUhncEdkZ3VDWkVhVktvWittMEZPYTRyVDJlTk54bkVG?= =?utf-8?B?cmF6Zlh0ZHgzeExiL1o4aTFVS2g3Rmk0RHFldFVvR1MvRElSRTd5VnpRODJn?= =?utf-8?B?cy9RaUVtc2ttVy80MnFtdFZPdU8yeStlVUc0UWg2NlE1dkpuUFEyekxWckZz?= =?utf-8?B?VW9DV3JTc1hlZlhneTFhOUMyczVmSGZvaG05MHg5dFE5b2xvYTJXTnBZMmxZ?= =?utf-8?B?YUlveTd2WGVIYmszTExvR0JTZjRHeHFSY3JXYjJoQ3VqdXc9PQ==?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5751.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L2hCMEYvVEFjUW1waDZ1REsySndnM1BYOFZ2eG5JUU5mTVRtTzdtZjRZcWNU?= =?utf-8?B?anJMYnlCVFYzV05kbWtURE1PQ1RMY0VoNjBSdlQ4UFZ3dUtBYUhVcThjS1BU?= =?utf-8?B?b3FsVDhNUnp2NXcySmxSbE13V3NNUFZmRWVsTlZsQmp2VUpOR3c4dkNBTEx3?= =?utf-8?B?ektxcEpIQ0FYc1U2Z3Y3ZnBIUGdpVEc0YmVCUnJhSnVFTE5jTVVwb2NlZ0ZD?= =?utf-8?B?bmNjZ2s3TFB4OHBZUEZxOCtnNnN2ck1KcUhCTUhMbEpUTUpvK0x1M1BVUzVi?= =?utf-8?B?N25lcHR0WnBLSTRJcjM3ckRnV2VDKzZLR3ZPZjdCRzFGa25BWDQ3OGtOTjJy?= =?utf-8?B?Snh0N2c3d0hCeUZHUlkrblFrMnJEVnVmWnUzaTJ4ZE83T2xzWS9xVjE2UEhQ?= =?utf-8?B?Yk9rOEQ0YUhCdHI3cThzcWRaRTVick9yZWJ6cG9MRUF6Y3hOdnVMcmpxRmw0?= =?utf-8?B?SGl5bXlDL0FzLzZoUWFwbEVuQXpmMXEvWk4zZTRXRFNwNEU1TTd2VW1kcVdI?= =?utf-8?B?V3pKb09PNXVUanlGMG5zMEppc0pEMDJVV3ZraUUxKzhIRzNSbjdEeStQVk9x?= =?utf-8?B?QndoSFVyMW80NG5zSTJhakhvQVhVNHhOYzJoZG9veklUb0dqeWxEbzQvQmxv?= =?utf-8?B?ZkVJdE1nUmpweHo1ZzQ4UmpzTFFSVHpIdERSbUNtemZpV0xySW44aUs5RWp4?= =?utf-8?B?Y0xSd05tSFdQTEo1UVBSNEVib0NHVUcxNCtuTk5zVGViQU4xRjlLR3laVlJW?= =?utf-8?B?ckVlSGJIaGNIY1hucjBaNHV4QVh0Q2lGVnNlaWRjQnFHRHNzMlM1WXh0dk5R?= =?utf-8?B?VFdXRS9pa3ZXeGdEeXFiZzd4T21aSkxxYWRTQ2JzRDg1UUxtWVordzFxT00r?= =?utf-8?B?bnh3bUxUK2N1TTgyRlNibXMzRnZ2NTZVQ2dIVThTY25oUTNKQ2VoSHM4QndK?= =?utf-8?B?RzJFNlFyMkluTnMwR3dtMmdNaHBiYzA0ZTJlUHY2dU5RRERtRmYvcEUrVGRK?= =?utf-8?B?ZnVzSVRxejJhRnVvVjBMZ1ZaRTJHTGQrRkxYMTlKcUlacC9yTFVUY2lXT1c5?= =?utf-8?B?OU96QWI0TE5SMXFSRU1GM0JEL2dRd25ydFIwL3c2eERNZ2JleVo2MmZ2YWcz?= =?utf-8?B?T2k2ZTlCVUJBNzh4NUk1Z1VOYWQ3YTlweUR2ZW5XMWpYNGs5WHVla2plMDlZ?= =?utf-8?B?SUJKOFd3b0RRbmV1a0NRcjZpd0NuRENtOU9ic0VMVFBWbDNFSXZ4cHVyM2NL?= =?utf-8?B?T2dRQ1FpeTdqT2VjemRISmVEUk5FT1A1cnVUSi90TVJ4cFZBaTlIMVFzNW4v?= =?utf-8?B?Y3owTnhVblJlUXNmQk5TQlBQdmZaUFR6WFkxMXFDRmlrWk5PeUNIQk8yOTZt?= =?utf-8?B?M01ZUTI3T2lRM1o5K01nUjBVYVVvRXVOM3VDMkZ4ekkvVmRKTkFtZHFtMGFB?= =?utf-8?B?Nm1ndWt4Q2E0c3R1SUFIeVlFLy93UTBjbG8yc2ZBbkJIaHQ4dXhhTTRadkRX?= =?utf-8?B?UWcyQmxlVTFXZHVTZkEzbTF2S0p6RFg0S0tZSXZTdklzeG1SSEtOV2VFOGFG?= =?utf-8?B?WUFyM3g1R1RuMlBCVVJ0d0lNOWJCcFZGc0FLL29IS2tXS24rdVpmWG5wa0Va?= =?utf-8?B?OElIdHVJd1p2WlE5Q2w2cjl1S2h4eFlTUlIyL2N5L2ZkZzJZb1VpaVF5STVX?= =?utf-8?B?SmhPL0Y4TEhJVlNyMTMvL1hBRm5UcWswUlZRVXY3M3ZyUTQ0b0xOL1Z3Q2NY?= =?utf-8?B?SWN3ZkUxbHhiWHFHZDUrOEFZMjFnUEJBU25MVjhrOUdXNzl4ZUFQWndldTli?= =?utf-8?B?RFIxczZtTGwwT2U2bGxZVFY0ZlNxMTNCMVJPM2JwWElmUXpsdDAvZ3RDcmUr?= =?utf-8?B?NDlZNFI0TkI1UUVpTnpicUV5VDE2L3BUSFBKNjFxVko2WHdNKzVHZWZDbUd3?= =?utf-8?B?RkFjbUtBZkt5Vi9KWjZHT1JncU9JTXhsdEQ1THlpYVVtMEtuUHR0SmpFQlNO?= =?utf-8?B?Z3hST2s2WVNnaWVBK3NXczNzb2tXRHdWcGcyZThPendjZzVqVVl2OTVCdEpz?= =?utf-8?B?S3pzbUE1cHpndlJNUVJvYUZBeThHRkszdkhmdXlJVVFaVXAwTFhRdUdtWEw5?= =?utf-8?B?TGJFK3gzdWVtSFlZdnVpbmZ6Z1FxOHBjL1ZTUkptYTZBTnNmTnFJY0tBMEtt?= =?utf-8?Q?lipSERj+t93myMpsklA/7PI=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <6246E686AB268A45B9BB1066668630F7@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5751.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e0f5a02-6008-43a3-a40a-08dd140a1e4e X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Dec 2024 02:19:44.7010 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: C3TGYZRoQPQz27AJ04KPtFgdB3eDzIKvOc1FWJo9CWuHV4y2/xKVXlttG859ovyyrBr86I9ypCLDSoGoYxu3poreA0IEHq2gntqgUf9joCkUD/+wI/tZ5FWQUxViZJLD X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7243 X-OriginatorOrg: intel.com X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" aSBvbmx5IGhhdmUgMyBtaW5vciBhc2tzIGxlZnQgLSB0aGUgcmVzdCBhcmUgbml0J3MuCmhvcGlu ZyB3ZSBjYW4gZ2V0IHRoaXMgYXBwcm92ZWQgd2l0aCBhbm90aGVyIHJldi4KCnRoYW5rcyBhZ2Fp biBmb3IgdGhlIHdvcmsgLSBhbHNvLCBpIGFtIGdsYWQgdG8gc2VlCndlIGFyZSBub3cgY29tcGFy aW5nIHRoZSBlcnJvci1jYXB0dXJlIGJhdGNoIGFkZHJlc3MKYWdhaW5zdCB1bmlxdWUgdmFsdWVz IHRoYXQgaWRlbnRpZnkgd2hpY2ggZW5naW5lCmFuZCB3aGljaCBydW4gLSBzbyB3ZSBrbm93IGd1 YyBlcnJvciBjYXB0dXJlCmRpZCBub3QgbWlzLXJlcG9ydCBiZWNhdXNlIG9mIHNvbWUga2luZCBv ZiBpbnRlcm5hbApyYWNlLiAKCi4uLmFsYW4KCgpPbiBXZWQsIDIwMjQtMTEtMjAgYXQgMTU6MzIg LTA4MDAsIERvbmcsIFpoYW5qdW4gd3JvdGU6Cj4gU3VibWl0IGNtZHMgdG8gdGhlIEdQVSB0aGF0 IHJlc3VsdCBpbiBhIEd1QyBlbmdpbmUgcmVzZXQgYW5kIGNoZWNrIHRoYXQKPiBkZXZjb3JlZHVt cCByZWdpc3RlciBkdW1wIGlzIGdlbmVyYXRlZCwgYnkgdGhlIEd1QywgYW5kIGluY2x1ZGVzIHRo ZQo+IGZ1bGwgcmVnaXN0ZXIgcmFuZ2UuCj4gCj4gU2lnbmVkLW9mZi1ieTogWmhhbmp1biBEb25n IDx6aGFuanVuLmRvbmdAaW50ZWwuY29tPgo+IENjOiBBbGFuIFByZXZpbiA8YWxhbi5wcmV2aW4u dGVyZXMuYWxleGlzQGludGVsLmNvbT4KPiBDYzogUGV0ZXIgU2VubmEgVHNjaHVkaW4gPHBldGVy LnNlbm5hQGludGVsLmNvbT4KPiBDYzogS2FtaWwgS29uaWVjem55IDxrYW1pbC5rb25pZWN6bnlA bGludXguaW50ZWwuY29tPgo+IAo+IENoYW5nZXMgZnJvbSBwcmlvciByZXZzOgo+IMKgdjU6LcKg IERldGVjdCBkZXZjb3JlZHVtcCBtYXRjaGVzIHRoZSB0ZXN0aW5nIGVuZ2luZQo+IMKgwqDCoMKg wqDCoCBFbmdpbmUgd2lsbCBydW4gd2l0aCByYW5kb20gY2lkCj4gwqB2NDotwqAgU3VwcG9ydCBy dW5zIG9uIG11bHRpcGxlIEdQVQo+IMKgwqDCoMKgwqDCoCBMb2FkIGFsbCBkZXZjb3JlZHVtcCBj b250ZW50IHRvIGJ1ZmZlcgo+IMKgwqDCoMKgwqDCoCBBbGxvYyBsaW5lIGJ1ZmZlciBkeW5hbWlj IHZzIHN0YXRpYyBnbG9iYWwgbWVtb3J5Cj4gwqDCoMKgwqDCoMKgIENoYW5nZWQgdG8gaWd0X2Fz c2VydF9mIHRvIHByb3ZpZGUgbW9yZSBpbmZvIGlmIGZhaWxlZAo+IMKgdjM6LcKgIFJlbW92ZSBj YWxsIHRvIGJhc2ggYW5kIGF3awo+IMKgwqDCoMKgwqDCoCBBZGQgcmVndWxhciBleHByZXNzIHBh cnNlCj4gwqDCoMKgwqDCoMKgIERldGVjdCBkZXZjb3JlZHVtcCB0aHJvdWdoIGNhcmQgaW5kZXgK PiDCoMKgwqDCoMKgwqAgQWRkIGRldmNvcmVkdW1wIHJlbW92YWwgY2hlY2sKPiDCoHYyOi3CoCBG aXggQ0kuYnVpbGQgZXJyb3IKPiDCoMKgwqDCoMKgwqAgQWRkIG11bHRpcGxlIEdQVSBjYXJkIHN1 cHBvcnQKPiAtLS0KPiDCoHRlc3RzL2ludGVsL3hlX2V4ZWNfY2FwdHVyZS5jIHwgNDYyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoHRlc3RzL21lc29uLmJ1aWxkwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgMiBmaWxlcyBjaGFuZ2VkLCA0NjMgaW5z ZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ludGVsL3hlX2V4ZWNfY2Fw dHVyZS5jCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGVsL3hlX2V4ZWNfY2FwdHVyZS5jIGIv dGVzdHMvaW50ZWwveGVfZXhlY19jYXB0dXJlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMC4uMzNiOTJiYjcxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2lu dGVsL3hlX2V4ZWNfY2FwdHVyZS5jCj4gQEAgLTAsMCArMSw0NjIgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyNCBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBURVNUOiBCYXNpYyB0ZXN0cyBmb3Ig R3VDIGJhc2VkIHJlZ2lzdGVyIGNhcHR1cmUKPiArICogQ2F0ZWdvcnk6IENvcmUKPiArICogTWVn YSBmZWF0dXJlOiBHZW5lcmFsIENvcmUgZmVhdHVyZXMKPiArICogU3ViLWNhdGVnb3J5OiBDTUQg c3VibWlzc2lvbgo+ICsgKiBGdW5jdGlvbmFsaXR5OiBEZWJ1Zwo+ICsgKiBUZXN0IGNhdGVnb3J5 OiBmdW5jdGlvbmFsaXR5IHRlc3QKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8Y3R5cGUuaD4KPiAr I2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxyZWdleC5oPgo+ICsjaW5jbHVkZSA8c3Rk aW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsKPiAr I2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2RldmljZS5oIgo+ICsjaW5jbHVkZSAi bGliL2lndF9zeW5jb2JqLmgiCj4gKyNpbmNsdWRlICJsaWIvaW50ZWxfcmVnLmgiCj4gKyNpbmNs dWRlICJ4ZV9kcm0uaCIKPiArI2luY2x1ZGUgInhlL3hlX2lvY3RsLmgiCj4gKyNpbmNsdWRlICJ4 ZS94ZV9xdWVyeS5oIgo+ICsjaW5jbHVkZSAieGUveGVfc3Bpbi5oIgo+ICsKPiArI2RlZmluZSBN QVhfTl9FWEVDUVVFVUVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTYKPiArI2RlZmlu ZSBNQVhfSU5TVEFOQ0XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDkKPiAr I2RlZmluZSBHVF9SRVNFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAoMHgxIDw8IDApCj4gKyNkZWZpbmUgQ0xPU0VfRkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDB4MSA8PCAxKQo+ICsjZGVmaW5lIENMT1NFX0VYRUNf UVVFVUVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgweDEgPDwgMikKPiArI2RlZmluZSBW SVJUVUFMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCgweDEgPDwgMykKPiArI2RlZmluZSBQQVJBTExFTMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDQpCj4gKyNkZWZpbmUgQ0FU X0VSUk9SwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8 IDUpCj4gKwo+ICsjZGVmaW5lIEJBU0VfQUREUkVTU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgxYTAwMDAKPiArI2RlZmluZSBBRERSRVNTX1NISUZUwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMzkKPiArLyogQmF0Y2ggYnVmZmVyIGVsZW1lbnQgY291 bnQsIGluIG51bWJlciBvZiBkd29yZHModTMyKSAqLwo+ICsjZGVmaW5lIEJBVENIX0RXX0NPVU5U wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE2Cj4gKwo+ICsjZGVmaW5lIE1BWF9U RU1QX0xFTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgODAKPiArI2RlZmlu ZSBNQVhfU1lTRlNfUEFUSF9MRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEyOAo+ICsjZGVm aW5lIE1BWF9MSU5FU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg NDA5Ngo+ICsvKiBNYXggbGluZSBidWZmZXIgc2l6ZSAoaW5jbHVkZXMgbGFzdCAnXDAnKSAqLwo+ ICsjZGVmaW5lIE1BWF9MSU5FX0xFTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMTAyNAo+ICsjZGVmaW5lIE1BSU5fQlVGX1NJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAoTUFYX0xJTkVTICogTUFYX0xJTkVfTEVOICogc2l6ZW9mKGNoYXIpKQo+ICsv Kgo+ICsgKiBEZXZjb3JlZHVtcCBtaWdodCBoYXZlIGxvbmcgbGluZSB0aGlzIHRlc3QgZG9uJ3Qg Y2FyZS4KPiArICogVGhpcyBidWZmZXIgc2l6ZSB1c2VkIHdoZW4gbG9hZCBkdW1wIGNvbnRlbnQK PiArICovCj4gKyNkZWZpbmUgTElORV9CVUZfU0laRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCg2NCAqIDEwMjQpCj4gKwo+ICsjZGVmaW5lIERVTVBfUEFUSMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIi9zeXMvY2xhc3MvZHJtL2NhcmQlZC9k ZXZpY2UvZGV2Y29yZWR1bXAvZGF0YSIKPiArI2RlZmluZSBTVEFSVF9UQUfCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIqKioqIEpvYiAqKioqIgo+ICsjZGVmaW5l IEVORF9UQUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIioqKiogVk0gc3RhdGUgKioqKiIKPiArCj4gKyNkZWZpbmUgUkVHRVhf Tk9OX1NQQUNFX0dST1VQU8KgwqDCoMKgwqDCoMKgwqDCoCJeWyBcdF0qKFteIF0rKVsgXHRdKyhb XiBdKylbIFx0XSooW14gXSspKlsgXHRdKihbXiBdKykqWyBcdF0qKFteIF0rKSpbIFx0XSokIgph bGFuOiBpIHRoaW5rIGl0cyBiZXR0ZXIgZm9yIGZ1dHVyZSBtYWludGVuZW5jZSB0byBkZWZpbmUg YWJvdmUgYXMgYSBjb21iaW5hdGlvbiBvZiBzcGVjaWZpYyBtYXJrZXJzCmZvciBleGFtcGxlIGFz IHBlciBob3cgIiNkZWZpbmUgUkVHRVhQIiBpcyBkZWZpbmVkIGluIGludGVsX3JlZ19zcGVjLmMK PiArI2RlZmluZSBSRUdFWF9OT05fU1BBQ0VfR1JPVVBTX0NPVU5UwqDCoMKgNgo+ICsKPiArI2Rl ZmluZSBJTkRFWF9LRVnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDEKPiArI2RlZmluZSBJTkRFWF9WTEFVRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAyCj4gKyNkZWZpbmUgSU5ERVhfRU5HSU5FX1BIWVNJQ0FMwqDCoMKgwqDCoMKgwqDC oMKgwqAyCj4gKyNkZWZpbmUgSU5ERVhfRU5HSU5FX05BTUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMQo+ICsjZGVmaW5lIElOREVYX0VOR0lORV9JTlNUQU5DRcKgwqDCoMKgwqDCoMKgwqDC oMKgNAo+ICsKPiArdHlwZWRlZiB1MzLCoMKgwqDCoHVpbnQzMl90Owo+ICt0eXBlZGVmIHU2NMKg wqDCoMKgdWludDY0X3Q7CmFsYW46IG5pdDogbm90IHN1cmUgaWYgdGhlIHRhYiBhYm92ZSBpcyBz dGFuZGFyZCBwcmFjdGljZS4gCkFsc28gd29uZGVyaW5nIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5n IGhlYWRlciB5b3UgY291bGQKaW5jbHVkZSB0aGF0IGhlbHBzIHdpdGggdGhpcyB0eXBlZGVmIC0g c2VlIGxpbnV4X3NjYWZmb2xkLmgKPiArCj4gK3N0YXRpYyBjaGFyICpzYWZlX3N0cm5jcHkoY2hh ciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBuKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgY2hh ciAqczsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChuID4gMCk7Cj4gK8KgwqDCoMKg wqDCoMKgaWd0X2Fzc2VydChkc3QgJiYgc3JjKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcyA9IHN0 cm5jcHkoZHN0LCBzcmMsIG4gLSAxKTsKPiArwqDCoMKgwqDCoMKgwqBzW24gLSAxXSA9ICdcMCc7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg Y2hhciAqeGVfZW5naW5lX2NsYXNzX25hbWUodTMyIGVuZ2luZV9jbGFzcykKPiArewo+ICvCoMKg wqDCoMKgwqDCoHN3aXRjaCAoZW5naW5lX2NsYXNzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBE Uk1fWEVfRU5HSU5FX0NMQVNTX1JFTkRFUjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuICJyY3MiOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX1hFX0VOR0lORV9DTEFT U19DT1BZOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gImJjcyI7Cj4g K8KgwqDCoMKgwqDCoMKgY2FzZSBEUk1fWEVfRU5HSU5FX0NMQVNTX1ZJREVPX0RFQ09ERToKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuICJ2Y3MiOwo+ICvCoMKgwqDCoMKg wqDCoGNhc2UgRFJNX1hFX0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gInZlY3MiOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2Ug RFJNX1hFX0VOR0lORV9DTEFTU19DT01QVVRFOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gImNjcyI7Cj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X3dhcm4oIkVuZ2luZSBjbGFzcyAweCV4IHVua25vd25c biIsIGVuZ2luZV9jbGFzcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAidW5rbm93biI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ ICt0ZXN0X2xlZ2FjeV9tb2RlKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5z dGFuY2UgKmVjaSwgaW50IG5fZXhlY19xdWV1ZXMsIGludCBuX2V4ZWNzLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGZsYWdzLCB1NjQgYWRkcikKYWxhbjog bml0OiBtYXliZSByZW5hbWUgZnJvbSAiYWRkciIgdG8gImVuZ19zZWVkX2FkZHIiPyAoYSBiaXQg bW9yZSBkZXNjcmlwdGl2ZSkuCkJ1dCB0aGVuIGFnYWluLCBqdXN0IGEgbml0LgoKPiArewo+ICvC oMKgwqDCoMKgwqDCoHUzMiB2bTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX3hlX3N5bmMg c3luY1syXSA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAudHlwZSA9IERS TV9YRV9TWU5DX1RZUEVfU1lOQ09CSiwgLmZsYWdzID0gRFJNX1hFX1NZTkNfRkxBR19TSUdOQUws IH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLnR5cGUgPSBEUk1fWEVfU1lO Q19UWVBFX1NZTkNPQkosIC5mbGFncyA9IERSTV9YRV9TWU5DX0ZMQUdfU0lHTkFMLCB9LAo+ICvC oMKgwqDCoMKgwqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9leGVjIGV4ZWMg PSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5udW1fYmF0Y2hfYnVmZmVyID0g MSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51bV9zeW5jcyA9IDIsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zeW5jcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5j KSwKPiArwqDCoMKgwqDCoMKgwqB9Owo+ICvCoMKgwqDCoMKgwqDCoHUzMiBleGVjX3F1ZXVlc1tN QVhfTl9FWEVDUVVFVUVTXTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgc3luY29ianNbTUFYX05fRVhF Q1FVRVVFU107Cj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IGJvX3NpemU7Cj4gK8KgwqDCoMKgwqDC oMKgdTMyIGJvID0gMDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfc3BpbiBzcGluOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1MzIgYmF0Y2hbQkFUQ0hfRFdfQ09VTlRdOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1NjQgcGFkOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB1MzIgZGF0YTsKPiArwqDCoMKgwqDCoMKgwqB9ICpkYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9zcGluX29wdHMgc3Bpbl9vcHRzID0geyAucHJlZW1wdCA9IGZhbHNlIH07Cj4gK8Kg wqDCoMKgwqDCoMKgaW50IGksIGI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQobl9l eGVjX3F1ZXVlcyA8PSBNQVhfTl9FWEVDUVVFVUVTKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdm0g PSB4ZV92bV9jcmVhdGUoZmQsIDAsIDApOwo+ICvCoMKgwqDCoMKgwqDCoGJvX3NpemUgPSBzaXpl b2YoKmRhdGEpICogbl9leGVjczsKPiArwqDCoMKgwqDCoMKgwqBib19zaXplID0geGVfYmJfc2l6 ZShmZCwgYm9fc2l6ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGJvID0geGVfYm9fY3JlYXRlKGZk LCB2bSwgYm9fc2l6ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZyYW1faWZfcG9zc2libGUoZmQsIGVjaS0+Z3RfaWQpLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1hFX0dFTV9DUkVBVEVf RkxBR19ORUVEU19WSVNJQkxFX1ZSQU0pOwo+ICvCoMKgwqDCoMKgwqDCoGRhdGEgPSB4ZV9ib19t YXAoZmQsIGJvLCBib19zaXplKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8 IG5fZXhlY19xdWV1ZXM7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl eGVjX3F1ZXVlc1tpXSA9IHhlX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bSwgZWNpLCAwKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3luY29ianNbaV0gPSBzeW5jb2JqX2NyZWF0 ZShmZCwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgfTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3luY1sw XS5oYW5kbGUgPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgeGVfdm1f YmluZF9hc3luYyhmZCwgdm0sIDAsIGJvLCAwLCBhZGRyLCBib19zaXplLCBzeW5jLCAxKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG5fZXhlY3M7IGkrKykgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgYmFzZV9hZGRyID0gYWRkcjsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IGJhdGNoX29mZnNldCA9IChjaGFyICopJmRhdGFb aV0uYmF0Y2ggLSAoY2hhciAqKWRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHU2NCBiYXRjaF9hZGRyID0gYmFzZV9hZGRyICsgYmF0Y2hfb2Zmc2V0Owo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgc3Bpbl9vZmZzZXQgPSAoY2hhciAqKSZkYXRhW2ldLnNw aW4gLSAoY2hhciAqKWRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCBz ZGlfb2Zmc2V0ID0gKGNoYXIgKikmZGF0YVtpXS5kYXRhIC0gKGNoYXIgKilkYXRhOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgc2RpX2FkZHIgPSBiYXNlX2FkZHIgKyBzZGlf b2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgZXhlY19hZGRyOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZSA9IGkgJSBuX2V4ZWNfcXVldWVz Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGluX29wdHMuYWRkciA9 IGJhc2VfYWRkciArIHNwaW5fb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeGVfc3Bpbl9pbml0KCZkYXRhW2ldLnNwaW4sICZzcGluX29wdHMp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhlY19h ZGRyID0gc3Bpbl9vcHRzLmFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0g ZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi ID0gMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRh dGFbaV0uYmF0Y2hbYisrXSA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YVtpXS5iYXRjaFtiKytdID0g c2RpX2FkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkYXRhW2ldLmJhdGNoW2IrK10gPSBzZGlfYWRkciA+PiAzMjsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFbaV0uYmF0Y2hbYisrXSA9IDB4YzBm ZmVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0 YVtpXS5iYXRjaFtiKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoYiA8PSBBUlJBWV9TSVpF KGRhdGFbaV0uYmF0Y2gpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBleGVjX2FkZHIgPSBiYXRjaF9hZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzeW5j WzBdLmZsYWdzICY9IH5EUk1fWEVfU1lOQ19GTEFHX1NJR05BTDsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3luY1sxXS5mbGFncyB8PSBEUk1fWEVfU1lOQ19GTEFHX1NJR05BTDsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3luY1sxXS5oYW5kbGUgPSBzeW5jb2Jq c1tlXTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4ZWMuZXhlY19xdWV1 ZV9pZCA9IGV4ZWNfcXVldWVzW2VdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl eGVjLmFkZHJlc3MgPSBleGVjX2FkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChlICE9IGkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29ianNbZV0sIDEpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjKGZkLCAmZXhlYyk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbl9leGVjX3F1ZXVlcyAmJiBuX2V4 ZWNzOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3lu Y29ial93YWl0KGZkLCAmc3luY29ianNbaV0sIDEsIElOVDY0X01BWCwgMCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgTlVMTCkpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93 YWl0KGZkLCAmc3luY1swXS5oYW5kbGUsIDEsIElOVDY0X01BWCwgMCwgTlVMTCkpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBzeW5jWzBdLmZsYWdzIHw9IERSTV9YRV9TWU5DX0ZMQUdfU0lHTkFMOwo+ ICvCoMKgwqDCoMKgwqDCoHhlX3ZtX3VuYmluZF9hc3luYyhmZCwgdm0sIDAsIDAsIGFkZHIsIGJv X3NpemUsIHN5bmMsIDEpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93YWl0 KGZkLCAmc3luY1swXS5oYW5kbGUsIDEsIElOVDY0X01BWCwgMCwgTlVMTCkpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNbMF0uaGFuZGxlKTsKPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbl9leGVjX3F1ZXVlczsgaSsrKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbaV0pOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2Rlc3Ryb3koZmQs IGV4ZWNfcXVldWVzW2ldKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oG11bm1hcChkYXRhLCBib19zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBnZW1fY2xvc2UoZmQsIGJv KTsKPiArwqDCoMKgwqDCoMKgwqB4ZV92bV9kZXN0cm95KGZkLCB2bSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBjaGFyICoqYWxsb2NfbGluZXNfYnVmZmVyKHZvaWQpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBpbnQgaTsKPiArwqDCoMKgwqDCoMKgwqBjaGFyICoqbGluZXMgPSAoY2hhciAqKiltYWxsb2Mo TUFYX0xJTkVTICogc2l6ZW9mKGNoYXIgKikpOwo+ICvCoMKgwqDCoMKgwqDCoGNoYXIgKm1haW5f YnVmID3CoCAoY2hhciAqKW1hbGxvYyhNQUlOX0JVRl9TSVpFKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgaWd0X2Fzc2VydF9mKGxpbmVzLCAiT3V0IG9mIG1lbW9yeS5cbiIpOwo+ICvCoMKgwqDCoMKg wqDCoGlndF9hc3NlcnRfZihtYWluX2J1ZiwgIk91dCBvZiBtZW1vcnkuXG4iKTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyogc2V0IHN0cmluZyBhcnJheSBwb2ludGVycyAqLwo+ICvCoMKgwqDCoMKg wqDCoGZvciAoaSA9IDA7IGkgPCBNQVhfTElORVM7IGkrKykKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbGluZXNbaV0gPSBtYWluX2J1ZiArIGkgKiBNQVhfTElORV9MRU47Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsaW5lczsKPiArfQo+ICsKPiArc3RhdGljIGNoYXIgKmdl dF9kZXZjb3JlZHVtcF9wYXRoKGludCBjYXJkX2lkLCBjaGFyICpidWYpCj4gK3sKPiArwqDCoMKg wqDCoMKgwqBzcHJpbnRmKGJ1ZiwgRFVNUF9QQVRILCBjYXJkX2lkKTsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gYnVmOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxvYWRfYWxsKEZJTEUgKmZkLCBj aGFyICoqbGluZXMsIGNoYXIgKmJ1ZikKPiArewo+ICvCoMKgwqDCoMKgwqDCoGludCBzdGFydF9s aW5lID0gLTEsIGkgPSAwOwphbGFuOiBhbnkgcmVhc29uIHdoeSB3ZSBjYW50IGluaXQgc3RhcnRf bGluZSB0byAwIGFuZCBlbGltaW5hdGUgdGhlCnN0YXJ0X2xpbmUrKyB3aGVuIHdlIHN0b3Agc2tp cHBpbmcgYmVsb3c/IG1heWJlIGkgYW0gbGFja2luZyBjb2ZmZWUKYnV0IGkgZG9udCBzZWUgYSBu ZWVkIHRvIHN0YXJ0IHdpdGggLTEKPiArwqDCoMKgwqDCoMKgwqBib29sIHNraXAgPSB0cnVlOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBtZW1zZXQobGluZXNbMF0sIDAsIE1BSU5fQlVGX1NJWkUpOwo+ ICvCoMKgwqDCoMKgwqDCoHdoaWxlICghZmVvZihmZCkgJiYgaSA8IE1BWF9MSU5FUykgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBEZXZjb3JlZHVtcCBtaWdodCBoYXZlIGxvbmcgbGluZXMsIGxvYWQgdXAgdG8K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogTElORV9CVUZfU0laRSBmb3IgYSBz aW5nbGUgbGluZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmdldHMoYnVmLCBMSU5FX0JVRl9TSVpFLCBmZCk7CmFs YW46IGp1c3Qgb2NjdXJlZCB0byBtZSB0aGF0IHNob3VsZCBicmVhayBpbiB0aGUgZXZlbnQgb2Yg YW4gZXJyb3IKKG1heWJlIGZpbGUgaXMgY29ycnVwdGVkIG9yIGlvLWVycm9yPyAtIHNvIGJyZWFr IHdpdGggYW4gaWd0LXdhcm4gb3Igc29tZXRoaW5nPwoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RhcnRfbGluZSsrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKHNraXApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC8qIFNraXAgYWxsIGxpbmVzIGJlZm9yZSBTVEFSVF9UQUcgKi8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdHJuY21wKFNUQVJUX1RB RywgYnVmLCBzdHJsZW4oU1RBUlRfVEFHKSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c2tpcCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHN0YXJ0X2xpbmUgc3RhcnQgZnJvbSAwLCBhZGp1c3Qg dG8gc3RhcnQgZnJvbSAxICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhcnRfbGluZSsrOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gCmFsYW46IHRoYW5rcyBmb3IgYWRkaW5nIHRoaXMgb3B0aW1pemF0b2lu IHRvIHNlbGVjdCB0aGUgbGluZXMgb2YgaW50ZXJlc3QsCnRoaXMgaW1zIGdvb2QgLSBhbmQgaSBn dWVzcyB3ZSBjYW4gcmVseSBvbiBpdCAoYXMgbG9uZyBhcyB3ZSBkb250IGhhdmUgdW5kZWZpbmVk Cmxlbmd0aCBsaW5lcyBsaWtlIHZtIGRhdGEgd2hpY2ggd2lsbCBoYXBwZW4gYWZ0ZXIgRU5EX1RB Rywgc28gd2UgYXJlIGdvbykuCgo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogU3RvcCBvbiBFTkRfVEFHICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghc3RybmNtcChFTkRfVEFHLCBidWYsIHN0cmxlbihFTkRfVEFHKSkpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE9ubHkgc2F2ZSB1cCB0byBNQVhfTElORV9MRU4gdG8g YnVmZmVyICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNhZmVfc3RybmNweShs aW5lc1tpKytdLCBidWYsIE1BWF9MSU5FX0xFTik7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBzdGFydF9saW5lOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjY2Vz c19kZXZjb3JlZHVtcChjaGFyICpwYXRoLCBjaGFyICoqbGluZXMsIGNoYXIgKmxpbmVfYnVmKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHN0YXJ0X2xpbmUgPSAtMTsKPiArwqDCoMKgwqDCoMKg wqBGSUxFICpmZCA9IGZvcGVuKHBhdGgsICJyIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICgh ZmQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgaWd0X2RlYnVnKCJEZXZjb3JlZHVtcCBmb3VuZDogJXNcbiIsIHBhdGgp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBDbGVhciBtZW1vcnkgYmVmb3JlIGxvYWQgZmlsZSAq Lwo+ICvCoMKgwqDCoMKgwqDCoGlmIChsaW5lcykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc3RhcnRfbGluZSA9IGxvYWRfYWxsKGZkLCBsaW5lcywgbGluZV9idWYpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBmY2xvc2UoZmQpOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzdGFydF9s aW5lOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBybV9kZXZjb3JlZHVtcChjaGFyICpwYXRoKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChmZCAhPSAtMSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZ3RfZGVidWcoIkNsZWFyaW5nIGRldmNvcmVkdW1wLlxuIik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlKGZkLCAiMCIsIDEpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjbG9zZShmZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhcgo+ICsqZ2V0X2NvcmVkdW1wX2l0 ZW0ocmVnZXhfdCAqcmVnZXgsIGNoYXIgKipsaW5lcywgY29uc3QgY2hhciAqdGFnLCBpbnQgdGFn X2luZGV4LCBpbnQgdGFyZ2V0X2luZGV4KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4g K8KgwqDCoMKgwqDCoMKgcmVnbWF0Y2hfdCBtYXRjaFtSRUdFWF9OT05fU1BBQ0VfR1JPVVBTX0NP VU5UXTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IE1BWF9MSU5FUzsgaSsr KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgKmxpbmUgPSBsaW5lc1tp XTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNraXAgbGluZXMgd2l0 aG91dCB0YWcgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzdHJzdHIo bGluZSwgdGFnKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNvbnRpbnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChy ZWdleGVjKHJlZ2V4LCBsaW5lLCBSRUdFWF9OT05fU1BBQ0VfR1JPVVBTX0NPVU5ULCBtYXRjaCwg MCkpID09IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNoYXIgKmtleSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG1hdGNoW3RhZ19pbmRleF0ucm1f c28gPj0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGtleSA9ICZsaW5lW21hdGNoW3RhZ19pbmRleF0ucm1fc29dOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGxpbmVbbWF0Y2hbdGFnX2luZGV4XS5ybV9lb10gPSAnXDAnOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG1hdGNoW3RhcmdldF9pbmRleF0ucm1f c28gPj0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHZhbHVlID0gJmxpbmVbbWF0Y2hbdGFyZ2V0X2luZGV4XS5ybV9z b107Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbGluZVttYXRjaFt0YXJnZXRfaW5kZXhdLnJtX2VvXSA9ICdcMCc7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGtleSAmJiB2YWx1 ZSAmJiBzdHJjbXAodGFnLCBrZXkpID09IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZhbHVlOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogaWYga2V5ICE9IHRh ZyzCoCBrZWVwIHNlYXJjaGluZyBhbmQgbG9vcCB0byBuZXh0IGxpbmUgKi8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2NoZWNrX2l0ZW1f dTY0KHJlZ2V4X3QgKnJlZ2V4LCBjaGFyICoqbGluZXMsIGNvbnN0IGNoYXIgKnRhZywgdTY0IGFk ZHJfbG8sIHU2NCBhZGRyX2hpKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdTY0IHJlc3VsdDsKPiAr wqDCoMKgwqDCoMKgwqBjaGFyICpvdXRwdXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3Nl cnRfZigob3V0cHV0ID0gZ2V0X2NvcmVkdW1wX2l0ZW0ocmVnZXgsIGxpbmVzLCB0YWcsIElOREVY X0tFWSwgSU5ERVhfVkxBVUUpKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIlRhcmdldCBub3QgZm91bmQ6JXNcbiIsIHRhZyk7Cj4gK8KgwqDCoMKgwqDCoMKgcmVz dWx0ID0gc3RydG91bChvdXRwdXQsIE5VTEwsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGVi dWcoIkNvbXBhcmUgJXMgJXMgdnMgWzB4JWxYLTB4JWxYXVxuIiwgdGFnLCBvdXRwdXQsIGFkZHJf bG8sIGFkZHJfaGkpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZigoYWRkcl9sbyA8PSBy ZXN1bHQpICYmIChyZXN1bHQgPD0gYWRkcl9oaSksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICJ2YWx1ZSAlbFggb3V0IG9mIHJhbmdlWzB4JWxYLTB4JWxYXVxuIiwg cmVzdWx0LCBhZGRyX2xvLCBhZGRyX2hpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY2hl Y2tfaXRlbV9zdHIocmVnZXhfdCAqcmVnZXgsIGNoYXIgKipsaW5lcywgY29uc3QgY2hhciAqdGFn LCBpbnQgdGFnX2luZGV4LCBpbnQgdGFyZ2V0X2luZGV4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCBjaGFyICp0YXJnZXQsIGJvb2wgdXBfdG9fdGFyZ2V0X2xlbikKPiArewo+ ICvCoMKgwqDCoMKgwqDCoGNoYXIgYnVmW01BWF9URU1QX0xFTl0gPSB7MH07Cj4gK8KgwqDCoMKg wqDCoMKgY2hhciAqb3V0cHV0Owo+ICvCoMKgwqDCoMKgwqDCoGludCBjb2RlOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2Yob3V0cHV0ID0gZ2V0X2NvcmVkdW1wX2l0ZW0ocmVnZXgs IGxpbmVzLCB0YWcsIHRhZ19pbmRleCwgdGFyZ2V0X2luZGV4KSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlRhcmdldCBub3QgZm91bmQ6JXNcbiIsIHRhZyk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGlmICh1cF90b190YXJnZXRfbGVuKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZihzdHJsZW4odGFyZ2V0KSA8IE1BWF9URU1Q X0xFTiwgIlRhcmdldCB0b28gbG9uZy5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzYWZlX3N0cm5jcHkoYnVmLCBvdXRwdXQsIE1BWF9URU1QX0xFTik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1ZltzdHJsZW4odGFyZ2V0KV0gPSAwOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvdXRwdXQgPSBidWY7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICvCoMKgwqDCoMKgwqDCoGNvZGUgPSBzdHJuY21wKG91dHB1dCwgdGFyZ2V0LCBzdHJsZW4odGFy Z2V0KSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWd0X2RlYnVnKCJGcm9tIHRhZyAnJXMnIGZvdW5kICVz IHZzICVzXG4iLCB0YWcsIG91dHB1dCwgdGFyZ2V0KTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNz ZXJ0X2YoY29kZSA9PSAwLCAiRXhwZWN0ZWQgdmFsdWU6JXMsIHJlY2VpdmVkOiVzXG4iLCB0YXJn ZXQsIG91dHB1dCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTVUJURVNUOiByZXNldAo+ICsgKiBE ZXNjcmlwdGlvbjogUmVzZXQgR3VDLCBjaGVjayBkZXZjb3JlZHVtcCBvdXRwdXQgdmFsdWVzCj4g KyAqLwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2NhcmQoaW50IGZkKQo+ICt7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmh3ZTsKPiArwqDCoMKgwqDC oMKgwqByZWdleF90IHJlZ2V4Owo+ICvCoMKgwqDCoMKgwqDCoGludCBzdGFydF9saW5lOwo+ICvC oMKgwqDCoMKgwqDCoGNoYXIgKipsaW5lczsKPiArwqDCoMKgwqDCoMKgwqBjaGFyICpzaW5nbGVf bGluZV9idWYgPcKgIChjaGFyICopbWFsbG9jKExJTkVfQlVGX1NJWkUpOwo+ICvCoMKgwqDCoMKg wqDCoGNoYXIgdGVtcFtNQVhfVEVNUF9MRU5dOwo+ICvCoMKgwqDCoMKgwqDCoGNoYXIgcGF0aFtN QVhfU1lTRlNfUEFUSF9MRU5dOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2Yoc2lu Z2xlX2xpbmVfYnVmLCAiT3V0IG9mIG1lbW9yeS5cbiIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZWdjb21wKCZyZWdleCwgUkVHRVhfTk9OX1NQQUNFX0dST1VQUywgUkVHX0VYVEVOREVEIHwgUkVH X05FV0xJTkUpOwo+ICvCoMKgwqDCoMKgwqDCoGdldF9kZXZjb3JlZHVtcF9wYXRoKGlndF9kZXZp Y2VfZ2V0X2NhcmRfaW5kZXgoZmQpLCBwYXRoKTsKPiArwqDCoMKgwqDCoMKgwqBsaW5lcyA9IGFs bG9jX2xpbmVzX2J1ZmZlcigpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBjbGVhciBvbGQgZGV2 Y29yZWR1bXAsIGlmIGFueSAqLwo+ICvCoMKgwqDCoMKgwqDCoHJtX2RldmNvcmVkdW1wKHBhdGgp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqB4ZV9mb3JfZWFjaF9lbmdpbmUoZmQsIGh3ZSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgcmFuZF9jaWQgPSByYW5kKCkgJiAweEY7 CmFsYW46IHJhbmQsIHRob3VnaCBndWFyYW50ZWVkIHRvIGJlIGFzIHJhbmRvbSBhcyBwb3NzaWJs ZSwgYmVjb21lcwptdWNoIGxlc3MgcmVsaWFibGUgYWZ0ZXIgd2UgQU5EIGl0IGRvd24gdG8gNCBi aXRzLiBWZXJ5IGhpZ2ggY2hhbmNlIG9mCm92ZXJsYXAgKDEvMTYgY2hhbmNlKS4gQWxzbyBuYW1l IGNob2ljZSBjb3VsZCBiZXR0ZXIgZGVzY3JpYmUgdGhlIHVzZSBhcwplbmdpbmUgaWRlbnRpZmll cjoKCSsrZW5naW5lX2lkOyAoaW5pdGlhbGl6ZSB0byB6ZXJvIGJlZm9yZSB0aGUgeGVfZm9yX2Vh Y2hfZW5naW5lKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1NjQgYWRk ciA9IEJBU0VfQUREUkVTUyB8ICgodTY0KXJhbmRfY2lkIDw8IEFERFJFU1NfU0hJRlQpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2RlYnVnKCJSdW5uaW5nIG9uIGVu Z2luZSBjbGFzczogJXggaW5zdGFuY2U6ICV4XG4iLCBod2UtPmVuZ2luZV9jbGFzcywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ZS0+ZW5naW5l X2luc3RhbmNlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlc3RfbGVn YWN5X21vZGUoZmQsIGh3ZSwgMSwgMSwgMCwgYWRkcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBhc3NlcnQgZGV2Y29yZWR1bXAgY3JlYXRlZCAqLwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2YoKHN0YXJ0X2xpbmUgPSBhY2Nlc3Nf ZGV2Y29yZWR1bXAocGF0aCwgbGluZXMsIHNpbmdsZV9saW5lX2J1ZikpID4gMCwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJEZXZjb3Jl ZHVtcCBub3QgZXhpc3QsIGVycm5vPSVkLlxuIiwgZXJybm8pOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3ByaW50Zih0ZW1wLCAiaW5zdGFuY2U9JWQiLCBod2UtPmVuZ2lu ZV9pbnN0YW5jZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoZWNrX2l0ZW1f c3RyKCZyZWdleCwgbGluZXMsICIocGh5c2ljYWwpLCIsIElOREVYX0VOR0lORV9QSFlTSUNBTCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBJTkRFWF9FTkdJTkVfSU5TVEFOQ0UsIHRlbXAsIGZhbHNlKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2hlY2tfaXRlbV9zdHIoJnJlZ2V4LCBsaW5lcywgIihwaHlzaWNh bCksIiwgSU5ERVhfRU5HSU5FX1BIWVNJQ0FMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElOREVYX0VOR0lORV9OQU1FLCB4ZV9l bmdpbmVfY2xhc3NfbmFtZShod2UtPmVuZ2luZV9jbGFzcyksIHRydWUpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hlY2tfaXRlbV9zdHIoJnJlZ2V4LCBsaW5lcywgIkNh cHR1cmVfc291cmNlOiIsIElOREVYX0tFWSwgSU5ERVhfVkxBVUUsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkd1QyIsIGZhbHNl KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hlY2tfaXRlbV91NjQoJnJlZ2V4 LCBsaW5lcywgIkFDVEhEOiIsIGFkZHIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciArIEJBVENIX0RXX0NPVU5UICogc2l6 ZW9mKHUzMikpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGVja19pdGVtX3U2 NCgmcmVnZXgsIGxpbmVzLCAiUklOR19CQkFERFI6IiwgYWRkciwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGRyICsgQkFUQ0hf RFdfQ09VTlQgKiBzaXplb2YodTMyKSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAvKiBjbGVhciBkZXZjb3JlZHVtcCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBybV9kZXZjb3JlZHVtcChwYXRoKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc2xlZXAoMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEFzc2VydCBk ZXZjb3JlZHVtcCByZW1vdmVkICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGln dF9hc3NlcnRfZighYWNjZXNzX2RldmNvcmVkdW1wKHBhdGgsIE5VTEwsIE5VTEwpLCAiRGV2Y29y ZWR1bXAgbm90IHJlbW92ZWRcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKg wqAvKiBGcmVlIGxpbmVzIGJ1ZmZlciAqLwo+ICvCoMKgwqDCoMKgwqDCoGZyZWUobGluZXMpOwo+ ICvCoMKgwqDCoMKgwqDCoGZyZWUoc2luZ2xlX2xpbmVfYnVmKTsKPiArwqDCoMKgwqDCoMKgwqBy ZWdmcmVlKCZyZWdleCk7Cj4gK30KPiArCj4gK2lndF9tYWluCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBpbnQgeGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlndF9maXh0dXJlIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeGUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX1hFKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogU2VlZCByYW5kb20gbnVtYmVyIHdpdGgg Y3VycmVudCB0aW1lICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNyYW5kKHRp bWUoTlVMTCkpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X3N1 YnRlc3QoInJlc2V0Iikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZ3B1 X2NvdW50ID0gZHJtX3ByZXBhcmVfZmlsdGVyZWRfbXVsdGlncHUoRFJJVkVSX1hFKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9yZXF1aXJlKHhlID4gMCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChncHVfY291bnQgPj0gMikgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X211bHRpX2Zvcmso Y2hpbGQsIGdwdV9jb3VudCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBncHVfZmQ7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdwdV9m ZCA9IGRybV9vcGVuX2ZpbHRlcmVkX2NhcmQoY2hpbGQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZihn cHVfZmQgPiAwLCAiY2Fubm90IG9wZW4gZ3B1LSVkLCBlcnJubz0lZFxuIiwgY2hpbGQsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVycm5vKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0KGlz X3hlX2RldmljZShncHVfZmQpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9jYXJkKGdwdV9mZCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2Nsb3NlX2RyaXZlcihncHVfZmQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWd0X3dhaXRjaGlsZHJlbigpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdGVzdF9jYXJkKHhlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2ZpeHR1cmUK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2Nsb3NlX2RyaXZlcih4ZSk7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+ IGluZGV4IDI3MjRjN2E5YS4uYTY3NTBkNTIzIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL21lc29uLmJ1 aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtMjg1LDYgKzI4NSw3IEBAIGludGVs X3hlX3Byb2dzID0gWwo+IMKgwqDCoMKgwqDCoMKgwqAneGVfZXhlY19hdG9taWMnLAo+IMKgwqDC oMKgwqDCoMKgwqAneGVfZXhlY19iYWxhbmNlcicsCj4gwqDCoMKgwqDCoMKgwqDCoCd4ZV9leGVj X2Jhc2ljJywKPiArwqDCoMKgwqDCoMKgwqAneGVfZXhlY19jYXB0dXJlJywKPiDCoMKgwqDCoMKg wqDCoMKgJ3hlX2V4ZWNfY29tcHV0ZV9tb2RlJywKPiDCoMKgwqDCoMKgwqDCoMKgJ3hlX2V4ZWNf ZmF1bHRfbW9kZScsCj4gwqDCoMKgwqDCoMKgwqDCoCd4ZV9leGVjX21peF9tb2RlcycsCj4gLS0g Cj4gMi4zNC4xCj4gCgo=