From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 0089B4678D for ; Tue, 18 Jul 2023 03:15:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 22E5268C20F; Tue, 18 Jul 2023 06:15:20 +0300 (EEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8FEE168C199 for ; Tue, 18 Jul 2023 06:15:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689650117; x=1721186117; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=gEGM4WwLh+N+cZYL516K9o5nzkcnTby+eiS2uELdnpY=; b=IlAuWjNTrlOxOHzpw/QZboqBnihsVtXQbcAat8QO6ybUy9tPkcAMwIpK IIJHCyh51JjCj7QlyyqLl+daukGs0CXp4Lmoqh1NvBtO20ZKObJQ1E1A7 fuMfRVwYuUv+ML09TQmaHuEnv+l7+bZsmR4I5kawpqA7ptGqSMyxhYxeS yaTIJZAKY6zWwU8FacwMP6LQSlXeWM0t8R6za3HcQyYFj4JaYZd/9D323 1Q8x6j32Ld01P1GMI/6XhtMj8kk2NZ4c3P6i4AXSS7th4+lN8EgrjfwqR iEd8TUCPBQQXjB5GLncOCzMi7XCY3f6oVSHKRjuk2udRKzFiFNxQvoLAO A==; X-IronPort-AV: E=McAfee;i="6600,9927,10774"; a="366134004" X-IronPort-AV: E=Sophos;i="6.01,213,1684825200"; d="scan'208";a="366134004" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jul 2023 20:15:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10774"; a="758646970" X-IronPort-AV: E=Sophos;i="6.01,213,1684825200"; d="scan'208";a="758646970" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga001.jf.intel.com with ESMTP; 17 Jul 2023 20:15:08 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 17 Jul 2023 20:15:07 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 17 Jul 2023 20:15:07 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.170) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 17 Jul 2023 20:15:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g07Zi+nuEWTuSrfROQ8g6oXR4XB9y7zTVDSEVbTOceZDRMG15OZpAx6V6RY6dvv9gQTEnOSQB7E0nora02Vsx40JWARXXguqi1lC1WxbKFxqBcJKUvxt7EjKkFYe2DF9dNSPUtaomDsPPEgrt/l5gciCa5RDsno074uD1RbE3edIIxTcjpwbeixOIXqoVGZTnYzHrDJlMw/CnxdrYvGKmD6JSDIbQZ3vKMjzZTpyB2xAHw14q3PcSDwHtAlya3DTj9GVKX7w4+V2hVyCnzJ8nIhWlkZswllhGa7stQ08gundbhr6FRfWrwYDEAjKo2l2FaZJer+upqR649skTSa3Lg== 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=gEGM4WwLh+N+cZYL516K9o5nzkcnTby+eiS2uELdnpY=; b=WyQoqVQcLWKTIR+9c8wtJMNqZXlf726ar4nFFlPRA1cfvv7nvr083OopUjRxYt8/LLXBxSvkA9TioG0o/6Zzbkji+DVc4SvODGFdcsJs4TT6AFVXDO5Zmr/nwbRhDfNJpYDYz1j+dI6vDKKkvtOmcB8UdkKGA60++qaGBIarU1uwPHtHWw+DbBUq97LPQOlUVMsNL+4QpjvQZ+TIyJ0tG1ZgZPHH8zQwd7YO0QKbKOmma5kQoxCYWo7dxCmhtnXEhVDLxMBLGm8LSavFnNgKO4Vh2uwDo05sEFjaDGhx/2RZkd7mdSqVEt7RB+cB64sCRJpDdzEsAbm5gXBDdFMg7A== 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 PH0PR11MB5030.namprd11.prod.outlook.com (2603:10b6:510:41::5) by DM4PR11MB5246.namprd11.prod.outlook.com (2603:10b6:5:389::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.31; Tue, 18 Jul 2023 03:15:03 +0000 Received: from PH0PR11MB5030.namprd11.prod.outlook.com ([fe80::106:7aae:cf6b:9d53]) by PH0PR11MB5030.namprd11.prod.outlook.com ([fe80::106:7aae:cf6b:9d53%4]) with mapi id 15.20.6588.031; Tue, 18 Jul 2023 03:15:03 +0000 From: "Wang, Fei W" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v1 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder Thread-Index: AQHZswH5QU/RFyL870GGY1sVlAcISK+92SMAgAEM2gA= Date: Tue, 18 Jul 2023 03:15:03 +0000 Message-ID: <9ae8008f6e7b84ee45cfca9d8761afe563cdddc3.camel@intel.com> References: <20230710073941.425658-1-fei.w.wang@intel.com> <20230710073941.425658-6-fei.w.wang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 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: PH0PR11MB5030:EE_|DM4PR11MB5246:EE_ x-ms-office365-filtering-correlation-id: b8b95307-036a-432e-ddd4-08db873d2ded x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hdNoYP2m0DUwqdvEby+ippMIMIHVMkKaA9cG+Be2b0kgosechdNX3WIL2yWNNp8bTdKMJkvk7l1Ph3jHv1831vLRKEppjnn6TbNtCtZlnvtO4mIwKTc409trqoKvZET8BKaJ6IVFkEYbJcutBh3+/fXm9Kt/N8QqAPBo+4V/zWy2EceMyPPGIvNn9tf3G/J9mpKm22h1fl4QkmtkMcoaLxx2dUG010mOr4Ez7CEIdnNAKdGSNAddJ8jBWz2dU1qifCaKznLEarGoBQ5pDVWGLw5XmTGoWYlmW/OsIfmMwcLCV4p21gliMjKQbHiRkt0D/ToqfkHtg7G7GQnnd2IHB92SXYkuYpc3I7WuQ32KaxU0m7ov4Qtm7rG4IPRVrMloLwhE8MnNbkysHB2l4PblDZNgPFN2He+ZW2QjlyOqhVXqT+16ScWVivWzPyvXQcIhcLO2ORn9H/+XLZN6x+wwQr83cfDD3Mn6ThF3CltaPlimrCUFB+1q3RXBn+Qcw5D2GYZXWuDJ1iHKXXZ7z90Fo4NnWfL0f19U7TOL4W4ICsjrdFvuuK373XK1gl0HKfRdf84rttoZI+KX9vDv1S3zXbTBfGBu66fXbxGfJRqVO9zz6rMoTfppExAXfVKQF47q x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB5030.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(39860400002)(366004)(136003)(346002)(396003)(376002)(451199021)(86362001)(30864003)(2906002)(36756003)(38070700005)(66899021)(6512007)(966005)(2616005)(186003)(83380400001)(26005)(6506007)(53546011)(38100700002)(82960400001)(6486002)(19627235002)(122000001)(71200400001)(66446008)(316002)(64756008)(5660300002)(6916009)(76116006)(478600001)(66946007)(66556008)(66476007)(91956017)(41300700001)(8936002)(8676002)(2004002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z3hNWXNoK0xYc3hoMjZsS2V5L2E4dkt5ZUhSd3FsOHVsdmF0dTRyMXRRSWRi?= =?utf-8?B?b0hDU04weXlDN244cWNyeE95czE4YXhsMHpRRVNMZmowU3VwN3VMc2liVXAr?= =?utf-8?B?MVBXN3JQWEdXbGEwc05pWVhkZzJKRk9KV0g2N3JGNU85dzZCMmtpTER4MlRI?= =?utf-8?B?TTNPVHFoTUtBRHZVQTRxbkY4dG5XWUo3YVFiWUNlWUpyMytFSTdRajdqNElK?= =?utf-8?B?cGdQT3V3SE5pcklkTGRhaHY1SEo0WmRkVHJ0Qlg1emYxSXlQTmN6YW9lNWtP?= =?utf-8?B?YzFNb2RLSXJxS0JXTGZleUhmN3d5UlZzcmxHaXU3VHhvREtYVnNIRzNjbFo2?= =?utf-8?B?NVJkKzZzMjAvUE1NclBzZ0Jybm5OalRLTHduaFBZbVQvdmFoYmdLNjEvelh1?= =?utf-8?B?a1NZL1R4MHpSMzVvWWQ3SUZFdzBHeXFyeG1rdTY1ZnBCTGNGUHloMTlLU2t5?= =?utf-8?B?RVhRZS9qQWsraE02bWdnbnZvZWFpeWlJZkd2YlZ6UmVxMDMvcDdGa1VHbUlv?= =?utf-8?B?UFhBRnpJZC8yWElzbU1zams2QlBlZ3YzZzBDUDVzKzZ2WnRDdDg5eXRBWEd2?= =?utf-8?B?RVQra25nb0k3dTBYSG5HU2JhWWp4ODhmU1J3dUlBUXd1VUJQTjd3aHFxa0k3?= =?utf-8?B?RE5lWmtONXNEZjBLZWs0NUZhck1PdDJtNUk1OU4rSjVoUWN0RkdkY3BqVm91?= =?utf-8?B?dXpWVWIrMURjdGRlNVdMS25mV1hHMjhEd1I5WFBQVmRiWU1ENGhnZ0VUMG11?= =?utf-8?B?dzVFcDUxMzBsTFk5NDRsSTdQUnJwRDdvUUlvRVZXMzZLVDNZSUVMdUM3VGgv?= =?utf-8?B?Z2pkMUMvZ0tjMmRXcVI1bjZnRmcvMlY5R3h6cEllN0pmQUtrcWI1cytadzhI?= =?utf-8?B?ay8wdndMS3ZIbDBYTnUvS09OL3NrSVJFMGZPUi9ZOFdzTEpkRzlyUDljdHN5?= =?utf-8?B?MEhwNHZ5dkgwdjNFRHVqWklBb3hWN2lYdytmSWI2aHdySnJBOTZIUUR0ditE?= =?utf-8?B?SlJpb0xONng3aFlKZHpLY25CdFJvVkxNb0pEc05ERTF6SXB4T1RDak4yZFBJ?= =?utf-8?B?YWVYTE5wQmFrRktrdlA3TVdjS2FYODRFaE5QUTJuU29JZ3FhejRJdHlkdWpC?= =?utf-8?B?M3NsWEdibkhDR3FSRWRoUkRyQ3EyV3A5dFIrZHZ4WHVRVHlvMkxWVUk1UVIx?= =?utf-8?B?cy9ZMlNXdkhVeVNpeEdheGgzU0lVVEFic2pvbndabVdmN3gwNnBhMU1GRXpj?= =?utf-8?B?cjB6Y2MwUWUwczlVMGxMWm9PZVEzdjFGNEQ3aXhjblB6ME03N3ZoL09JS05I?= =?utf-8?B?T3BGZENBZFFQTFU5TW03aVgvSW5aNndhTGJyN1hSNjlSWWRieGgrbFJCeVpa?= =?utf-8?B?TmtsMHN1ZUZhL0RJNWs2RWFwR3R6UW5JUEpBZy9YN3BZM3dGdG4rNmVWaEVi?= =?utf-8?B?eEhLbmpzRWFoMUpob3pQK0k3S1N4KzB3WnUrMlZUdklwN0pLMFp3ZUJOa1p1?= =?utf-8?B?ZUF2djhsbE1oNGRQeVpvSnlmKy9ZeUIra3VzY2F1OVFTYldBN0hpVkY3MWFu?= =?utf-8?B?TXFuclRFaXdiNmhjN1dScTdOOXREZWhwT0Jya2FsYm1qMi9lOUY5akIyajBj?= =?utf-8?B?SU03b1RnRUlBbmQvUHR0MmFpZFJxWmZ6RnJDbHdjV2wxVm5nVGlIbjZGUE1M?= =?utf-8?B?ay9DekcweFhKMTdDZUxsYVpBalljRzJPakJwYkFmYVpYS3hNSkI0SmZjYlVp?= =?utf-8?B?WU5lbDR3RFpKUUc4cjhaUE4xV3BhR0I0b2I2dDRITWlWbXJpVE9hQnpiemEv?= =?utf-8?B?elQ4aHRRQ2ZESm1nVUhZL2hUekMzKzJwa3FpSjIrTmtXN2Nud0dtUGpsYkI4?= =?utf-8?B?VWNJZkNJTHR6Ync3bSt5OHdYUjl3ZktZeEljZHBLU2pkYlpVSGtUaWRxbFYw?= =?utf-8?B?c0k4RnBzOVJsVGlBcEFBQlVMRldkK3RDMVR0ZkdVeGYzZkFUQ1dGTjF1dVRj?= =?utf-8?B?azNYT3lXNXNXQ2JmMzJ3T3h1RDN0LzduNmNRL3VvNFBHMWFSVStoSmNhNms2?= =?utf-8?B?M0t2dmZzbmI3dDN6UzlBeDFQaWRVYVNxY1JWTkZLM1IwNTU0Sk9rOXAzcDdF?= =?utf-8?Q?DhL9RvnTunl4YByxI3gzK1N7F?= Content-ID: <89769984DDC1724CBA968AF0FD68833A@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5030.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b8b95307-036a-432e-ddd4-08db873d2ded X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jul 2023 03:15:03.5948 (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: T2Nauv35z6ldi0GEN7k7I+LGdkQMYyelPUu8BJN/ZxFiZEsZe5k4T+Kwfd9SoguSWJpvOCWTINlOlNvhNMQXkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB5246 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v1 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTW9uLCAyMDIzLTA3LTE3IGF0IDEzOjEyICswMjAwLCBEYXZpZCBSb3NjYSB3cm90ZToNCj4g T24gTW9uLCBKdWwgMTAsIDIwMjMgYXQgOTo0MOKAr0FNIEZlaSBXYW5nDQo+IDxmZWkudy53YW5n LWF0LWludGVsLmNvbUBmZm1wZWcub3JnPiB3cm90ZToNCj4gPiBTaWduZWQtb2ZmLWJ5OiBGZWkg V2FuZyA8ZmVpLncud2FuZ0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIENoYW5nZWxvZyAgICAg ICAgICAgICAgICAgICAgIHwgICAgMSArDQo+ID4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAg ICAgIHwgICAgMyArDQo+ID4gIGRvYy9lbmNvZGVycy50ZXhpICAgICAgICAgICAgIHwgICAxMyAr DQo+ID4gIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArDQo+ID4gIGxpYmF2 Y29kZWMvYWxsY29kZWNzLmMgICAgICAgIHwgICAgMSArDQo+ID4gIGxpYmF2Y29kZWMvdmFhcGlf ZW5jb2RlLmMgICAgIHwgIDEyNSArKystDQo+ID4gIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgg ICAgIHwgICAxMiArDQo+ID4gIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jIHwgMTIyOA0K PiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICA4IGZpbGVzIGNoYW5n ZWQsIDEzNjYgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pDQo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYw0KPiA+IA0KPiA+IGRpZmYgLS1n aXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cNCj4gPiBpbmRleCAzODc2MDgyODQ0Li43YWU5Yjg1 ZDUyIDEwMDY0NA0KPiA+IC0tLSBhL0NoYW5nZWxvZw0KPiA+ICsrKyBiL0NoYW5nZWxvZw0KPiA+ IEBAIC0yNSw2ICsyNSw3IEBAIHZlcnNpb24gPG5leHQ+Og0KPiA+ICAtIFJhdyBWVkMgYml0c3Ry ZWFtIHBhcnNlciwgbXV4ZXIgYW5kIGRlbXV4ZXINCj4gPiAgLSBCaXRzdHJlYW0gZmlsdGVyIGZv ciBlZGl0aW5nIG1ldGFkYXRhIGluIFZWQyBzdHJlYW1zDQo+ID4gIC0gQml0c3RyZWFtIGZpbHRl ciBmb3IgY29udmVydGluZyBWVkMgZnJvbSBNUDQgdG8gQW5uZXggQg0KPiA+ICstIFZBQVBJIEFW MSBlbmNvZGVyDQo+ID4gDQo+ID4gIHZlcnNpb24gNi4wOg0KPiA+ICAtIFJhZGlhbmNlIEhEUiBp bWFnZSBzdXBwb3J0DQo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQ0KPiA+ IGluZGV4IDBhYjA3NjEwMTEuLjZhMWEzMGFhZWMgMTAwNzU1DQo+ID4gLS0tIGEvY29uZmlndXJl DQo+ID4gKysrIGIvY29uZmlndXJlDQo+ID4gQEAgLTMzMjMsNiArMzMyMyw4IEBAIGF2MV9xc3Zf ZGVjb2Rlcl9zZWxlY3Q9InFzdmRlYyINCj4gPiAgYXYxX3Fzdl9lbmNvZGVyX3NlbGVjdD0icXN2 ZW5jIg0KPiA+ICBhdjFfcXN2X2VuY29kZXJfZGVwcz0ibGlidnBsIg0KPiA+ICBhdjFfYW1mX2Vu Y29kZXJfZGVwcz0iYW1mIg0KPiA+ICthdjFfdmFhcGlfZW5jb2Rlcl9kZXBzPSJWQUVuY1BpY3R1 cmVQYXJhbWV0ZXJCdWZmZXJBVjEiDQo+ID4gK2F2MV92YWFwaV9lbmNvZGVyX3NlbGVjdD0iY2Jz X2F2MSB2YWFwaV9lbmNvZGUiDQo+ID4gDQo+ID4gICMgcGFyc2Vycw0KPiA+ICBhYWNfcGFyc2Vy X3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRpbyINCj4gPiBAQCAtNzEwNiw2ICs3MTA4LDcg QEAgaWYgZW5hYmxlZCB2YWFwaTsgdGhlbg0KPiA+ICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaCB2 YS92YV9lbmNfanBlZy5oIg0KPiA+ICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJKUEVHIg0K PiA+ICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaA0KPiA+IHZhL3ZhX2VuY192cDguaCIgICJWQUVu Y1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJWUDgiDQo+ID4gICAgICBjaGVja190eXBlICJ2YS92YS5o DQo+ID4gdmEvdmFfZW5jX3ZwOS5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlclZQOSIN Cj4gPiArICAgIGNoZWNrX3R5cGUgInZhL3ZhLmgNCj4gPiB2YS92YV9lbmNfYXYxLmgiICAiVkFF bmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxIg0KPiA+ICBmaQ0KPiA+IA0KPiA+ICBpZiBlbmFi bGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhlbg0KPiA+IGRpZmYgLS1naXQgYS9kb2MvZW5jb2Rl cnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpDQo+ID4gaW5kZXggMjVkNmI3ZjA5ZS4uZmIzMzFl YmQ4ZSAxMDA2NDQNCj4gPiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQ0KPiA+ICsrKyBiL2RvYy9l bmNvZGVycy50ZXhpDQo+ID4gQEAgLTM5OTEsNiArMzk5MSwxOSBAQCBBdmVyYWdlIHZhcmlhYmxl IGJpdHJhdGUuDQo+ID4gIEVhY2ggZW5jb2RlciBhbHNvIGhhcyBpdHMgb3duIHNwZWNpZmljIG9w dGlvbnM6DQo+ID4gIEB0YWJsZSBAb3B0aW9uDQo+ID4gDQo+ID4gK0BpdGVtIGF2MV92YWFwaQ0K PiA+ICtAb3B0aW9ue3Byb2ZpbGV9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3NlcV9wcm9maWxl fS4NCj4gPiArQG9wdGlvbnt0aWVyfSBzZXRzIHRoZSB2YWx1ZSBvZiBAZW1waHtzZXFfdGllcn0u DQo+ID4gK0BvcHRpb257bGV2ZWx9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3NlcV9sZXZlbF9p ZHh9Lg0KPiA+ICsNCj4gPiArQHRhYmxlIEBvcHRpb24NCj4gPiArQGl0ZW0gdGlsZXMNCj4gPiAr U2V0IHRoZSBudW1iZXIgb2YgdGlsZXMgdG8gZW5jb2RlIHRoZSBpbnB1dCB2aWRlbyB3aXRoLCBh cyBjb2x1bW5zDQo+ID4geCByb3dzLg0KPiA+ICsoZGVmYXVsdCBpcyAxeDEpLg0KPiA+ICtAaXRl bSB0aWxlX2dyb3Vwcw0KPiA+ICtTZXQgdGlsZSBncm91cHMgbnVtYmVyIChkZWZhdWx0IGlzIDEp Lg0KPiA+ICtAZW5kIHRhYmxlDQo+ID4gKw0KPiA+ICBAaXRlbSBoMjY0X3ZhYXBpDQo+ID4gIEBv cHRpb257cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7cHJvZmlsZV9pZGN9IGFuZCB0 aGUNCj4gPiBAZW1waHtjb25zdHJhaW50X3NldCpfZmxhZ31zLg0KPiA+ICBAb3B0aW9ue2xldmVs fSBzZXRzIHRoZSB2YWx1ZSBvZiBAZW1waHtsZXZlbF9pZGN9Lg0KPiA+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQ0KPiA+IGluZGV4IDNjZDU5 OTdlNjQuLmZlMWU2YWE5OWQgMTAwNjQ0DQo+ID4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQ0K PiA+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUNCj4gPiBAQCAtMjU5LDYgKzI1OSw3IEBAIE9C SlMtJChDT05GSUdfQVYxX01FRElBQ09ERUNfREVDT0RFUikgICs9DQo+ID4gbWVkaWFjb2RlY2Rl Yy5vDQo+ID4gIE9CSlMtJChDT05GSUdfQVYxX01FRElBQ09ERUNfRU5DT0RFUikgICs9IG1lZGlh Y29kZWNlbmMubw0KPiA+ICBPQkpTLSQoQ09ORklHX0FWMV9OVkVOQ19FTkNPREVSKSAgICAgICAr PSBudmVuY19hdjEubyBudmVuYy5vDQo+ID4gIE9CSlMtJChDT05GSUdfQVYxX1FTVl9FTkNPREVS KSAgICAgICAgICs9IHFzdmVuY19hdjEubw0KPiA+ICtPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9F TkNPREVSKSAgICAgICArPSB2YWFwaV9lbmNvZGVfYXYxLm8NCj4gPiBhdjFfcHJvZmlsZV9sZXZl bC5vDQo+ID4gIE9CSlMtJChDT05GSUdfQVZSTl9ERUNPREVSKSAgICAgICAgICAgICs9IGF2cm5k ZWMubw0KPiA+ICBPQkpTLSQoQ09ORklHX0FWUlBfREVDT0RFUikgICAgICAgICAgICArPSByMjEw ZGVjLm8NCj4gPiAgT0JKUy0kKENPTkZJR19BVlJQX0VOQ09ERVIpICAgICAgICAgICAgKz0gcjIx MGVuYy5vDQo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNv ZGVjL2FsbGNvZGVjcy5jDQo+ID4gaW5kZXggODc3NWQxNWE0Zi4uYzQzYzFkN2I0OCAxMDA2NDQN Cj4gPiAtLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jDQo+ID4gKysrIGIvbGliYXZjb2RlYy9h bGxjb2RlY3MuYw0KPiA+IEBAIC04NDQsNiArODQ0LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfYXYxX252ZW5jX2VuY29kZXI7DQo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9x c3ZfZGVjb2RlcjsNCj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX3Fzdl9lbmNvZGVy Ow0KPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFfYW1mX2VuY29kZXI7DQo+ID4gK2V4 dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFwaV9lbmNvZGVyOw0KPiA+ICBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9lbmNvZGVyOw0KPiA+ICBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9saWJvcGVuaDI2NF9kZWNvZGVyOw0KPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9oMjY0X2FtZl9lbmNvZGVyOw0KPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2Vu Y29kZS5jIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYw0KPiA+IGluZGV4IDI2MDRmMTJiOWUu LjI5MDdlMTU5ZmIgMTAwNjQ0DQo+ID4gLS0tIGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYw0K PiA+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMNCj4gPiBAQCAtNjY5LDYgKzY2OSwx NSBAQCBzdGF0aWMgaW50DQo+ID4gdmFhcGlfZW5jb2RlX3NldF9vdXRwdXRfdGltZXN0YW1wKEFW Q29kZWNDb250ZXh0ICphdmN0eCwNCj4gPiAgew0KPiA+ICAgICAgVkFBUElFbmNvZGVDb250ZXh0 ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+IA0KPiA+ICsgICAgLy8gQVYxIHBhY2tzIFAg ZnJhbWUgYW5kIG5leHQgQiBmcmFtZSBpbnRvIG9uZSBwa3QsIGFuZCB1c2VzDQo+ID4gdGhlIG90 aGVyDQo+ID4gKyAgICAvLyByZXBlYXQgZnJhbWUgaGVhZGVyIHBrdCBhdCB0aGUgZGlzcGxheSBv cmRlciBwb3NpdGlvbiBvZg0KPiA+IHRoZSBQIGZyYW1lDQo+ID4gKyAgICAvLyB0byBpbmRpY2F0 ZSBpdHMgZnJhbWUgaW5kZXguIEVhY2ggZnJhbWUgaGFzIGEgY29ycmVzcG9uZGluZw0KPiA+IHBr dCBpbiBpdHMNCj4gPiArICAgIC8vIGRpc3BsYXkgb3JkZXIgcG9zaXRpb24uIFNvIGRvbid0IG5l ZWQgdG8gY29uc2lkZXIgZGVsYXkgZm9yDQo+ID4gQVYxIHRpbWVzdGFtcC4NCj4gPiArICAgIGlm IChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7DQo+ID4gKyAgICAgICAgcGt0 LT5kdHMgPSBwa3QtPnB0cyAtIGN0eC0+ZHRzX3B0c19kaWZmOw0KPiA+ICsgICAgICAgIHJldHVy biAwOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAgICAgIGlmIChjdHgtPm91dHB1dF9kZWxheSA9 PSAwKSB7DQo+ID4gICAgICAgICAgcGt0LT5kdHMgPSBwa3QtPnB0czsNCj4gPiAgICAgIH0gZWxz ZSBpZiAocGljLT5lbmNvZGVfb3JkZXIgPCBjdHgtPmRlY29kZV9kZWxheSkgew0KPiA+IEBAIC02 ODksOSArNjk4LDEwIEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29u dGV4dA0KPiA+ICphdmN0eCwNCj4gPiAgew0KPiA+ICAgICAgVkFBUElFbmNvZGVDb250ZXh0ICpj dHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ICAgICAgVkFDb2RlZEJ1ZmZlclNlZ21lbnQgKmJ1 Zl9saXN0LCAqYnVmOw0KPiA+IC0gICAgVkFTdGF0dXMgdmFzOw0KPiA+ICsgICAgQVZQYWNrZXQg KnBrdF9wdHIgPSBwa3Q7DQo+ID4gICAgICBpbnQgdG90YWxfc2l6ZSA9IDA7DQo+ID4gICAgICB1 aW50OF90ICpwdHI7DQo+ID4gKyAgICBWQVN0YXR1cyB2YXM7DQo+ID4gICAgICBpbnQgZXJyOw0K PiA+IA0KPiA+ICAgICAgZXJyID0gdmFhcGlfZW5jb2RlX3dhaXQoYXZjdHgsIHBpYyk7DQo+ID4g QEAgLTcxMSwxMSArNzIxLDUyIEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNv ZGVjQ29udGV4dA0KPiA+ICphdmN0eCwNCj4gPiAgICAgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1 ZjsgYnVmID0gYnVmLT5uZXh0KQ0KPiA+ICAgICAgICAgIHRvdGFsX3NpemUgKz0gYnVmLT5zaXpl Ow0KPiA+IA0KPiA+IC0gICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwg dG90YWxfc2l6ZSwgMCk7DQo+ID4gLSAgICBwdHIgPSBwa3QtPmRhdGE7DQo+ID4gKyAgICAvKiog cmVwYWNrIGF2MSBjb2RlZCBmcmFtZSBmb3Igbm90IGRpc3BsYXkgYW5kIHJlcGVhdCBmcmFtZXMN Cj4gPiAqLw0KPiA+ICsgICAgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEp IHsNCj4gPiArICAgICAgICBpbnQgZGlzcGxheV9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlciA8 PSBwaWMtDQo+ID4gPmVuY29kZV9vcmRlcjsNCj4gPiANCj4gPiAtICAgIGlmIChlcnIgPCAwKQ0K PiA+IC0gICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7DQo+ID4gKyAgICAgICAgaWYgKGRpc3BsYXlf ZnJhbWUpIHsNCj4gPiArICAgICAgICAgICAgdG90YWxfc2l6ZSArPSBjdHgtPmhlYWRlcl9kYXRh X3NpemU7DQo+ID4gKyAgICAgICAgICAgIGVyciA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4 LCBwa3QsIHRvdGFsX3NpemUsIDApOw0KPiA+ICsgICAgICAgICAgICBpZiAoZXJyIDwgMCkNCj4g PiArICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7DQo+ID4gKyAgICAgICAgICAgIHB0 ciA9IHBrdC0+ZGF0YTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgIGlmIChjdHgtPmhlYWRlcl9k YXRhX3NpemUpIHsNCj4gPiArICAgICAgICAgICAgICAgIG1lbWNweShwdHIsIGN0eC0+aGVhZGVy X2RhdGEsIGN0eC0NCj4gPiA+aGVhZGVyX2RhdGFfc2l6ZSk7DQo+ID4gKyAgICAgICAgICAgICAg ICBwdHIgKz0gY3R4LT5oZWFkZXJfZGF0YV9zaXplOw0KPiA+ICsgICAgICAgICAgICAgICAgY3R4 LT5oZWFkZXJfZGF0YV9zaXplID0gMDsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg IH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIGN0eC0+aGVhZGVyX2RhdGEgPSBhdl9yZWFsbG9j KGN0eC0+aGVhZGVyX2RhdGEsDQo+ID4gdG90YWxfc2l6ZSk7DQo+ID4gKyAgICAgICAgICAgIGlm ICghY3R4LT5oZWFkZXJfZGF0YSkgew0KPiA+ICsgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJP UihFTk9NRU0pOw0KPiA+ICsgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsNCj4gPiAr ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICBwdHIgPSBjdHgtPmhlYWRlcl9kYXRhOw0K PiA+ICsgICAgICAgICAgICBjdHgtPmhlYWRlcl9kYXRhX3NpemUgPSB0b3RhbF9zaXplOw0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgaWYgKHBpYy0+dGFpbF9zaXplKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICBpZiAoY3R4LT50YWlsX3BrdC0+c2l6ZSkgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgIGVyciA9IEFWRVJST1IoQVZFUlJPUl9CVUcpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg IGdvdG8gZmFpbF9tYXBwZWQ7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIGN0eC0+dGFp bF9wa3QsDQo+ID4gcGljLT50YWlsX3NpemUsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgaWYg KGVyciA8IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAgICBtZW1jcHkoY3R4LT50YWlsX3BrdC0+ZGF0YSwgcGlj LT50YWlsX2RhdGEsIHBpYy0NCj4gPiA+dGFpbF9zaXplKTsNCj4gPiArICAgICAgICAgICAgICAg IHBrdF9wdHIgPSBjdHgtPnRhaWxfcGt0Ow0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2Rl X2J1ZmZlcihhdmN0eCwgcGt0LCB0b3RhbF9zaXplLCAwKTsNCj4gPiArICAgICAgICBwdHIgPSBw a3QtPmRhdGE7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmIChlcnIgPCAwKQ0KPiA+ICsgICAgICAg ICAgICBnb3RvIGZhaWxfbWFwcGVkOw0KPiA+ICsgICAgfQ0KPiA+IA0KPiA+ICAgICAgZm9yIChi dWYgPSBidWZfbGlzdDsgYnVmOyBidWYgPSBidWYtPm5leHQpIHsNCj4gPiAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBidWZmZXI6ICV1IGJ5dGVzICINCj4gPiBA QCAtNzI2LDEwICs3NzcsMTAgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29k ZWNDb250ZXh0DQo+ID4gKmF2Y3R4LA0KPiA+ICAgICAgfQ0KPiA+IA0KPiA+ICAgICAgaWYgKHBp Yy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKQ0KPiA+IC0gICAgICAgIHBrdC0+ZmxhZ3MgfD0g QVZfUEtUX0ZMQUdfS0VZOw0KPiA+ICsgICAgICAgIHBrdF9wdHItPmZsYWdzIHw9IEFWX1BLVF9G TEFHX0tFWTsNCj4gPiANCj4gPiAtICAgIHBrdC0+cHRzID0gcGljLT5wdHM7DQo+ID4gLSAgICBw a3QtPmR1cmF0aW9uID0gcGljLT5kdXJhdGlvbjsNCj4gPiArICAgIHBrdF9wdHItPnB0cyA9IHBp Yy0+cHRzOw0KPiA+ICsgICAgcGt0X3B0ci0+ZHVyYXRpb24gPSBwaWMtPmR1cmF0aW9uOw0KPiA+ IA0KPiA+ICAgICAgdmFzID0gdmFVbm1hcEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBwaWMt Pm91dHB1dF9idWZmZXIpOw0KPiA+ICAgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykg ew0KPiA+IEBAIC03NDIsOCArNzkzLDggQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0 KEFWQ29kZWNDb250ZXh0DQo+ID4gKmF2Y3R4LA0KPiA+ICAgICAgLy8gZm9yIG5vLWRlbGF5IGVu Y29kZXJzIHRoaXMgaXMgaGFuZGxlZCBpbiBnZW5lcmljIGNvZGVjDQo+ID4gICAgICBpZiAoYXZj dHgtPmNvZGVjLT5jYXBhYmlsaXRpZXMgJiBBVl9DT0RFQ19DQVBfREVMQVkgJiYNCj4gPiAgICAg ICAgICBhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0NPUFlfT1BBUVVFKSB7DQo+ID4gLSAg ICAgICAgcGt0LT5vcGFxdWUgICAgID0gcGljLT5vcGFxdWU7DQo+ID4gLSAgICAgICAgcGt0LT5v cGFxdWVfcmVmID0gcGljLT5vcGFxdWVfcmVmOw0KPiA+ICsgICAgICAgIHBrdF9wdHItPm9wYXF1 ZSAgICAgPSBwaWMtPm9wYXF1ZTsNCj4gPiArICAgICAgICBwa3RfcHRyLT5vcGFxdWVfcmVmID0g cGljLT5vcGFxdWVfcmVmOw0KPiA+ICAgICAgICAgIHBpYy0+b3BhcXVlX3JlZiA9IE5VTEw7DQo+ ID4gICAgICB9DQo+ID4gDQo+ID4gQEAgLTc1Miw2ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZhYXBp X2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQNCj4gPiAqYXZjdHgsDQo+ID4gDQo+ID4gICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCByZWFkIGZvciBwaWMNCj4gPiAl IlBSSWQ2NCIvJSJQUklkNjQiLlxuIiwNCj4gPiAgICAgICAgICAgICBwaWMtPmRpc3BsYXlfb3Jk ZXIsIHBpYy0+ZW5jb2RlX29yZGVyKTsNCj4gPiArDQo+ID4gKyAgICB2YWFwaV9lbmNvZGVfc2V0 X291dHB1dF90aW1lc3RhbXAoYXZjdHgsIHBpYywgcGt0X3B0cik7DQo+ID4gKw0KPiA+ICAgICAg cmV0dXJuIDA7DQo+ID4gDQo+ID4gIGZhaWxfbWFwcGVkOg0KPiA+IEBAIC0xMTI4LDkgKzExODIs MTkgQEAgc3RhdGljIGludA0KPiA+IHZhYXBpX2VuY29kZV9waWNrX25leHQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LA0KPiA+IA0KPiA+ICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBp YywgcGljLCAwLCAxLCAwKTsNCj4gPiAgICAgIGlmIChwaWMtPnR5cGUgIT0gUElDVFVSRV9UWVBF X0lEUikgew0KPiA+IC0gICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIHN0 YXJ0LA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNU VVJFX1RZUEVfUCwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiX2NvdW50ZXIg PiAwLCAwKTsNCj4gPiArICAgICAgICAvLyBUT0RPOiBhcHBseSBib3RoIHByZXZpb3VzIGFuZCBm b3J3YXJkIG11bHRpIHJlZmVyZW5jZQ0KPiA+IGZvciBhbGwgdmFhcGkgZW5jb2RlcnMuDQo+ID4g KyAgICAgICAgLy8gQW5kIEwwL0wxIHJlZmVyZW5jZSBmcmFtZSBudW1iZXIgY2FuIGJlIHNldCBk eW5hbWljYWxseQ0KPiA+IHRocm91Z2ggcXVlcnkNCj4gPiArICAgICAgICAvLyBWQUNvbmZpZ0F0 dHJpYkVuY01heFJlZkZyYW1lcyBhdHRyaWJ1dGUuDQo+ID4gKyAgICAgICAgaWYgKGF2Y3R4LT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsNCj4gPiArICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IGN0eC0+bmJfbmV4dF9wcmV2OyBpKyspDQo+ID4gKyAgICAgICAgICAgICAgICB2YWFw aV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBjdHgtDQo+ID4gPm5leHRfcHJldltpXSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNU VVJFX1RZUEVfUCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJf Y291bnRlciA+IDAsIDApOw0KPiA+ICsgICAgICAgIH0gZWxzZQ0KPiA+ICsgICAgICAgICAgICB2 YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBzdGFydCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiX2NvdW50ZXIgPiAwLCAwKTsNCj4gPiAr DQo+ID4gICAgICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgY3R4LT5uZXh0 X3ByZXZbY3R4LQ0KPiA+ID5uYl9uZXh0X3ByZXYgLSAxXSwgMCwgMCwgMSk7DQo+ID4gICAgICB9 DQo+ID4gDQo+ID4gQEAgLTEyOTIsNiArMTM1NiwxOSBAQCBpbnQNCj4gPiBmZl92YWFwaV9lbmNv ZGVfcmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldA0KPiA+ICpw a3QpDQo+ID4gICAgICBBVkZyYW1lICpmcmFtZSA9IGN0eC0+ZnJhbWU7DQo+ID4gICAgICBpbnQg ZXJyOw0KPiA+IA0KPiA+ICtzdGFydDoNCj4gPiArICAgIC8qKiBpZiBubyBCIGZyYW1lIGJlZm9y ZSByZXBlYXQgUCBmcmFtZSwgc2VudCByZXBlYXQgUCBmcmFtZQ0KPiA+IG91dC4gKi8NCj4gPiAr ICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxICYmIGN0eC0+dGFpbF9w a3QtPnNpemUpIA0KPiA+IHsNCj4gPiArICAgICAgICBmb3IgKFZBQVBJRW5jb2RlUGljdHVyZSAq dG1wID0gY3R4LT5waWNfc3RhcnQ7IHRtcDsgdG1wID0NCj4gPiB0bXAtPm5leHQpIHsNCj4gPiAr ICAgICAgICAgICAgaWYgKHRtcC0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQiAmJiB0bXAtPnB0cyA8 IGN0eC0NCj4gPiA+dGFpbF9wa3QtPnB0cykNCj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgICAgICAgICBlbHNlIGlmICghdG1wLT5uZXh0KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICBhdl9wYWNrZXRfbW92ZV9yZWYocGt0LCBjdHgtPnRhaWxfcGt0KTsNCj4gPiArICAgICAg ICAgICAgICAgIGdvdG8gZW5kOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAgICAgIGVyciA9IGZmX2VuY29kZV9nZXRfZnJhbWUoYXZj dHgsIGZyYW1lKTsNCj4gPiAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBBVkVSUk9SX0VPRikN Cj4gPiAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+IEBAIC0xMzU2LDE3ICsxNDMzLDIxIEBAIGlu dA0KPiA+IGZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZj dHgsIEFWUGFja2V0DQo+ID4gKnBrdCkNCj4gPiAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICAg ICAgfQ0KPiA+IA0KPiA+IC0gICAgdmFhcGlfZW5jb2RlX3NldF9vdXRwdXRfdGltZXN0YW1wKGF2 Y3R4LCBwaWMsIHBrdCk7DQo+ID4gLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91 dHB1dCBwYWNrZXQ6IHB0cyAlIlBSSWQ2NCIsIGR0cw0KPiA+ICUiUFJJZDY0IiwgIg0KPiA+IC0g ICAgICAgICAgICJzaXplICV1IGJ5dGVzLlxuIiwgcGt0LT5wdHMsIHBrdC0+ZHRzLCBwa3QtPnNp emUpOw0KPiA+IC0NCj4gPiAgICAgIGN0eC0+b3V0cHV0X29yZGVyID0gcGljLT5lbmNvZGVfb3Jk ZXI7DQo+ID4gICAgICB2YWFwaV9lbmNvZGVfY2xlYXJfb2xkKGF2Y3R4KTsNCj4gPiANCj4gPiAr ICAgIC8qKiBsb29wIHRvIGdldCBhbiBhdmFpbGFibGUgcGt0IGluIGVuY29kZXIgZmx1c2hpbmcu ICovDQo+ID4gKyAgICBpZiAoY3R4LT5lbmRfb2Zfc3RyZWFtICYmICFwa3QtPnNpemUpDQo+ID4g KyAgICAgICAgZ290byBzdGFydDsNCj4gPiArDQo+ID4gK2VuZDoNCj4gPiArICAgIGlmIChwa3Qt PnNpemUpDQo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQg cGFja2V0OiBwdHMgJSJQUklkNjQiLA0KPiA+IGR0cyAlIlBSSWQ2NCIsICINCj4gPiArICAgICAg ICAgICAgICAgInNpemUgJXUgYnl0ZXMuXG4iLCBwa3QtPnB0cywgcGt0LT5kdHMsIHBrdC0+c2l6 ZSk7DQo+ID4gKw0KPiA+ICAgICAgcmV0dXJuIDA7DQo+ID4gIH0NCj4gPiANCj4gPiAtDQo+ID4g IHN0YXRpYyBhdl9jb2xkIHZvaWQgdmFhcGlfZW5jb2RlX2FkZF9nbG9iYWxfcGFyYW0oQVZDb2Rl Y0NvbnRleHQNCj4gPiAqYXZjdHgsIGludCB0eXBlLA0KPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwNCj4gPiBzaXplX3Qg c2l6ZSkNCj4gPiAgew0KPiA+IEBAIC0yNjY3LDYgKzI3NDgsMTIgQEAgYXZfY29sZCBpbnQNCj4g PiBmZl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ID4gICAgICBj dHgtPmRldmljZSA9IChBVkhXRGV2aWNlQ29udGV4dCopY3R4LT5kZXZpY2VfcmVmLT5kYXRhOw0K PiA+ICAgICAgY3R4LT5od2N0eCA9IGN0eC0+ZGV2aWNlLT5od2N0eDsNCj4gPiANCj4gPiArICAg IGN0eC0+dGFpbF9wa3QgPSBhdl9wYWNrZXRfYWxsb2MoKTsNCj4gPiArICAgIGlmICghY3R4LT50 YWlsX3BrdCkgew0KPiA+ICsgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsNCj4gPiArICAg ICAgICBnb3RvIGZhaWw7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICAgICAgZXJyID0gdmFhcGlf ZW5jb2RlX3Byb2ZpbGVfZW50cnlwb2ludChhdmN0eCk7DQo+ID4gICAgICBpZiAoZXJyIDwgMCkN Cj4gPiAgICAgICAgICBnb3RvIGZhaWw7DQo+ID4gQEAgLTI4NTksOSArMjk0NiwxMSBAQCBhdl9j b2xkIGludA0KPiA+IGZmX3ZhYXBpX2VuY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgp DQo+ID4gICAgICB9DQo+ID4gDQo+ID4gICAgICBhdl9mcmFtZV9mcmVlKCZjdHgtPmZyYW1lKTsN Cj4gPiArICAgIGF2X3BhY2tldF9mcmVlKCZjdHgtPnRhaWxfcGt0KTsNCj4gPiANCj4gPiAgICAg IGF2X2ZyZWVwKCZjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtcyk7DQo+ID4gICAgICBhdl9mcmVl cCgmY3R4LT5jb2RlY19waWN0dXJlX3BhcmFtcyk7DQo+ID4gKyAgICBhdl9mcmVlcCgmY3R4LT5o ZWFkZXJfZGF0YSk7DQo+ID4gICAgICBhdl9maWZvX2ZyZWVwMigmY3R4LT5lbmNvZGVfZmlmbyk7 DQo+ID4gDQo+ID4gICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+cmVjb25fZnJhbWVzX3JlZik7 DQo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmggYi9saWJhdmNvZGVj L3ZhYXBpX2VuY29kZS5oDQo+ID4gaW5kZXggZDU0NTJhMzdiMy4uMDNkZjhkNmQ0NiAxMDA2NDQN Cj4gPiAtLS0gYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5oDQo+ID4gKysrIGIvbGliYXZjb2Rl Yy92YWFwaV9lbmNvZGUuaA0KPiA+IEBAIC0xMzMsNiArMTMzLDExIEBAIHR5cGVkZWYgc3RydWN0 IFZBQVBJRW5jb2RlUGljdHVyZSB7DQo+ID4gDQo+ID4gICAgICBpbnQgICAgICAgICAgbmJfc2xp Y2VzOw0KPiA+ICAgICAgVkFBUElFbmNvZGVTbGljZSAqc2xpY2VzOw0KPiA+ICsNCj4gPiArICAg IC8qKiBUYWlsIGRhdGEgb2YgY3VycmVudCBwaWMsIHVzZWQgb25seSBmb3IgcmVwZWF0IGhlYWRl ciBvZg0KPiA+IEFWMS4gKi8NCj4gPiArICAgIGNoYXIgdGFpbF9kYXRhW01BWF9QQVJBTV9CVUZG RVJfU0laRV07DQo+ID4gKyAgICAvKiogQnl0ZSBsZW5ndGggb2YgdGFpbF9kYXRhLiAqLw0KPiA+ ICsgICAgc2l6ZV90IHRhaWxfc2l6ZTsNCj4gPiAgfSBWQUFQSUVuY29kZVBpY3R1cmU7DQo+ID4g DQo+ID4gIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUHJvZmlsZSB7DQo+ID4gQEAgLTM2Nyw2 ICszNzIsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVDb250ZXh0IHsNCj4gPiAgICAg IEFWRmlmbyAgICAgICAgICAqZW5jb2RlX2ZpZm87DQo+ID4gICAgICAvLyBNYXggbnVtYmVyIG9m IGZyYW1lIGJ1ZmZlcmVkIGluIGVuY29kZXIuDQo+ID4gICAgICBpbnQgICAgICAgICAgICAgYXN5 bmNfZGVwdGg7DQo+ID4gKw0KPiA+ICsgICAgLyoqIEhlYWQgZGF0YSBmb3IgY3VycmVudCBvdXRw dXQgcGt0LCB1c2VkIG9ubHkgZm9yIEFWMS4gKi8NCj4gPiArICAgIHZvaWQgICpoZWFkZXJfZGF0 YTsNCj4gPiArICAgIHNpemVfdCBoZWFkZXJfZGF0YV9zaXplOw0KPiA+ICsNCj4gPiArICAgIC8q KiBTdG9yZSBhdjEgcmVwZWF0IGZyYW1lIGhlYWRlciBwa3QuICovDQo+ID4gKyAgICBBVlBhY2tl dCAqdGFpbF9wa3Q7DQo+ID4gIH0gVkFBUElFbmNvZGVDb250ZXh0Ow0KPiA+IA0KPiA+ICBlbnVt IHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMNCj4gPiBi L2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4xNjM1YjI1YmI3DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jDQo+ID4gQEAgLTAsMCArMSwxMjI4 IEBADQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlv bg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQo+ID4gKyAq DQo+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3INCj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCj4gPiArICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyDQo+ID4gdmVyc2lvbi4N Cj4gPiArICoNCj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ID4gKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gPiBHTlUN Cj4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N Cj4gPiArICoNCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsDQo+ID4gUHVibGljDQo+ID4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCj4gPiArICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QQ0KPiA+IDAyMTEwLTEzMDEgVVNBDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHZh L3ZhLmg+DQo+ID4gKyNpbmNsdWRlIDx2YS92YV9lbmNfYXYxLmg+DQo+ID4gKw0KPiA+ICsjaW5j bHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQu aCINCj4gPiArDQo+ID4gKyNpbmNsdWRlICJjYnNfYXYxLmgiDQo+ID4gKyNpbmNsdWRlICJwdXRf Yml0cy5oIg0KPiA+ICsjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCINCj4gPiArI2luY2x1ZGUg ImF2MV9wcm9maWxlX2xldmVsLmgiDQo+ID4gKyNpbmNsdWRlICJ2YWFwaV9lbmNvZGUuaCINCj4g PiArDQo+ID4gKyNkZWZpbmUgQVYxX01BWF9RVUFOVCAyNTUNCj4gPiArDQo+ID4gK3R5cGVkZWYg c3RydWN0IFZBQVBJRW5jb2RlQVYxUGljdHVyZSB7DQo+ID4gKyAgICBpbnQ2NF90IGxhc3RfaWRy X2ZyYW1lOw0KPiA+ICsgICAgaW50IHNsb3Q7DQo+ID4gK30gVkFBUElFbmNvZGVBVjFQaWN0dXJl Ow0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVBVjFDb250ZXh0IHsNCj4g PiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCBjb21tb247DQo+ID4gKyAgICBBVjFSYXdPQlUgc2g7 IC8qKjwgc2VxdWVuY2UgaGVhZGVyLiovDQo+ID4gKyAgICBBVjFSYXdPQlUgZmg7IC8qKjwgZnJh bWUgaGVhZGVyLiovDQo+ID4gKyAgICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsNCj4gPiAr ICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgY3VycmVudF9vYnU7DQo+ID4gKyAgICBWQUNvbmZp Z0F0dHJpYlZhbEVuY0FWMSBhdHRyOw0KPiA+ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjFF eHQxIGF0dHJfZXh0MTsNCj4gPiArICAgIFZBQ29uZmlnQXR0cmliVmFsRW5jQVYxRXh0MiBhdHRy X2V4dDI7DQo+ID4gKw0KPiA+ICsgICAgY2hhciBzaF9kYXRhW01BWF9QQVJBTV9CVUZGRVJfU0la RV07IC8qKjwgY29kZWQgc2VxdWVuY2UNCj4gPiBoZWFkZXIgZGF0YS4gKi8NCj4gPiArICAgIHNp emVfdCBzaF9kYXRhX2xlbjsgLyoqPCBiaXQgbGVuZ3RoIG9mIHNoX2RhdGEuICovDQo+ID4gKyAg ICBjaGFyIGZoX2RhdGFbTUFYX1BBUkFNX0JVRkZFUl9TSVpFXTsgLyoqPCBjb2RlZCBmcmFtZSBo ZWFkZXINCj4gPiBkYXRhLiAqLw0KPiA+ICsgICAgc2l6ZV90IGZoX2RhdGFfbGVuOyAvKio8IGJp dCBsZW5ndGggb2YgZmhfZGF0YS4gKi8NCj4gPiArDQo+ID4gKyAgICB1aW50OF90IHVuaWZvcm1f dGlsZTsNCj4gPiArICAgIHVpbnQ4X3QgdXNlXzEyOHgxMjhfc3VwZXJibG9jazsNCj4gPiArICAg IGludCBzYl9jb2xzOw0KPiA+ICsgICAgaW50IHNiX3Jvd3M7DQo+ID4gKyAgICBpbnQgdGlsZV9j b2xzX2xvZzI7DQo+ID4gKyAgICBpbnQgdGlsZV9yb3dzX2xvZzI7DQo+ID4gKyAgICBpbnQgbWF4 X3RpbGVfd2lkdGhfc2I7DQo+ID4gKyAgICBpbnQgbWF4X3RpbGVfaGVpZ2h0X3NiOw0KPiA+ICsg ICAgdWludDhfdCB3aWR0aF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfQ09MU107DQo+ID4g KyAgICB1aW50OF90IGhlaWdodF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfUk9XU107DQo+ ID4gKw0KPiA+ICsgICAgaW50IG1pbl9sb2cyX3RpbGVfY29sczsNCj4gPiArICAgIGludCBtYXhf bG9nMl90aWxlX2NvbHM7DQo+ID4gKyAgICBpbnQgbWluX2xvZzJfdGlsZV9yb3dzOw0KPiA+ICsg ICAgaW50IG1heF9sb2cyX3RpbGVfcm93czsNCj4gPiArDQo+ID4gKyAgICBpbnQgcV9pZHhfaWRy Ow0KPiA+ICsgICAgaW50IHFfaWR4X3A7DQo+ID4gKyAgICBpbnQgcV9pZHhfYjsNCj4gPiArDQo+ ID4gKyAgICAvKiogdXNlciBvcHRpb25zICovDQo+ID4gKyAgICBpbnQgcHJvZmlsZTsNCj4gPiAr ICAgIGludCBsZXZlbDsNCj4gPiArICAgIGludCB0aWVyOw0KPiA+ICsgICAgaW50IHRpbGVfY29s cywgdGlsZV9yb3dzOw0KPiA+ICsgICAgaW50IHRpbGVfZ3JvdXBzOw0KPiA+ICt9IFZBQVBJRW5j b2RlQVYxQ29udGV4dDsNCj4gPiArDQo+ID4gK3N0YXRpYyBhdl9jb2xkIGludCB2YWFwaV9lbmNv ZGVfYXYxX2NvbmZpZ3VyZShBVkNvZGVjQ29udGV4dA0KPiA+ICphdmN0eCkNCj4gPiArew0KPiA+ ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAgICAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4g PiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgIHJldCA9IGZmX2Nic19pbml0KCZwcml2 LT5jYmMsIEFWX0NPREVDX0lEX0FWMSwgYXZjdHgpOw0KPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ ID4gKyAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICBpZiAoY3R4LT5yY19tb2Rl LT5xdWFsaXR5KSB7DQo+ID4gKyAgICAgICAgcHJpdi0+cV9pZHhfcCA9IGF2X2NsaXAoY3R4LT5y Y19xdWFsaXR5LCAwLA0KPiA+IEFWMV9NQVhfUVVBTlQpOw0KPiA+ICsgICAgICAgIGlmIChmYWJz KGF2Y3R4LT5pX3F1YW50X2ZhY3RvcikgPiAwLjApDQo+ID4gKyAgICAgICAgICAgIHByaXYtPnFf aWR4X2lkciA9DQo+ID4gKyAgICAgICAgICAgICAgICBhdl9jbGlwKChmYWJzKGF2Y3R4LT5pX3F1 YW50X2ZhY3RvcikgKiBwcml2LQ0KPiA+ID5xX2lkeF9wICArDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBhdmN0eC0+aV9xdWFudF9vZmZzZXQpICsgMC41LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAwLCBBVjFfTUFYX1FVQU5UKTsNCj4gPiArICAgICAgICBlbHNlDQo+ID4g KyAgICAgICAgICAgIHByaXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3A7DQo+ID4gKw0KPiA+ ICsgICAgICAgIGlmIChmYWJzKGF2Y3R4LT5iX3F1YW50X2ZhY3RvcikgPiAwLjApDQo+ID4gKyAg ICAgICAgICAgIHByaXYtPnFfaWR4X2IgPQ0KPiA+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgo ZmFicyhhdmN0eC0+Yl9xdWFudF9mYWN0b3IpICogcHJpdi0NCj4gPiA+cV9pZHhfcCAgKw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmJfcXVhbnRfb2Zmc2V0KSArIDAuNSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgMCwgQVYxX01BWF9RVUFOVCk7DQo+ID4gKyAg ICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICBwcml2LT5xX2lkeF9iID0gcHJpdi0+cV9pZHhf cDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgLyoqIEFyYml0cmFyeSB2YWx1ZSAq Lw0KPiA+ICsgICAgICAgIHByaXYtPnFfaWR4X2lkciA9IHByaXYtPnFfaWR4X3AgPSBwcml2LT5x X2lkeF9iID0gMTI4Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfYWRkX29idShBVkNv ZGVjQ29udGV4dCAqYXZjdHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKmF1LA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKm9idV91bml0KQ0KPiA+ICt7DQo+ID4gKyAgICBpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArICAgIHJldCA9IGZmX2Nic19pbnNlcnRfdW5pdF9jb250ZW50KGF1LCAt MSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIG9idV91 bml0LCBOVUxMKTsNCj4gPiArICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWRkIE9CVSB1bml0OiAiDQo+ID4gKyAg ICAgICAgICAgICAgICJ0eXBlID0gJWQuXG4iLCB0eXBlKTsNCj4gPiArICAgICAgICByZXR1cm4g cmV0Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfb2J1KEFWQ29kZWNDb250 ZXh0ICphdmN0eCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpkYXRhLCBzaXplX3QNCj4gPiAqZGF0YV9sZW4sDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAqYnMpDQo+ID4gK3sN Cj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7 DQo+ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgIHJldCA9IGZmX2Nic193cml0ZV9m cmFnbWVudF9kYXRhKHByaXYtPmNiYywgYnMpOw0KPiA+ICsgICAgaWYgKHJldCA8IDApIHsNCj4g PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBw YWNrZWQNCj4gPiBoZWFkZXIuXG4iKTsNCj4gPiArICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmICgoc2l6ZV90KTggKiBNQVhfUEFSQU1fQlVGRkVSX1NJ WkUgPCA4ICogYnMtPmRhdGFfc2l6ZSAtDQo+ID4gYnMtPmRhdGFfYml0X3BhZGRpbmcpIHsNCj4g PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFjY2VzcyB1bml0IHRvbyBs YXJnZTogIg0KPiA+ICsgICAgICAgICAgICAgICAiJXp1IDwgJXp1LlxuIiwgKHNpemVfdCk4ICog TUFYX1BBUkFNX0JVRkZFUl9TSVpFLA0KPiA+ICsgICAgICAgICAgICAgICA4ICogYnMtPmRhdGFf c2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nKTsNCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9TUEMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIG1lbWNweShkYXRhLCBicy0+ ZGF0YSwgYnMtPmRhdGFfc2l6ZSk7DQo+ID4gKyAgICAqZGF0YV9sZW4gPSA4ICogYnMtPmRhdGFf c2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nOw0KPiA+ICsNCj4gPiArICAgIHJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdldF9yZWxhdGl2ZV9kaXN0KGNvbnN0IEFW MVJhd1NlcXVlbmNlSGVhZGVyICpzZXEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQ0KPiA+ICt7DQo+ID4gKyAgICB1bnNp Z25lZCBpbnQgZGlmZiwgbTsNCj4gPiArICAgIGlmICghc2VxLT5lbmFibGVfb3JkZXJfaGludCkN Cj4gPiArICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgIGRpZmYgPSBhIC0gYjsNCj4gPiArICAg IG0gPSAxIDw8IHNlcS0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7DQo+ID4gKyAgICBkaWZmID0g KGRpZmYgJiAobSAtIDEpKSAtIChkaWZmICYgbSk7DQo+ID4gKyAgICByZXR1cm4gZGlmZjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB3cml0ZV9ucyhQdXRCaXRDb250ZXh0ICpwYmMs IHVpbnQzMl90IG4sIHVpbnQzMl90DQo+ID4gdmFsdWUpDQo+ID4gK3sNCj4gPiArICAgIHVpbnQz Ml90IHcsIG0sIHYsIGV4dHJhX2JpdDsNCj4gPiArDQo+ID4gKyAgICB3ID0gYXZfbG9nMihuKSAr IDE7DQo+ID4gKyAgICBtID0gKDEgPDwgdykgLSBuOw0KPiA+ICsNCj4gPiArICAgIGlmICh2YWx1 ZSA8IG0pIHsNCj4gPiArICAgICAgICB2ID0gdmFsdWU7DQo+ID4gKyAgICAgICAgcHV0X2JpdHMo cGJjLCB3IC0gMSwgdik7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIHYgPSBtICsg KCh2YWx1ZSAtIG0pID4+IDEpOw0KPiA+ICsgICAgICAgIGV4dHJhX2JpdCA9ICh2YWx1ZSAtIG0p ICYgMTsNCj4gPiArICAgICAgICBwdXRfYml0cyhwYmMsIHcgLSAxLCB2KTsNCj4gPiArICAgICAg ICBwdXRfYml0cyhwYmMsIDEsIGV4dHJhX2JpdCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsg ICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBUaGlzIEFQSSBw cm92aWRlIHRoZSBtaW5tdW0gaW1wbGVtZW50aW9uIGFjY29yZGluZyBjdXJyZW50DQo+ID4gZW5h YmxlZCBmZWF0dXJlcw0KPiA+ICsgKiBpbiBmcmFtZSBoZWFkZXIuIElmIG1vcmUgZmVhdHVyZXMg d2lsbCBlbmFibGUgaW4gZnVydHVyZSwNCj4gPiBwbGVhc2UgbWFrZSBzdXJlDQo+ID4gKyAqIHRo ZSByZWxhdGl2ZSBmbGFncyBvZiBmZWF0dXJlcyBzaG91bGQgYmUgcGFja2VkIGNvcnJlY3RseSBp bnRvDQo+ID4gZnJhbWUgaGVhZGVyDQo+ID4gKyAqIG9idSBpbiB0aGlzIEFQSS4NCj4gPiArICov DQo+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFkZXIoQVZD b2RlY0NvbnRleHQNCj4gPiAqYXZjdHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0dXJlDQo+ID4gKnBpYywNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRh LCBzaXplX3QNCj4gPiAqZGF0YV9sZW4pDQo+ID4gK3sNCj4gPiArICAgIFZBQVBJRW5jb2RlQ29u dGV4dCAgICAgICAgICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ID4gKyAgICBWQUFQ SUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZoOw0K PiA+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAqc2hfb2J1ID0gJnByaXYtPnNo Ow0KPiA+ICsgICAgQVYxUmF3RnJhbWVIZWFkZXIgICAgICAgICAgICAgICAgKmZoID0gJmZoX29i dS0NCj4gPiA+b2J1LmZyYW1lLmhlYWRlcjsNCj4gPiArICAgIEFWMVJhd1NlcXVlbmNlSGVhZGVy ICAgICAgICAgICAgICpzaCA9ICZzaF9vYnUtDQo+ID4gPm9idS5zZXF1ZW5jZV9oZWFkZXI7DQo+ ID4gKyAgICBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtDQo+ID4g PmNvZGVjX3BpY3R1cmVfcGFyYW1zOw0KPiA+ICsgICAgUHV0Qml0Q29udGV4dCBwYmMsIHBiY190 bXA7DQo+ID4gKyAgICB1aW50OF90IGJ5dGU7DQo+ID4gKyAgICBpbnQgcWluZGV4LCBjb2RlZF9s b3NzbGVzczsNCj4gPiArICAgIGludCBpZF9sZW4sIGZyYW1lX2lzX2ludHJhLCBza2lwX21vZGVf YWxsb3dlZDsNCj4gPiArICAgIGludCBzdGFydCwgcGF5bG9hZF9iaXRzLCBvYnVfc2l6ZSwgb2J1 X3NpemVfbGVuOw0KPiA+ICsgICAgaW50IHFpbmRleF9vZmZzZXQsIGxvb3BmaWx0ZXJfb2Zmc2V0 Ow0KPiA+ICsgICAgaW50IGNkZWZfc3RhcnRfb2Zmc2V0LCBjZGVmX2VuZF9vZmZzZXQ7DQo+ID4g KyAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICBpbml0X3B1dF9iaXRzKCZwYmMsIGRhdGEsIE1B WF9QQVJBTV9CVUZGRVJfU0laRSk7DQo+ID4gKw0KPiA+ICsgICAgLyoqIG9idSBoZWFkZXIgKi8N Cj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoX29idS0+aGVhZGVyLm9idV9mb3JiaWRkZW5f Yml0KTsNCj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDQsIGZoX29idS0+aGVhZGVyLm9idV90eXBl KTsNCj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoX29idS0+aGVhZGVyLm9idV9leHRlbnNp b25fZmxhZyk7DQo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVf aGFzX3NpemVfZmllbGQpOw0KPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFk ZXIub2J1X3Jlc2VydmVkXzFiaXQpOw0KPiA+ICsNCj4gPiArICAgIC8qKiByZWNvcmQgcGJjIHN0 YXR1cyB0byByZS13cml0ZSBvYnUgc2l6ZSBsYXRlci4gKi8NCj4gPiArICAgIGlmIChmaF9vYnUt PmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQpIHsNCj4gPiArICAgICAgICBwYmNfdG1wID0gcGJj Ow0KPiA+ICsgICAgICAgIHB1dF9iaXRzMzIoJnBiYywgMCk7DQo+ID4gKyAgICAgICAgcHV0X2Jp dHMzMigmcGJjLCAwKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBzdGFydCA9IHB1dF9i aXRzX2NvdW50KCZwYmMpOw0KPiA+ICsNCj4gPiArICAgIC8qKiB1bmNvbXByZXNzZWRfaGVhZGVy KCkgKi8NCj4gPiArICAgIGlmIChzaC0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcpDQo+ ID4gKyAgICAgICAgaWRfbGVuID0gc2gtPmFkZGl0aW9uYWxfZnJhbWVfaWRfbGVuZ3RoX21pbnVz XzEgKw0KPiA+ICsgICAgICAgICAgICAgICAgIHNoLT5kZWx0YV9mcmFtZV9pZF9sZW5ndGhfbWlu dXNfMiArIDM7DQo+ID4gKw0KPiA+ICsgICAgZnJhbWVfaXNfaW50cmEgPSAoZmgtPmZyYW1lX3R5 cGUgPT0gQVYxX0ZSQU1FX0tFWSB8fA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgZmgtPmZy YW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0lOVFJBX09OTFkpOw0KPiA+ICsgICAgaWYgKCFzaC0+cmVk dWNlZF9zdGlsbF9waWN0dXJlX2hlYWRlcikgew0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMs IDEsIGZoLT5zaG93X2V4aXN0aW5nX2ZyYW1lKTsNCj4gPiArICAgICAgICBpZiAoZmgtPnNob3df ZXhpc3RpbmdfZnJhbWUpIHsNCj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgt PmZyYW1lX3RvX3Nob3dfbWFwX2lkeCk7DQo+ID4gKyAgICAgICAgICAgIGdvdG8gdHJhaWxpbmdf Yml0czsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKHNoLT5mcmFtZV9pZF9udW1i ZXJzX3ByZXNlbnRfZmxhZykNCj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgaWRfbGVu LCBmaC0+ZGlzcGxheV9mcmFtZV9pZCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZw YmMsIDIsIGZoLT5mcmFtZV90eXBlKTsNCj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBm aC0+c2hvd19mcmFtZSk7DQo+ID4gKyAgICAgICAgaWYgKCFmaC0+c2hvd19mcmFtZSkNCj4gPiAr ICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNob3dhYmxlX2ZyYW1lKTsNCj4gPiAr DQo+ID4gKyAgICAgICAgaWYgKCEoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX1NXSVRDSCB8 fA0KPiA+ICsgICAgICAgICAgICAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBm aC0+c2hvd19mcmFtZSkpKQ0KPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ ZXJyb3JfcmVzaWxpZW50X21vZGUpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5kaXNhYmxlX2NkZl91cGRhdGUpOw0KPiA+ICsgICAgaWYgKHNoLT5z ZXFfZm9yY2Vfc2NyZWVuX2NvbnRlbnRfdG9vbHMgPT0NCj4gPiBBVjFfU0VMRUNUX1NDUkVFTl9D T05URU5UX1RPT0xTKQ0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5hbGxvd19z Y3JlZW5fY29udGVudF90b29scyk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKGZoLT5hbGxvd19zY3Jl ZW5fY29udGVudF90b29scyAmJiBzaC0+c2VxX2ZvcmNlX2ludGVnZXJfbXYgDQo+ID4gPT0gQVYx X1NFTEVDVF9JTlRFR0VSX01WKQ0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5m b3JjZV9pbnRlZ2VyX212KTsNCj4gPiArDQo+ID4gKyAgICBpZiAoc2gtPmZyYW1lX2lkX251bWJl cnNfcHJlc2VudF9mbGFnKQ0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIGlkX2xlbiwgZmgt PmN1cnJlbnRfZnJhbWVfaWQpOw0KPiA+ICsNCj4gPiArICAgIGlmIChmaC0+ZnJhbWVfdHlwZSAh PSBBVjFfRlJBTUVfU1dJVENIICYmICFzaC0NCj4gPiA+cmVkdWNlZF9zdGlsbF9waWN0dXJlX2hl YWRlcikNCj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZnJhbWVfc2l6ZV9vdmVy cmlkZV9mbGFnKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoc2gtPmVuYWJsZV9vcmRlcl9oaW50KQ0K PiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIHNoLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSAr IDEsIGZoLQ0KPiA+ID5vcmRlcl9oaW50KTsNCj4gPiArDQo+ID4gKyAgICBpZiAoIShmcmFtZV9p c19pbnRyYSB8fCBmaC0+ZXJyb3JfcmVzaWxpZW50X21vZGUpKQ0KPiA+ICsgICAgICAgIHB1dF9i aXRzKCZwYmMsIDMsIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSk7DQo+ID4gKw0KPiA+ICsgICAgaWYg KCEoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX1NXSVRDSCB8fA0KPiA+ICsgICAgICAgIGZo LT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgJiYgZmgtPnNob3dfZnJhbWUpKQ0KPiA+ICsg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDgsIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzKTsNCj4gPiAr DQo+ID4gKyAgICBpZiAoZnJhbWVfaXNfaW50cmEpIHsNCj4gPiArICAgICAgICAvKiogcmVuZGVy X3NpemUoKSAqLw0KPiA+ICsgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVuZGVyX2Fu ZF9mcmFtZV9zaXplX2RpZmZlcmVudCk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg IGlmICghZnJhbWVfaXNfaW50cmEgJiYgc2gtPmVuYWJsZV9vcmRlcl9oaW50KQ0KPiA+ICsgICAg ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZnJhbWVfcmVmc19zaG9ydF9zaWduYWxpbmcp Ow0KPiA+ICsNCj4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1F OyBpKyspIHsNCj4gPiArICAgICAgICAgICAgaWYgKCFmaC0+ZnJhbWVfcmVmc19zaG9ydF9zaWdu YWxpbmcpDQo+ID4gKyAgICAgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+cmVmX2Zy YW1lX2lkeFtpXSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoIShm aC0+ZnJhbWVfc2l6ZV9vdmVycmlkZV9mbGFnICYmICFmaC0NCj4gPiA+ZXJyb3JfcmVzaWxpZW50 X21vZGUpKQ0KPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0NCj4gPiA+cmVu ZGVyX2FuZF9mcmFtZV9zaXplX2RpZmZlcmVudCk7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmICgh ZmgtPmZvcmNlX2ludGVnZXJfbXYpDQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEs IGZoLT5hbGxvd19oaWdoX3ByZWNpc2lvbl9tdik7DQo+ID4gKw0KPiA+ICsgICAgICAgIC8qKiBy ZWFkX2ludGVycG9sYXRpb25fZmlsdGVyKCkgKi8NCj4gPiArICAgICAgICBwdXRfYml0cygmcGJj LCAxLCBmaC0+aXNfZmlsdGVyX3N3aXRjaGFibGUpOw0KPiA+ICsgICAgICAgIGlmICghZmgtPmlz X2ZpbHRlcl9zd2l0Y2hhYmxlKQ0KPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBm aC0+aW50ZXJwb2xhdGlvbl9maWx0ZXIpOw0KPiA+ICsNCj4gPiArICAgICAgICBwdXRfYml0cygm cGJjLCAxLCBmaC0+aXNfbW90aW9uX21vZGVfc3dpdGNoYWJsZSk7DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgaWYgKCEoc2gtPnJlZHVjZWRfc3RpbGxfcGljdHVyZV9oZWFkZXIgfHwgZmgt DQo+ID4gPmRpc2FibGVfY2RmX3VwZGF0ZSkpDQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYpOw0KPiA+ICsNCj4gPiArICAgIC8q KiB0aWxlX2luZm8oKSAqLw0KPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnVuaWZvcm1f dGlsZV9zcGFjaW5nX2ZsYWcpOw0KPiA+ICsgICAgaWYgKGZoLT51bmlmb3JtX3RpbGVfc3BhY2lu Z19mbGFnKSB7DQo+ID4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29sc19s b2cyIC0gcHJpdi0NCj4gPiA+bWluX2xvZzJfdGlsZV9jb2xzOyBpKyspIHsNCj4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAg IGlmIChwcml2LT50aWxlX2NvbHNfbG9nMiA8IHByaXYtPm1heF9sb2cyX3RpbGVfY29scykNCj4g PiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7DQo+ID4gKw0KPiA+ICsgICAgICAg IGZvciAoaSA9IDA7IGkgPCBwcml2LT50aWxlX3Jvd3NfbG9nMiAtIHByaXYtDQo+ID4gPm1pbl9s b2cyX3RpbGVfcm93czsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEs IDEpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBpZiAocHJpdi0+dGlsZV9yb3dzX2xv ZzIgPCBwcml2LT5tYXhfbG9nMl90aWxlX3Jvd3MpDQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRz KCZwYmMsIDEsIDApOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBpbnQgc3RhcnRf c2IgPSAwOw0KPiA+ICsgICAgICAgIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7DQo+ID4gKyAg ICAgICAgZm9yIChpID0gMDsgc3RhcnRfc2IgPCBwcml2LT5zYl9jb2xzOyBpKyspIHsNCj4gPiAr ICAgICAgICAgICAgbWF4X3dpZHRoID0gRkZNSU4ocHJpdi0+c2JfY29scyAtIHN0YXJ0X3NiLCBw cml2LQ0KPiA+ID5tYXhfdGlsZV93aWR0aF9zYik7DQo+ID4gKyAgICAgICAgICAgIHdyaXRlX25z KCZwYmMsIG1heF93aWR0aCwgZmgtDQo+ID4gPndpZHRoX2luX3Nic19taW51c18xW2ldKTsNCj4g PiArICAgICAgICAgICAgc3RhcnRfc2IgKz0gZmgtPndpZHRoX2luX3Nic19taW51c18xW2ldICsg MTsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIHN0YXJ0X3NiID0gMDsNCj4g PiArICAgICAgICBmb3IgKGkgPSAwOyBzdGFydF9zYiA8IHByaXYtPnNiX3Jvd3M7IGkrKykgew0K PiA+ICsgICAgICAgICAgICBtYXhfaGVpZ2h0ID0gRkZNSU4ocHJpdi0+c2Jfcm93cyAtIHN0YXJ0 X3NiLCBwcml2LQ0KPiA+ID5tYXhfdGlsZV9oZWlnaHRfc2IpOw0KPiA+ICsgICAgICAgICAgICB3 cml0ZV9ucygmcGJjLCBtYXhfaGVpZ2h0LCBmaC0NCj4gPiA+aGVpZ2h0X2luX3Nic19taW51c18x W2ldKTsNCj4gPiArICAgICAgICAgICAgc3RhcnRfc2IgKz0gZmgtPmhlaWdodF9pbl9zYnNfbWlu dXNfMVtpXSArIDE7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IGlmIChwcml2LT50aWxlX2NvbHNfbG9nMiB8fCBwcml2LT50aWxlX3Jvd3NfbG9nMikgew0KPiA+ ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIHByaXYtPnRpbGVfY29sc19sb2cyICsgcHJpdi0NCj4g PiA+dGlsZV9yb3dzX2xvZzIsIGZoLT5jb250ZXh0X3VwZGF0ZV90aWxlX2lkKTsNCj4gPiArICAg ICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+dGlsZV9zaXplX2J5dGVzX21pbnVzMSk7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcWluZGV4X29mZnNldCA9IHB1dF9iaXRzX2NvdW50KCZw YmMpOw0KPiA+ICsgICAgLyoqIHF1YW50aXphdGlvbl9wYXJhbXMoKSAqLw0KPiA+ICsgICAgcHV0 X2JpdHMoJnBiYywgOCwgZmgtPmJhc2VfcV9pZHgpOw0KPiA+ICsgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPmRlbHRhX3FfeV9kYyk7DQo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVs dGFfcV91X2RjKTsNCj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9xX3VfYWMp Ow0KPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnVzaW5nX3FtYXRyaXgpOw0KPiA+ICsN Cj4gPiArICAgIC8qKiBzZWdtZW50YXRpb25fcGFyYW1zKCkgKi8NCj4gPiArICAgIHB1dF9iaXRz KCZwYmMsIDEsIGZoLT5zZWdtZW50YXRpb25fZW5hYmxlZCk7DQo+ID4gKw0KPiA+ICsgICAgLyoq IGRlbHRhX3FfcGFyYW1zKCkgKi8NCj4gPiArICAgIGlmIChmaC0+YmFzZV9xX2lkeCkNCj4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV9wcmVzZW50KTsNCj4gPiArICAg IGlmIChmaC0+ZGVsdGFfcV9wcmVzZW50KQ0KPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIs IGZoLT5kZWx0YV9xX3Jlcyk7DQo+ID4gKw0KPiA+ICsgICAgLyoqIGRlbHRhX2xmX3BhcmFtcygp ICovDQo+ID4gKyAgICBpZiAoZmgtPmRlbHRhX3FfcHJlc2VudCkgew0KPiA+ICsgICAgICAgIGlm ICghZmgtPmFsbG93X2ludHJhYmMpDQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEs IGZoLT5kZWx0YV9sZl9wcmVzZW50KTsNCj4gPiArICAgICAgICBpZiAoZmgtPmRlbHRhX2xmX3By ZXNlbnQpIHsNCj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMiwgZmgtPmRlbHRhX2xm X3Jlcyk7DQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9sZl9t dWx0aSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8qKiBj b2RlbG9zc2xlc3MgKi8NCj4gPiArICAgIGNvZGVkX2xvc3NsZXNzID0gMTsNCj4gPiArICAgIGZv ciAoaSA9IDA7IGkgPCBBVjFfTUFYX1NFR01FTlRTOyBpKyspIHsNCj4gPiArICAgICAgICBpZiAo ZmgtPnNlZ21lbnRhdGlvbl9lbmFibGVkICYmIGZoLQ0KPiA+ID5mZWF0dXJlX2VuYWJsZWRbaV1b QVYxX1NFR19MVkxfQUxUX1FdKQ0KPiA+ICsgICAgICAgICAgICBxaW5kZXggPSBmaC0+YmFzZV9x X2lkeCArIGZoLQ0KPiA+ID5mZWF0dXJlX3ZhbHVlW2ldW0FWMV9TRUdfTFZMX0FMVF9RXTsNCj4g PiArICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgIHFpbmRleCA9IGZoLT5iYXNlX3FfaWR4 Ow0KPiA+ICsgICAgICAgIHFpbmRleCA9IGF2X2NsaXBfdWludHAyKHFpbmRleCwgOCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgIGlmIChxaW5kZXggfHwgZmgtPmRlbHRhX3FfeV9kYyB8fCBmaC0+ZGVs dGFfcV91X2FjIHx8IGZoLQ0KPiA+ID5kZWx0YV9xX3VfZGMgfHwNCj4gPiArICAgICAgICAgICAg ZmgtPmRlbHRhX3Ffdl9hYyB8fCBmaC0+ZGVsdGFfcV92X2RjKQ0KPiA+ICsgICAgICAgICAgICBj b2RlZF9sb3NzbGVzcyA9IDA7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgbG9vcGZpbHRl cl9vZmZzZXQgPSBwdXRfYml0c19jb3VudCgmcGJjKTsNCj4gPiArICAgIC8qKiBsb29wX2ZpbHRl cl9wYXJhbXMoKSAqLw0KPiA+ICsgICAgaWYgKCEoY29kZWRfbG9zc2xlc3MgfHwgZmgtPmFsbG93 X2ludHJhYmMpKSB7DQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmls dGVyX2xldmVsWzBdKTsNCj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+bG9vcF9m aWx0ZXJfbGV2ZWxbMV0pOw0KPiA+ICsgICAgICAgIGlmIChmaC0+bG9vcF9maWx0ZXJfbGV2ZWxb MF0gfHwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzFdKQ0KPiA+IHsNCj4gPiArICAgICAgICAgICAg cHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzJdKTsNCj4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzNdKTsNCj4gPiAr ICAgICAgICB9DQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMywgZmgtPmxvb3BfZmlsdGVy X3NoYXJwbmVzcyk7DQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmxvb3BfZmls dGVyX2RlbHRhX2VuYWJsZWQpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGNkZWZfc3Rh cnRfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7DQo+ID4gKyAgICAvKiogY2RlZl9wYXJh bXMoKSAqLw0KPiA+ICsgICAgaWYgKCEoY29kZWRfbG9zc2xlc3MgfHwgZmgtPmFsbG93X2ludHJh YmMgfHwgIXNoLQ0KPiA+ID5lbmFibGVfY2RlZikpIHsNCj4gPiArICAgICAgICBwdXRfYml0cygm cGJjLCAyLCBmaC0+Y2RlZl9kYW1waW5nX21pbnVzXzMpOw0KPiA+ICsgICAgICAgIHB1dF9iaXRz KCZwYmMsIDIsIGZoLT5jZGVmX2JpdHMpOw0KPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCAo MSA8PCBmaC0+Y2RlZl9iaXRzKTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZw YmMsIDQsIGZoLT5jZGVmX3lfcHJpX3N0cmVuZ3RoW2ldKTsNCj4gPiArICAgICAgICAgICAgcHV0 X2JpdHMoJnBiYywgMiwgZmgtPmNkZWZfeV9zZWNfc3RyZW5ndGhbaV0pOw0KPiA+ICsgICAgICAg ICAgICBwdXRfYml0cygmcGJjLCA0LCBmaC0+Y2RlZl91dl9wcmlfc3RyZW5ndGhbaV0pOw0KPiA+ ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+Y2RlZl91dl9zZWNfc3RyZW5ndGhb aV0pOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAgIGNkZWZfZW5kX29mZnNl dCA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOw0KPiA+ICsNCj4gPiArICAgIC8qKiByZWFkX3R4X21v ZGUoKSAqLw0KPiA+ICsgICAgaWYgKGZoLT50eF9tb2RlID09IEFWMV9UWF9NT0RFX1NFTEVDVCkN Cj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAxKTsNCj4gPiArICAgIGVsc2UNCj4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAwKTsNCj4gPiArDQo+ID4gKyAgICAvKiogZnJhbWVf cmVmZXJlbmNlX21vZGUoKSAqLw0KPiA+ICsgICAgaWYgKCFmcmFtZV9pc19pbnRyYSkNCj4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVmZXJlbmNlX3NlbGVjdCk7DQo+ID4gKw0K PiA+ICsgICAgLyoqIHNraXBfbW9kZV9wYXJhbXMoKSAqLw0KPiA+ICsgICAgaWYgKGZyYW1lX2lz X2ludHJhIHx8ICFmaC0+cmVmZXJlbmNlX3NlbGVjdCB8fCAhc2gtDQo+ID4gPmVuYWJsZV9vcmRl cl9oaW50KQ0KPiA+ICsgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMDsNCj4gPiArICAgIGVs c2Ugew0KPiA+ICsgICAgICAgIGludCBmb3J3YXJkX2lkeCwgYmFja3dhcmRfaWR4Ow0KPiA+ICsg ICAgICAgIGludCByZWZfaGludCwgZm9yd2FyZF9oaW50LCBiYWNrd2FyZF9oaW50Ow0KPiA+ICsN Cj4gPiArICAgICAgICBmb3J3YXJkX2lkeCA9IC0xOw0KPiA+ICsgICAgICAgIGJhY2t3YXJkX2lk eCA9IC0xOw0KPiA+ICsNCj4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVS X0ZSQU1FOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgcmVmX2hpbnQgPSBmaC0+cmVmX29yZGVy X2hpbnRbZmgtPnJlZl9mcmFtZV9pZHhbaV1dOw0KPiA+ICsgICAgICAgICAgICBpZiAoZ2V0X3Jl bGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBmaC0+b3JkZXJfaGludCkgPA0KPiA+IDApIHsNCj4g PiArICAgICAgICAgICAgICAgIGlmIChmb3J3YXJkX2lkeCA8IDAgfHwgZ2V0X3JlbGF0aXZlX2Rp c3Qoc2gsDQo+ID4gcmVmX2hpbnQsIGZvcndhcmRfaWR4KSA+IDApIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2lkeCA9IGk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9oaW50ID0gcmVmX2hpbnQ7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBmaC0NCj4g PiA+b3JkZXJfaGludCkgPiAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICBpZiAoYmFja3dhcmRf aWR4IDwgMCB8fCBnZXRfcmVsYXRpdmVfZGlzdChzaCwNCj4gPiByZWZfaGludCwgYmFja3dhcmRf aGludCkgPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgYmFja3dhcmRfaWR4ID0gaTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZF9oaW50ID0gcmVmX2hpbnQ7DQo+ID4g KyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ ID4gKyAgICAgICAgaWYgKGZvcndhcmRfaWR4IDwgMCkNCj4gPiArICAgICAgICAgICAgc2tpcF9t b2RlX2FsbG93ZWQgPSAwOw0KPiA+ICsgICAgICAgIGVsc2UgaWYgKGJhY2t3YXJkX2lkeCA+PSAw KQ0KPiA+ICsgICAgICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9IDE7DQo+ID4gKyAgICAgICAg ZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIGludCBzZWNvbmRfZm9yd2FyZF9pZHgsIHNlY29uZF9m b3J3YXJkX2hpbnQ7DQo+ID4gKyAgICAgICAgICAgIHNlY29uZF9mb3J3YXJkX2lkeCA9IC0xOw0K PiA+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKysp IHsNCj4gPiArICAgICAgICAgICAgICAgIHJlZl9oaW50ID0gZmgtPnJlZl9vcmRlcl9oaW50W2Zo LQ0KPiA+ID5yZWZfZnJhbWVfaWR4W2ldXTsNCj4gPiArICAgICAgICAgICAgICAgIGlmIChnZXRf cmVsYXRpdmVfZGlzdChzaCwgcmVmX2hpbnQsIGZvcndhcmRfaGludCkNCj4gPiA8IDApIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kX2ZvcndhcmRfaWR4IDwgMCB8fA0KPiA+ IGdldF9yZWxhdGl2ZV9kaXN0KHNoLCByZWZfaGludCwgc2Vjb25kX2ZvcndhcmRfaGludCkgPiAw KXsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2ZvcndhcmRfaWR4ID0gaTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2ZvcndhcmRfaGludCA9IHJlZl9o aW50Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgIH0N Cj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICBpZiAoc2Vjb25kX2ZvcndhcmRf aWR4IDwgMCkNCj4gPiArICAgICAgICAgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMDsNCj4g PiArICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgc2tpcF9tb2RlX2FsbG93 ZWQgPSAxOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAo c2tpcF9tb2RlX2FsbG93ZWQpDQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNr aXBfbW9kZV9wcmVzZW50KTsNCj4gPiArDQo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ cmVkdWNlZF90eF9zZXQpOw0KPiA+ICsNCj4gPiArICAgIC8qKiBnbG9iYWxfbW90aW9uX3BhcmFt cygpICovDQo+ID4gKyAgICBpZiAoIWZyYW1lX2lzX2ludHJhKSB7DQo+ID4gKyAgICAgICAgZm9y IChpID0gQVYxX1JFRl9GUkFNRV9MQVNUOyBpIDw9IEFWMV9SRUZfRlJBTUVfQUxUUkVGOw0KPiA+ IGkrKykgew0KPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNfZ2xvYmFs W2ldKTsNCj4gPiArICAgICAgICAgICAgaWYgKGZoLT5pc19nbG9iYWxbaV0pIHsNCj4gPiArICAg ICAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5pc19yb3Rfem9vbVtpXSk7DQo+ID4g KyAgICAgICAgICAgICAgICBpZiAoIWZoLT5pc19yb3Rfem9vbVtpXSkNCj4gPiArICAgICAgICAg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNfdHJhbnNsYXRpb25baV0pOw0KPiA+ ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr dHJhaWxpbmdfYml0czoNCj4gPiArICAgIHBheWxvYWRfYml0cyA9IHB1dF9iaXRzX2NvdW50KCZw YmMpIC0gc3RhcnQ7DQo+ID4gKw0KPiA+ICsgICAgLyoqIHRyYWlsaW5nX2JpdHMoKSAqLw0KPiA+ ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gKyAgICBvYnVfc2l6ZSA9IChwdXRfYml0 c19jb3VudCgmcGJjKSAtIHN0YXJ0ICsgNykgLyA4Ow0KPiA+ICsgICAgZm9yIChpID0gMDsgaSA8 IG9idV9zaXplICogOCAtIHBheWxvYWRfYml0cyAtIDE7IGkrKykNCj4gPiArICAgICAgICBwdXRf Yml0cygmcGJjLCAxLCAwKTsNCj4gPiArDQo+ID4gKyAgICBmbHVzaF9wdXRfYml0cygmcGJjKTsN Cj4gPiArICAgICpkYXRhX2xlbiA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOw0KPiA+ICsNCj4gPiAr ICAgIC8qKiB1cGRhdGUgb2J1IHNpemUgaW4gYml0c3RyZWFtICovDQo+ID4gKyAgICBpZiAoZmhf b2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2ZpZWxkKSB7DQo+ID4gKyAgICAgICAgb2J1X3NpemVf bGVuID0gcHJpdi0+YXR0cl9leHQyLmJpdHMub2J1X3NpemVfYnl0ZXNfbWludXMxDQo+ID4gKyAx Ow0KPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYnVfc2l6ZV9sZW47IGkrKykgew0KPiA+ ICsgICAgICAgICAgICBieXRlID0gb2J1X3NpemUgPj4gKDcgKiBpKSAmIDB4N2Y7DQo+ID4gKyAg ICAgICAgICAgIGlmIChpIDwgb2J1X3NpemVfbGVuIC0gMSkNCj4gPiArICAgICAgICAgICAgICAg IGJ5dGUgfD0gMHg4MDsNCj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiY190bXAsIDgsIGJ5 dGUpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBmbHVzaF9wdXRfYml0cygmcGJjX3Rt cCk7DQo+ID4gKyAgICAgICAgbWVtbW92ZShwYmNfdG1wLmJ1Zl9wdHIsIHBiY190bXAuYnVmX3B0 ciArICg4IC0NCj4gPiBvYnVfc2l6ZV9sZW4pLCBvYnVfc2l6ZSk7DQo+ID4gKyAgICAgICAgKmRh dGFfbGVuIC09ICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgaWYgKGZoLT5zaG93X2V4aXN0aW5nX2ZyYW1lKQ0KPiA+ICsgICAgICAgIHJldHVybiAw Ow0KPiA+ICsNCj4gPiArICAgIGlmICghKGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkpIHsN Cj4gPiArICAgICAgICB2cGljLT5taW5fYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWlu LCAxLA0KPiA+IEFWMV9NQVhfUVVBTlQpOw0KPiA+ICsgICAgICAgIHZwaWMtPm1heF9iYXNlX3Fp bmRleCA9IGF2X2NsaXAoYXZjdHgtPnFtYXgsIDEsDQo+ID4gQVYxX01BWF9RVUFOVCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgIHZwaWMtPmJpdF9vZmZzZXRfcWluZGV4ICAgICAgICAgICAgPSBxaW5k ZXhfb2Zmc2V0IC0gKDggLQ0KPiA+IG9idV9zaXplX2xlbikgKiA4Ow0KPiA+ICsgICAgICAgIHZw aWMtPmJpdF9vZmZzZXRfbG9vcGZpbHRlcl9wYXJhbXMgPSBsb29wZmlsdGVyX29mZnNldCAtDQo+ ID4gKDggLSBvYnVfc2l6ZV9sZW4pICogODsNCj4gPiArICAgICAgICB2cGljLT5iaXRfb2Zmc2V0 X2NkZWZfcGFyYW1zICAgICAgID0gY2RlZl9zdGFydF9vZmZzZXQgLQ0KPiA+ICg4IC0gb2J1X3Np emVfbGVuKSAqIDg7DQo+ID4gKyAgICAgICAgdnBpYy0+c2l6ZV9pbl9iaXRzX2NkZWZfcGFyYW1z ICAgICA9IGNkZWZfZW5kX29mZnNldCAtDQo+ID4gY2RlZl9zdGFydF9vZmZzZXQ7DQo+ID4gKyAg ICAgICAgdnBpYy0+c2l6ZV9pbl9iaXRzX2ZyYW1lX2hkcl9vYnUgICA9ICpkYXRhX2xlbjsNCj4g PiArDQo+ID4gKyAgICAgICAgdnBpYy0+Ynl0ZV9vZmZzZXRfZnJhbWVfaGRyX29idV9zaXplID0g KCgocGljLT50eXBlID09DQo+ID4gUElDVFVSRV9UWVBFX0lEUikgPw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnNoX2RhdGFfbGVuIC8N Cj4gPiA4IDogMCkgKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmaF9vYnUtDQo+ID4gPmhlYWRlci5vYnVfZXh0ZW5zaW9uX2ZsYWcgPw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiAxKSk7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgdGlsZV9sb2cyKGludCBibGtTaXplLCBpbnQgdGFyZ2V0KSB7DQo+ID4g KyAgICBpbnQgazsNCj4gPiArICAgIGZvciAoayA9IDA7IChibGtTaXplIDw8IGspIDwgdGFyZ2V0 OyBrKyspOw0KPiA+ICsgICAgcmV0dXJuIGs7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX2F2MV9zZXRfdGlsZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ID4g K3sNCj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2Rh dGE7DQo+ID4gKyAgICBpbnQgbWlfY29scywgbWlfcm93cywgc2Jfc2hpZnQsIHNiX3NpemU7DQo+ ID4gKyAgICBpbnQgbWF4X3RpbGVfYXJlYV9zYiwgbWF4X3RpbGVfYXJlYV9zYl92YXJpZWQ7DQo+ ID4gKyAgICBpbnQgdGlsZV93aWR0aF9zYiwgdGlsZV9oZWlnaHRfc2IsIHdpZGVzdF90aWxlX3Ni Ow0KPiA+ICsgICAgaW50IG1pbl9sb2cyX3RpbGVzOw0KPiA+ICsgICAgaW50IHRpbGVfcm93c190 bXAsIGk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKHByaXYtPnRpbGVfY29scyA+IEFWMV9NQVhfVElM RV9DT0xTIHx8DQo+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID4gQVYxX01BWF9USUxFX1JP V1MpIHsNCj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg dGlsZSBudW1iZXIgJWR4JWQsDQo+ID4gc2hvdWxkIGxlc3MgdGhhbiAlZHglZC5cbiIsDQo+ID4g KyAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLA0KPiA+IEFW MV9NQVhfVElMRV9DT0xTLCBBVjFfTUFYX1RJTEVfUk9XUyk7DQo+ID4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBtaV9jb2xzID0g MiAqICgoYXZjdHgtPndpZHRoICsgNykgPj4gMyk7DQo+ID4gKyAgICBtaV9yb3dzID0gMiAqICgo YXZjdHgtPmhlaWdodCArIDcpID4+IDMpOw0KPiA+ICsgICAgcHJpdi0+c2JfY29scyA9IHByaXYt PnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICgobWlf Y29scyArIDMxKSA+PiA1KSA6ICgobWlfY29scyArIDE1KSA+PiA0KTsNCj4gPiArICAgIHByaXYt PnNiX3Jvd3MgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8NCj4gPiArICAgICAgICAg ICAgICAgICAgICAoKG1pX3Jvd3MgKyAzMSkgPj4gNSkgOiAoKG1pX3Jvd3MgKyAxNSkgPj4gNCk7 DQo+ID4gKyAgICBzYl9zaGlmdCA9IHByaXYtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPyA1IDog NDsNCj4gPiArICAgIHNiX3NpemUgID0gc2Jfc2hpZnQgKyAyOw0KPiA+ICsgICAgcHJpdi0+bWF4 X3RpbGVfd2lkdGhfc2IgPSBBVjFfTUFYX1RJTEVfV0lEVEggPj4gc2Jfc2l6ZTsNCj4gPiArICAg IG1heF90aWxlX2FyZWFfc2IgPSBBVjFfTUFYX1RJTEVfQVJFQSAgPj4gKDIgKiBzYl9zaXplKTsN Cj4gPiArDQo+ID4gKyAgICBwcml2LT5taW5fbG9nMl90aWxlX2NvbHMgPSB0aWxlX2xvZzIocHJp di0+bWF4X3RpbGVfd2lkdGhfc2IsDQo+ID4gcHJpdi0+c2JfY29scyk7DQo+ID4gKyAgICBwcml2 LT5tYXhfbG9nMl90aWxlX2NvbHMgPSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2JfY29scywN Cj4gPiBBVjFfTUFYX1RJTEVfQ09MUykpOw0KPiA+ICsgICAgcHJpdi0+bWF4X2xvZzJfdGlsZV9y b3dzID0gdGlsZV9sb2cyKDEsIEZGTUlOKHByaXYtPnNiX3Jvd3MsDQo+ID4gQVYxX01BWF9USUxF X1JPV1MpKTsNCj4gPiArICAgIG1pbl9sb2cyX3RpbGVzID0gRkZNQVgocHJpdi0+bWluX2xvZzJf dGlsZV9jb2xzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlX2xvZzIobWF4 X3RpbGVfYXJlYV9zYiwgcHJpdi0NCj4gPiA+c2Jfcm93cyAqIHByaXYtPnNiX2NvbHMpKTsNCj4g PiArDQo+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzICE9IGF2X2NsaXAocHJpdi0+dGlsZV9j b2xzLCAocHJpdi0+c2JfY29scyANCj4gPiArIHByaXYtPm1heF90aWxlX3dpZHRoX3NiIC0gMSkg LyBwcml2LT5tYXhfdGlsZV93aWR0aF9zYiwgcHJpdi0NCj4gPiA+c2JfY29scykpIHsNCj4gPiAr ICAgICAgICBwcml2LT50aWxlX2NvbHMgPSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywgKHByaXYt PnNiX2NvbHMNCj4gPiArIHByaXYtPm1heF90aWxlX3dpZHRoX3NiIC0gMSkgLyBwcml2LT5tYXhf dGlsZV93aWR0aF9zYiwgcHJpdi0NCj4gPiA+c2JfY29scyk7DQo+ID4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgdGlsZSBjb2xzLCBjb3JyZWN0DQo+ID4g dG8gJWQuXG4iLCBwcml2LT50aWxlX2NvbHMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IHByaXYtPnRpbGVfY29sc19sb2cyID0gdGlsZV9sb2cyKDEsIHByaXYtPnRpbGVfY29scyk7DQo+ ID4gKyAgICB0aWxlX3dpZHRoX3NiID0gKHByaXYtPnNiX2NvbHMgKyAoMSA8PCBwcml2LT50aWxl X2NvbHNfbG9nMikgLQ0KPiA+IDEpID4+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcHJpdi0+ dGlsZV9jb2xzX2xvZzI7DQo+ID4gKw0KPiA+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyA+IHBy aXYtPnNiX3Jvd3MpIHsNCj4gPiArICAgICAgICBwcml2LT50aWxlX3Jvd3MgPSBwcml2LT5zYl9y b3dzOw0KPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlk IHRpbGUgcm93cywgY29ycmVjdA0KPiA+IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9yb3dzKTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBmb3IgKHRpbGVfcm93c190bXAgPSBwcml2LT50aWxl X3Jvd3M7IHRpbGVfcm93c190bXAgPD0gcHJpdi0NCj4gPiA+c2Jfcm93cyAmJiB0aWxlX3Jvd3Nf dG1wIDw9IEFWMV9NQVhfVElMRV9ST1dTOyB0aWxlX3Jvd3NfdG1wKyspIHsNCj4gPiArICAgICAg ICAvKiogdHJ5IHVuaWZvcm1lZCB0aWxlLiAqLw0KPiA+ICsgICAgICAgIHByaXYtPnRpbGVfcm93 c19sb2cyID0gdGlsZV9sb2cyKDEsIHRpbGVfcm93c190bXApOw0KPiA+ICsgICAgICAgIGlmICgo cHJpdi0+c2JfY29scyArIHRpbGVfd2lkdGhfc2IgLSAxKSAvIHRpbGVfd2lkdGhfc2IgPT0NCj4g PiBwcml2LT50aWxlX2NvbHMpIHsNCj4gPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBy aXYtPnRpbGVfY29scyAtIDE7IGkrKykNCj4gPiArICAgICAgICAgICAgICAgIHByaXYtPndpZHRo X2luX3Nic19taW51c18xW2ldID0gdGlsZV93aWR0aF9zYiAtIDE7DQo+ID4gKyAgICAgICAgICAg IHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ldID0gcHJpdi0+c2JfY29scyAtIChwcml2LQ0K PiA+ID50aWxlX2NvbHMgLSAxKSAqIHRpbGVfd2lkdGhfc2IgLSAxOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgdGlsZV9oZWlnaHRfc2IgPSAocHJpdi0+c2Jfcm93cyArICgxIDw8IHByaXYtDQo+ ID4gPnRpbGVfcm93c19sb2cyKSAtIDEpID4+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpdi0+dGlsZV9yb3dzX2xvZzI7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBpZiAo KHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdodF9zYiAtIDEpIC8NCj4gPiB0aWxlX2hlaWdodF9z YiA9PSB0aWxlX3Jvd3NfdG1wICYmDQo+ID4gKyAgICAgICAgICAgICAgICB0aWxlX2hlaWdodF9z YiA8PSBtYXhfdGlsZV9hcmVhX3NiIC8NCj4gPiB0aWxlX3dpZHRoX3NiKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZV9yb3dzX3RtcCAtIDE7IGkrKykNCj4gPiAr ICAgICAgICAgICAgICAgICAgICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPQ0KPiA+ IHRpbGVfaGVpZ2h0X3NiIC0gMTsNCj4gPiArICAgICAgICAgICAgICAgIHByaXYtPmhlaWdodF9p bl9zYnNfbWludXNfMVtpXSA9IHByaXYtPnNiX3Jvd3MgLQ0KPiA+ICh0aWxlX3Jvd3NfdG1wIC0g MSkgKiB0aWxlX2hlaWdodF9zYiAtIDE7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgcHJp di0+dW5pZm9ybV90aWxlID0gMTsNCj4gPiArICAgICAgICAgICAgICAgIHByaXYtPm1pbl9sb2cy X3RpbGVfcm93cyA9IEZGTUFYKG1pbl9sb2cyX3RpbGVzIC0NCj4gPiBwcml2LT50aWxlX2NvbHNf bG9nMiwgMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIC8qKiB0cnkgbm9u LXVuaWZvcm1lZCB0aWxlLiAqLw0KPiA+ICsgICAgICAgIHdpZGVzdF90aWxlX3NiID0gMDsNCj4g PiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dGlsZV9jb2xzOyBpKyspIHsNCj4gPiAr ICAgICAgICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJp di0NCj4gPiA+c2JfY29scyAvIHByaXYtPnRpbGVfY29scyAtIGkgKiBwcml2LT5zYl9jb2xzIC8g cHJpdi0+dGlsZV9jb2xzIC0NCj4gPiAxOw0KPiA+ICsgICAgICAgICAgICB3aWRlc3RfdGlsZV9z YiA9IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2LQ0KPiA+ID53aWR0aF9pbl9zYnNfbWludXNf MVtpXSArIDEpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKG1pbl9s b2cyX3RpbGVzKQ0KPiA+ICsgICAgICAgICAgICBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZCA9IChw cml2LT5zYl9yb3dzICogcHJpdi0NCj4gPiA+c2JfY29scykgPj4gKG1pbl9sb2cyX3RpbGVzICsg MSk7DQo+ID4gKyAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICBtYXhfdGlsZV9hcmVhX3Ni X3ZhcmllZCA9IHByaXYtPnNiX3Jvd3MgKiBwcml2LQ0KPiA+ID5zYl9jb2xzOw0KPiA+ICsgICAg ICAgIHByaXYtPm1heF90aWxlX2hlaWdodF9zYiA9IEZGTUFYKDEsDQo+ID4gbWF4X3RpbGVfYXJl YV9zYl92YXJpZWQgLyB3aWRlc3RfdGlsZV9zYik7DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmICh0 aWxlX3Jvd3NfdG1wID09IGF2X2NsaXAodGlsZV9yb3dzX3RtcCwgKHByaXYtPnNiX3Jvd3MgDQo+ ID4gKyBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IgLSAxKSAvIHByaXYtPm1heF90aWxlX2hlaWdo dF9zYiwgcHJpdi0NCj4gPiA+c2Jfcm93cykpIHsNCj4gPiArICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHRpbGVfcm93c190bXA7IGkrKykNCj4gPiArICAgICAgICAgICAgICAgIHByaXYtPmhl aWdodF9pbl9zYnNfbWludXNfMVtpXSA9IChpICsgMSkgKiBwcml2LQ0KPiA+ID5zYl9yb3dzIC8g dGlsZV9yb3dzX3RtcCAtIGkgKiBwcml2LT5zYl9yb3dzIC8gdGlsZV9yb3dzX3RtcCAtIDE7DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICB9 DQo+ID4gKw0KPiA+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyAhPSB0aWxlX3Jvd3NfdG1wKSB7 DQo+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID0gdGlsZV9yb3dzX3RtcDsNCj4gPiArICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB0aWxlIHJvd3MsIGNv cnJlY3QNCj4gPiB0byAlZC5cbiIsIHByaXYtPnRpbGVfcm93cyk7DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgLyoqIGNoZWNrIGlmIHRpbGUgY29scy9yb3dzIGlzIHN1cHBvcnRlZCBieSBk cml2ZXIuICovDQo+ID4gKyAgICBpZiAocHJpdi0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVt X21pbnVzMSkgew0KPiA+ICsgICAgICAgIGlmICgocHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGls ZV9yb3dzIC0gMSkgPiBwcml2LQ0KPiA+ID5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWlu dXMxKSB7DQo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5z dXBwb3J0ZWQgdGlsZSBudW0gJWQgKg0KPiA+ICVkID0gJWQgYnkgZHJpdmVyLCAiDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIGxlc3MgdGhhbiAlZC5cbiIsIHByaXYtPnRpbGVf Y29scywNCj4gPiBwcml2LT50aWxlX3Jvd3MsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2 LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBw cml2LT5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWludXMxICsgMSk7DQo+ID4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTZXR0aW5nIHRpbGUgY29s cy9yb3dzIHRvDQo+ID4gJWQvJWQuXG4iLA0KPiA+ICsgICAgICAgICAgIHByaXYtPnRpbGVfY29s cywgcHJpdi0+dGlsZV9yb3dzKTsNCj4gPiArDQo+ID4gKyAgICAvKiogY2hlY2sgaWYgdGlsZSBn cm91cCBudW1iZXJzIGlzIHZhbGlkLiAqLw0KPiA+ICsgICAgaWYgKHByaXYtPnRpbGVfZ3JvdXBz ID4gcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzKSB7DQo+ID4gKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgdGlsZSBncm91cHMgbnVtYmVyDQo+ ID4gJWQsICINCj4gPiArICAgICAgICAiY29ycmVjdCB0byAlZC5cbiIsIHByaXYtPnRpbGVfZ3Jv dXBzLCBwcml2LT50aWxlX2NvbHMgKg0KPiA+IHByaXYtPnRpbGVfcm93cyk7DQo+ID4gKyAgICAg ICAgcHJpdi0+dGlsZV9ncm91cHMgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3M7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9zZXF1ZW5jZV9oZWFkZXIoQVZD b2RlY0NvbnRleHQNCj4gPiAqYXZjdHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwNCj4gPiBzaXplX3QgKmRhdGFfbGVu KQ0KPiA+ICt7DQo+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+ cHJpdl9kYXRhOw0KPiA+ICsNCj4gPiArICAgIG1lbWNweShkYXRhLCAmcHJpdi0+c2hfZGF0YSwg TUFYX1BBUkFNX0JVRkZFUl9TSVpFICoNCj4gPiBzaXplb2YoY2hhcikpOw0KPiA+ICsgICAgKmRh dGFfbGVuID0gcHJpdi0+c2hfZGF0YV9sZW47DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NlcXVl bmNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dA0KPiA+ICphdmN0eCkNCj4gPiArew0KPiA+ICsgICAg VkFBUElFbmNvZGVDb250ZXh0ICAgICAgICAgICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 DQo+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgICpwcml2ID0gYXZjdHgt PnByaXZfZGF0YTsNCj4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgICpzaF9v YnUgPSAmcHJpdi0+c2g7DQo+ID4gKyAgICBBVjFSYXdTZXF1ZW5jZUhlYWRlciAgICAgICAgICAg ICAgKnNoID0gJnNoX29idS0NCj4gPiA+b2J1LnNlcXVlbmNlX2hlYWRlcjsNCj4gPiArICAgIFZB RW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZmZXJBVjEgKnZzZXEgPSBjdHgtDQo+ID4gPmNvZGVjX3Nl cXVlbmNlX3BhcmFtczsNCj4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAgICAgICAg ICpvYnUgPSAmcHJpdi0+Y3VycmVudF9vYnU7DQo+ID4gKyAgICBjb25zdCBBVlBpeEZtdERlc2Ny aXB0b3IgKmRlc2M7DQo+ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgIG1lbXNldChz aF9vYnUsIDAsIHNpemVvZigqc2hfb2J1KSk7DQo+ID4gKyAgICBzaF9vYnUtPmhlYWRlci5vYnVf dHlwZSA9IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSOw0KPiA+ICsNCj4gPiArICAgIGRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KHByaXYtPmNvbW1vbi5pbnB1dF9mcmFtZXMtDQo+ID4gPnN3X2Zv cm1hdCk7DQo+ID4gKyAgICBhdl9hc3NlcnQwKGRlc2MpOw0KPiA+ICsNCj4gPiArICAgIHNoLT5z ZXFfcHJvZmlsZSAgPSBhdmN0eC0+cHJvZmlsZTsNCj4gPiArICAgIGlmICghc2gtPnNlcV9mb3Jj ZV9zY3JlZW5fY29udGVudF90b29scykNCj4gPiArICAgICAgICBzaC0+c2VxX2ZvcmNlX2ludGVn ZXJfbXYgPSBBVjFfU0VMRUNUX0lOVEVHRVJfTVY7DQo+ID4gKyAgICBzaC0+ZnJhbWVfd2lkdGhf Yml0c19taW51c18xICA9IGF2X2xvZzIoYXZjdHgtPndpZHRoKTsNCj4gPiArICAgIHNoLT5mcmFt ZV9oZWlnaHRfYml0c19taW51c18xID0gYXZfbG9nMihhdmN0eC0+aGVpZ2h0KTsNCj4gPiArICAg IHNoLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSAgID0gYXZjdHgtPndpZHRoIC0gMTsNCj4gPiAr ICAgIHNoLT5tYXhfZnJhbWVfaGVpZ2h0X21pbnVzXzEgID0gYXZjdHgtPmhlaWdodCAtIDE7DQo+ ID4gKyAgICBzaC0+c2VxX3RpZXJbMF0gICAgICAgICAgICAgICA9IHByaXYtPnRpZXI7DQo+ID4g KyAgICAvKiogZW5hYmxlIG9yZGVyIGhpbnQgYW5kIHJlc2VydmUgbWF4aW11bSA4IGJpdHMgZm9y IGl0IGJ5DQo+ID4gZGVmYXVsdC4gKi8NCj4gPiArICAgIHNoLT5lbmFibGVfb3JkZXJfaGludCAg ICAgICAgID0gMTsNCj4gPiArICAgIHNoLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSAgID0gNzsN Cj4gPiArDQo+ID4gKyAgICBzaC0+Y29sb3JfY29uZmlnID0gKEFWMVJhd0NvbG9yQ29uZmlnKSB7 DQo+ID4gKyAgICAgICAgLmhpZ2hfYml0ZGVwdGggICAgICAgICAgICAgICAgICA9IGRlc2MtPmNv bXBbMF0uZGVwdGggPT0gOA0KPiA+ID8gMCA6IDEsDQo+ID4gKyAgICAgICAgLmNvbG9yX3ByaW1h cmllcyAgICAgICAgICAgICAgICA9IGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMsDQo+ID4gKyAgICAg ICAgLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyAgICAgICA9IGF2Y3R4LT5jb2xvcl90cmMsDQo+ ID4gKyAgICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgICAgICAgICAgICA9IGF2Y3R4LT5jb2xv cnNwYWNlLA0KPiA+ICsgICAgICAgIC5jb2xvcl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgPSAo YXZjdHgtPmNvbG9yX3ByaW1hcmllcw0KPiA+ICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtDQo+ ID4gPmNvbG9yX3RyYyAgICAgICAhPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQgfHwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LQ0KPiA+ID5jb2xv cnNwYWNlICAgICAgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKSwNCj4gDQo+IFRoaXMgc2hvdWxk IGFsc28gc2V0IGNvbG9yX3JhbmdlOg0KPiANCj4gICAgICAgICAuY29sb3JfcmFuZ2UgICAgICAg ICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3JhbmdlID09DQo+IEFWQ09MX1JBTkdFX0pQRUcs DQoNCkFkZGVkIGluIFYyLiBUaGFua3MuDQoNCkZlaQ0KDQo+IA0KPiANCj4gPiArICAgICAgICAu c3Vic2FtcGxpbmdfeCAgICAgICAgICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfdywNCj4g PiArICAgICAgICAuc3Vic2FtcGxpbmdfeSAgICAgICAgICAgICAgICAgID0gZGVzYy0+bG9nMl9j aHJvbWFfaCwNCj4gPiArICAgIH07DQo+ID4gKw0KPiA+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCAh PSBGRl9MRVZFTF9VTktOT1dOKSB7DQo+ID4gKyAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0g PSBhdmN0eC0+bGV2ZWw7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIGNvbnN0IEFW MUxldmVsRGVzY3JpcHRvciAqbGV2ZWw7DQo+ID4gKyAgICAgICAgZmxvYXQgZnJhbWVyYXRlOw0K PiA+ICsNCj4gPiArICAgICAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYmIGF2Y3R4 LT5mcmFtZXJhdGUuZGVuID4gMCkNCj4gPiArICAgICAgICAgICAgZnJhbWVyYXRlID0gYXZjdHgt PmZyYW1lcmF0ZS5udW0gLyBhdmN0eC0NCj4gPiA+ZnJhbWVyYXRlLmRlbjsNCj4gPiArICAgICAg ICBlbHNlDQo+ID4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IDA7DQo+ID4gKw0KPiA+ICsgICAg ICAgIGxldmVsID0gZmZfYXYxX2d1ZXNzX2xldmVsKGF2Y3R4LT5iaXRfcmF0ZSwgcHJpdi0+dGll ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnN1cmZhY2Vf d2lkdGgsIGN0eC0NCj4gPiA+c3VyZmFjZV9oZWlnaHQsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9yb3dzICogcHJpdi0NCj4gPiA+dGlsZV9jb2xz LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29s cywgZnJhbWVyYXRlKTsNCj4gPiArICAgICAgICBpZiAobGV2ZWwpIHsNCj4gPiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGxldmVsICVzLlxuIiwNCj4g PiBsZXZlbC0+bmFtZSk7DQo+ID4gKyAgICAgICAgICAgIHNoLT5zZXFfbGV2ZWxfaWR4WzBdID0g bGV2ZWwtPmxldmVsX2lkeDsNCj4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiU3RyZWFtIHdpbGwgbm90IGNvbmZvcm0N Cj4gPiB0byAiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAiYW55IG5vcm1hbCBsZXZlbCwgdXNp bmcgbGV2ZWwgNi4zIGJ5DQo+ID4gZGVmYXVsdC5cbiIpOw0KPiA+ICsgICAgICAgICAgICBzaC0+ c2VxX2xldmVsX2lkeFswXSA9IDE5Ow0KPiA+ICsgICAgICAgICAgICBzaC0+c2VxX3RpZXJbMF0g PSAxOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAgIHZzZXEtPnNlcV9wcm9m aWxlICAgICAgICAgICAgID0gc2gtPnNlcV9wcm9maWxlOw0KPiA+ICsgICAgdnNlcS0+c2VxX2xl dmVsX2lkeCAgICAgICAgICAgPSBzaC0+c2VxX2xldmVsX2lkeFswXTsNCj4gPiArICAgIHZzZXEt PnNlcV90aWVyICAgICAgICAgICAgICAgID0gc2gtPnNlcV90aWVyWzBdOw0KPiA+ICsgICAgdnNl cS0+b3JkZXJfaGludF9iaXRzX21pbnVzXzEgPSBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7 DQo+ID4gKyAgICB2c2VxLT5pbnRyYV9wZXJpb2QgICAgICAgICAgICA9IGN0eC0+Z29wX3NpemU7 DQo+ID4gKyAgICB2c2VxLT5pcF9wZXJpb2QgICAgICAgICAgICAgICA9IGN0eC0+Yl9wZXJfcCAr IDE7DQo+ID4gKw0KPiA+ICsgICAgdnNlcS0+c2VxX2ZpZWxkcy5iaXRzLmVuYWJsZV9vcmRlcl9o aW50ID0gc2gtDQo+ID4gPmVuYWJsZV9vcmRlcl9oaW50Ow0KPiA+ICsNCj4gPiArICAgIGlmICgh KGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkpIHsNCj4gPiArICAgICAgICB2c2VxLT5iaXRz X3Blcl9zZWNvbmQgPSBjdHgtPnZhX2JpdF9yYXRlOw0KPiA+ICsgICAgICAgIHZzZXEtPnNlcV9m aWVsZHMuYml0cy5lbmFibGVfY2RlZiA9IHNoLT5lbmFibGVfY2RlZiA9IDE7DQo+ID4gKyAgICB9 DQo+ID4gKw0KPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KGF2Y3R4LCBv YnUsDQo+ID4gQVYxX09CVV9TRVFVRU5DRV9IRUFERVIsICZwcml2LT5zaCk7DQo+ID4gKyAgICBp ZiAocmV0IDwgMCkNCj4gPiArICAgICAgICBnb3RvIGVuZDsNCj4gPiArDQo+ID4gKyAgICByZXQg PSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX29idShhdmN0eCwgcHJpdi0+c2hfZGF0YSwgJnByaXYt DQo+ID4gPnNoX2RhdGFfbGVuLCBvYnUpOw0KPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ID4gKyAg ICAgICAgZ290byBlbmQ7DQo+ID4gKw0KPiA+ICtlbmQ6DQo+ID4gKyAgICBmZl9jYnNfZnJhZ21l bnRfcmVzZXQob2J1KTsNCj4gPiArICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWND b250ZXh0DQo+ID4gKmF2Y3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUNCj4gPiAqcGljKQ0KPiA+ICt7DQo+ ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJp dl9kYXRhOw0KPiA+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICAgICAgICAgICpocGljID0g cGljLT5wcml2X2RhdGE7DQo+ID4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpm aF9vYnUgPSAmcHJpdi0+Zmg7DQo+ID4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAg ICAgICAqZmggPSAmZmhfb2J1LQ0KPiA+ID5vYnUuZnJhbWUuaGVhZGVyOw0KPiA+ICsgICAgVkFF bmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxICp2cGljID0gcGljLQ0KPiA+ID5jb2RlY19waWN0 dXJlX3BhcmFtczsNCj4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAgICAgICAgKm9i dSA9ICZwcml2LT5jdXJyZW50X29idTsNCj4gPiArICAgIFZBQVBJRW5jb2RlUGljdHVyZSAgICAq cmVmOw0KPiA+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICpocmVmOw0KPiA+ICsgICAgaW50 IHNsb3QsIGk7DQo+ID4gKyAgICBpbnQgcmV0Ow0KPiA+ICsgICAgc3RhdGljIGNvbnN0IGludDhf dA0KPiA+IGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tBVjFfVE9UQUxfUkVGU19QRVJf RlJBTUVdID0NCj4gPiArICAgICAgICB7IDEsIDAsIDAsIDAsIC0xLCAwLCAtMSwgLTEgfTsNCj4g PiArDQo+ID4gKyAgICBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2YoKmZoX29idSkpOw0KPiA+ICsg ICAgcGljLT5uYl9zbGljZXMgPSBwcml2LT50aWxlX2dyb3VwczsNCj4gPiArICAgIGZoX29idS0+ aGVhZGVyLm9idV90eXBlID0gQVYxX09CVV9GUkFNRV9IRUFERVI7DQo+ID4gKyAgICBmaF9vYnUt PmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQgPSAxOw0KPiA+ICsNCj4gPiArICAgIHN3aXRjaCAo cGljLT50eXBlKSB7DQo+ID4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9JRFI6DQo+ID4gKyAgICAg ICAgYXZfYXNzZXJ0MChwaWMtPm5iX3JlZnNbMF0gPT0gMCB8fCBwaWMtPm5iX3JlZnNbMV0pOw0K PiA+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0tFWTsNCj4gPiArICAgICAg ICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4RkY7DQo+ID4gKyAgICAgICAgZmgtPmJhc2Vf cV9pZHggPSBwcml2LT5xX2lkeF9pZHI7DQo+ID4gKyAgICAgICAgaHBpYy0+c2xvdCA9IDA7DQo+ ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBwaWMtPmRpc3BsYXlfb3JkZXI7DQo+ ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9QOg0KPiA+ICsg ICAgICAgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdKTsNCj4gPiArICAgICAgICBmaC0+ZnJh bWVfdHlwZSA9IEFWMV9GUkFNRV9JTlRFUjsNCj4gPiArICAgICAgICBmaC0+YmFzZV9xX2lkeCA9 IHByaXYtPnFfaWR4X3A7DQo+ID4gKyAgICAgICAgcmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJf cmVmc1swXSAtIDFdOw0KPiA+ICsgICAgICAgIGhyZWYgPSByZWYtPnByaXZfZGF0YTsNCj4gPiAr ICAgICAgICBocGljLT5zbG90ID0gIWhyZWYtPnNsb3Q7DQo+ID4gKyAgICAgICAgaHBpYy0+bGFz dF9pZHJfZnJhbWUgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4gPiArICAgICAgICBmaC0+cmVm cmVzaF9mcmFtZV9mbGFncyA9IDEgPDwgaHBpYy0+c2xvdDsNCj4gPiArDQo+ID4gKyAgICAgICAg LyoqIHNldCB0aGUgbmVhcmVzdCBmcmFtZSBpbiBMMCBhcyBhbGwgcmVmZXJlbmNlIGZyYW1lLiAq Lw0KPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykg ew0KPiA+ICsgICAgICAgICAgICBmaC0+cmVmX2ZyYW1lX2lkeFtpXSA9IGhyZWYtPnNsb3Q7DQo+ ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IGhyZWYt PnNsb3Q7DQo+ID4gKyAgICAgICAgZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3RdID0gcmVm LT5kaXNwbGF5X29yZGVyIC0NCj4gPiBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4gPiArICAgICAg ICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPQ0KPiA+IEFWMV9S RUZfRlJBTUVfTEFTVDsNCj4gPiArDQo+ID4gKyAgICAgICAgLyoqIHNldCB0aGUgMm5kIG5lYXJl c3QgZnJhbWUgaW4gTDAgYXMgR29sZGVuIGZyYW1lLiAqLw0KPiA+ICsgICAgICAgIGlmIChwaWMt Pm5iX3JlZnNbMF0gPiAxKSB7DQo+ID4gKyAgICAgICAgICAgIHJlZiA9IHBpYy0+cmVmc1swXVtw aWMtPm5iX3JlZnNbMF0gLSAyXTsNCj4gPiArICAgICAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9k YXRhOw0KPiA+ICsgICAgICAgICAgICBmaC0+cmVmX2ZyYW1lX2lkeFszXSA9IGhyZWYtPnNsb3Q7 DQo+ID4gKyAgICAgICAgICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ ZGlzcGxheV9vcmRlciAtDQo+ID4gaHJlZi0+bGFzdF9pZHJfZnJhbWU7DQo+ID4gKyAgICAgICAg ICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MSA9DQo+ID4gQVYx X1JFRl9GUkFNRV9HT0xERU47DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVfQjoNCj4gPiArICAgICAgICBhdl9hc3NlcnQwKHBp Yy0+bmJfcmVmc1swXSAmJiBwaWMtPm5iX3JlZnNbMV0pOw0KPiA+ICsgICAgICAgIGZoLT5mcmFt ZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOw0KPiA+ICsgICAgICAgIGZoLT5iYXNlX3FfaWR4ID0g cHJpdi0+cV9pZHhfYjsNCj4gPiArICAgICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4 MDsNCj4gPiArICAgICAgICBmaC0+cmVmZXJlbmNlX3NlbGVjdCA9IDE7DQo+ID4gKw0KPiA+ICsg ICAgICAgIC8qKiBCIGZyYW1lIHdpbGwgbm90IGJlIHJlZmVyZW5jZWQsIGRpc2FibGUgaXRzIHJl Y29uDQo+ID4gZnJhbWUuICovDQo+ID4gKyAgICAgICAgdnBpYy0+cGljdHVyZV9mbGFncy5iaXRz LmRpc2FibGVfZnJhbWVfcmVjb24gPSAxOw0KPiA+ICsNCj4gPiArICAgICAgICAvKiogVXNlIExB U1RfRlJBTUUgYW5kIEJXRFJFRl9GUkFNRSBmb3IgcmVmZXJlbmNlLiAqLw0KPiA+ICsgICAgICAg IHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MCA9DQo+ID4gQVYxX1JF Rl9GUkFNRV9MQVNUOw0KPiA+ICsgICAgICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wxLmZpZWxk cy5zZWFyY2hfaWR4MCA9DQo+ID4gQVYxX1JFRl9GUkFNRV9CV0RSRUY7DQo+ID4gKw0KPiA+ICsg ICAgICAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHBpYy0+cmVmc1swXVtwaWMt DQo+ID4gPm5iX3JlZnNbMF0gLSAxXTsNCj4gPiArICAgICAgICBocmVmICAgICAgICAgICAgICAg ICAgICAgICAgICAgPSByZWYtPnByaXZfZGF0YTsNCj4gPiArICAgICAgICBocGljLT5sYXN0X2lk cl9mcmFtZSAgICAgICAgICAgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4gPiArICAgICAgICBm aC0+cHJpbWFyeV9yZWZfZnJhbWUgICAgICAgICAgPSBocmVmLT5zbG90Ow0KPiA+ICsgICAgICAg IGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtDQo+ ID4gaHJlZi0+bGFzdF9pZHJfZnJhbWU7DQo+ID4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFW MV9SRUZfRlJBTUVfR09MREVOOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFt ZV9pZHhbaV0gPSBocmVmLT5zbG90Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcGljLT5yZWZzWzFdW3BpYy0NCj4g PiA+bmJfcmVmc1sxXSAtIDFdOw0KPiA+ICsgICAgICAgIGhyZWYgICAgICAgICAgICAgICAgICAg ICAgICAgICA9IHJlZi0+cHJpdl9kYXRhOw0KPiA+ICsgICAgICAgIGZoLT5yZWZfb3JkZXJfaGlu dFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtDQo+ID4gaHJlZi0+bGFzdF9pZHJf ZnJhbWU7DQo+ID4gKyAgICAgICAgZm9yIChpID0gQVYxX1JFRl9GUkFNRV9HT0xERU47IGkgPCBB VjFfUkVGU19QRVJfRlJBTUU7DQo+ID4gaSsrKSB7DQo+ID4gKyAgICAgICAgICAgIGZoLT5yZWZf ZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAg YnJlYWs7DQo+ID4gKyAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgIGF2X2Fzc2VydDAoMCAmJiAi aW52YWxpZCBwaWN0dXJlIHR5cGUiKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBmaC0+ c2hvd19mcmFtZSAgICAgICAgICAgICAgICA9IHBpYy0+ZGlzcGxheV9vcmRlciA8PSBwaWMtDQo+ ID4gPmVuY29kZV9vcmRlcjsNCj4gPiArICAgIGZoLT5zaG93YWJsZV9mcmFtZSAgICAgICAgICAg ID0gZmgtPmZyYW1lX3R5cGUgIT0NCj4gPiBBVjFfRlJBTUVfS0VZOw0KPiA+ICsgICAgZmgtPmZy YW1lX3dpZHRoX21pbnVzXzEgICAgICAgPSBhdmN0eC0+d2lkdGggLSAxOw0KPiA+ICsgICAgZmgt PmZyYW1lX2hlaWdodF9taW51c18xICAgICAgPSBhdmN0eC0+aGVpZ2h0IC0gMTsNCj4gPiArICAg IGZoLT5yZW5kZXJfd2lkdGhfbWludXNfMSAgICAgID0gZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7 DQo+ID4gKyAgICBmaC0+cmVuZGVyX2hlaWdodF9taW51c18xICAgICA9IGZoLT5mcmFtZV9oZWln aHRfbWludXNfMTsNCj4gPiArICAgIGZoLT5vcmRlcl9oaW50ICAgICAgICAgICAgICAgID0gcGlj LT5kaXNwbGF5X29yZGVyIC0gaHBpYy0NCj4gPiA+bGFzdF9pZHJfZnJhbWU7DQo+ID4gKyAgICBm aC0+dGlsZV9jb2xzICAgICAgICAgICAgICAgICA9IHByaXYtPnRpbGVfY29sczsNCj4gPiArICAg IGZoLT50aWxlX3Jvd3MgICAgICAgICAgICAgICAgID0gcHJpdi0+dGlsZV9yb3dzOw0KPiA+ICsg ICAgZmgtPnRpbGVfY29sc19sb2cyICAgICAgICAgICAgPSBwcml2LT50aWxlX2NvbHNfbG9nMjsN Cj4gPiArICAgIGZoLT50aWxlX3Jvd3NfbG9nMiAgICAgICAgICAgID0gcHJpdi0+dGlsZV9yb3dz X2xvZzI7DQo+ID4gKyAgICBmaC0+dW5pZm9ybV90aWxlX3NwYWNpbmdfZmxhZyA9IHByaXYtPnVu aWZvcm1fdGlsZTsNCj4gPiArICAgIGZoLT50aWxlX3NpemVfYnl0ZXNfbWludXMxICAgID0gcHJp di0NCj4gPiA+YXR0cl9leHQyLmJpdHMudGlsZV9zaXplX2J5dGVzX21pbnVzMTsNCj4gPiArICAg IGZoLT5yZWR1Y2VkX3R4X3NldCAgICAgICAgICAgID0gMTsNCj4gPiArDQo+ID4gKyAgICAvKiog aWdub3JlIE9OTFlfNHg0IG1vZGUgZm9yIGNvZGVkbG9zc2xlc3MgaXMgbm90IGZ1bGx5DQo+ID4g aW1wbGVtZW50ZWQuICovDQo+ID4gKyAgICBpZiAocHJpdi0+YXR0cl9leHQyLmJpdHMudHhfbW9k ZV9zdXBwb3J0ICYgMHgwNCkNCj4gPiArICAgICAgICBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RF X1NFTEVDVDsNCj4gPiArICAgIGVsc2UgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVf c3VwcG9ydCAmIDB4MDIpDQo+ID4gKyAgICAgICAgZmgtPnR4X21vZGUgPSBBVjFfVFhfTU9ERV9M QVJHRVNUOw0KPiA+ICsgICAgZWxzZQ0KPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7DQo+ID4gKw0KPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IGZoLT50aWxlX2NvbHM7IGkrKykN Cj4gPiArICAgICAgICBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSB2cGljLQ0KPiA+ID53 aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ldOw0K PiA+ICsNCj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBmaC0+dGlsZV9yb3dzOyBpKyspDQo+ID4g KyAgICAgICAgZmgtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXSA9IHZwaWMtDQo+ID4gPmhlaWdo dF9pbl9zYnNfbWludXNfMVtpXSA9IHByaXYtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXTsNCj4g PiArDQo+ID4gKyAgICBtZW1jcHkoZmgtPmxvb3BfZmlsdGVyX3JlZl9kZWx0YXMsDQo+ID4gZGVm YXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLA0KPiA+ICsgICAgICAgICAgIEFWMV9UT1RBTF9S RUZTX1BFUl9GUkFNRSAqIHNpemVvZihpbnQ4X3QpKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoZmgt PmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0+c2hvd19mcmFtZSkgew0KPiA+ICsg ICAgICAgIGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IDE7DQo+ID4gKyAgICB9DQo+ID4gKw0K PiA+ICsgICAgaWYgKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgfHwgZmgtDQo+ID4g PmVycm9yX3Jlc2lsaWVudF9tb2RlKQ0KPiA+ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFt ZSA9IEFWMV9QUklNQVJZX1JFRl9OT05FOw0KPiA+ICsNCj4gPiArICAgIHZwaWMtPmJhc2VfcWlu ZGV4ICAgICAgICAgID0gZmgtPmJhc2VfcV9pZHg7DQo+ID4gKyAgICB2cGljLT5mcmFtZV93aWR0 aF9taW51c18xICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOw0KPiA+ICsgICAgdnBpYy0+ZnJh bWVfaGVpZ2h0X21pbnVzXzEgPSBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzE7DQo+ID4gKyAgICB2 cGljLT5wcmltYXJ5X3JlZl9mcmFtZSAgICA9IGZoLT5wcmltYXJ5X3JlZl9mcmFtZTsNCj4gPiAr ICAgIHZwaWMtPnJlY29uc3RydWN0ZWRfZnJhbWUgID0gcGljLT5yZWNvbl9zdXJmYWNlOw0KPiA+ ICsgICAgdnBpYy0+Y29kZWRfYnVmICAgICAgICAgICAgPSBwaWMtPm91dHB1dF9idWZmZXI7DQo+ ID4gKyAgICB2cGljLT50aWxlX2NvbHMgICAgICAgICAgICA9IGZoLT50aWxlX2NvbHM7DQo+ID4g KyAgICB2cGljLT50aWxlX3Jvd3MgICAgICAgICAgICA9IGZoLT50aWxlX3Jvd3M7DQo+ID4gKyAg ICB2cGljLT5vcmRlcl9oaW50ICAgICAgICAgICA9IGZoLT5vcmRlcl9oaW50Ow0KPiA+ICsjaWYg VkFfQ0hFQ0tfVkVSU0lPTigxLCAxNSwgMCkNCj4gPiArICAgIHZwaWMtPnJlZnJlc2hfZnJhbWVf ZmxhZ3MgID0gZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3M7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4g PiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lbmFibGVfZnJhbWVfb2J1ICAgICA9IDA7 DQo+ID4gKyAgICB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMuZnJhbWVfdHlwZSAgICAgICAgICAg PSBmaC0NCj4gPiA+ZnJhbWVfdHlwZTsNCj4gPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0 cy5yZWR1Y2VkX3R4X3NldCAgICAgICA9IGZoLQ0KPiA+ID5yZWR1Y2VkX3R4X3NldDsNCj4gPiAr ICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IGZoLQ0K PiA+ID5lcnJvcl9yZXNpbGllbnRfbW9kZTsNCj4gPiArDQo+ID4gKyAgICAvKiogbGV0IGRyaXZl ciBkZWNpZGUgdG8gdXNlIHNpbmdsZSBvciBjb21wb3VuZCByZWZlcmVuY2UNCj4gPiBwcmVkaWN0 aW9uIG1vZGUuICovDQo+ID4gKyAgICB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3MuYml0cy5yZWZl cmVuY2VfbW9kZSA9IGZoLQ0KPiA+ID5yZWZlcmVuY2Vfc2VsZWN0ID8gMiA6IDA7DQo+ID4gKyAg ICB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3MuYml0cy50eF9tb2RlID0gZmgtPnR4X21vZGU7DQo+ ID4gKw0KPiA+ICsgICAgdnBpYy0+dGlsZV9ncm91cF9vYnVfaGRyX2luZm8uYml0cy5vYnVfaGFz X3NpemVfZmllbGQgPSAxOw0KPiA+ICsNCj4gPiArICAgIC8qKiBzZXQgcmVmZXJlbmNlLiAqLw0K PiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKQ0KPiA+ICsg ICAgICAgIHZwaWMtPnJlZl9mcmFtZV9pZHhbaV0gPSBmaC0+cmVmX2ZyYW1lX2lkeFtpXTsNCj4g PiArDQo+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModnBpYy0+cmVmZXJl bmNlX2ZyYW1lcyk7IGkrKykNCj4gPiArICAgICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW2ld ID0gVkFfSU5WQUxJRF9TVVJGQUNFOw0KPiA+ICsNCj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBN QVhfUkVGRVJFTkNFX0xJU1RfTlVNOyBpKyspIHsNCj4gPiArICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsgaisrKSB7DQo+ID4gKyAgICAgICAgICAgIFZBQVBJRW5j b2RlUGljdHVyZSAqcmVmX3BpYyA9IHBpYy0+cmVmc1tpXVtqXTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgIHNsb3QgPSAoKFZBQVBJRW5jb2RlQVYxUGljdHVyZSopcmVmX3BpYy0+cHJpdl9kYXRh KS0NCj4gPiA+c2xvdDsNCj4gPiArICAgICAgICAgICAgYXZfYXNzZXJ0MCh2cGljLT5yZWZlcmVu Y2VfZnJhbWVzW3Nsb3RdID09DQo+ID4gVkFfSU5WQUxJRF9TVVJGQUNFKTsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgIHZwaWMtPnJlZmVyZW5jZV9mcmFtZXNbc2xvdF0gPSByZWZfcGljLT5yZWNv bl9zdXJmYWNlOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAv KiogcGFjayBmcmFtZSBoZWFkZXIsIGFuZCBzZXQgdmEgcGFyYW1zIG9mZnNldCBsaWtlDQo+ID4g Yml0X29mZnNldF9xaW5kZXggZXRjLiAqLw0KPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2 MV93cml0ZV9mcmFtZV9oZWFkZXIoYXZjdHgsIHBpYywgcHJpdi0NCj4gPiA+ZmhfZGF0YSwgJnBy aXYtPmZoX2RhdGFfbGVuKTsNCj4gPiArICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgIGdv dG8gZW5kOw0KPiA+ICsNCj4gPiArZW5kOg0KPiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0 KG9idSk7DQo+ID4gKyAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9zbGljZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQNCj4g PiAqYXZjdHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWQUFQSUVuY29kZVBpY3R1cmUNCj4gPiAqcGljLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVTbGljZQ0KPiA+ICpzbGlj ZSkNCj4gPiArew0KPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAgKnByaXYgPSBh dmN0eC0+cHJpdl9kYXRhOw0KPiA+ICsgICAgVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEgICp2c2xp Y2UgPSBzbGljZS0+Y29kZWNfc2xpY2VfcGFyYW1zOw0KPiA+ICsgICAgQ29kZWRCaXRzdHJlYW1B VjFDb250ZXh0ICAqY2JjdHggPSBwcml2LT5jYmMtPnByaXZfZGF0YTsNCj4gPiArICAgIGludCBk aXY7DQo+ID4gKw0KPiA+ICsgICAgLyoqIFNldCB0aWxlIGdyb3VwIGluZm8uICovDQo+ID4gKyAg ICBkaXYgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MgLyBwcml2LT50aWxlX2dy b3VwczsNCj4gPiArICAgIHZzbGljZS0+dGdfc3RhcnQgPSBzbGljZS0+aW5kZXggKiBkaXY7DQo+ ID4gKyAgICBpZiAoc2xpY2UtPmluZGV4ID09IChwcml2LT50aWxlX2dyb3VwcyAtIDEpKSB7DQo+ ID4gKyAgICAgICAgdnNsaWNlLT50Z19lbmQgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxl X3Jvd3MgLSAxOw0KPiA+ICsgICAgICAgIGNiY3R4LT5zZWVuX2ZyYW1lX2hlYWRlciA9IDA7DQo+ ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIHZzbGljZS0+dGdfZW5kID0gKHNsaWNlLT5p bmRleCArIDEpICogZGl2IC0gMTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRl X3BpY3R1cmVfaGVhZGVyKEFWQ29kZWNDb250ZXh0DQo+ID4gKmF2Y3R4LA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0 dXINCj4gPiBlICpwaWMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpkYXRhLA0KPiA+IHNpemVfdCAqZGF0YV9sZW4pDQo+ID4gK3sN Cj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOw0KPiA+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICAgKm9idSA9ICZwcml2LT5j dXJyZW50X29idTsNCj4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICpmaF9vYnUgPSAm cHJpdi0+Zmg7DQo+ID4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAqcmVwX2ZoID0gJmZo X29idS0+b2J1LmZyYW1lX2hlYWRlcjsNCj4gPiArICAgIFZBQVBJRW5jb2RlQVYxUGljdHVyZSAq aHJlZjsNCj4gPiArICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgIHBpYy0+dGFpbF9z aXplID0gMDsNCj4gPiArICAgIC8qKiBQYWNrIHJlcGVhdCBmcmFtZSBoZWFkZXIuICovDQo+ID4g KyAgICBpZiAocGljLT5kaXNwbGF5X29yZGVyID4gcGljLT5lbmNvZGVfb3JkZXIpIHsNCj4gPiAr ICAgICAgICBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2YoKmZoX29idSkpOw0KPiA+ICsgICAgICAg IGhyZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMV0tPnByaXZfZGF0YTsNCj4g PiArICAgICAgICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfRlJBTUVfSEVBREVS Ow0KPiA+ICsgICAgICAgIGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCA9IDE7DQo+ ID4gKw0KPiA+ICsgICAgICAgIHJlcF9maC0+c2hvd19leGlzdGluZ19mcmFtZSAgID0gMTsNCj4g PiArICAgICAgICByZXBfZmgtPmZyYW1lX3RvX3Nob3dfbWFwX2lkeCA9IGhyZWYtPnNsb3QgPT0g MDsNCj4gPiArICAgICAgICByZXBfZmgtPmZyYW1lX3R5cGUgICAgICAgICAgICA9IEFWMV9GUkFN RV9JTlRFUjsNCj4gPiArICAgICAgICByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEgICA9IGF2 Y3R4LT53aWR0aCAtIDE7DQo+ID4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV9oZWlnaHRfbWludXNf MSAgPSBhdmN0eC0+aGVpZ2h0IC0gMTsNCj4gPiArICAgICAgICByZXBfZmgtPnJlbmRlcl93aWR0 aF9taW51c18xICA9IHJlcF9maC0NCj4gPiA+ZnJhbWVfd2lkdGhfbWludXNfMTsNCj4gPiArICAg ICAgICByZXBfZmgtPnJlbmRlcl9oZWlnaHRfbWludXNfMSA9IHJlcF9maC0NCj4gPiA+ZnJhbWVf aGVpZ2h0X21pbnVzXzE7DQo+ID4gKw0KPiA+ICsgICAgICAgIHJldCA9IHZhYXBpX2VuY29kZV9h djFfd3JpdGVfZnJhbWVfaGVhZGVyKGF2Y3R4LCBwaWMsIHBpYy0NCj4gPiA+dGFpbF9kYXRhLCAm cGljLT50YWlsX3NpemUpOw0KPiA+ICsgICAgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAg ICAgICBnb3RvIGVuZDsNCj4gPiArDQo+ID4gKyAgICAgICAgcGljLT50YWlsX3NpemUgLz0gODsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBtZW1jcHkoZGF0YSwgJnByaXYtPmZoX2RhdGEs IE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqDQo+ID4gc2l6ZW9mKGNoYXIpKTsNCj4gPiArICAgICpk YXRhX2xlbiA9IHByaXYtPmZoX2RhdGFfbGVuOw0KPiA+ICsNCj4gPiArZW5kOg0KPiA+ICsgICAg ZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7DQo+ID4gKyAgICByZXR1cm4gcmV0Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgVkFBUElFbmNvZGVQcm9maWxlIHZhYXBpX2VuY29k ZV9hdjFfcHJvZmlsZXNbXSA9IHsNCj4gPiArICAgIHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgIDgs IDMsIDEsIDEsIFZBUHJvZmlsZUFWMVByb2ZpbGUwIH0sDQo+ID4gKyAgICB7IEZGX1BST0ZJTEVf QVYxX01BSU4sIDEwLCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQcm9maWxlMCB9LA0KPiA+ICsgICAg eyBGRl9QUk9GSUxFX1VOS05PV04gfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0 IFZBQVBJRW5jb2RlVHlwZSB2YWFwaV9lbmNvZGVfdHlwZV9hdjEgPSB7DQo+ID4gKyAgICAucHJv ZmlsZXMgICAgICAgID0gdmFhcGlfZW5jb2RlX2F2MV9wcm9maWxlcywNCj4gPiArICAgIC5mbGFn cyAgICAgICAgICAgPSBGTEFHX0JfUElDVFVSRVMsDQo+ID4gKyAgICAuZGVmYXVsdF9xdWFsaXR5 ID0gMjUsDQo+ID4gKyAgICAuY29uZmlndXJlICAgICAgID0gJnZhYXBpX2VuY29kZV9hdjFfY29u ZmlndXJlLA0KPiA+ICsNCj4gPiArICAgIC5zZXF1ZW5jZV9oZWFkZXJfdHlwZSAgPSBWQUVuY1Bh Y2tlZEhlYWRlclNlcXVlbmNlLA0KPiA+ICsgICAgLnNlcXVlbmNlX3BhcmFtc19zaXplICA9DQo+ ID4gc2l6ZW9mKFZBRW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZmZXJBVjEpLA0KPiA+ICsgICAgLmlu aXRfc2VxdWVuY2VfcGFyYW1zICA9DQo+ID4gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9zZXF1ZW5j ZV9wYXJhbXMsDQo+ID4gKyAgICAud3JpdGVfc2VxdWVuY2VfaGVhZGVyID0NCj4gPiAmdmFhcGlf ZW5jb2RlX2F2MV93cml0ZV9zZXF1ZW5jZV9oZWFkZXIsDQo+ID4gKw0KPiA+ICsgICAgLnBpY3R1 cmVfcHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVkFBUElFbmNvZGVBVjFQaWN0dXJlKSwNCj4gPiAr ICAgIC5waWN0dXJlX2hlYWRlcl90eXBlICAgID0gVkFFbmNQYWNrZWRIZWFkZXJQaWN0dXJlLA0K PiA+ICsgICAgLnBpY3R1cmVfcGFyYW1zX3NpemUgICAgPQ0KPiA+IHNpemVvZihWQUVuY1BpY3R1 cmVQYXJhbWV0ZXJCdWZmZXJBVjEpLA0KPiA+ICsgICAgLmluaXRfcGljdHVyZV9wYXJhbXMgICAg PQ0KPiA+ICZ2YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9wYXJhbXMsDQo+ID4gKyAgICAu d3JpdGVfcGljdHVyZV9oZWFkZXIgICA9DQo+ID4gJnZhYXBpX2VuY29kZV9hdjFfd3JpdGVfcGlj dHVyZV9oZWFkZXIsDQo+ID4gKw0KPiA+ICsgICAgLnNsaWNlX3BhcmFtc19zaXplID0gc2l6ZW9m KFZBRW5jVGlsZUdyb3VwQnVmZmVyQVYxKSwNCj4gPiArICAgIC5pbml0X3NsaWNlX3BhcmFtcyA9 ICZ2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2xpY2VfcGFyYW1zLA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdChBVkNvZGVjQ29udGV4 dCAqYXZjdHgpDQo+ID4gK3sNCj4gPiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCAgICAgICpjdHgg PSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAqcHJp diA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ID4gKyAgICBWQUNvbmZpZ0F0dHJpYiBhdHRyOw0KPiA+ ICsgICAgVkFTdGF0dXMgdmFzOw0KPiA+ICsgICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICBj dHgtPmNvZGVjID0gJnZhYXBpX2VuY29kZV90eXBlX2F2MTsNCj4gPiArDQo+ID4gKyAgICBjdHgt PmRlc2lyZWRfcGFja2VkX2hlYWRlcnMgPQ0KPiA+ICsgICAgICAgIFZBX0VOQ19QQUNLRURfSEVB REVSX1NFUVVFTkNFIHwNCj4gPiArICAgICAgICBWQV9FTkNfUEFDS0VEX0hFQURFUl9QSUNUVVJF Ow0KPiA+ICsNCj4gPiArICAgIGlmIChhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX1VOS05P V04pDQo+ID4gKyAgICAgICAgYXZjdHgtPnByb2ZpbGUgPSBwcml2LT5wcm9maWxlOw0KPiA+ICsg ICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBGRl9MRVZFTF9VTktOT1dOKQ0KPiA+ICsgICAgICAgIGF2 Y3R4LT5sZXZlbCA9IHByaXYtPmxldmVsOw0KPiA+ICsNCj4gPiArICAgIGlmIChhdmN0eC0+bGV2 ZWwgIT0gRkZfTEVWRUxfVU5LTk9XTiAmJiBhdmN0eC0+bGV2ZWwgJiB+MHgxZikNCj4gPiB7DQo+ ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGxldmVsICVk XG4iLCBhdmN0eC0NCj4gPiA+bGV2ZWwpOw0KPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0ID0gZmZfdmFhcGlfZW5jb2Rl X2luaXQoYXZjdHgpOw0KPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ID4gKyAgICAgICAgcmV0dXJu IHJldDsNCj4gPiArDQo+ID4gKyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMTsN Cj4gPiArICAgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX2VudHJ5cG9pbnQs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIsIDEpOw0KPiA+ICsg ICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykgew0KPiA+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICINCj4gPiArICAgICAgICAgICAg ICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsDQo+ID4gdmFFcnJvclN0cih2 YXMpKTsNCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsNCj4gPiArICAgIH0g ZWxzZSBpZiAoYXR0ci52YWx1ZSA9PSBWQV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgew0KPiA+ICsg ICAgICAgIHByaXYtPmF0dHIudmFsdWUgPSAwOw0KPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJBdHRyaWJ1dGUgdHlwZTolZCBpcyBub3QgIg0KPiA+ICsgICAgICAg ICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ ID4gKyAgICAgICAgcHJpdi0+YXR0ci52YWx1ZSA9IGF0dHIudmFsdWU7DQo+ID4gKyAgICB9DQo+ ID4gKw0KPiA+ICsgICAgYXR0ci50eXBlID0gVkFDb25maWdBdHRyaWJFbmNBVjFFeHQxOw0KPiA+ ICsgICAgdmFzID0gdmFHZXRDb25maWdBdHRyaWJ1dGVzKGN0eC0+aHdjdHgtPmRpc3BsYXksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9wcm9maWxlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfZW50cnlwb2ludCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0ciwgMSk7DQo+ID4gKyAgICBp ZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTKSB7DQo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gcXVlcnkgIg0KPiA+ICsgICAgICAgICAgICAgICAi Y29uZmlnIGF0dHJpYnV0ZTogJWQgKCVzKS5cbiIsIHZhcywNCj4gPiB2YUVycm9yU3RyKHZhcykp Ow0KPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KPiA+ICsgICAgfSBlbHNl IGlmIChhdHRyLnZhbHVlID09IFZBX0FUVFJJQl9OT1RfU1VQUE9SVEVEKSB7DQo+ID4gKyAgICAg ICAgcHJpdi0+YXR0cl9leHQxLnZhbHVlID0gMDsNCj4gPiArICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90ICINCj4gPiArICAgICAg ICAgICAgICAgInN1cHBvcnRlZC5cbiIsIGF0dHIudHlwZSk7DQo+ID4gKyAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgIHByaXYtPmF0dHJfZXh0MS52YWx1ZSA9IGF0dHIudmFsdWU7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgLyoqIFRoaXMgYXR0ciBwcm92aWRlcyBlc3NlbnRpYWwgaW5k aWNhdG9ycywgcmV0dXJuIGVycm9yIGlmDQo+ID4gbm90IHN1cHBvcnQuICovDQo+ID4gKyAgICBh dHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMUV4dDI7DQo+ID4gKyAgICB2YXMgPSB2YUdl dENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX3Byb2ZpbGUsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZhdHRyLCAxKTsNCj4gPiArICAgIGlmICh2YXMgIT0gVkFfU1RB VFVTX1NVQ0NFU1MgfHwgYXR0ci52YWx1ZSA9PQ0KPiA+IFZBX0FUVFJJQl9OT1RfU1VQUE9SVEVE KSB7DQo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8g cXVlcnkgIg0KPiA+ICsgICAgICAgICAgICAgICAiY29uZmlnIGF0dHJpYnV0ZTogJWQgKCVzKS5c biIsIHZhcywNCj4gPiB2YUVycm9yU3RyKHZhcykpOw0KPiA+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBwcml2LT5hdHRy X2V4dDIudmFsdWUgPSBhdHRyLnZhbHVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJl dCA9IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoYXZjdHgpOw0KPiA+ICsgICAgaWYgKHJldCA8 IDApDQo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICByZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFf Y2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KPiA+ICt7DQo+ID4gKyAgICBWQUFQSUVuY29k ZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ICsNCj4gPiArICAgIGZm X2Nic19mcmFnbWVudF9mcmVlKCZwcml2LT5jdXJyZW50X29idSk7DQo+ID4gKyAgICBmZl9jYnNf Y2xvc2UoJnByaXYtPmNiYyk7DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIGZmX3ZhYXBpX2VuY29k ZV9jbG9zZShhdmN0eCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9m ZnNldG9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCwgeCkNCj4gPiArI2RlZmluZSBGTEFHUyAoQVZf T1BUX0ZMQUdfVklERU9fUEFSQU0gfA0KPiA+IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQ0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZhYXBpX2VuY29kZV9hdjFfb3B0aW9u c1tdID0gew0KPiA+ICsgICAgVkFBUElfRU5DT0RFX0NPTU1PTl9PUFRJT05TLA0KPiA+ICsgICAg VkFBUElfRU5DT0RFX1JDX09QVElPTlMsDQo+ID4gKyAgICB7ICJwcm9maWxlIiwgIlNldCBwcm9m aWxlIChzZXFfcHJvZmlsZSkiLA0KPiA+ICsgICAgICBPRkZTRVQocHJvZmlsZSksIEFWX09QVF9U WVBFX0lOVCwNCj4gPiArICAgICAgeyAuaTY0ID0gRkZfUFJPRklMRV9VTktOT1dOIH0sIEZGX1BS T0ZJTEVfVU5LTk9XTiwgMHhmZiwNCj4gPiBGTEFHUywgInByb2ZpbGUiIH0sDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUpICBuYW1lLCBOVUxMLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgXA0KPiA+ICsgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsICJwcm9m aWxlIg0KPiA+ICsgICAgeyBQUk9GSUxFKCJtYWluIiwgICAgICAgICAgICAgICBGRl9QUk9GSUxF X0FWMV9NQUlOKSB9LA0KPiA+ICsgICAgeyBQUk9GSUxFKCJoaWdoIiwgICAgICAgICAgICAgICBG Rl9QUk9GSUxFX0FWMV9ISUdIKSB9LA0KPiA+ICsgICAgeyBQUk9GSUxFKCJwcm9mZXNzaW9uYWwi LCAgICAgICBGRl9QUk9GSUxFX0FWMV9QUk9GRVNTSU9OQUwpDQo+ID4gfSwNCj4gPiArI3VuZGVm IFBST0ZJTEUNCj4gPiArDQo+ID4gKyAgICB7ICJ0aWVyIiwgIlNldCB0aWVyIChzZXFfdGllciki LA0KPiA+ICsgICAgICBPRkZTRVQodGllciksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9 LCAwLCAxLCBGTEFHUywNCj4gPiAidGllciIgfSwNCj4gPiArICAgIHsgIm1haW4iLCBOVUxMLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwNCj4gPiArICAgICAgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFH UywgInRpZXIiIH0sDQo+ID4gKyAgICB7ICJoaWdoIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsDQo+ID4gKyAgICAgIHsgLmk2NCA9IDEgfSwgMCwgMCwgRkxBR1MsICJ0aWVyIiB9LA0KPiA+ ICsgICAgeyAibGV2ZWwiLCAiU2V0IGxldmVsIChzZXFfbGV2ZWxfaWR4KSIsDQo+ID4gKyAgICAg IE9GRlNFVChsZXZlbCksIEFWX09QVF9UWVBFX0lOVCwNCj4gPiArICAgICAgeyAuaTY0ID0gRkZf TEVWRUxfVU5LTk9XTiB9LCBGRl9MRVZFTF9VTktOT1dOLCAweDFmLCBGTEFHUywNCj4gPiAibGV2 ZWwiIH0sDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExFVkVMKG5hbWUsIHZhbHVlKSBuYW1lLCBOVUxM LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXA0KPiA+ICsgICAgICB7IC5pNjQgPSB2YWx1ZSB9LCAw LCAwLCBGTEFHUywgImxldmVsIg0KPiA+ICsgICAgeyBMRVZFTCgiMi4wIiwgIDApIH0sDQo+ID4g KyAgICB7IExFVkVMKCIyLjEiLCAgMSkgfSwNCj4gPiArICAgIHsgTEVWRUwoIjMuMCIsICA0KSB9 LA0KPiA+ICsgICAgeyBMRVZFTCgiMy4xIiwgIDUpIH0sDQo+ID4gKyAgICB7IExFVkVMKCI0LjAi LCAgOCkgfSwNCj4gPiArICAgIHsgTEVWRUwoIjQuMSIsICA5KSB9LA0KPiA+ICsgICAgeyBMRVZF TCgiNS4wIiwgMTIpIH0sDQo+ID4gKyAgICB7IExFVkVMKCI1LjEiLCAxMykgfSwNCj4gPiArICAg IHsgTEVWRUwoIjUuMiIsIDE0KSB9LA0KPiA+ICsgICAgeyBMRVZFTCgiNS4zIiwgMTUpIH0sDQo+ ID4gKyAgICB7IExFVkVMKCI2LjAiLCAxNikgfSwNCj4gPiArICAgIHsgTEVWRUwoIjYuMSIsIDE3 KSB9LA0KPiA+ICsgICAgeyBMRVZFTCgiNi4yIiwgMTgpIH0sDQo+ID4gKyAgICB7IExFVkVMKCI2 LjMiLCAxOSkgfSwNCj4gPiArI3VuZGVmIExFVkVMDQo+ID4gKw0KPiA+ICsgICAgeyAidGlsZXMi LCAiVGlsZSBjb2x1bW5zIHggcm93cyIsDQo+ID4gKyAgICAgIE9GRlNFVCh0aWxlX2NvbHMpLCBB Vl9PUFRfVFlQRV9JTUFHRV9TSVpFLCB7IC5zdHIgPSAiMXgxIiB9LA0KPiA+IDEsIEFWMV9NQVhf VElMRV9DT0xTLCBGTEFHUyB9LA0KPiA+ICsgICAgeyAidGlsZV9ncm91cHMiLCAiTnVtYmVyIG9m IHRpbGUgZ3JvdXBzIGZvciBlbmNvZGluZyIsDQo+ID4gKyAgICAgIE9GRlNFVCh0aWxlX2dyb3Vw cyksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMSB9LCAxLA0KPiA+IEFWMV9NQVhfVElMRV9S T1dTICogQVYxX01BWF9USUxFX0NPTFMsIEZMQUdTIH0sDQo+ID4gKw0KPiA+ICsgICAgeyBOVUxM IH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgRkZDb2RlY0RlZmF1bHQgdmFh cGlfZW5jb2RlX2F2MV9kZWZhdWx0c1tdID0gew0KPiA+ICsgICAgeyAiYiIsICAgICAgICAgICAg ICAiMCIgICB9LA0KPiA+ICsgICAgeyAiYmYiLCAgICAgICAgICAgICAiNyIgICB9LA0KPiA+ICsg ICAgeyAiZyIsICAgICAgICAgICAgICAiMTIwIiB9LA0KPiA+ICsgICAgeyAicW1pbiIsICAgICAg ICAgICAiMSIgICB9LA0KPiA+ICsgICAgeyAicW1heCIsICAgICAgICAgICAiMjU1IiB9LA0KPiA+ ICsgICAgeyBOVUxMIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgQVZDbGFz cyB2YWFwaV9lbmNvZGVfYXYxX2NsYXNzID0gew0KPiA+ICsgICAgLmNsYXNzX25hbWUgPSAiYXYx X3ZhYXBpIiwNCj4gPiArICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsDQo+ ID4gKyAgICAub3B0aW9uICAgICA9IHZhYXBpX2VuY29kZV9hdjFfb3B0aW9ucywNCj4gPiArICAg IC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArY29uc3QgRkZDb2RlYyBmZl9hdjFfdmFhcGlfZW5jb2RlciA9IHsNCj4gPiArICAgIC5wLm5h bWUgICAgICAgICA9ICJhdjFfdmFhcGkiLA0KPiA+ICsgICAgQ09ERUNfTE9OR19OQU1FKCJBVjEg KFZBQVBJKSIpLA0KPiA+ICsgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVP LA0KPiA+ICsgICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfQVYxLA0KPiA+ICsgICAg LnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCksDQo+ID4gKyAg ICAuaW5pdCAgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0LA0KPiA+ICsgICAgRkZf Q09ERUNfUkVDRUlWRV9QQUNLRVRfQ0IoJmZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldCks DQo+ID4gKyAgICAuY2xvc2UgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jbG9zZSwNCj4g PiArICAgIC5wLnByaXZfY2xhc3MgICA9ICZ2YWFwaV9lbmNvZGVfYXYxX2NsYXNzLA0KPiA+ICsg ICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0hB UkRXQVJFIHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVDX0NBUF9EUjEgfA0K PiA+IEFWX0NPREVDX0NBUF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUsDQo+ID4gKyAgICAuY2Fw c19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfTk9UX0lOSVRfVEhSRUFEU0FGRSB8DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLA0KPiA+ICsgICAg LmRlZmF1bHRzICAgICAgID0gdmFhcGlfZW5jb2RlX2F2MV9kZWZhdWx0cywNCj4gPiArICAgIC5w LnBpeF9mbXRzID0gKGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdFtdKSB7DQo+ID4gKyAgICAgICAg QVZfUElYX0ZNVF9WQUFQSSwNCj4gPiArICAgICAgICBBVl9QSVhfRk1UX05PTkUsDQo+ID4gKyAg ICB9LA0KPiA+ICsgICAgLmh3X2NvbmZpZ3MgICAgID0gZmZfdmFhcGlfZW5jb2RlX2h3X2NvbmZp Z3MsDQo+ID4gKyAgICAucC53cmFwcGVyX25hbWUgPSAidmFhcGkiLA0KPiA+ICt9Ow0KPiA+IC0t DQo+ID4gMi4yNS4xDQo+ID4gDQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18NCj4gPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gZmZtcGVn LWRldmVsQGZmbXBlZy5vcmcNCj4gPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5m by9mZm1wZWctZGV2ZWwNCj4gPiANCj4gPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwNCj4gPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXw0KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0DQo+IGZmbXBlZy1kZXZl bEBmZm1wZWcub3JnDQo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbA0KPiANCj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWls DQo+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNj cmliZSIuDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==