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 BB5E945B63 for ; Wed, 20 Sep 2023 22:25:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5D17A68C8CF; Thu, 21 Sep 2023 01:25:27 +0300 (EEST) Received: from mail-yb1-f172.google.com (mail-yb1-f172.google.com [209.85.219.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D825F68C864 for ; Thu, 21 Sep 2023 01:25:20 +0300 (EEST) Received: by mail-yb1-f172.google.com with SMTP id 3f1490d57ef6-d745689bd71so106271276.0 for ; Wed, 20 Sep 2023 15:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695248719; x=1695853519; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=z0OD2TDBTm6jV8mD/DI1tSKtn9mNpRbR0WCXKhWTGxo=; b=eCJagBTtOtK3I7R8gICjs4EhbjVAgYvclXZDbzxJma3qxd80HO1PB5j4JSj21Ic8Ji 2edx0nO8Gzcu8vrjVjsvkQNASpV6zgJF+vBtiZiTuSrENJI7cAwIrRCemTTCkfnmUKsu jtvG1e7oJ7X9AnmKF48O/FBOSfRYHpeGX52Fuy3p6D2M60G1fTx5NTr5esZKZj54PvP5 CrPanmDYK1Eaf1oZXzx6jVGKS/Jcw5zMNeB5O9IV2s//wH6kno+v68AzqkBfABovbhUH Oppzsgh2v+ovUywVXKSIavCpuBeBdYyy0VYgXaspE9DxxQH81caGPNuyIMi6xODmphf+ ZgIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695248719; x=1695853519; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=z0OD2TDBTm6jV8mD/DI1tSKtn9mNpRbR0WCXKhWTGxo=; b=xIPzmFWwMr+KRVx9fgJfCaBTiCEwjc8Z6xIxkUAsRwtgMUpaTDeMaMfPnwBIwzjCGv eWfVgizmPoQvBrDeoQqX1mmREJoeJy9W+u6J6zEK/hTC1qdBia7EvaJyrmbNLwy08t72 qanPXZ4n6qnhLMloupRs0GyMHcG4vm4Kz2YTtw6yeXPJIzJzpIbHIoWy+G19EabE8SSm o0y4bAdljWyy99PCdQIsoBL6emPFIZfhz+KB6spqQkxK9rwy77ByHttwCq7PUmEwxkAm lpe49qrz2eT2FmBT1gyERtA3yf/TP1whUHTF0hsoTmaSXmP3etyykeF/TLsEq84zyjNQ QhGA== X-Gm-Message-State: AOJu0YxhZuafMD7qalD5V3LsZA3TXwQOry7KqWaINj1rXvKOi6aT0hpK fTvrFw57ybqI7bgzJntxi8eK5XULeXo= X-Google-Smtp-Source: AGHT+IGHKrPiKC4Mq1wo1egUCh+fv5KguOPhKgzoeS5gR4Sg901aAKkUnivQplQl+Pzx8obqWwwU2Q== X-Received: by 2002:a25:abe4:0:b0:d7b:95ad:5f0d with SMTP id v91-20020a25abe4000000b00d7b95ad5f0dmr3416157ybi.0.1695248718392; Wed, 20 Sep 2023 15:25:18 -0700 (PDT) Received: from [192.168.1.35] (c-68-56-149-176.hsd1.mi.comcast.net. [68.56.149.176]) by smtp.gmail.com with ESMTPSA id k18-20020a5b0a12000000b00d81479172f8sm48189ybq.5.2023.09.20.15.25.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 20 Sep 2023 15:25:17 -0700 (PDT) Message-ID: Date: Wed, 20 Sep 2023 18:25:16 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US-large To: ffmpeg-devel@ffmpeg.org References: <20230920184058.1263793-1-abhishek.ojha@savoirfairelinux.com> From: Leo Izen In-Reply-To: <20230920184058.1263793-1-abhishek.ojha@savoirfairelinux.com> Subject: Re: [FFmpeg-devel] [RFC PATCH 1/2] libavdevice/pipewiregrab: add pipewire based grab 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gOS8yMC8yMyAxNDo0MCwgQWJoaXNoZWsgT2poYSB3cm90ZToKPiBUaGlzIGlzIGFuIHByb29m IG9mIGNvbmNlcHQgZm9yIHBpcGV3aXJlIGdyYWIgdG8gZW5hYmxlIHNjcmVlbiBjYXB0dXJlCj4g b24gd2F5bGFuZC4gQWRkIGEgbmV3IExpbnV4IGNhcHR1cmUgYmFzZWQgb24gWzFdIFBpcGVXaXJl IGFuZCB0aGUKPiBbMl0gRGVza3RvcCBwb3J0YWwuCj4gVGhpcyBuZXcgY2FwdHVyZSBzdGFydHMg YnkgYXNraW5nIHRoZSBEZXNrdG9wIHBvcnRhbCBmb3IgYSBzY3JlZW5jYXB0dXJlCj4gc2Vzc2lv bi5UaGVyZSBhcmUgcXVpdGUgYSBmZXcgRC1CdXMgY2FsbHMgaW52b2x2ZWQgaW4gdGhpcywgYnV0 IHRoZSBrZXkKPiBwb2ludHMgYXJlOgo+IAo+IDEuIEEgY29ubmVjdGlvbiB0byBvcmcuZnJlZWRl c2t0b3AucG9ydGFsLlNjcmVlbkNhc3QgaXMgZXN0YWJpbGlzaGVkLAo+ICAgICBhbmQgdGhlIGF2 YWlsYWJsZSBjdXJzb3IgbW9kZXMgYXJlIHVwZGF0ZWQuIEN1cnJlbnRseSBvbmx5IGVtYmVkZGVk Cj4gICAgIGFuZCBoaWRkZW4gY3VycnNvciBtb2RlIGVuYWJsZWQuCj4gCj4gMi4gQ2FsbCBDcmVh dGVTZXNzaW9uIHZpYSBkYnVzIGNhbGwuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlCj4g ICAgIGNvbW11bmljYXRpb24uIFJlc3BvbnNlIGNhbGxiYWNrIHJldHVybiB0aGUgc3RhdHVzIG9m IGNyZWF0ZWQKPiAgICAgc2Vzc2lvbi4KPiAKPiAzLiBDYWxsIFNlbGVjdFNvdXJjZXMgLiBUaGlz IGlzIHdoZW4gYSBzeXN0ZW0gZGlhbG9nIHBvcHMgdXAgYXNraW5nCj4gICAgIHRoZSB1c2VyIHRv IGVpdGhlciBzZWxlY3QgYSBtb25pdG9yIChkZXNrdG9wIGNhcHR1cmUpLk9ubHkgbW9uaXRvcgo+ ICAgICBjYXB0dXJlIGlzIGVuYWJsZWQgaW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KPiAKPiA0 LiBDYWxsIFN0YXJ0IC4gVGhpcyBzaWduYWxzIHRoZSBjb21wb3NpdG9yIHRoYXQgaXQgY2FuIHNl dHVwIGEgUGlwZVdpcmUKPiAgICAgc3RyZWFtLCBhbmQgc3RhcnQgc2VuZGluZyBidWZmZXJzLgo+ IAo+IEFib3ZlIGZsb3cgaXMgaW1wbGVtZW50ZWQgYXMgcGVyIHRoZSBbMl0geGRnLWRlc2t0b3At cG9ydGFsLiBPbmNlIGZsb3cKPiBpcyBjb21wbGV0ZWQsIHBpcGV3aXJlIGZkIGlzIHJlY2VpdmVk IGFuZCB1c2luZyB0aGlzIHBpcGV3aXJlIHN0cmVhbSBpcwo+IGNyZWF0ZWQgYW5kIHJlY2VpdmUg YnVmZmVyIGZyb20gdGhlIGNyZWF0ZWQgc3RyZWFtLgo+IAo+IEZvciBjdXJzb3IgaW1wbGVtZW50 YXRpb24sIGVtYmVkZGVkIGN1cnNvciBtb2RlIGlzIGVuYWJsZWQgdGhhdCBtZWFucwo+IGN1cnNv ciBtZXRhZGF0YSBpcyBub3QgaGFuZGxlZCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBo YXMgbm8KPiBjb250cm9sIG92ZXIgdGhlIGN1cnNvciBiaXRtYXAuCj4gCj4gZ2RidXMvcGlwZXdp cmUgbG9naWMsIHRoaXMgaXMgYmFzZWQgb24gb2JzLXhkZywgZ3N0cGlwZXdpcmUgYW5kCj4gcGlw ZXdpcmUgZXhhbXBsZXMsIGFuZCBpbml0aWFsIHBpcGV3aXJlIGdyYWIgbG9naWMsIHRoaXMgaXMg YmFzZWQgb24KPiBsaWJhdmRldmljZS94Y2JncmFiIGFuZCBsaWJhdmRldmljZS92NGwyCj4gCj4g VGhpcyBpbXBsZW1lbnRhdGlvbiBzaG93cyB0aGUgc2tlbGV0b24gaW1wbGVtZW50YXRpb24gYW5k IGVuYWJsZXMgYmFzaWMKPiBmdW5jdGlvbmFsaXR5LiBJJ2QgbGlrZSB0byBoZWFyIG9waW5pb25z IGFuZCBzdWdnZXN0aW9ucyB0byBpbXByb3ZlIGFuZAo+IHByb3Blcmx5IHVzZSB0aGlzLgo+IAo+ IFsxXSBodHRwczovL3BpcGV3aXJlLm9yZy8KPiBbMl0gaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRw YWsveGRnLWRlc2t0b3AtcG9ydGFsLwo+IAo+IEJlbG93IGFyZSB0aGUgYXJndW1lbnRzIGZvciBw aXBld2lyZWdyYWIuCj4gZmZwbGF5IC1mIHBpcGV3aXJlZ3JhYiAtZHJhd19tb3VzZSAxIC1pIDow LjAKPiAKPiBTaWduZWQtb2ZmLWJ5OiBBYmhpc2hlayBPamhhIDxhYmhpc2hlay5vamhhQHNhdm9p cmZhaXJlbGludXguY29tPgo+IC0tLQo+ICAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgfCAg ICA5ICsKPiAgIGxpYmF2ZGV2aWNlL01ha2VmaWxlICAgICAgIHwgICAgMSArCj4gICBsaWJhdmRl dmljZS9hbGxkZXZpY2VzLmMgICB8ICAgIDEgKwo+ICAgbGliYXZkZXZpY2UvcGlwZXdpcmVncmFi LmMgfCAxODM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgNCBmaWxl cyBjaGFuZ2VkLCAxODQ3IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmRldmljZS9waXBld2lyZWdyYWIuYwo+IAo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25m aWd1cmUKPiBpbmRleCBlNDBkY2NlMDllLi4zMjViMTA0ODRmIDEwMDc1NQo+IC0tLSBhL2NvbmZp Z3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0yOTksNiArMjk5LDcgQEAgRXh0ZXJuYWwgbGli cmFyeSBzdXBwb3J0Ogo+ICAgICAtLWVuYWJsZS1saWJ4Y2Itc2htICAgICAgZW5hYmxlIFgxMSBn cmFiYmluZyBzaG0gY29tbXVuaWNhdGlvbiBbYXV0b2RldGVjdF0KPiAgICAgLS1lbmFibGUtbGli eGNiLXhmaXhlcyAgIGVuYWJsZSBYMTEgZ3JhYmJpbmcgbW91c2UgcmVuZGVyaW5nIFthdXRvZGV0 ZWN0XQo+ICAgICAtLWVuYWJsZS1saWJ4Y2Itc2hhcGUgICAgZW5hYmxlIFgxMSBncmFiYmluZyBz aGFwZSByZW5kZXJpbmcgW2F1dG9kZXRlY3RdCj4gKyAgLS1lbmFibGUtbGlicGlwZXdpcmUgICAg IGVuYWJsZSBzY3JlZW4gZ3JhYmJpbmcgdXNpbmcgcGlwZXdpcmUgW2F1dG9kZXRlY3RdCj4gICAg IC0tZW5hYmxlLWxpYnh2aWQgICAgICAgICBlbmFibGUgWHZpZCBlbmNvZGluZyB2aWEgeHZpZGNv cmUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmUgTVBFRy00L1h2aWQgZW5j b2RlciBleGlzdHMgW25vXQo+ICAgICAtLWVuYWJsZS1saWJ4bWwyICAgICAgICAgZW5hYmxlIFhN TCBwYXJzaW5nIHVzaW5nIHRoZSBDIGxpYnJhcnkgbGlieG1sMiwgbmVlZGVkCj4gQEAgLTE3ODgs NiArMTc4OSw4IEBAIEVYVEVSTkFMX0FVVE9ERVRFQ1RfTElCUkFSWV9MSVNUPSIKPiAgICAgICBs aWJ4Y2Jfc2htCj4gICAgICAgbGlieGNiX3NoYXBlCj4gICAgICAgbGlieGNiX3hmaXhlcwo+ICsg ICAgbGlicGlwZXdpcmUKPiArICAgIGxpYmdpb191bml4Cj4gICAgICAgbHptYQo+ICAgICAgIG1l ZGlhZm91bmRhdGlvbgo+ICAgICAgIG1ldGFsCj4gQEAgLTM2MjEsNiArMzYyNCw3IEBAIHY0bDJf b3V0ZGV2X3N1Z2dlc3Q9ImxpYnY0bDIiCj4gICB2ZndjYXBfaW5kZXZfZGVwcz0idmZ3MzIgdmZ3 Y2FwX2RlZmluZXMiCj4gICB4Y2JncmFiX2luZGV2X2RlcHM9ImxpYnhjYiIKPiAgIHhjYmdyYWJf aW5kZXZfc3VnZ2VzdD0ibGlieGNiX3NobSBsaWJ4Y2Jfc2hhcGUgbGlieGNiX3hmaXhlcyIKPiAr cGlwZXdpcmVncmFiX2luZGV2X2RlcHM9ImxpYnBpcGV3aXJlIGxpYmdpb191bml4IHB0aHJlYWRz Igo+ICAgeHZfb3V0ZGV2X2RlcHM9InhsaWJfeHYgeGxpYl94MTEgeGxpYl94ZXh0Igo+ICAgCj4g ICAjIHByb3RvY29scwo+IEBAIC03MDQxLDYgKzcwNDUsMTEgQEAgaWYgZW5hYmxlZCBsaWJ4Y2I7 IHRoZW4KPiAgICAgICBlbmFibGVkIGxpYnhjYl94Zml4ZXMgJiYgY2hlY2tfcGtnX2NvbmZpZyBs aWJ4Y2JfeGZpeGVzIHhjYi14Zml4ZXMgeGNiL3hmaXhlcy5oIHhjYl94Zml4ZXNfZ2V0X2N1cnNv cl9pbWFnZQo+ICAgZmkKPiAgIAo+ICtlbmFibGVkIGxpYnBpcGV3aXJlICYmIGNoZWNrX3BrZ19j b25maWcgbGlicGlwZXdpcmUgImxpYnBpcGV3aXJlLTAuMyA+PSAwLjMuNDAiIHBpcGV3aXJlL3Bp cGV3aXJlLmggcHdfaW5pdAo+ICtpZiBlbmFibGVkIGxpYnBpcGV3aXJlOyB0aGVuCj4gKyAgICBl bmFibGVkIGxpYmdpb191bml4ICYmIGNoZWNrX3BrZ19jb25maWcgbGliZ2lvX3VuaXggZ2lvLXVu aXgtMi4wIGdpby9naW8uaCBnX21haW5fbG9vcF9uZXcKPiArZmkKPiArCj4gICBjaGVja19mdW5j X2hlYWRlcnMgIndpbmRvd3MuaCIgQ3JlYXRlRElCU2VjdGlvbiAiJGdkaWdyYWJfaW5kZXZfZXh0 cmFsaWJzIgo+ICAgCj4gICAjIGQzZDExdmEgcmVxdWlyZXMgbGlua2luZyBkaXJlY3RseSB0byBk eGdpIGFuZCBkM2QxMSBpZiBub3QgYnVpbGRpbmcgZm9yCj4gZGlmZiAtLWdpdCBhL2xpYmF2ZGV2 aWNlL01ha2VmaWxlIGIvbGliYXZkZXZpY2UvTWFrZWZpbGUKPiBpbmRleCBjMzA0NDkyMDFkLi5m MDI5NjA3ODJkIDEwMDY0NAo+IC0tLSBhL2xpYmF2ZGV2aWNlL01ha2VmaWxlCj4gKysrIGIvbGli YXZkZXZpY2UvTWFrZWZpbGUKPiBAQCAtNDksNiArNDksNyBAQCBPQkpTLSQoQ09ORklHX1Y0TDJf SU5ERVYpICAgICAgICAgICAgICAgICs9IHY0bDIubyB2NGwyLWNvbW1vbi5vIHRpbWVmaWx0ZXIu bwo+ICAgT0JKUy0kKENPTkZJR19WNEwyX09VVERFVikgICAgICAgICAgICAgICArPSB2NGwyZW5j Lm8gdjRsMi1jb21tb24ubwo+ICAgT0JKUy0kKENPTkZJR19WRldDQVBfSU5ERVYpICAgICAgICAg ICAgICArPSB2ZndjYXAubwo+ICAgT0JKUy0kKENPTkZJR19YQ0JHUkFCX0lOREVWKSAgICAgICAg ICAgICArPSB4Y2JncmFiLm8KPiArT0JKUy0kKENPTkZJR19QSVBFV0lSRUdSQUJfSU5ERVYpICAg ICAgICArPSBwaXBld2lyZWdyYWIubwo+ICAgT0JKUy0kKENPTkZJR19YVl9PVVRERVYpICAgICAg ICAgICAgICAgICArPSB4di5vCj4gICAKPiAgICMgZXh0ZXJuYWwgbGlicmFyaWVzCj4gZGlmZiAt LWdpdCBhL2xpYmF2ZGV2aWNlL2FsbGRldmljZXMuYyBiL2xpYmF2ZGV2aWNlL2FsbGRldmljZXMu Ywo+IGluZGV4IDhhOTBmY2I1ZDcuLjFmYTg1NjNkZjQgMTAwNjQ0Cj4gLS0tIGEvbGliYXZkZXZp Y2UvYWxsZGV2aWNlcy5jCj4gKysrIGIvbGliYXZkZXZpY2UvYWxsZGV2aWNlcy5jCj4gQEAgLTUz LDYgKzUzLDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Y0bDJfZGVtdXhlcjsK PiAgIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl92NGwyX211eGVyOwo+ICAgZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Zmd2NhcF9kZW11eGVyOwo+ICAgZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX3hjYmdyYWJfZGVtdXhlcjsKPiArZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX3BpcGV3aXJlZ3JhYl9kZW11eGVyOwo+ICAgZXh0ZXJuIGNvbnN0IEZGT3V0 cHV0Rm9ybWF0IGZmX3h2X211eGVyOwo+ICAgCj4gICAvKiBleHRlcm5hbCBsaWJyYXJpZXMgKi8K PiBkaWZmIC0tZ2l0IGEvbGliYXZkZXZpY2UvcGlwZXdpcmVncmFiLmMgYi9saWJhdmRldmljZS9w aXBld2lyZWdyYWIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4u NWI5NmQ0Mzg2Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmRldmljZS9waXBld2lyZWdy YWIuYwo+IEBAIC0wLDAgKzEsMTgzNiBAQAo+ICsvKgo+ICsgKiBQaXBlV2lyZSBpbnB1dCBncmFi YmVyIChTY3JlZW5DYXN0KQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgU2F2b2lyLWZhaXJlIExp bnV4LCBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoK PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIEBmaWxlCj4gKyAqIFBp cGV3aXJlIEdyYWIgZGVtdXhlcgo+ICsgKiBAYXV0aG9yIEFiaGlzaGVrIE9qaGEgPGFiaGlzaGVr Lm9qaGFAc2F2b2lyZmFpcmVsaW51eC5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImNvbmZp Zy5oIgo+ICsKPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVm Lmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNpbmNs dWRlIDxzdGRhdG9taWMuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3Ry aW5nLmg+Cj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgo+ICsjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+ Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvbWF0aGVtYXRpY3MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2lu Y2x1ZGUgImxpYmF2dXRpbC9wYXJzZXV0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdGlt ZS5oIgo+ICsKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgiCj4gKyNpbmNsdWRl ICJsaWJhdmZvcm1hdC9pbnRlcm5hbC5oIgo+ICsKPiArI2luY2x1ZGUgPHBpcGV3aXJlL3BpcGV3 aXJlLmg+Cj4gKyNpbmNsdWRlIDxwaXBld2lyZS90aHJlYWQtbG9vcC5oPgo+ICsjaW5jbHVkZSA8 c3BhL2RlYnVnL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzcGEvcGFyYW0vdmlkZW8vZm9ybWF0LXV0 aWxzLmg+Cj4gKyNpbmNsdWRlIDxzcGEvcGFyYW0vdmlkZW8vdHlwZS1pbmZvLmg+Cj4gKwo+ICsj aW5jbHVkZSA8Z2lvL2dpby5oPgo+ICsjaW5jbHVkZSA8Z2lvL2d1bml4ZmRsaXN0Lmg+Cj4gKwo+ ICsjaWZuZGVmIF9fVVNFX1hPUEVOMks4Cj4gKyNkZWZpbmUgRl9EVVBGRF9DTE9FWEVDICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAxMDMwIC8qIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3Igd2l0aCBjbG9zZS1vbi1leGl0IHNl dC4gICovCj4gKyNlbmRpZgo+ICsKPiArI2RlZmluZSBCWVRFU19QRVJfUElYRUwgNCAvKiBjdXJy ZW50bHkgYWxsIGZvcm1hdHMgYXNzdW1lIDQgYnl0ZXMgcGVyIHBpeGVsICovCj4gKyNkZWZpbmUg UkVRVUVTVF9QQVRIICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wL3JlcXVlc3QvJXMv b2JzJXUiCj4gKyNkZWZpbmUgU0VTU0lPTl9QQVRIICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9k ZXNrdG9wL3Nlc3Npb24vJXMvb2JzJXUiCj4gKyNkZWZpbmUgTUFYX1NQQV9QQVJBTSA0IC8qIG1h eCBudW1iZXIgb2YgcGFyYW1zIGZvciBzcGEgcG9kICovCj4gKwo+ICsjZGVmaW5lIENVUlNPUl9N RVRBX1NJWkUod2lkdGgsIGhlaWdodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+ICsgICAgKHNpemVvZihzdHJ1Y3Qgc3BhX21ldGFfY3Vyc29yKSArIHNpemVvZihz dHJ1Y3Qgc3BhX21ldGFfYml0bWFwKSArICAgICAgICAgXAo+ICsgICAgIHdpZHRoICogaGVpZ2h0 ICogNCkKPiArCj4gKy8qKgo+ICsgKiBQaXBld2lyZSBjYXB0dXJlIHR5cGVzCj4gKyAqLwo+ICt0 eXBlZGVmIGVudW0gewo+ICsgICAgREVTS1RPUF9DQVBUVVJFID0gMSwKPiArICAgIFdJTkRPV19D QVBUVVJFID0gMiwKPiArfSBwd19jYXB0dXJlX3R5cGU7Cj4gKwo+ICsvKioKPiArICogUGlwZXdp cmUgdmVyc2lvbiBzdHJ1Y3R1cmUKPiArICovCj4gK3N0cnVjdCBGRm1wZWdQd1ZlcnNpb24gewo+ ICsgICAgaW50IG1ham9yOwo+ICsgICAgaW50IG1pbm9yOwo+ICsgICAgaW50IG1pY3JvOwo+ICt9 Owo+ICsKPiArLyoqCj4gKyAqIFBpcGV3aXJlIHN0cnVjdHVyZSBmb3IgZnJhbWUgcHJvY2Vzc2lu Zwo+ICsgKi8KPiArc3RydWN0IFB3U3RyZWFtQW5kQnVmZmVyIHsKPiArICAgIEFWRm9ybWF0Q29u dGV4dCAqY3R4Owo+ICsgICAgc3RydWN0IHB3X3N0cmVhbSAqcHdfc3RyZWFtOwo+ICsgICAgc3Ry dWN0IHB3X2J1ZmZlciAqcHdfYnVmOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIFBpcGV3aXJlIHN1 cHBvcnRlZCBjdXJzb3IgbW9kZXMKPiArICovCj4gK2VudW0gUG9ydGFsQ3Vyc29yTW9kZSB7Cj4g KyAgICBQT1JUQUxfQ1VSU09SX01PREVfSElEREVOID0gMSA8PCAwLAo+ICsgICAgUE9SVEFMX0NV UlNPUl9NT0RFX0VNQkVEREVEID0gMSA8PCAxLAo+ICsgICAgUE9SVEFMX0NVUlNPUl9NT0RFX01F VEFEQVRBID0gMSA8PCAyLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIFBpcGVXaXJlIEdyYWIgbWFp biBzdHJ1Y3R1cmUKPiArICogQ29udGFpbnMgYWxsIG5lY2Vzc2FyeSBkYXRhIHRoYXQgaG9sZCBj dXJyZW50IHN0YXRlCj4gKyAqIEluaXRpYWwgc3RhdGUgb2YgdGhpcyBzdHJ1Y3QgaXMgYWxsb2Nh dGVkIGJ5IGxpYmF2ZGV2aWNlCj4gKyAqIGxvZ2ljIHdoZW4gZGVjbGFyaW5nIHRoZSBBVklucHV0 Rm9ybWF0IGZmX3BpcGV3aXJlZ3JhYl9kZW11eGVyLgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyBw cml2X2RhdGEgb2YgQVZGb3JtYXRDb250ZXh0IGluc3RhbmNlLgo+ICsgKi8KPiArdHlwZWRlZiBz dHJ1Y3QgUGlwZXdpcmVHcmFiQ29udGV4dCB7Cj4gKyAgICAvKiogdGhyZWFkIHVzZWQgdG8gaW50 aWFsaXplL3N0YXJ0IHBpcGV3aXJlIGxvZ2ljICovCj4gKyAgICBwdGhyZWFkX3QgcGlwZXdpcmVf cHRocmVhZDsKPiArCj4gKyAgICAvKiogY29uZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIGxvZ2lj IGVsZWNtZW50cyBiZXR3ZWVuIHBpcGV3aXJlCj4gKyAgICAgKiB0aHJlYWQgYW5kIGxpYmF2ZGV2 aWNlIHRocmVhZC4KPiArICAgICAqLwo+ICsgICAgcHRocmVhZF9jb25kX3QgYXZzdHJlYW1fY29k ZWNfY29uZF92YXI7Cj4gKyAgICBwdGhyZWFkX211dGV4X3QgYXZzdHJlYW1fY29kZWNfbXV0ZXg7 Cj4gKyAgICBhdG9taWNfaW50IGF2c3RyZWFtX2NvZGVjX2ZsYWc7Cj4gKwo+ICsgICAgcHRocmVh ZF9tdXRleF90IGN1cnJlbnRfcGt0X211dGV4Owo+ICsgICAgQVZQYWNrZXQqIGN1cnJlbnRfcGt0 Owo+ICsKPiArICAgIEdEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKPiArICAgIEdEQnVzUHJv eHkgKnByb3h5Owo+ICsgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKPiArCj4gKyAgICBj aGFyICpzZW5kZXJfbmFtZTsKPiArICAgIGNoYXIgKnNlc3Npb25faGFuZGxlOwo+ICsKPiArICAg IHVpbnQzMl90IHBpcGV3aXJlX25vZGU7Cj4gKyAgICBpbnQgcGlwZXdpcmVfZmQ7Cj4gKwo+ICsg ICAgdWludDMyX3QgYXZhaWxhYmxlX2N1cnNvcl9tb2RlczsKPiArCj4gKyAgICBHTWFpbkxvb3Ag KmdsaWJfbWFpbl9sb29wOwo+ICsgICAgc3RydWN0IHB3X3RocmVhZF9sb29wICp0aHJlYWRfbG9v cDsKPiArICAgIHN0cnVjdCBwd19jb250ZXh0ICpjb250ZXh0Owo+ICsKPiArICAgIHN0cnVjdCBw d19jb3JlICpjb3JlOwo+ICsgICAgc3RydWN0IHNwYV9ob29rIGNvcmVfbGlzdGVuZXI7Cj4gKwo+ ICsgICAgc3RydWN0IHB3X3N0cmVhbSAqc3RyZWFtOwo+ICsgICAgc3RydWN0IHNwYV9ob29rIHN0 cmVhbV9saXN0ZW5lcjsKPiArICAgIHN0cnVjdCBzcGFfdmlkZW9faW5mbyBmb3JtYXQ7Cj4gKwo+ ICsgICAgcHdfY2FwdHVyZV90eXBlIGNhcHR1cmVfdHlwZTsKPiArICAgIGJvb2wgbmVnb3RpYXRl ZDsKPiArCj4gKyAgICAvKio8IGRyYXdfbW91c2UgaXMgdG8gY29udHJvbCB0aGUgZW5hYmxlL2Rp c2FibGUgbW91c2UgY3Vyc29yICovCj4gKyAgICBpbnQgZHJhd19tb3VzZTsKPiArCj4gKyAgICAv KiogY3Vyc29yIG1ldGFkYXRhICovCj4gKyAgICBzdHJ1Y3Qgewo+ICsgICAgICAgIGJvb2wgdmlz aWJsZTsKPiArICAgICAgICBib29sIHZhbGlkOwpib29sIHNob3VsZCBiZSBpbnQuCgo+ICsgICAg ICAgIGludCB4LCB5Owo+ICsgICAgICAgIGludCBob3RzcG90X3gsIGhvdHNwb3RfeTsKPiArICAg ICAgICBpbnQgd2lkdGgsIGhlaWdodDsKPiArICAgIH0gY3Vyc29yOwo+ICsKPiArICAgIC8qKjwg V2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ3JhYiBmcmFtZSAocHJpdmF0ZSBvcHRpb24pICovCj4g KyAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0Owo+ICsKPiArICAgIC8qKjwgU2l6ZSBpbiBieXRl cyBvZiB0aGUgZnJhbWUgcGl4ZWwgZGF0YSAqLwo+ICsgICAgdWludDMyX3QgZnJhbWVfc2l6ZTsK c2l6ZV90PwoKPiArICAgIHVpbnQ4X3QgQnBwOwo+ICsgICAgZW51bSBBVlBpeGVsRm9ybWF0IGF2 X3B4bF9mb3JtYXQ7Cj4gKyAgICBBVlJhdGlvbmFsIHVzZXJfZnJhbWVfcmF0ZTsKPiArCj4gKyAg ICBpbnQ2NF90IHRpbWVfZnJhbWU7Cj4gKyAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZTsKPiArICAg IGludDY0X3QgZnJhbWVfZHVyYXRpb247Cj4gKwo+ICsgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7 Cj4gKwo+ICsgICAgY29uc3QgY2hhciAqZnJhbWVyYXRlOwo+ICsgICAgc3RydWN0IEZGbXBlZ1B3 VmVyc2lvbiBzZXJ2ZXJfdmVyc2lvbjsKPiArICAgIGludCBzZXJ2ZXJfdmVyc2lvbl9zeW5jOwo+ ICt9IFBpcGV3aXJlR3JhYkNvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogZGJ1cydzIG1ldGhvZC9l dmVudCBtYXJzaGFsbGluZyBzdHJ1Y3R1cmUKPiArICovCj4gK3N0cnVjdCBEYnVzQ2FsbERhdGEg ewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHg7Cj4gKyAgICBjaGFyICpyZXF1ZXN0X3BhdGg7 Cj4gKyAgICBndWludCBzaWduYWxfaWQ7Cj4gKyAgICBndWxvbmcgY2FuY2VsbGVkX2lkOwo+ICt9 Owo+ICsKPiArI2RlZmluZSBGT0xMT1dfQ0VOVEVSIC0xCj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4 KSBvZmZzZXRvZihQaXBld2lyZUdyYWJDb250ZXh0LCB4KQo+ICsjZGVmaW5lIEQgQVZfT1BUX0ZM QUdfREVDT0RJTkdfUEFSQU0KPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsK PiArICAgIHsgImZyYW1lcmF0ZSIsCj4gKyAgICAgICIiLAo+ICsgICAgICBPRkZTRVQoZnJhbWVy YXRlKSwKPiArICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLApBVl9PUFRfVFlQRV9WSURFT19SQVRF IHBvaW50cyB0byBhbiBBVlJhdGlvbmFsCgo+ICsgICAgICB7IC5zdHIgPSAibnRzYyIgfSwKPiAr ICAgICAgMCwKPiArICAgICAgMCwKPiArICAgICAgRCB9LAo+ICsgICAgeyAiZHJhd19tb3VzZSIs Cj4gKyAgICAgICJEcmF3IHRoZSBtb3VzZSBwb2ludGVyLiIsCj4gKyAgICAgIE9GRlNFVChkcmF3 X21vdXNlKSwKPiArICAgICAgQVZfT1BUX1RZUEVfSU5ULApBVl9PUFRfVFlQRV9CT09MCgo+ICsg ICAgICB7IC5pNjQgPSAwIH0sCj4gKyAgICAgIDAsCj4gKyAgICAgIDEsCj4gKyAgICAgIEQgfSwK PiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIEZ1bmN0aW9uIHBhcnNlIHRo ZSBwaXBld2lyZSB2ZXJzaW9uCj4gKyAqIEBwYXJhbSBkc3QgRm1wZWdQd1ZlcnNpb24gdGhhdCBj b250YWlucyBQaXBlV2lyZSB2ZXJzaW9uIGluZm8KPiArICogQHBhcmFtIHZlcnNpb24gcGlwZXdp cmUgdmVyc2lvbgo+ICsgKi8KPiArc3RhdGljIGJvb2wgcGFyc2VfcHdfdmVyc2lvbihzdHJ1Y3Qg RkZtcGVnUHdWZXJzaW9uICpkc3QsIGNvbnN0IGNoYXIgKnZlcnNpb24pCkNvbnZlbnRpb24gaXMg dG8gcmV0dXJuIGludCA+PSAwIG9uIHN1Y2Nlc3MgYW5kIGFuIGludCA8IDAgb24gZmFpbHVyZS4g SSAKZG9uJ3QgdGhpbmsgd2UgdXNlIHRoZSBib29sIHR5cGUgaW4gRkZtcGVnIGV4Y2VwdCB3aGVu IGV4dGVybmFsIApsaWJyYXJpZXMgcmVxdWlyZSBpdC4KCj4gK3sKPiArICAgIGludCBuX21hdGNo ZXMgPSBzc2NhbmYodmVyc2lvbiwgIiVkLiVkLiVkIiwgJmRzdC0+bWFqb3IsICZkc3QtPm1pbm9y LAo+ICsgICAgICAgICAgICAgICAgICAgJmRzdC0+bWljcm8pOwo+ICsgICAgcmV0dXJuIG5fbWF0 Y2hlcyA9PSAzOwo+ICt9Cj4gKwo+ICsvKioKPiArICogRnVuY3Rpb24gdXBkYXRlIHRoZSBwaXBl d2lyZSB2ZXJzaW9uIGluIHByaXZhdGUgZGF0YQo+ICsgKiBwYXJhbXMsIHRoZW4gc2lnbmFsIHRo ZSBibG9ja2VkIEByZWYgcGlwZXdpcmVncmFiX3JlYWRfaGVhZGVyCj4gKyAqCj4gKyAqIEBwYXJh bSBjdHggQVZGb3JtYXRDb250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUgR3JhYiBtYWluIHN0 cnVjdHVyZQo+ICsgKiBAcGFyYW0gdmVyc2lvbiBwaXBld2lyZSB2ZXJzaW9uCj4gKyAqLwo+ICtz dGF0aWMgdm9pZCB1cGRhdGVfcHdfdmVyc2lvbnMoQVZGb3JtYXRDb250ZXh0ICpjdHgsIGNvbnN0 IGNoYXIgKnZlcnNpb24pCj4gK3sKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9 IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiW3BpcGV3 aXJlZ3JhYl0gU2VydmVyIHZlcnNpb246ICVzXG4iLCB2ZXJzaW9uKTsKPiArICAgIGF2X2xvZyhj dHgsIEFWX0xPR19JTkZPLCAiW3BpcGV3aXJlZ3JhYl0gTGlicmFyeSB2ZXJzaW9uOiAlc1xuIiwK PiArICAgICAgICBwd19nZXRfbGlicmFyeV92ZXJzaW9uKCkpOwo+ICsgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0RFQlVHLCAiW3BpcGV3aXJlZ3JhYl0gSGVhZGVyIHZlcnNpb246ICVzXG4iLAo+ICsg ICAgICAgIHB3X2dldF9oZWFkZXJzX3ZlcnNpb24oKSk7Cj4gKwo+ICsgICAgaWYgKCFwYXJzZV9w d192ZXJzaW9uKCZwd19jdHgtPnNlcnZlcl92ZXJzaW9uLCB2ZXJzaW9uKSkKPiArICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAgIltwaXBld2lyZWdy YWJdIGZhaWxlZCB0byBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiIpOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogQVZTdHJlYW0gY3JlYXRvcgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSB2YWxpZCBB VlN0cmVhbSBiYXNlZCBvbiBwaXBld2lyZSdzIG5lZ290aWF0ZWQKPiArICogcGFyYW1zLCB0aGVu IHNpZ25hbCB0aGUgYmxvY2tlZCBAcmVmIHBpcGV3aXJlZ3JhYl9yZWFkX2hlYWRlcgo+ICsgKgo+ ICsgKiBAcGFyYW0gY3R4IEFWRm9ybWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdy YWIgbWFpbiBzdHJ1Y3R1cmUKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJST1Igb24g ZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBjcmVhdGVfZmZtcGVnX3N0cmVhbShBVkZvcm1h dENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBpbnQ2NF90IGZy YW1lX3NpemVfYml0czsKPiArICAgIEFWU3RyZWFtICphdnN0cmVhbSA9IGF2Zm9ybWF0X25ld19z dHJlYW0oY3R4LCBOVUxMKTsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0 eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19jdHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlk IHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPiArICAgIH0KPiArCgpJZiBwd19jdHcgY2FuIGJlIE5VTEwgaGVyZSAod2hpY2ggSSBk b24ndCB0aGluayBpdCBjYW4gYmUsIHRiaCksIHRoZW4gCnlvdSBsZWFrIHRoZSBhdnN0cmVhbSB5 b3UganVzdCBjcmVhdGVkLgoKCj4gKyAgICBpZiAoIWF2c3RyZWFtKSB7Cj4gKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0g YXZmb3JtYXRfbmV3X3N0cmVhbSBmYWlsZWQhXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIGF2c3RyZWFtLT5hdmdfZnJhbWVfcmF0ZS5u dW0gPSBwd19jdHgtPnVzZXJfZnJhbWVfcmF0ZS5udW07Cj4gKyAgICBhdnN0cmVhbS0+YXZnX2Zy YW1lX3JhdGUuZGVuID0gcHdfY3R4LT51c2VyX2ZyYW1lX3JhdGUuZGVuOwphdnN0cmVhbS0+YXZn X2ZyYW1lX3JhdGUgPSBwd19jdHgtPnVzZXJfZnJhbWVfcmF0ZTsKCj4gKwo+ICsgICAgYXZwcml2 X3NldF9wdHNfaW5mbyhhdnN0cmVhbSwgNjQsIDEsIDEwMDAwMDApOwpXaGF0J3MgdGhlIHBvaW50 IG9mIHN0b3JpbmcgdGhlIHRpbWViYXNlIGlmIHlvdSBkb24ndCB1c2UgaXQ/Cgo+ICsKPiArICAg IHB3X2N0eC0+dGltZV9iYXNlID0gKEFWUmF0aW9uYWwpeyBhdnN0cmVhbS0+YXZnX2ZyYW1lX3Jh dGUuZGVuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2c3RyZWFt LT5hdmdfZnJhbWVfcmF0ZS5udW0gfTsKClRoaXMgd29uJ3QgY29tcGlsZSB3aXRoIC1wZWRhbnRp Yy4gVXNlIGF2X21ha2VfcSBpbnN0ZWFkLgoKPiArICAgIHB3X2N0eC0+ZnJhbWVfZHVyYXRpb24g PSBhdl9yZXNjYWxlX3EoMSwgcHdfY3R4LT50aW1lX2Jhc2UsIEFWX1RJTUVfQkFTRV9RKTsKPiAr ICAgIHB3X2N0eC0+dGltZV9mcmFtZSA9IGF2X2dldHRpbWVfcmVsYXRpdmUoKTsKPiArCj4gKyAg ICBmcmFtZV9zaXplX2JpdHMgPSAoaW50NjRfdClwd19jdHgtPndpZHRoICogcHdfY3R4LT5oZWln aHQgKiBwd19jdHgtPkJwcCAqIDg7Cj4gKyAgICBhdnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5 cGUgPSBBVk1FRElBX1RZUEVfVklERU87Cj4gKyAgICBhdnN0cmVhbS0+Y29kZWNwYXItPmNvZGVj X2lkID0gQVZfQ09ERUNfSURfUkFXVklERU87Cj4gKyAgICBhdnN0cmVhbS0+Y29kZWNwYXItPndp ZHRoID0gcHdfY3R4LT53aWR0aDsKPiArICAgIGF2c3RyZWFtLT5jb2RlY3Bhci0+aGVpZ2h0ID0g cHdfY3R4LT5oZWlnaHQ7Cj4gKyAgICBhdnN0cmVhbS0+Y29kZWNwYXItPmJpdF9yYXRlID0KPiAr ICAgICAgICBhdl9yZXNjYWxlKGZyYW1lX3NpemVfYml0cywgYXZzdHJlYW0tPmF2Z19mcmFtZV9y YXRlLm51bSwKPiArICAgICAgICAgICAgICAgICAgIGF2c3RyZWFtLT5hdmdfZnJhbWVfcmF0ZS5k ZW4pOwo+ICsgICAgYXZzdHJlYW0tPmNvZGVjcGFyLT5mb3JtYXQgPSBwd19jdHgtPmF2X3B4bF9m b3JtYXQ7Cj4gKwo+ICsgICAgYXRvbWljX3N0b3JlKCZwd19jdHgtPmF2c3RyZWFtX2NvZGVjX2Zs YWcsIDEpOwo+ICsgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcHdfY3R4LT5hdnN0cmVhbV9jb2Rl Y19jb25kX3Zhcik7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKSWYgcmV0IGNhbid0IGJlIG5vbnpl cm8gaGVyZSwganVzdCBwdXQgcmV0dXJuIDAgYXQgdGhlIGJvdHRvbSBhbmQgZGl0Y2ggcmV0LgoK PiArfQo+ICsKPiArLyoqCj4gKyAqIFBpcGV3aXJlIG1hbnVhbCBhYm9ydAo+ICsgKgo+ICsgKiBA cGFyYW0gdXNlcl9kYXRhIEFWRm9ybWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdy YWIgbWFpbiBzdHJ1Y3R1cmUKPiArICogQHBhcmFtIG1lc3NhZ2UgYWJvcnQgbWVzc2FnZQo+ICsg Ki8KPiArc3RhdGljIHZvaWQgcGlwZXdpcmVncmFiX2Fib3J0KHZvaWQgKnVzZXJfZGF0YSwgY29u c3QgY2hhciAqbWVzc2FnZSkKPiArewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1c2Vy X2RhdGE7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBOVUxMOwpVbm5lY2Vz c2FyeSBpbml0aWFsaXphdGlvbi4KCj4gKyAgICBpZiAoIWN0eCkgewo+ICsgICAgICAgIHJldHVy bjsKPiArICAgIH1Db2RlIHN0eWxlLCBvbmUtbGluZXJzIGRvbid0IHVzZSB7fSBicmFjZXMuCj4g Kwo+ICsgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltw aXBld2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAgICAg ICByZXR1cm47Cj4gKyAgICB9SXMgdGhpcyBzb21ldGhpbmcgdGhhdCBhY3R1YWxseSBtaWdodCBo YXBwZW4gd2hlcmUgQVZGb3JtYXRDb250ZXh0IGlzIApkZWZpbmVkIGJ1dCBub3QgcG9wdWxhdGVk IHdpdGggcHJpdl9kYXRhPyBBbmQgaWYgc28sIGRvZXMgdGhlIHVzZXIgbmVlZCAKdG8ga25vdyBh Ym91dCBpdD8gSWYgbm90LCB5b3UgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKCmlmICgh Y3R4IHx8ICFjdHgtPnByaXZfZGF0YSkKICAgICByZXR1cm47Cgo+ICsKPiArICAgIGF0b21pY19z dG9yZSgmcHdfY3R4LT5hdnN0cmVhbV9jb2RlY19mbGFnLCAxKTsKPiArICAgIHB0aHJlYWRfY29u ZF9zaWduYWwoJnB3X2N0eC0+YXZzdHJlYW1fY29kZWNfY29uZF92YXIpOwo+ICsKPiArICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIltwaXBld2lyZWdyYWJdIEFib3J0aW5nOiAlc1xuIiwg bWVzc2FnZSk7Cj4gKwo+ICsgICAgaWYgKHB3X2N0eC0+dGhyZWFkX2xvb3AgIT0gTlVMTClDb252 ZW50aW9uIGlzIHRvIGF2b2lkICIhPSBOVUxMIiBpbiBGRm1wZWcsIGFuZCB1c2Ugc3RhbmRhcmQg QyBub256ZXJvIApjaGVja2luZy4KCj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3 X2N0eC0+dGhyZWFkX2xvb3AsIGZhbHNlKTsKPiArCj4gKyAgICBpZiAocHdfY3R4LT5nbGliX21h aW5fbG9vcCAhPSBOVUxMICYmClNhbWUuCj4gKyAgICAgICAgZ19tYWluX2xvb3BfaXNfcnVubmlu Zyhwd19jdHgtPmdsaWJfbWFpbl9sb29wKSkgewo+ICsgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo cHdfY3R4LT5nbGliX21haW5fbG9vcCk7Cj4gKyAgICB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBQ aXBld2lyZSBjb3JlIGluZm8gZXZlbnQKPiArICoKPiArICogQHBhcmFtIHVzZXJfZGF0YSBBVkZv cm1hdENvbnRleHQgdGhhdCBjb250YWlucyBQaXBlV2lyZSBHcmFiIG1haW4gc3RydWN0dXJlCj4g KyAqIEBwYXJhbSBpbmZvIHB3X2NvcmVfaW5mbwo+ICsgKi8KPiArc3RhdGljIHZvaWQgb25fY29y ZV9pbmZvX2NiKHZvaWQgKnVzZXJfZGF0YSwgY29uc3Qgc3RydWN0IHB3X2NvcmVfaW5mbyAqaW5m bykKPiArewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1c2VyX2RhdGE7Cj4gKyAgICB1 cGRhdGVfcHdfdmVyc2lvbnMoY3R4LCBpbmZvLT52ZXJzaW9uKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFBpcGV3aXJlIGNvcmUgY29tcGxldGlvbiBldmVudAo+ICsgKgo+ICsgKiBAcGFyYW0gdXNl cl9kYXRhIEFWRm9ybWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBpcGVXaXJlIEdyYWIgbWFpbiBz dHJ1Y3R1cmUKPiArICogQHBhcmFtIGlkIHBpcGV3aXJlIG9iamVjdCBpZCBvZiBjYWxsaW5nCj4g KyAqIEBwYXJhbSBzZXEgcGlwZXdpcmUgb2JqZWN0IHNlcXVlbmNlCj4gKyAqLwo+ICtzdGF0aWMg dm9pZCBvbl9jb3JlX2RvbmVfY2FsbGJhY2sodm9pZCAqdXNlcl9kYXRhLCB1aW50MzJfdCBpZCwg aW50IHNlcSkKPiArewo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1c2VyX2RhdGE7Cj4g KyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBOVUxMOwpVbm5lY2Vzc2FyeSBpbml0 aWFsaXphdGlvbi4KPiArCj4gKyAgICAodm9pZClzZXE7CldoYXQ/Cgo+ICsKPiArICAgIGlmICgh Y3R4KSB7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQpDb2RlIHN0eWxlIGFnYWluLgo+ICsK PiArICAgIHB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19jdHgpIHsKPiAr ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlw ZXdpcmVncmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4gKyAgICAgICAg cmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChpZCA9PSBQV19JRF9DT1JFKSB7Cj4gKyAg ICAgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3X2N0eC0+dGhyZWFkX2xvb3AsIGZhbHNlKTsK PiArICAgICAgICBnX21haW5fbG9vcF9xdWl0KHB3X2N0eC0+Z2xpYl9tYWluX2xvb3ApOwo+ICsg ICAgfQo+ICt9Cj4gKwo+ICsvKioKPiArICogUGlwZXdpcmUgY29yZSBlcnJvciBldmVudAo+ICsg Kgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIEFWRm9ybWF0Q29udGV4dCB0aGF0IGNvbnRhaW5zIFBp cGVXaXJlIEdyYWIgbWFpbiBzdHJ1Y3R1cmUKPiArICogQHBhcmFtIGlkIHBpcGV3aXJlIG9iamVj dCBpZCBvZiBjYWxsaW5nCj4gKyAqIEBwYXJhbSBzZXEgcGlwZXdpcmUgb2JqZWN0IHNlcXVlbmNl Cj4gKyAqIEBwYXJhbSByZXMgZXJyb3IgbnVtYmVyCj4gKyAqIEBwYXJhbSBtZXNzYWdlIGVycm9y IG1lc3NhZ2UKPiArICovCj4gK3N0YXRpYyB2b2lkIG9uX2NvcmVfZXJyb3JfY2FsbGJhY2sodm9p ZCAqdXNlcl9kYXRhLCB1aW50MzJfdCBpZCwgaW50IHNlcSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcmVzLCBjb25zdCBjaGFyICptZXNzYWdlKQo+ICt7Cj4gKyAg ICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKPiArICAgIFBpcGV3aXJlR3JhYkNv bnRleHQgKnB3X2N0eCA9IE5VTEw7ClVubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uLgo+ICsgICAg aWYgKCFjdHgpIHsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9CkNvZGUgc3R5bGUuCj4gKwo+ ICsgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltwaXBl d2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAgICAgICBy ZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsg ICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBFcnJvciBpZDoldSBzZXE6JWQgcmVzOiVkICglcyk6 ICVzXG4iLCBpZCwgc2VxLCByZXMsCj4gKyAgICAgICAgICAgZ19zdHJlcnJvcihyZXMpLCBtZXNz YWdlKTsKPiArCj4gKyAgICBwd190aHJlYWRfbG9vcF9zaWduYWwocHdfY3R4LT50aHJlYWRfbG9v cCwgZmFsc2UpOwo+ICsgICAgZ19tYWluX2xvb3BfcXVpdChwd19jdHgtPmdsaWJfbWFpbl9sb29w KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJlZ2lzdGVyIHBpcGV3aXJlIGNvcmUgZXZlbnQgY2Fs bGJhY2tzIGhlcmUKPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdfY29yZV9ldmVudHMg Y29yZV9ldmVudHMgPSB7Cj4gKyAgICBQV19WRVJTSU9OX0NPUkVfRVZFTlRTLAo+ICsgICAgLmlu Zm8gPSBvbl9jb3JlX2luZm9fY2IsCj4gKyAgICAuZG9uZSA9IG9uX2NvcmVfZG9uZV9jYWxsYmFj aywKPiArICAgIC5lcnJvciA9IG9uX2NvcmVfZXJyb3JfY2FsbGJhY2ssCj4gK307Cj4gKwo+ICsv KioKPiArICogaGVscGVyIGZ1bmN0aW9uOiBjcmVhdGUgYSBuZXcgcGF0aCB0byBkYnVzIGRlc2t0 b3Agb2JqZWN0IHJlcXVlc3QgbWV0aG9kCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRD b250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUgR3JhYiBtYWluIHN0cnVjdHVyZQo+ICsgKiBA cGFyYW0gb3V0X3BhdGggZGJ1cyB0b2tlbiBjb3VudAo+ICsgKiBAcGFyYW0gb3V0X3Rva2VuIGZp bmFsIG9iamVjdC9pbnRlcmZhY2UgcGF0aCBmb3IgcmVxdWVzdCBtZXRob2QKPiArICovCj4gK3N0 YXRpYyB2b2lkIG5ld19yZXF1ZXN0X3BhdGgoQVZGb3JtYXRDb250ZXh0ICpjdHgsIGNoYXIgKipv dXRfcGF0aCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0X3Rva2Vu KQo+ICt7Cj4gKyAgICBzdGF0aWMgdWludDMyX3QgcmVxdWVzdF90b2tlbl9jb3VudCA9IDA7Cllv dSBuZWVkIHRvIHN0b3JlIHRoaXMgaW4gdGhlIHByaXZhdGUgY29udGV4dC4gU3RhdGljIG5vbi1j b25zdCBmaWVsZHMgCmFyZW4ndCBnb2luZyB0byB3b3JrIGJlY2F1c2UgbXVsdGlwbGUgY2xpZW50 cyBjYW4gY2FsbCBsaWJhdmRldmljZSBhdCAKdGhlIHNhbWUgdGltZS4gUHJvdGVjdGluZyBpdCB3 aXRoIGEgbXV0ZXggd29uJ3Qgd29yayBlaXRoZXIuCgo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4 dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ICsgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltwaXBld2ly ZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAgICAgICByZXR1 cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmVxdWVzdF90b2tlbl9jb3VudCsrOwo+ICsKPiArICAg IGlmIChvdXRfdG9rZW4pIHsKPiArICAgICAgICAqb3V0X3Rva2VuID0gZ19zdHJkdXBfcHJpbnRm KCJvYnMldSIsIHJlcXVlc3RfdG9rZW5fY291bnQpOwo+ICsgICAgfQpDb2RlIHN0eWxlLCBicmFj ZXMuCgo+ICsKPiArICAgIGlmIChvdXRfcGF0aCkgewo+ICsgICAgICAgICpvdXRfcGF0aCA9IGdf c3RyZHVwX3ByaW50ZihSRVFVRVNUX1BBVEgsIHB3X2N0eC0+c2VuZGVyX25hbWUsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfdG9rZW5fY291bnQpOwo+ICsg ICAgfUNvZGUgc3R5bGUsIGJyYWNlcy4KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBoZWxwZXIgZnVu Y3Rpb246IGNyZWF0ZSBuZXcgcGF0aCB0byBkYnVzIGFjdGl2ZSBkZXNrdG9wIHNlc3Npb24KPiAr ICoKPiArICogQHBhcmFtIGN0eCBBVkZvcm1hdENvbnRleHQgdGhhdCBjb250YWlucyBQaXBlV2ly ZSBHcmFiIG1haW4gc3RydWN0dXJlCj4gKyAqIEBwYXJhbSBvdXRfcGF0aCBkYnVzIHNlc3Npb24g dG9rZW4gY291bnQKPiArICogQHBhcmFtIG91dF90b2tlbiBmaW5hbCBvYmplY3QvaW50ZXJmYWNl IHBhdGggZm9yIGFjdGl2ZSBzZXNzaW9uCj4gKyAqLwpUaGlzIGxvb2tzIHN1c3BpY2lvdXNseSBs aWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgY2FuIHRoZSBjb2RlIGJlIApkZWR1cGxpY2F0ZWQ/ Cj4gK3N0YXRpYyB2b2lkIG5ld19zZXNzaW9uX3BhdGgoQVZGb3JtYXRDb250ZXh0ICpjdHgsIGNo YXIgKipvdXRfcGF0aCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0 X3Rva2VuKQo+ICt7Cj4gKyAgICBzdGF0aWMgdWludDMyX3Qgc2Vzc2lvbl90b2tlbl9jb3VudCA9 IDA7ClNlZSBlYXJsaWVyIGNvbW1lbnRzIGZvciBhYm92ZSBmdW5jdGlvbi4KPiArICAgIFBpcGV3 aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19j dHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAg ICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4g KyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIHNlc3Npb25fdG9rZW5fY291bnQr KzsKPiArCj4gKyAgICBpZiAob3V0X3Rva2VuKSB7Cj4gKyAgICAgICAgKm91dF90b2tlbiA9IGdf c3RyZHVwX3ByaW50Zigib2JzJXUiLCBzZXNzaW9uX3Rva2VuX2NvdW50KTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAob3V0X3BhdGgpIHsKPiArICAgICAgICAqb3V0X3BhdGggPSBnX3N0cmR1cF9w cmludGYoU0VTU0lPTl9QQVRILCBwd19jdHgtPnNlbmRlcl9uYW1lLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3Rva2VuX2NvdW50KTsKPiArICAgIH0KPiAr fQo+ICsKPiArLyoqCj4gKyAqIGhlbHBlciBmdW5jdGlvbjogY29udmVydCBzcGEgcGl4ZWwgZm9y bWF0IHRvIGF2IHBpeGVsIGZvcm1hdAo+ICsgKgo+ICsgKiBAcGFyYW0gc3BhX2Zvcm1hdCBjb25h dGlucyBzcGEgZm9ybWF0IHZhbHVlCj4gKyAqIEByZXR1cm4gQVZQaXhlbEZvcm1hdAo+ICsgKi8K PiArc3RhdGljIGVudW0gQVZQaXhlbEZvcm1hdAo+ICtzcGFfcGl4ZWxfZm9ybWF0X3RvX2F2X3Bp eGVsX2Zvcm1hdCh1aW50MzJfdCBzcGFfZm9ybWF0KQo+ICt7Cj4gKyAgICBlbnVtIEFWUGl4ZWxG b3JtYXQgcmV0ID0gQVZfUElYX0ZNVF9OT05FOwo+ICsgICAgc3dpdGNoIChzcGFfZm9ybWF0KSB7 Cj4gKyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfUkdCQToKPiArICAgIGNhc2UgU1BBX1ZJREVP X0ZPUk1BVF9SR0J4Ogo+ICsgICAgICAgIHJldCA9IEFWX1BJWF9GTVRfUkdCQTsKPiArICAgICAg ICBicmVhazsKPiArCklubGluZSBhIHJldHVybiBzdGF0ZW1lbnQgaGVyZSwgYW5kIHJldHVybiBB Vl9QSVhfRk1UX05PTkUgYXQgdGhlIGVuZCBvZiAKdGhlIGZ1bmN0aW9uLgoKCj4gKyAgICBjYXNl IFNQQV9WSURFT19GT1JNQVRfQkdSQToKPiArICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9CR1J4 Ogo+ICsgICAgICAgIHJldCA9IEFWX1BJWF9GTVRfQkdSQTsKPiArICAgICAgICBicmVhazsKPiAr Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJldCA9IEFWX1BJWF9GTVRfTk9ORTsKPiArICAg IH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogaGVscGVyIGZ1 bmN0aW9uOiBncmFjZWZ1bGx5IHN0b3AvZGVzdHJveSBvZiBwaXBld2lyZSBvYmplY3RzCj4gKyAq Cj4gKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRDb250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUg R3JhYiBtYWluIHN0cnVjdHVyZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgdGVhcmRvd25fcGlwZXdp cmUoQVZGb3JtYXRDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQg KnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19jdHgpIHsKPiArICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVn cmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4gKyAgICAgICAgcmV0dXJu Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChwd19jdHgtPnRocmVhZF9sb29wKSB7Cj4gKyAgICAg ICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOwo+ICsgICAgICAg IHB3X3RocmVhZF9sb29wX3N0b3AocHdfY3R4LT50aHJlYWRfbG9vcCk7Cj4gKyAgICB9CllvdSBz aG91bGQgbnVsbGlmeSB0aGVzZSB2YXJpb3VzIGZpZWxkcyBhZnRlciB5b3UgZGlzY29ubmVjdCwg c28gY2FsbGluZyAKdGhpcyB0d2ljZSB3b24ndCBjcmVhdGUgZXJyb3JzLgo+ICsKPiArICAgIGlm IChwd19jdHgtPnN0cmVhbSkgewo+ICsgICAgICAgIHB3X3N0cmVhbV9kaXNjb25uZWN0KHB3X2N0 eC0+c3RyZWFtKTsKPiArICAgICAgICBnX2NsZWFyX3BvaW50ZXIoJnB3X2N0eC0+c3RyZWFtLCBw d19zdHJlYW1fZGVzdHJveSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHB3X2N0eC0+Y29yZSkK PiArICAgICAgICBwd19jb3JlX2Rpc2Nvbm5lY3QocHdfY3R4LT5jb3JlKTsKPiArCj4gKyAgICBp ZiAocHdfY3R4LT5jb250ZXh0KQo+ICsgICAgICAgIHB3X2NvbnRleHRfZGVzdHJveShwd19jdHgt PmNvbnRleHQpOwo+ICsKPiArICAgIGlmIChwd19jdHgtPnRocmVhZF9sb29wKSB7Cj4gKyAgICAg ICAgcHdfdGhyZWFkX2xvb3BfZGVzdHJveShwd19jdHgtPnRocmVhZF9sb29wKTsKPiArICAgIH0K Q29kZSBzdHlsZSwgYnJhY2VzLgoKPiArCj4gKyAgICBwd19jdHgtPm5lZ290aWF0ZWQgPSBmYWxz ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGhlbHBlciBmdW5jdGlvbjogZ3JhY2VmdWxseSBzdG9w L2Rlc3Ryb3kgb2YgZGJ1cyBzZXNzaW9uCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRD b250ZXh0IHRoYXQgY29udGFpbnMgUGlwZVdpcmUgR3JhYiBtYWluIHN0cnVjdHVyZQo+ICsgKi8K PiArc3RhdGljIHZvaWQgZGVzdHJveV9zZXNzaW9uKEFWRm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7 Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKPiAr ICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQg ZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocHdf Y3R4LT5zZXNzaW9uX2hhbmRsZSkgewo+ICsgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwo Cj4gKyAgICAgICAgICAgIHB3X2N0eC0+Y29ubmVjdGlvbiwgIm9yZy5mcmVlZGVza3RvcC5wb3J0 YWwuRGVza3RvcCIsCj4gKyAgICAgICAgICAgIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsICJvcmcu ZnJlZWRlc2t0b3AucG9ydGFsLlNlc3Npb24iLCAiQ2xvc2UiLAo+ICsgICAgICAgICAgICBOVUxM LCBOVUxMLCBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4g Kwo+ICsgICAgICAgIGdfY2xlYXJfcG9pbnRlcigmcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwgZ19m cmVlKTsKPiArICAgIH0KPiArCj4gKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChwd19jdHgtPmNh bmNlbGxhYmxlKTsKPiArICAgIGdfY2xlYXJfb2JqZWN0KCZwd19jdHgtPmNhbmNlbGxhYmxlKTsK PiArICAgIGdfY2xlYXJfb2JqZWN0KCZwd19jdHgtPmNvbm5lY3Rpb24pOwo+ICsgICAgZ19jbGVh cl9vYmplY3QoJnB3X2N0eC0+cHJveHkpOwo+ICsgICAgZ19jbGVhcl9wb2ludGVyKCZwd19jdHgt PnNlbmRlcl9uYW1lLCBnX2ZyZWUpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaGVscGVyIGZ1bmN0 aW9uOiBncmFjZWZ1bGx5IHN0b3AvZGVzdHJveSBvZiBwaXBld2lyZS9kYnVzIHNlc3Npb24KPiAr ICoKPiArICogQHBhcmFtIGN0eCBBVkZvcm1hdENvbnRleHQgdGhhdCBjb250YWlucyBQaXBlV2ly ZSBHcmFiIG1haW4gc3RydWN0dXJlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBwaXBld2lyZV9kZXN0 cm95KEFWRm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICB0ZWFyZG93bl9waXBld2lyZShj dHgpOwo+ICsgICAgZGVzdHJveV9zZXNzaW9uKGN0eCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBj YWxsYmFjayB0byBzdG9wL2Rpc2Nvbm5lY3QgY3VycmVudCBkYnVzIHNlc3Npb24KPiArICoKPiAr ICogQHBhcmFtIHB0cl9kYnVzX2NhbGxfZGF0YSBkYnVzIG1hcnNoYWxsaW5nIHN0cnVjdHVyZQo+ ICsgKi8KPiArc3RhdGljIHZvaWQgZGJ1c19jYWxsX2RhdGFfZnJlZShzdHJ1Y3QgRGJ1c0NhbGxE YXRhICpwdHJfZGJ1c19jYWxsX2RhdGEpCj4gK3sKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4 ID0gTlVMTDsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IE5VTEw7ClVubmVj ZXNzYXJ5IGluaXRpYWxpemF0aW9ucy4KPiArCj4gKyAgICBpZiAoIXB0cl9kYnVzX2NhbGxfZGF0 YSkKPiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgY3R4ID0gcHRyX2RidXNfY2FsbF9kYXRh LT5jdHg7Cj4gKyAgICBpZiAoIWN0eCkKPiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgcHdf Y3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ICsgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltwaXBld2lyZWdyYWJd IEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAgICAgICByZXR1cm47Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKHB0cl9kYnVzX2NhbGxfZGF0YS0+c2lnbmFsX2lkKQo+ICsg ICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmliZShwd19jdHgtPmNvbm5l Y3Rpb24sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 cl9kYnVzX2NhbGxfZGF0YS0+c2lnbmFsX2lkKTsKPiArCj4gKyAgICBpZiAocHRyX2RidXNfY2Fs bF9kYXRhLT5jYW5jZWxsZWRfaWQgPiAwKQo+ICsgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz Y29ubmVjdChwd19jdHgtPmNhbmNlbGxhYmxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2RhdGEtPmNhbmNlbGxlZF9pZCk7Cj4gKwo+ICsgICAg Z19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEtPnJlcXVlc3RfcGF0aCwgZ19mcmVl KTsKPiArICAgIGdfZnJlZShwdHJfZGJ1c19jYWxsX2RhdGEpOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogZGJ1cyBjYWxsYmFjayBvZiBjYW5jZWxsZWQgZXZlbnRzCj4gKyAqCj4gKyAqIEBwYXJhbSBj YW5jZWxsYWJsZSBub3QgdXNlZAo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIGRidXMgbWFyc2hhbGxp bmcgc3RydWN0dXJlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBvbl9jYW5jZWxsZWRfY2FsbGJhY2so R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQo+ICt7Cj4gKyAg ICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2RhdGEgPSB1c2VyX2RhdGE7Cj4g KyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHB0cl9kYnVzX2NhbGxfZGF0YS0+Y3R4Owo+ICsg ICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKwo+ICsg ICAgKHZvaWQpY2FuY2VsbGFibGU7CldoYXQ/Cgo+ICsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4g KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3Bp cGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAg IHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIltw aXBld2lyZWdyYWJdIFNjcmVlbmNhc3Qgc2Vzc2lvbiBjYW5jZWxsZWQhXG4iKTsKPiArCj4gKyAg ICBnX2RidXNfY29ubmVjdGlvbl9jYWxsKHB3X2N0eC0+Y29ubmVjdGlvbiwgIm9yZy5mcmVlZGVz a3RvcC5wb3J0YWwuRGVza3RvcCIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9k YnVzX2NhbGxfZGF0YS0+cmVxdWVzdF9wYXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiwgIkNsb3NlIiwgTlVMTCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwgLTEs IE5VTEwsIE5VTEwsIE5VTEwpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogcGlwZXdpcmUgY2FsbGJh Y2sgb2YgcGFyYW1ldGVycyBjaGFuZ2VkIGV2ZW50cwo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9k YXRhIGRidXMgbWFyc2hhbGxpbmcgc3RydWN0dXJlCj4gKyAqIEBwYXJhbSBpZCBjb250YWlucyBj aGFuIHBhcmFtIHR5cGUKPiArICogQHBhcmFtIHBhcmFtIHBvaW50ZXIgdG8gY2hhbmdlZCBwYXJh bSBzdHJ1Y3R1cmUKPiArICovCj4gK3N0YXRpYyB2b2lkIG9uX3N0cmVhbV9wYXJhbV9jaGFuZ2Vk X2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDMyX3QgaWQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJh bSkKPiArewo+ICsgICAgc3RydWN0IHNwYV9wb2RfYnVpbGRlciBwb2RfYnVpbGRlcjsKPiArICAg IGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbXNbTUFYX1NQQV9QQVJBTV07Cj4gKyAgICB1aW50 MzJfdCBuX3BhcmFtcyA9IDA7Cj4gKyAgICB1aW50OF90IHBhcmFtc19idWZmZXJbNDA5Nl07Cj4g KyAgICBpbnQgcmVzdWx0Owo+ICsKPiArICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4ID0gdXNlcl9k YXRhOwo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gTlVMTDsKPiArICAgIGlm ICghY3R4KSB7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQpDb2RlIHN0eWxlLCBicmFjZXMu Cj4gKwo+ICsgICAgcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3X2N0eCkg ewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAg IltwaXBld2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAg ICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCFwYXJhbSB8fCBpZCAhPSBTUEFf UEFSQU1fRm9ybWF0KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsCj4g KyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJZ25vcmluZyBub25lIHN0cmVhbSBwYXJh bSBmb3JtYXQgY2hhbmdlIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiAr ICAgIHJlc3VsdCA9IHNwYV9mb3JtYXRfcGFyc2UocGFyYW0sICZwd19jdHgtPmZvcm1hdC5tZWRp YV90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5mb3JtYXQu bWVkaWFfc3VidHlwZSk7Cj4gKyAgICBpZiAocmVzdWx0IDwgMCkKPiArICAgICAgICByZXR1cm47 Cj4gKwo+ICsgICAgaWYgKHB3X2N0eC0+Zm9ybWF0Lm1lZGlhX3R5cGUgIT0gU1BBX01FRElBX1RZ UEVfdmlkZW8gfHwKPiArICAgICAgICBwd19jdHgtPmZvcm1hdC5tZWRpYV9zdWJ0eXBlICE9IFNQ QV9NRURJQV9TVUJUWVBFX3JhdykKPiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgc3BhX2Zv cm1hdF92aWRlb19yYXdfcGFyc2UocGFyYW0sICZwd19jdHgtPmZvcm1hdC5pbmZvLnJhdyk7Cj4g Kwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJbcGlwZXdpcmVncmFiXSBOZWdvdGlh dGVkIGZvcm1hdDpcbiIpOwo+ICsKPiArICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiW3Bp cGV3aXJlZ3JhYl0gICAgIEZvcm1hdDogJWQgKCVzKVxuIiwKPiArICAgICAgICAgICBwd19jdHgt PmZvcm1hdC5pbmZvLnJhdy5mb3JtYXQsCj4gKyAgICAgICAgICAgc3BhX2RlYnVnX3R5cGVfZmlu ZF9uYW1lKHNwYV90eXBlX3ZpZGVvX2Zvcm1hdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZm9ybWF0KSk7Cj4gKyAgICBhdl9s b2coY3R4LCBBVl9MT0dfSU5GTywgIltwaXBld2lyZWdyYWJdICAgICBTaXplOiAlZHglZFxuIiwK PiArICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLndpZHRoLAo+ICsgICAg ICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUuaGVpZ2h0KTsKPiArICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19JTkZPLCAiW3BpcGV3aXJlZ3JhYl0gICAgIEZyYW1lcmF0ZTogJWQvJWRc biIsCj4gKyAgICAgICAgICAgcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZnJhbWVyYXRlLm51bSwK PiArICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mcmFtZXJhdGUuZGVub20pOwo+ ICsKPiArICAgIHB3X2N0eC0+d2lkdGggPSBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLndp ZHRoOwo+ICsgICAgcHdfY3R4LT5oZWlnaHQgPSBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXpl LmhlaWdodDsKPiArICAgIHB3X2N0eC0+QnBwID0gQllURVNfUEVSX1BJWEVMOwo+ICsgICAgcHdf Y3R4LT5mcmFtZV9zaXplID0gcHdfY3R4LT53aWR0aCAqIHB3X2N0eC0+aGVpZ2h0ICogcHdfY3R4 LT5CcHA7CkNoZWNrIGZvciBvdmVyZmxvdy4KCj4gKyAgICBwd19jdHgtPmF2X3B4bF9mb3JtYXQg PQo+ICsgICAgICAgIHNwYV9waXhlbF9mb3JtYXRfdG9fYXZfcGl4ZWxfZm9ybWF0KHB3X2N0eC0+ Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCk7Cj4gKwo+ICsgICAgLyogVmlkZW8gY3JvcCAqLwo+ICsg ICAgcG9kX2J1aWxkZXIgPSBTUEFfUE9EX0JVSUxERVJfSU5JVChwYXJhbXNfYnVmZmVyLCBzaXpl b2YocGFyYW1zX2J1ZmZlcikpOwo+ICsgICAgcGFyYW1zW25fcGFyYW1zKytdID0gc3BhX3BvZF9i dWlsZGVyX2FkZF9vYmplY3QoCj4gKyAgICAgICAgJnBvZF9idWlsZGVyLCBTUEFfVFlQRV9PQkpF Q1RfUGFyYW1NZXRhLCBTUEFfUEFSQU1fTWV0YSwKPiArICAgICAgICBTUEFfUEFSQU1fTUVUQV90 eXBlLCBTUEFfUE9EX0lkKFNQQV9NRVRBX1ZpZGVvQ3JvcCksCj4gKyAgICAgICAgU1BBX1BBUkFN X01FVEFfc2l6ZSwgU1BBX1BPRF9JbnQoc2l6ZW9mKHN0cnVjdCBzcGFfbWV0YV9yZWdpb24pKSk7 Cj4gKwo+ICsgICAgLyogQ3Vyc29yICovCj4gKyAgICBwYXJhbXNbbl9wYXJhbXMrK10gPSBzcGFf cG9kX2J1aWxkZXJfYWRkX29iamVjdCgKPiArICAgICAgICAmcG9kX2J1aWxkZXIsIFNQQV9UWVBF X09CSkVDVF9QYXJhbU1ldGEsIFNQQV9QQVJBTV9NZXRhLAo+ICsgICAgICAgIFNQQV9QQVJBTV9N RVRBX3R5cGUsIFNQQV9QT0RfSWQoU1BBX01FVEFfQ3Vyc29yKSwgU1BBX1BBUkFNX01FVEFfc2l6 ZSwKPiArICAgICAgICBTUEFfUE9EX0NIT0lDRV9SQU5HRV9JbnQoQ1VSU09SX01FVEFfU0laRSg2 NCwgNjQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJTT1JfTUVUQV9T SVpFKDEsIDEpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJTT1JfTUVU QV9TSVpFKDEwMjQsIDEwMjQpKSk7Cj4gKwo+ICsgICAgLyogQnVmZmVyIG9wdGlvbnMgKi8KPiAr ICAgIHBhcmFtc1tuX3BhcmFtcysrXSA9IHNwYV9wb2RfYnVpbGRlcl9hZGRfb2JqZWN0KAo+ICsg ICAgICAgICZwb2RfYnVpbGRlciwgU1BBX1RZUEVfT0JKRUNUX1BhcmFtQnVmZmVycywgU1BBX1BB UkFNX0J1ZmZlcnMsCj4gKyAgICAgICAgU1BBX1BBUkFNX0JVRkZFUlNfZGF0YVR5cGUsCj4gKyAg ICAgICAgU1BBX1BPRF9JbnQoKDEgPDwgU1BBX0RBVEFfTWVtUHRyKSB8ICgxIDw8IFNQQV9EQVRB X01lbUZkKSkpOwo+ICsKPiArICAgIC8qIE1ldGEgaGVhZGVyICovCj4gKyAgICBwYXJhbXNbbl9w YXJhbXMrK10gPSBzcGFfcG9kX2J1aWxkZXJfYWRkX29iamVjdCgKPiArICAgICAgICAmcG9kX2J1 aWxkZXIsIFNQQV9UWVBFX09CSkVDVF9QYXJhbU1ldGEsIFNQQV9QQVJBTV9NZXRhLAo+ICsgICAg ICAgIFNQQV9QQVJBTV9NRVRBX3R5cGUsIFNQQV9QT0RfSWQoU1BBX01FVEFfSGVhZGVyKSwKPiAr ICAgICAgICBTUEFfUEFSQU1fTUVUQV9zaXplLAo+ICsgICAgICAgIFNQQV9QT0RfSW50KHNpemVv ZihzdHJ1Y3Qgc3BhX21ldGFfaGVhZGVyKSkpOwo+ICsKPiArICAgIHB3X3N0cmVhbV91cGRhdGVf cGFyYW1zKHB3X2N0eC0+c3RyZWFtLCBwYXJhbXMsIG5fcGFyYW1zKTsKPiArCj4gKyAgICBwd19j dHgtPm5lZ290aWF0ZWQgPSB0cnVlOwo+ICsKPiArICAgIGNyZWF0ZV9mZm1wZWdfc3RyZWFtKGN0 eCk7ClRoaXMgY2FuIGZhaWwsIHNvIHlvdSBzaG91bGQgcmV0dXJuIGl0cyB2YWx1ZS4KCj4gK30K PiArCj4gKy8qKgo+ICsgKiBwaXBld2lyZSBjYWxsYmFjayBvZiBzdGF0ZSBjaGFuZ2VkIGV2ZW50 cwo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIGRidXMgbWFyc2hhbGxpbmcgc3RydWN0dXJl Cj4gKyAqIEBwYXJhbSBvbGQgcGlwZXdpcmUgc3RyZWFtIG9sZCBzdGF0ZQo+ICsgKiBAcGFyYW0g c3RhdGUgcGlwZXdpcmUgc3RyZWFtIGN1cnJlbnQgc3RhdGUKPiArICogQHBhcmFtIGVycm9yIHJl Y2VpdmVkIGVycm9yIGluZm9ybWF0aW9uCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBvbl9zdHJlYW1f c3RhdGVfY2hhbmdlZF9jYWxsYmFjayh2b2lkICp1c2VyX2RhdGEsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gcHdfc3RyZWFtX3N0YXRlIG9sZCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwd19z dHJlYW1fc3RhdGUgc3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yKQo+ICt7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQg KmN0eCA9IHVzZXJfZGF0YTsKPiArCj4gKyAgICAodm9pZClvbGQ7Cj4gKyAgICAodm9pZCllcnJv cjsKV2hhdCBkb2VzIHRoaXMgZXZlbiBkbz8KCj4gKwo+ICsgICAgaWYgKCFjdHgpIHsKPiArICAg ICAgICByZXR1cm47Cj4gKyAgICB9CkNvZGUgc3R5bGUuCgo+ICsKPiArICAgIGF2X2xvZyhjdHgs IEFWX0xPR19JTkZPLCAiW3BpcGV3aXJlZ3JhYl0gc3RyZWFtIHN0YXRlOiBcIiVzXCJcbiIsCj4g KyAgICAgICAgICAgcHdfc3RyZWFtX3N0YXRlX2FzX3N0cmluZyhzdGF0ZSkpOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogcGlwZXdpcmUgZG9uZSBjYWxsYmFjawo+ICsgKgo+ICsgKiBAcGFyYW0gdXNl cl9kYXRhIGRidXMgbWFyc2hhbGxpbmcgc3RydWN0dXJlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBv bl9zdHJlYW1fdHJpZ2dlcl9kb25lX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSkKRG9lcyBwaXBl d2lyZSBhY2NlcHQgbnVsbCBjYWxsYmFja3M/Cgo+ICt7Cj4gKyAgICAodm9pZCl1c2VyX2RhdGE7 Cj4gKyAgICAvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KPiArfQo+ICsKPiArLyoqCj4gKyAq IHBpcGV3aXJlIHJlY3ljbGUgYnVmZmVyIHRvIHB1dCBidWZmZXIgYmFjayB0byBxdWV1ZSBhbmQg ZnJlZQo+ICsgKiBhbGxvY2F0ZWQgc3BhY2UgYWZ0ZXIgcHJvY2Vzc2luZyBvZiBmcmFtZQo+ICsg Kgo+ICsgKiBAcGFyYW0gb3BhcXVlIHJlZmVyZW5jZSB0byBQd1N0cmVhbUFuZEJ1ZmZlcgo+ICsg KiBAcGFyYW0gZGF0YSBzcGFfZGF0YSBmb3IgaGFuZGxpbmcgbWVtZW9yeSBtYXBwaW5nCj4gKyAq Lwo+ICtzdGF0aWMgdm9pZCBwd19yZWN5Y2xlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkK PiArewo+ICsgICAgZW51bSBwd19zdHJlYW1fc3RhdGUgc3RhdGU7Cj4gKyAgICBzdHJ1Y3QgUHdT dHJlYW1BbmRCdWZmZXIgKmJ1ZmZlciA9IChzdHJ1Y3QgUHdTdHJlYW1BbmRCdWZmZXIgKilvcGFx dWU7Cj4gKyAgICBzdHJ1Y3Qgc3BhX2J1ZmZlciAqc3BhX2J1ZiA9IGJ1ZmZlci0+cHdfYnVmLT5i dWZmZXI7Cj4gKyAgICBzdHJ1Y3Qgc3BhX2RhdGEgKmQgPSAmc3BhX2J1Zi0+ZGF0YXNbMF07Cj4g Kwo+ICsgICAgaWYgKGQtPnR5cGUgPT0gU1BBX0RBVEFfTWVtRmQpIHsKPiArICAgICAgICBtdW5t YXAoYnVmZmVyLT5wd19idWYtPnVzZXJfZGF0YSwgZC0+bWF4c2l6ZSArIGQtPm1hcG9mZnNldCk7 CldoZXJlJ2QgbW1hcCBjb21lIGZyb20/Cgo+ICsgICAgfUNvZGUgU3R5bGUgYnJhY2VzLgo+ICsK PiArICAgIC8qIG9ubHkgcHV0IGJ1ZmZlciBpbiBxdWV1ZSB3aGVuIHN0cmVhbSBzdGF0ZSBpcyBz dHJlYW1pbmcgKi8KPiArICAgIHN0YXRlID0gcHdfc3RyZWFtX2dldF9zdGF0ZSAoYnVmZmVyLT5w d19zdHJlYW0sIE5VTEwpOwo+ICsgICAgaWYgKHN0YXRlID09IFBXX1NUUkVBTV9TVEFURV9TVFJF QU1JTkcpIHsKPiArICAgICAgICBwd19zdHJlYW1fcXVldWVfYnVmZmVyKGJ1ZmZlci0+cHdfc3Ry ZWFtLCBidWZmZXItPnB3X2J1Zik7Cj4gKyAgICB9CkNvZGUgc3R5bGUsIGJyYWNlcy4KPiArICAg IGZyZWUoYnVmZmVyKTsKCkhvdyB3YXMgdGhpcyBhbGxvY2F0ZWQ/IFBvc3NpYmx5IHlvdSB3YW50 IGF2X2ZyZWUuCj4gK30KPiArCj4gKy8qKgo+ICsgKiBmaW5kIG1vc3QgcmVjZW50IGJ1ZmZlciBy ZWNlaXZlZCBmb3JtIHBpcGV3aXJlCj4gKyAqCj4gKyAqIEBwYXJhbSBwd19jdHggUGlwZXdpcmVH cmFiQ29udGV4dCBwcml2YXRlIGRhdGEKPiArICogQHJldHVybiBwd19idWYgbW9zdCByZWNlbnQg YnVmZmVyCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IHB3X2J1ZmZlciogZmluZF9tb3N0X3JlY2Vu dF9idWZmZXJfYW5kX3JlY3ljbGVfb2xkZXJzKFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCkK PiArewo+ICsgICAgc3RydWN0IHB3X2J1ZmZlciogcHdfYnVmID0gTlVMTDsKTWlzcGxhY2VkICoK PiArICAgIHdoaWxlICh0cnVlKSB7CndoaWxlICgxKQo+ICsgICAgICAgIHN0cnVjdCBwd19idWZm ZXIgKmF1eCA9IHB3X3N0cmVhbV9kZXF1ZXVlX2J1ZmZlcihwd19jdHgtPnN0cmVhbSk7Cj4gKyAg ICAgICAgaWYgKCFhdXgpIHsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsg ICAgICAgIGlmIChwd19idWYpIHsKPiArICAgICAgICAgICAgcHdfc3RyZWFtX3F1ZXVlX2J1ZmZl cihwd19jdHgtPnN0cmVhbSwgcHdfYnVmKTsKPiArICAgICAgICB9Q29kZSBzdHlsZSBicmFjZXM7 Cj4gKyAgICAgICAgcHdfYnVmID0gYXV4Owo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHB3X2J1ZjsK PiArfQo+ICsKPiArLyoqCj4gKyAqIG91ciBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb24KPiArICoK PiArICogQHBhcmFtIHVzZXJfZGF0YSBkYnVzIG1hcnNoYWxsaW5nIHN0cnVjdHVyZQo+ICsgKi8K PiArc3RhdGljIHZvaWQgb25fc3RyZWFtX3Byb2Nlc3NfY2FsbGJhY2sodm9pZCAqdXNlcl9kYXRh KQo+ICt7Cj4gKyAgICBzdHJ1Y3Qgc3BhX2J1ZmZlciAqc3BhX2J1ZiA9IE5VTEw7Cj4gKyAgICBz dHJ1Y3QgcHdfYnVmZmVyICpwd19idWYgPSBOVUxMOwo+ICsgICAgdWludDhfdCAqbWFwID0gTlVM TDsKPiArICAgIHZvaWQgKnNkYXRhID0gTlVMTDsKPiArICAgIHN0cnVjdCBzcGFfbWV0YV9oZWFk ZXIgKmhlYWRlciA9IE5VTEw7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJfZGF0 YTsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IE5VTEw7Cj4gKyAgICBBVlBh Y2tldCAqcGt0ID0gTlVMTDsKPiArICAgIHN0cnVjdCBQd1N0cmVhbUFuZEJ1ZmZlciogYnVmZmVy ID0gTlVMTDsKPiArCj4gKyAgICBjdHggPSB1c2VyX2RhdGE7Cj4gKyAgICBpZiAoIWN0eCkgewo+ ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KQnJhY2VzLgo+ICsKPiArICAgIHB3X2N0eCA9IGN0 eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19jdHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlk IHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ ICsKPiArICAgIHB3X2J1ZiA9IGZpbmRfbW9zdF9yZWNlbnRfYnVmZmVyX2FuZF9yZWN5Y2xlX29s ZGVycyhwd19jdHgpOwo+ICsgICAgaWYgKHB3X2J1ZiA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiW3BpcGV3aXJlZ3JhYl0gT3V0IG9mIGJ1ZmZlcnMhXG4i KTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9CiFwd19idWYsIHRobyBpcyB0aGVyZSBhIHJl YXNvbiB5b3UgY2FuJ3QgYWxsb2NhdGUgb25lIGhlcmU/Cgo+ICsKPiArICAgIHNwYV9idWYgPSBw d19idWYtPmJ1ZmZlcjsKPiArICAgIGhlYWRlciA9IHNwYV9idWZmZXJfZmluZF9tZXRhX2RhdGEo c3BhX2J1ZiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFfTUVU QV9IZWFkZXIsIHNpemVvZigqaGVhZGVyKSk7Cj4gKyAgICBpZiAoaGVhZGVyICYmIChoZWFkZXIt PmZsYWdzICYgU1BBX01FVEFfSEVBREVSX0ZMQUdfQ09SUlVQVEVEKSkgewo+ICsgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIltwaXBld2lyZWdyYWJdIGJ1ZmZlciBpcyBjb3JydXB0 Iik7Cj4gKyAgICAgICAgcHdfc3RyZWFtX3F1ZXVlX2J1ZmZlcihwd19jdHgtPnN0cmVhbSwgcHdf YnVmKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHB3X2N0eC0+ YXZfcHhsX2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05PTkUpIHsKPiArICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAgIltwaXBld2lyZWdyYWJdIHVuc3Vw cG9ydGVkIGJ1ZmZlciBmb3JtYXQ6ICVkXG4iLAo+ICsgICAgICAgICAgICAgICBwd19jdHgtPmZv cm1hdC5pbmZvLnJhdy5mb3JtYXQpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoc3BhX2J1Zi0+ZGF0YXNbMF0udHlwZSA9PSBTUEFfREFUQV9NZW1GZCApIHsKPiAr ICAgICAgICBtYXAgPQo+ICsgICAgICAgICAgICBtbWFwKE5VTEwsIHNwYV9idWYtPmRhdGFzWzBd Lm1heHNpemUgKyBzcGFfYnVmLT5kYXRhc1swXS5tYXBvZmZzZXQsCj4gKyAgICAgICAgICAgICAg ICAgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgc3BhX2J1Zi0+ZGF0YXNbMF0uZmQsIDApOwpXaHkg YXJlIHdlIG1tYXBwaW5nIGhlcmU/IEFyZSB5b3UgcHJlcGFyZWQgdG8gY2F0Y2ggU0lHQlVTPwoK PiArICAgICAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiW3BpcGV3aXJlZ3JhYl0gbW1hcCBmYWlsZWQhIGVycm9yICVz XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgZ19zdHJlcnJvcihlcnJubykpOwo+ICsgICAgICAg ICAgICByZXR1cm47Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHB3X2J1Zi0+dXNlcl9kYXRhID0g bWFwOwo+ICsgICAgICAgIHNkYXRhID0gU1BBX1BUUk9GRihtYXAsIHNwYV9idWYtPmRhdGFzWzBd Lm1hcG9mZnNldCwgdWludDhfdCk7Cj4gKyAgICB9IGVsc2UgaWYgKHNwYV9idWYtPmRhdGFzWzBd LnR5cGUgPT0gU1BBX0RBVEFfTWVtUHRyKSB7Cj4gKyAgICAgICAgaWYgKHNwYV9idWYtPmRhdGFz WzBdLmRhdGEgPT0gTlVMTCkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJbcGlwZXdpcmVncmFiXSBubyBkYXRhIVxuIik7Cj4gKyAgICAgICAgICAgIHJldHVybjsK PiArICAgICAgICB9Cj4gKyAgICAgICAgbWFwID0gTlVMTDsKPiArICAgICAgICBzZGF0YSA9IHNw YV9idWYtPmRhdGFzWzBdLmRhdGE7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIltwaXBld2lyZWdyYWJdIEJ1ZmZlciBpcyBub3QgdmFsaWQhXG4i KTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogQ3JlYXRlIGEgbmV3 IEFWUGFja2V0IG9uIHRvcCBvZiB0aGUgcHcgYnVmZmVyICovCj4gKyAgICBwa3QgPSBhdl9wYWNr ZXRfYWxsb2MoKTsKPiArICAgIGlmIChwa3QgPT0gTlVMTCkgewo+ICsgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBGYWls ZWQgdG8gYWxsb2NhdGUgbmV3IGF2IHBhY2tldFxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsg ICAgfQo+ICsKPiArICAgIGJ1ZmZlciA9IChzdHJ1Y3QgUHdTdHJlYW1BbmRCdWZmZXIqKW1hbGxv YyhzaXplb2Yoc3RydWN0IFB3U3RyZWFtQW5kQnVmZmVyKSk7Cj4gKyAgICBpZiAoIWJ1ZmZlcikg ewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAg ICJbcGlwZXdpcmVncmFiXSBGYWlsZWQgdG8gYWxsb2NhdGUgUHdTdHJlYW1BbmRCdWZmZXIgZW50 cnlcbiIpOwo+ICsgICAgICAgIGF2X3BhY2tldF9mcmVlKCZwa3QpOwpCZXR0ZXIgb2ZmIGhhdmlu ZyBhIGNsZWFudXAgYXQgdGhlIGVuZCB3aXRoIGdvdG8gZW5kOyBvciBnb3RvIGZhaWw7IG9yIApz b21ldGhpbmcuCgo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArICAgIGJ1ZmZlci0+Y3R4 ID0gY3R4Owo+ICsgICAgYnVmZmVyLT5wd19zdHJlYW0gPSBwd19jdHgtPnN0cmVhbTsKPiArICAg IGJ1ZmZlci0+cHdfYnVmID0gcHdfYnVmOwo+ICsKPiArICAgIHBrdC0+YnVmID0gYXZfYnVmZmVy X2NyZWF0ZShzZGF0YSwgcHdfY3R4LT5mcmFtZV9zaXplLCBwd19yZWN5Y2xlLCBidWZmZXIsIDAp OwpUaGlzIGNhbiBmYWlsLgoKPiArICAgIHBrdC0+ZGF0YSA9IHNkYXRhOwo+ICsgICAgcGt0LT5z aXplID0gcHdfY3R4LT5mcmFtZV9zaXplOwo+ICsKPiArICAgIC8qIEZyZWUgdGhlIGxhc3QgY3Vy cmVudF9wa3QgYW5kIG1ha2UgdGhlIG5ldyBmcmFtZSBhdmFpbGFibGUgKi8KPiArICAgIHB0aHJl YWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50X3BrdF9tdXRleCk7Cj4gKyAgICBhdl9wYWNr ZXRfdW5yZWYocHdfY3R4LT5jdXJyZW50X3BrdCk7Cj4gKyAgICBhdl9wYWNrZXRfcmVmKHB3X2N0 eC0+Y3VycmVudF9wa3QsIHBrdCk7ClRoaXMgY2FuIGZhaWwuCgo+ICsgICAgcHRocmVhZF9tdXRl eF91bmxvY2soJnB3X2N0eC0+Y3VycmVudF9wa3RfbXV0ZXgpOwo+ICsKPiArICAgIGF2X3BhY2tl dF9mcmVlKCZwa3QpOwo+ICsgICAgcmV0dXJuOwpSZXR1cm4gYW4gaW50LCBpbiBjYXNlIG9mIGZh aWx1cmUuCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdfc3RyZWFtX2V2ZW50cyBz dHJlYW1fZXZlbnRzID0gewo+ICsgICAgUFdfVkVSU0lPTl9TVFJFQU1fRVZFTlRTLAo+ICsgICAg LnN0YXRlX2NoYW5nZWQgPSBvbl9zdHJlYW1fc3RhdGVfY2hhbmdlZF9jYWxsYmFjaywKPiArICAg IC5wYXJhbV9jaGFuZ2VkID0gb25fc3RyZWFtX3BhcmFtX2NoYW5nZWRfY2FsbGJhY2ssCj4gKyAg ICAucHJvY2VzcyA9IG9uX3N0cmVhbV9wcm9jZXNzX2NhbGxiYWNrLAo+ICsgICAgLnRyaWdnZXJf ZG9uZSA9IG9uX3N0cmVhbV90cmlnZ2VyX2RvbmVfY2FsbGJhY2ssCj4gK307Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IERidXNDYWxsRGF0YSAqc3Vic2NyaWJlX3RvX3NpZ25hbChBVkZvcm1hdENvbnRl eHQgKmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpwYXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdEQnVzU2lnbmFsQ2FsbGJhY2sgY2FsbGJhY2spCj4gK3sKPiAr ICAgIHN0cnVjdCBEYnVzQ2FsbERhdGEgKnB0cl9kYnVzX2NhbGxfZGF0YTsKPiArICAgIFBpcGV3 aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKCFwd19j dHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAg ICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4g KyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHRyX2RidXNfY2FsbF9k YXRhID0gZ19uZXcwKHN0cnVjdCBEYnVzQ2FsbERhdGEsIDEpOwpDYW4geW91IHVzZSBhdl9jYWxs b2Mgb3IgYXZfbWFsbG9jeiBoZXJlPwoKPiArICAgIHB0cl9kYnVzX2NhbGxfZGF0YS0+Y3R4ID0g Y3R4Owo+ICsgICAgcHRyX2RidXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggPSBnX3N0cmR1cChw YXRoKTsKPiArICAgIHB0cl9kYnVzX2NhbGxfZGF0YS0+Y2FuY2VsbGVkX2lkID0KPiArICAgICAg ICBnX3NpZ25hbF9jb25uZWN0KHB3X2N0eC0+Y2FuY2VsbGFibGUsICJjYW5jZWxsZWQiLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhvbl9jYW5jZWxsZWRfY2FsbGJhY2sp LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcHRyX2RidXNfY2FsbF9kYXRhIC8qIHVzZXJf ZGF0YSAqLyk7Cj4gKyAgICBwdHJfZGJ1c19jYWxsX2RhdGEtPnNpZ25hbF9pZCA9IGdfZGJ1c19j b25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoCj4gKyAgICAgICAgcHdfY3R4LT5jb25uZWN0aW9u LCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9wIiAvKnNlbmRlciovLAo+ICsgICAgICAg ICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlcXVlc3QiIC8qaW50ZXJmYWNlX25hbWUqLywKPiAr ICAgICAgICAiUmVzcG9uc2UiIC8qbWVtYmVyOiBkYnVzIHNpZ25hbCBuYW1lKi8sCj4gKyAgICAg ICAgcHRyX2RidXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggLypvYmplY3RfcGF0aCovLCBOVUxM LAo+ICsgICAgICAgIEdfREJVU19TSUdOQUxfRkxBR1NfTk9fTUFUQ0hfUlVMRSwgY2FsbGJhY2ss IHB0cl9kYnVzX2NhbGxfZGF0YSwgTlVMTCk7Cj4gKwo+ICsgICAgcmV0dXJuIHB0cl9kYnVzX2Nh bGxfZGF0YTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwbGF5X3BpcGV3aXJlX3N0cmVhbShBVkZv cm1hdENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgaW50IHJldCA9IDA7Cj4gKyAgICBjb25zdCBz dHJ1Y3Qgc3BhX3BvZCAqcHRyX3NwYV9wb2RbMV07Ckl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5n IGFuIGFycmF5IG9mIDEgdG8gc3RhY2stYWxsb2NhdGUgdGhlIGxvY2F0aW9uIAphbmQgbWFrZSBp dCBzdGF0aWMuIERvbid0IGRvIHRoYXQsIHRoaXMgdmFyaWFibGUgY2FuIGRpc2FwcGVhciB3aXRo IHRoZSAKc3RhY2sgZnJhbWUuCgo+ICsgICAgdWludDhfdCBidWZmZXJbNDA5Nl07Cj4gKyAgICBz dHJ1Y3Qgc3BhX3BvZF9idWlsZGVyIHNwYV9wb2RfYmxkciA9IHsKPiArICAgICAgICAwLAo+ICsg ICAgfTsKPiArCj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZf ZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRl IGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgcHdfY3R4LT50aHJlYWRfbG9vcCA9Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfbmV3 KCJbcGlwZXdpcmVncmFiXSB0aHJlYWQgbG9vcCIsIE5VTEwpOwo+ICsgICAgaWYgKHB3X2N0eC0+ dGhyZWFkX2xvb3AgPT0gTlVMTCkgewohcHdfY3R4LT50aHJlYWRfbG9vcDsKPiArICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFi XSBwd190aHJlYWRfbG9vcF9uZXcgZmFpbGVkIVxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFTk9NRU0pOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHdf Y3R4LT5jb250ZXh0ID0KPiArICAgICAgICBwd19jb250ZXh0X25ldyhwd190aHJlYWRfbG9vcF9n ZXRfbG9vcChwd19jdHgtPnRocmVhZF9sb29wKSwgTlVMTCwgMCk7Cj4gKyAgICBpZiAocHdfY3R4 LT5jb250ZXh0ID09IE5VTEwpIHsKU2FtZSBoZXJlLgo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIltwaXBld2lyZWdyYWJdIHB3X2NvbnRleHRfbmV3IGZhaWxlZCFcbiIpOwo+ ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIHRocmVhZF9s b29wX2Rlc3Ryb3k7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHB3X3RocmVhZF9sb29wX3N0YXJ0 KHB3X2N0eC0+dGhyZWFkX2xvb3ApIDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltwaXBld2lyZWdyYWJdIHB3X3RocmVhZF9sb29w X3N0YXJ0IGZhaWxlZCFcbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUZBVUxUKTsKPiAr ICAgICAgICBnb3RvIGNvbnRleHRfZGVzdHJveTsKV2h5IHNldmVyYWwgZ290byBoZXJlPwoKPiAr ICAgIH0KPiArCj4gKyAgICBwd190aHJlYWRfbG9vcF9sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3Ap Owo+ICsKPiArICAgIC8qIENvcmUgKi8KPiArICAgIHB3X2N0eC0+Y29yZSA9Cj4gKyAgICAgICAg cHdfY29udGV4dF9jb25uZWN0X2ZkKHB3X2N0eC0+Y29udGV4dCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmNudGwocHdfY3R4LT5waXBld2lyZV9mZCwgRl9EVVBGRF9DTE9FWEVD LCAzKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7Cj4gKyAgICBp ZiAocHdfY3R4LT5jb3JlID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBwd19jb250ZXh0X2Nvbm5l Y3RfZmQgZmFpbGVkIVxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFRkFVTFQpOwo+ICsg ICAgICAgIHB3X3RocmVhZF9sb29wX3VubG9jayhwd19jdHgtPnRocmVhZF9sb29wKTsKPiArICAg ICAgICBnb3RvIGNvbnRleHRfZGVzdHJveTsKPiArICAgIH0KPiArCj4gKyAgICBwd19jb3JlX2Fk ZF9saXN0ZW5lcihwd19jdHgtPmNvcmUsICZwd19jdHgtPmNvcmVfbGlzdGVuZXIsICZjb3JlX2V2 ZW50cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCAvKiB1c2VyX2RhdGEgKi8pOwo+ ICsKPiArICAgIC8qIFN0cmVhbSAqLwo+ICsgICAgcHdfY3R4LT5zdHJlYW0gPSBwd19zdHJlYW1f bmV3KAo+ICsgICAgICAgIHB3X2N0eC0+Y29yZSwgIndheWxhbmQgZ3JhYiIsCj4gKyAgICAgICAg cHdfcHJvcGVydGllc19uZXcoUFdfS0VZX01FRElBX1RZUEUsICJWaWRlbyIsIFBXX0tFWV9NRURJ QV9DQVRFR09SWSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FwdHVyZSIsIFBXX0tF WV9NRURJQV9ST0xFLCAiU2NyZWVuIiwgTlVMTCkpOwo+ICsKPiArICAgIGlmIChwd19jdHgtPnN0 cmVhbSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiW3Bp cGV3aXJlZ3JhYl0gcHdfc3RyZWFtX25ldyBmYWlsZWQhXG4iKTsKPiArICAgICAgICByZXQgPSBB VkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0eC0+ dGhyZWFkX2xvb3ApOwo+ICsgICAgICAgIGdvdG8gY29yZV9kaXNjb25uZWN0Owo+ICsgICAgfQo+ ICsKPiArICAgIHB3X3N0cmVhbV9hZGRfbGlzdGVuZXIocHdfY3R4LT5zdHJlYW0sICZwd19jdHgt PnN0cmVhbV9saXN0ZW5lciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV9l dmVudHMsIGN0eCAvKiB1c2VyX2RhdGEgKi8pOwo+ICsKPiArICAgIC8qIFN0cmVhbSBwYXJhbWV0 ZXJzICovCj4gKyAgICBzcGFfcG9kX2JsZHIgPSBTUEFfUE9EX0JVSUxERVJfSU5JVChidWZmZXIs IHNpemVvZihidWZmZXIpKTsKPiArICAgIHB0cl9zcGFfcG9kWzBdID0gc3BhX3BvZF9idWlsZGVy X2FkZF9vYmplY3QoClNlZSBlYXJsaWVyIGNvbW1lbnQgYWJvdXQgdGhlIHN0YWNrIGZyYW1lLgoK PiArICAgICAgICAmc3BhX3BvZF9ibGRyLCBTUEFfVFlQRV9PQkpFQ1RfRm9ybWF0LCBTUEFfUEFS QU1fRW51bUZvcm1hdCwKPiArICAgICAgICBTUEFfRk9STUFUX21lZGlhVHlwZSwgU1BBX1BPRF9J ZChTUEFfTUVESUFfVFlQRV92aWRlbyksCj4gKyAgICAgICAgU1BBX0ZPUk1BVF9tZWRpYVN1YnR5 cGUsIFNQQV9QT0RfSWQoU1BBX01FRElBX1NVQlRZUEVfcmF3KSwKPiArICAgICAgICBTUEFfRk9S TUFUX1ZJREVPX2Zvcm1hdCwKPiArICAgICAgICBTUEFfUE9EX0NIT0lDRV9FTlVNX0lkKDQsIFNQ QV9WSURFT19GT1JNQVRfUkdCQSwgU1BBX1ZJREVPX0ZPUk1BVF9SR0J4LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU1BBX1ZJREVPX0ZPUk1BVF9CR1J4LCBTUEFfVklERU9fRk9S TUFUX0JHUkEpLAo+ICsgICAgICAgIFNQQV9GT1JNQVRfVklERU9fc2l6ZSwKPiArICAgICAgICBT UEFfUE9EX0NIT0lDRV9SQU5HRV9SZWN0YW5nbGUoJlNQQV9SRUNUQU5HTEUoMzIwLCAyNDApLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU1BBX1JFQ1RBTkdMRSgx LCAxKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNQQV9SRUNU QU5HTEUoNDA5NiwgNDA5NikpLAo+ICsgICAgICAgIFNQQV9GT1JNQVRfVklERU9fZnJhbWVyYXRl LAo+ICsgICAgICAgIFNQQV9QT0RfQ0hPSUNFX1JBTkdFX0ZyYWN0aW9uKAo+ICsgICAgICAgICAg ICAmU1BBX0ZSQUNUSU9OKHB3X2N0eC0+dXNlcl9mcmFtZV9yYXRlLm51bSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBwd19jdHgtPnVzZXJfZnJhbWVfcmF0ZS5kZW4pLAo+ICsgICAgICAg ICAgICAmU1BBX0ZSQUNUSU9OKDAsIDEpLCAmU1BBX0ZSQUNUSU9OKDE0NCwgMSkpKTsKPiArCj4g KyAgICByZXQgPSBwd19zdHJlYW1fY29ubmVjdCgKPiArICAgICAgICBwd19jdHgtPnN0cmVhbSwg UFdfRElSRUNUSU9OX0lOUFVULCBwd19jdHgtPnBpcGV3aXJlX25vZGUsCj4gKyAgICAgICAgUFdf U1RSRUFNX0ZMQUdfQVVUT0NPTk5FQ1QgfCBQV19TVFJFQU1fRkxBR19NQVBfQlVGRkVSUywgcHRy X3NwYV9wb2QsCj4gKyAgICAgICAgMSk7CklmIHB3X3N0cmVhbV9jb25uZWN0IHNvbWVob3cgdGFr ZXMgb3duZXJzaGlwIG9mIHB0cl9zcGFfcG9kWzBdIHRoZW4geW91IApzaG91bGQganVzdCB1c2Ug JnB0cl9zcGFfcG9kIGluc3RlYWQgYW5kIGRvbid0IGRlY2xhcmUgaXQgYXMgYW4gYXJyYXkuCgoK PiArICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiW3BpcGV3aXJlZ3JhYl0gU3RhcnRpbmcg c2NyZWVuIGNhcHR1cmUgLi4uXG4iKTsKPiArCj4gKyAgICBwd190aHJlYWRfbG9vcF91bmxvY2so cHdfY3R4LT50aHJlYWRfbG9vcCk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArCj4gKy8qCj4g KyAqIGRpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmVyL2RhZW1vbgo+ICsgKiBkZXN0cm95IHRoZSBj b3JlIHByb3h5IG9iamVjdCBhbmQgd2lsbCByZW1vdmUgdGhlIHByb3hpZXMKPiArICogdGhhdCBt aWdodCBoYXZlIGJlZW4gY3JlYXRlZCBvbiB0aGlzIGNvbm5lY3Rpb24KPiArICovCj4gK2NvcmVf ZGlzY29ubmVjdDoKPiArICAgIHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOwo+ICsK PiArY29udGV4dF9kZXN0cm95Ogo+ICsgICAgcHdfY29udGV4dF9kZXN0cm95KHB3X2N0eC0+Y29u dGV4dCk7Cj4gKwo+ICt0aHJlYWRfbG9vcF9kZXN0cm95Ogo+ICsgICAgcHdfdGhyZWFkX2xvb3Bf ZGVzdHJveShwd19jdHgtPnRocmVhZF9sb29wKTsKPiArClRvbyBtYW55IGdvdG9zIGhlcmUuIE9u ZSBjbGVhbnVwIGlzIGZpbmUuCgo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgb25fcGlwZXdpcmVfcmVtb3RlX29wZW5lZF9jYWxsYmFjayhHT2JqZWN0ICpzb3VyY2Us Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5j UmVzdWx0ICpyZXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQo+ICt7ClNpbmNlIHRoaXMgZnVuY3Rpb24gY2FuIGZh aWwgaXQgc2hvdWxkIGhhdmUgYSByZXR1cm4gdmFsdWUuCgo+ICsgICAgZ19hdXRvcHRyKEdVbml4 RkRMaXN0KSBmZF9saXN0ID0gTlVMTDsKPiArICAgIGdfYXV0b3B0cihHVmFyaWFudCkgcmVzdWx0 ID0gTlVMTDsKPiArICAgIGdfYXV0b3B0cihHRXJyb3IpIGVycm9yID0gTlVMTDsKV2hhdCBpcyBn X2F1dG9wdHIgYW5kIHdoeSBjYW4ndCB3ZSB1c2Ugc3RhbmRhcmQgQz8KCj4gKyAgICBpbnQgZmRf aW5kZXg7Cj4gKwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSB1c2VyX2RhdGE7Cj4gKyAg ICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlm ICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAg ICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFc biIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICByZXN1bHQgPSBnX2Ri dXNfcHJveHlfY2FsbF93aXRoX3VuaXhfZmRfbGlzdF9maW5pc2goR19EQlVTX1BST1hZKHNvdXJj ZSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmZkX2xpc3QsIHJlcywgJmVycm9yKTsKPiArICAgIGlmIChlcnJvcikgewo+ICsgICAg ICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NB TkNFTExFRCkpCj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAg ICAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBFcnJvciByZXRyaWV2aW5nIHBpcGV3aXJl IGZkOiAlc1xuIiwKPiArICAgICAgICAgICAgICAgICAgIGVycm9yLT5tZXNzYWdlKTsKPiArCj4g KyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGdfdmFyaWFudF9nZXQocmVzdWx0 LCAiKGgpIiwgJmZkX2luZGV4LCAmZXJyb3IpOwo+ICsKPiArICAgIHB3X2N0eC0+cGlwZXdpcmVf ZmQgPSBnX3VuaXhfZmRfbGlzdF9nZXQoZmRfbGlzdCwgZmRfaW5kZXgsICZlcnJvcik7Cj4gKyAg ICBpZiAoZXJyb3IpIHsKPiArICAgICAgICBpZiAoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19J T19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gRXJy b3IgcmV0cmlldmluZyBwaXBld2lyZSBmZDogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBl cnJvci0+bWVzc2FnZSk7Cj4gKwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAg ICBwbGF5X3BpcGV3aXJlX3N0cmVhbShjdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBvcGVu X3BpcGV3aXJlX3JlbW90ZShBVkZvcm1hdENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgR1Zhcmlh bnRCdWlsZGVyIGJ1aWxkZXI7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBj dHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxp ZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0K PiArCj4gKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQ RV9WQVJESUNUKTsKPiArCj4gKyAgICBnX2RidXNfcHJveHlfY2FsbF93aXRoX3VuaXhfZmRfbGlz dCgKPiArICAgICAgICBwd19jdHgtPnByb3h5LCAiT3BlblBpcGVXaXJlUmVtb3RlIiwKPiArICAg ICAgICBnX3ZhcmlhbnRfbmV3KCIob2F7c3Z9KSIsIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsICZi dWlsZGVyKSwKPiArICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwgTlVMTCwgcHdf Y3R4LT5jYW5jZWxsYWJsZSwKPiArICAgICAgICBvbl9waXBld2lyZV9yZW1vdGVfb3BlbmVkX2Nh bGxiYWNrLCBjdHggLyogdXNlcl9kYXRhICovKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb25f c3RhcnRfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2soCj4gKyAgICBHREJ1c0Nvbm5lY3Rpb24g KmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKnNlbmRlcl9uYW1lLAo+ICsgICAgY29uc3QgY2hhciAq b2JqZWN0X3BhdGgsIGNvbnN0IGNoYXIgKmludGVyZmFjZV9uYW1lLAo+ICsgICAgY29uc3QgY2hh ciAqc2lnbmFsX25hbWUsIEdWYXJpYW50ICpwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyX2RhdGEp Cj4gK3sKPiArICAgIGdfYXV0b3B0cihHVmFyaWFudCkgc3RyZWFtX3Byb3BlcnRpZXMgPSBOVUxM Owo+ICsgICAgZ19hdXRvcHRyKEdWYXJpYW50KSBzdHJlYW1zID0gTlVMTDsKPiArICAgIGdfYXV0 b3B0cihHVmFyaWFudCkgcmVzdWx0ID0gTlVMTDsKPiArICAgIEdWYXJpYW50SXRlciBpdGVyOwo+ ICsgICAgdWludDMyX3QgcmVzcG9uc2U7Cj4gKwo+ICsgICAgc3RydWN0IERidXNDYWxsRGF0YSAq cHRyX2RidXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpj dHggPSBwdHJfZGJ1c19jYWxsX2RhdGEtPmN0eDsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQg KnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgICh2b2lkKWNvbm5lY3Rpb247Cj4g KyAgICAodm9pZClzZW5kZXJfbmFtZTsKPiArICAgICh2b2lkKW9iamVjdF9wYXRoOwo+ICsgICAg KHZvaWQpaW50ZXJmYWNlX25hbWU7Cj4gKyAgICAodm9pZClzaWduYWxfbmFtZTsKV2hhdCBkb2Vz IHRoaXMgZXZlbiBkbz8KCj4gKwo+ICsgICAgaWYgKCFwd19jdHgpIHsKPiArICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJ bnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsg ICAgfQo+ICsKPiArICAgIGdfY2xlYXJfcG9pbnRlcigmcHRyX2RidXNfY2FsbF9kYXRhLCBkYnVz X2NhbGxfZGF0YV9mcmVlKTsKSWYgeW91J3JlIGFsbG9jYXRpbmcgaXQgd2l0aCBhdl9tYWxsb2N6 IHlvdSBoYXZlIHRvIGZyZWUgaXQgd2l0aCBhdl9mcmVlLgo+ICsKPiArICAgIGdfdmFyaWFudF9n ZXQocGFyYW1ldGVycywgIih1QGF7c3Z9KSIsICZyZXNwb25zZSwgJnJlc3VsdCk7Cj4gKwo+ICsg ICAgaWYgKHJlc3BvbnNlICE9IDApIHsKaWYgKHJlc3BvbnNlKSB7Cj4gKyAgICAgICAgYXZfbG9n KAo+ICsgICAgICAgICAgICBjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgIltwaXBl d2lyZWdyYWJdIEZhaWxlZCB0byBzdGFydCBzY3JlZW5jYXN0LCBkZW5pZWQgb3IgY2FuY2VsbGVk IGJ5IHVzZXIhXG4iKTsKPiArICAgICAgICBwaXBld2lyZWdyYWJfYWJvcnQoCj4gKyAgICAgICAg ICAgIGN0eCwgIkZhaWxlZCB0byBzdGFydCBzY3JlZW5jYXN0LCBkZW5pZWQgb3IgY2FuY2VsbGVk IGJ5IHVzZXIhIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQpTaW5jZSB0aGlzIGZ1bmN0 aW9uIGNhbiBmYWlsLCBpdCBzaG91bGQgcmV0dXJuIGEgZmFpbHVyZS4KPiArCj4gKyAgICBzdHJl YW1zID0gZ192YXJpYW50X2xvb2t1cF92YWx1ZShyZXN1bHQsICJzdHJlYW1zIiwgR19WQVJJQU5U X1RZUEVfQVJSQVkpOwo+ICsKPiArICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIHN0cmVh bXMpOwo+ICsgICAgZ19hc3NlcnQoZ192YXJpYW50X2l0ZXJfbl9jaGlsZHJlbigmaXRlcikgPT0g MSk7Tm8gYXNzZXJ0cy4gVXNlIGF2X2Fzc2VydCBpZiB5b3UgbXVzdCwgc2luY2UgaXQgbGV0cyB5 b3UgY29udHJvbCB0aGUgCmFzc2VydCBsZXZlbCBvbiB0aGUgY29uZmlndXJlIGxpbmUuCj4gKwo+ ICsgICAgZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgIih1QGF7c3Z9KSIsICZwd19jdHgtPnBp cGV3aXJlX25vZGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1fcHJvcGVydGll cyk7Cj4gKwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sCj4gKyAgICAgICAgICAgIltw aXBld2lyZWdyYWJdIE1vbml0b3Igc2VsZWN0ZWQsIHNldHRpbmcgdXAgc2NyZWVuY2FzdFxuXG4i KTsKPiArCj4gKyAgICBvcGVuX3BpcGV3aXJlX3JlbW90ZShjdHgpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBvbl9zdGFydGVkX2NhbGxiYWNrKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0 ICpyZXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9k YXRhKQo+ICt7Cj4gKyAgICBnX2F1dG9wdHIoR1ZhcmlhbnQpIHJlc3VsdCA9IE5VTEw7Cj4gKyAg ICBnX2F1dG9wdHIoR0Vycm9yKSBlcnJvciA9IE5VTEw7Cj4gKyAgICBzdHJ1Y3QgRGJ1c0NhbGxE YXRhICpwdHJfZGJ1c19jYWxsX2RhdGEgPSB1c2VyX2RhdGE7Cj4gKyAgICBBVkZvcm1hdENvbnRl eHQgKmN0eCA9IHB0cl9kYnVzX2NhbGxfZGF0YS0+Y3R4Owo+ICsgICAgKHZvaWQpdXNlcl9kYXRh Owo+ICsKPiArICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChHX0RCVVNfUFJP WFkoc291cmNlKSwgcmVzLCAmZXJyb3IpOwo+ICsgICAgaWYgKGVycm9yKSB7Cj4gKyAgICAgICAg aWYgKCFnX2Vycm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VM TEVEKSkKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAg ICAgICAgICAgICAgIltwaXBld2lyZWdyYWJdIEVycm9yIHNlbGVjdGluZyBzY3JlZW5jYXN0IHNv dXJjZTogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBlcnJvci0+bWVzc2FnZSk7Cj4gKwo+ ICsgICAgICAgIHJldHVybjtUaGlzIGZ1bmN0aW9uIGNhbiBmYWlsLCBzbyB5b3Ugc2hvdWxkIHJl dHVybiBhbiBpbnQuCj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHN0YXJ0KEFWRm9y bWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBnX2F1dG9mcmVlIGNoYXIgKnJlcXVlc3RfdG9r ZW4gPSBOVUxMOwo+ICsgICAgZ19hdXRvZnJlZSBjaGFyICpyZXF1ZXN0X3BhdGggPSBOVUxMOwo+ ICsgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Cj4gKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRh ICpwdHJfZGJ1c19jYWxsX2RhdGE7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHgg PSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52 YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAg IH0KPiArCj4gKyAgICBuZXdfcmVxdWVzdF9wYXRoKGN0eCwgJnJlcXVlc3RfcGF0aCwgJnJlcXVl c3RfdG9rZW4pOwo+ICsKPiArICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiW3BpcGV3 aXJlZ3JhYl0gQXNraW5nIGZvciBtb25pdG9y4oCmXG4iKTsKPiArCj4gKyAgICBwdHJfZGJ1c19j YWxsX2RhdGEgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKAo+ICsgICAgICAgIGN0eCAvKiB1c2VyX2Rh dGEgKi8sIHJlcXVlc3RfcGF0aCwgb25fc3RhcnRfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2sp Owo+ICsgICAgaWYgKHB0cl9kYnVzX2NhbGxfZGF0YSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0g c3Vic2NyaWJlX3RvX3NpZ25hbCBmYWlsZWQhXG4iKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAg ICB9ClRoaXMgZnVuY3Rpb24gY2FuIGZhaWwgc28gaXQgc2hvdWxkIHJldHVybiBhbiBpbnQuCgo+ ICsKPiArICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBF X1ZBUkRJQ1QpOwo+ICsgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIs ICJoYW5kbGVfdG9rZW4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9u ZXdfc3RyaW5nKHJlcXVlc3RfdG9rZW4pKTsKPiArCj4gKyAgICBnX2RidXNfcHJveHlfY2FsbChw d19jdHgtPnByb3h5LCAiU3RhcnQiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgZ192YXJpYW50 X25ldygiKG9zYXtzdn0pIiwgcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwgIiIsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWlsZGVyKSwKPiArICAgICAgICAgICAgICAg ICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsIC0xLCBwd19jdHgtPmNhbmNlbGxhYmxlLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgb25fc3RhcnRlZF9jYWxsYmFjaywgcHRyX2RidXNfY2Fs bF9kYXRhIC8qIHVzZXJfZGF0YSAqLyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG9uX3NlbGVj dF9zb3VyY2VfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2soCj4gKyAgICBHREJ1c0Nvbm5lY3Rp b24gKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKnNlbmRlcl9uYW1lLAo+ICsgICAgY29uc3QgY2hh ciAqb2JqZWN0X3BhdGgsIGNvbnN0IGNoYXIgKmludGVyZmFjZV9uYW1lLAo+ICsgICAgY29uc3Qg Y2hhciAqc2lnbmFsX25hbWUsIEdWYXJpYW50ICpwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyX2Rh dGEpCj4gK3sKVGhpcyBsb29rcyBsaWtlIGFuIGVhcmxpZXIgZnVuY3Rpb24uIENhbiBjb2RlIGJl IGRlZHVwbGljYXRlZD8KPiArICAgIGdfYXV0b3B0cihHVmFyaWFudCkgcmV0ID0gTlVMTDsKPiAr ICAgIHVpbnQzMl90IHJlc3BvbnNlOwo+ICsgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2Ri dXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSBw dHJfZGJ1c19jYWxsX2RhdGEtPmN0eDsKPiArICAgICh2b2lkKWNvbm5lY3Rpb247Cj4gKyAgICAo dm9pZClzZW5kZXJfbmFtZTsKPiArICAgICh2b2lkKW9iamVjdF9wYXRoOwo+ICsgICAgKHZvaWQp aW50ZXJmYWNlX25hbWU7Cj4gKyAgICAodm9pZClzaWduYWxfbmFtZTsKPiArCj4gKyAgICBhdl9s b2coY3R4LCBBVl9MT0dfSU5GTywKPiArICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gUmVzcG9u c2UgdG8gc2VsZWN0IHNvdXJjZSByZWNlaXZlZFxuIik7Cj4gKwo+ICsgICAgZ19jbGVhcl9wb2lu dGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEsIGRidXNfY2FsbF9kYXRhX2ZyZWUpOwo+ICsKPiArICAg IGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih1QGF7c3Z9KSIsICZyZXNwb25zZSwgJnJldCk7 Cj4gKwo+ICsgICAgaWYgKHJlc3BvbnNlICE9IDApIHsKPiArICAgICAgICBhdl9sb2coCj4gKyAg ICAgICAgICAgIGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAiW3BpcGV3aXJlZ3Jh Yl0gRmFpbGVkIHRvIHNlbGVjdCBzb3VyY2UsIGRlbmllZCBvciBjYW5jZWxsZWQgYnkgdXNlciFc biIpOwo+ICsgICAgICAgIHBpcGV3aXJlZ3JhYl9hYm9ydCgKPiArICAgICAgICAgICAgY3R4LCAi RmFpbGVkIHRvIHNlbGVjdCBzb3VyY2UsIGRlbmllZCBvciBjYW5jZWxsZWQgYnkgdXNlciEiKTsK PiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3RhcnQoY3R4KTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgb25fc291cmNlX3NlbGVjdGVkX2NhbGxiYWNrKEdPYmplY3QgKnNv dXJjZSwgR0FzeW5jUmVzdWx0ICpyZXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCj4gK3sKVGhpcyBsb29rcyBsaWtlIGFuIGVh cmxpZXIgZnVuY3Rpb24uIENhbiBjb2RlIGJlIGRlZHVwbGljYXRlZD8KPiArICAgIGdfYXV0b3B0 cihHVmFyaWFudCkgcmVzdWx0ID0gTlVMTDsKPiArICAgIGdfYXV0b3B0cihHRXJyb3IpIGVycm9y ID0gTlVMTDsKPiArCj4gKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2Rh dGEgPSB1c2VyX2RhdGE7Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHB0cl9kYnVzX2Nh bGxfZGF0YS0+Y3R4Owo+ICsKPiArICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94eV9jYWxsX2Zpbmlz aChHX0RCVVNfUFJPWFkoc291cmNlKSwgcmVzLCAmZXJyb3IpOwo+ICsgICAgaWYgKGVycm9yKSB7 Cj4gKyAgICAgICAgaWYgKCFnX2Vycm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9f RVJST1JfQ0FOQ0VMTEVEKSkKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAo+ICsgICAgICAgICAgICAgICAgICAgIltwaXBld2lyZWdyYWJdIEVycm9yIHNlbGVjdGluZyBz Y3JlZW5jYXN0IHNvdXJjZTogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBlcnJvci0+bWVz c2FnZSk7Cj4gKwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgc2VsZWN0X3NvdXJjZShBVkZvcm1hdENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgZ19h dXRvZnJlZSBjaGFyICpyZXF1ZXN0X3Rva2VuID0gTlVMTDsKPiArICAgIGdfYXV0b2ZyZWUgY2hh ciAqcmVxdWVzdF9wYXRoID0gTlVMTDsKPiArICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwo+ ICsgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRhOwo+ICsgICAgUGlw ZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpZiAoIXB3 X2N0eCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAg ICAgICAgIltwaXBld2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsK PiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgbmV3X3JlcXVlc3RfcGF0aChj dHgsICZyZXF1ZXN0X3BhdGgsICZyZXF1ZXN0X3Rva2VuKTsKPiArCj4gKyAgICBwdHJfZGJ1c19j YWxsX2RhdGEgPQo+ICsgICAgICAgIHN1YnNjcmliZV90b19zaWduYWwoY3R4IC8qIHVzZXJfZGF0 YSAqLywgcmVxdWVzdF9wYXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25fc2Vs ZWN0X3NvdXJjZV9yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjayk7Cj4gKyAgICBpZiAocHRyX2Ri dXNfY2FsbF9kYXRhID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsCj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBzdWJzY3JpYmVfdG9fc2lnbmFs IGZhaWxlZCFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBnX3Zh cmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKPiAr ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAidHlwZXMiLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXdfdWludDMyKHB3X2N0eC0+Y2Fw dHVyZV90eXBlKSk7Cj4gKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9 IiwgIm11bHRpcGxlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3 X2Jvb2xlYW4oRkFMU0UpKTsKPiArICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwg Intzdn0iLCAiaGFuZGxlX3Rva2VuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Zh cmlhbnRfbmV3X3N0cmluZyhyZXF1ZXN0X3Rva2VuKSk7Cj4gKwo+ICsgICAgaWYgKHB3X2N0eC0+ YXZhaWxhYmxlX2N1cnNvcl9tb2RlcyAmIFBPUlRBTF9DVVJTT1JfTU9ERV9NRVRBREFUQSkKPiAr ICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgImN1cnNvcl9t b2RlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld191aW50 MzIoUE9SVEFMX0NVUlNPUl9NT0RFX01FVEFEQVRBKSk7Cj4gKyAgICBlbHNlIGlmICgocHdfY3R4 LT5hdmFpbGFibGVfY3Vyc29yX21vZGVzICYgUE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEKQo+ ICsgICAgICAgICAgICAmJiBwd19jdHgtPmN1cnNvci52aXNpYmxlKQo+ICsgICAgICAgIGdfdmFy aWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAiY3Vyc29yX21vZGUiLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3X3VpbnQzMihQT1JUQUxfQ1VS U09SX01PREVfRU1CRURERUQpKTsKPiArICAgIGVsc2UKPiArICAgICAgICBnX3ZhcmlhbnRfYnVp bGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgImN1cnNvcl9tb2RlIiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld191aW50MzIoUE9SVEFMX0NVUlNPUl9NT0RF X0hJRERFTikpOwo+ICsKPiArICAgIGdfZGJ1c19wcm94eV9jYWxsKHB3X2N0eC0+cHJveHksICJT ZWxlY3RTb3VyY2VzIiwKPiArICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihv YXtzdn0pIiwgcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmJ1aWxkZXIpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgR19EQlVT X0NBTExfRkxBR1NfTk9ORSwgLTEsIHB3X2N0eC0+Y2FuY2VsbGFibGUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjaylvbl9zb3VyY2Vfc2VsZWN0ZWRfY2FsbGJh Y2ssCj4gKyAgICAgICAgICAgICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2RhdGEgLyogdXNlcl9k YXRhICovKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb25fY3JlYXRlX3Nlc3Npb25fcmVzcG9u c2VfcmVjZWl2ZWRfY2FsbGJhY2soCj4gKyAgICBHREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24s IGNvbnN0IGNoYXIgKnNlbmRlcl9uYW1lLAo+ICsgICAgY29uc3QgY2hhciAqb2JqZWN0X3BhdGgs IGNvbnN0IGNoYXIgKmludGVyZmFjZV9uYW1lLAo+ICsgICAgY29uc3QgY2hhciAqc2lnbmFsX25h bWUsIEdWYXJpYW50ICpwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyX2RhdGEpCj4gK3sKVGhpcyBs b29rcyBsaWtlIGFuIGVhcmxpZXIgZnVuY3Rpb24uIENhbiBjb2RlIGJlIGRlZHVwbGljYXRlZD8K PiArICAgIHVpbnQzMl90IHJlc3BvbnNlOwo+ICsgICAgZ19hdXRvcHRyKEdWYXJpYW50KSByZXN1 bHQgPSBOVUxMOwo+ICsgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRh ID0gdXNlcl9kYXRhOwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSBwdHJfZGJ1c19jYWxs X2RhdGEtPmN0eDsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJp dl9kYXRhOwo+ICsKPiArICAgICh2b2lkKWNvbm5lY3Rpb247Cj4gKyAgICAodm9pZClzZW5kZXJf bmFtZTsKPiArICAgICh2b2lkKW9iamVjdF9wYXRoOwo+ICsgICAgKHZvaWQpaW50ZXJmYWNlX25h bWU7Cj4gKyAgICAodm9pZClzaWduYWxfbmFtZTsKPiArCj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIltw aXBld2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKPiArICAgICAg ICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgZ19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19j YWxsX2RhdGEsIGRidXNfY2FsbF9kYXRhX2ZyZWUpOwo+ICsKPiArICAgIGdfdmFyaWFudF9nZXQo cGFyYW1ldGVycywgIih1QGF7c3Z9KSIsICZyZXNwb25zZSwgJnJlc3VsdCk7Cj4gKwo+ICsgICAg aWYgKHJlc3BvbnNlICE9IDApIHsKPiArICAgICAgICBhdl9sb2coCj4gKyAgICAgICAgICAgIGN0 eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gUGlwZXdpcmUg ZmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLCBkZW5pZWQgb3IgY2FuY2VsbGVkIGJ5IHVzZXIhXG4i KTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0RFQlVHLCAiW3BpcGV3aXJlZ3JhYl0gU2NyZWVuY2FzdCBzZXNzaW9uIGNyZWF0ZWRcbiIp Owo+ICsKPiArICAgIGdfdmFyaWFudF9sb29rdXAocmVzdWx0LCAic2Vzc2lvbl9oYW5kbGUiLCAi cyIsICZwd19jdHgtPnNlc3Npb25faGFuZGxlKTsKPiArCj4gKyAgICAvKiBlbmFibGUvZGlzYWJs ZSBtb3VzZSBjdXJzb3IgKi8KPiArICAgIHB3X2N0eC0+Y3Vyc29yLnZpc2libGUgPSBwd19jdHgt PmRyYXdfbW91c2U7Cj4gKyAgICBzZWxlY3Rfc291cmNlKGN0eCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG9uX3Nlc3Npb25fY3JlYXRlZF9jYWxsYmFjayhHT2JqZWN0ICpzb3VyY2UsIEdBc3lu Y1Jlc3VsdCAqcmVzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3BvaW50ZXIgdXNlcl9kYXRhKQo+ICt7ClRoaXMgbG9va3MgbGlrZSBhbiBlYXJsaWVyIGZ1bmN0 aW9uLiBDYW4gY29kZSBiZSBkZWR1cGxpY2F0ZWQ/Cj4gKyAgICBnX2F1dG9wdHIoR1ZhcmlhbnQp IHJlc3VsdCA9IE5VTEw7Cj4gKyAgICBnX2F1dG9wdHIoR0Vycm9yKSBlcnJvciA9IE5VTEw7Cj4g KyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2RhdGEgPSB1c2VyX2RhdGE7 Cj4gKyAgICBBVkZvcm1hdENvbnRleHQgKmN0eCA9IHB0cl9kYnVzX2NhbGxfZGF0YS0+Y3R4Owo+ ICsKPiArICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChHX0RCVVNfUFJPWFko c291cmNlKSwgcmVzLCAmZXJyb3IpOwo+ICsgICAgaWYgKGVycm9yKSB7Cj4gKyAgICAgICAgaWYg KCFnX2Vycm9yX21hdGNoZXMoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE KSkKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAg ICAgICAgICAgIltwaXBld2lyZWdyYWJdIEVycm9yIGNyZWF0aW5nIHNjcmVlbmNhc3Qgc2Vzc2lv bjogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBlcnJvci0+bWVzc2FnZSk7Cj4gKwo+ICsg ICAgICAgIHJldHVybjsKPiArICAgIH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGZ1bmN0aW9uIHRv IHN0YXJ0IHRoZSBuZWdvdGF0aW9uCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggY3R4IEFWRm9ybWF0 Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBjcmVhdGVfc2Vz c2lvbihBVkZvcm1hdENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1 aWxkZXI7Cj4gKyAgICBnX2F1dG9mcmVlIGNoYXIgKnJlcXVlc3RfdG9rZW4gPSBOVUxMOwo+ICsg ICAgZ19hdXRvZnJlZSBjaGFyICpyZXF1ZXN0X3BhdGggPSBOVUxMOwo+ICsgICAgZ19hdXRvZnJl ZSBjaGFyICpzZXNzaW9uX3Rva2VuID0gTlVMTDsKPiArICAgIHN0cnVjdCBEYnVzQ2FsbERhdGEg KnB0cl9kYnVzX2NhbGxfZGF0YTsKPiArCj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19j dHggPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0g SW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiAr ICAgIH0KPiArCj4gKyAgICBuZXdfcmVxdWVzdF9wYXRoKGN0eCwgJnJlcXVlc3RfcGF0aCwgJnJl cXVlc3RfdG9rZW4pOwo+ICsgICAgbmV3X3Nlc3Npb25fcGF0aChjdHgsIE5VTEwsICZzZXNzaW9u X3Rva2VuKTsKPiArCj4gKyAgICBwdHJfZGJ1c19jYWxsX2RhdGEgPQo+ICsgICAgICAgIHN1YnNj cmliZV90b19zaWduYWwoY3R4IC8qIHVzZXJfZGF0YSAqLywgcmVxdWVzdF9wYXRoLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb25fY3JlYXRlX3Nlc3Npb25fcmVzcG9uc2VfcmVjZWl2 ZWRfY2FsbGJhY2spOwo+ICsgICAgaWYgKHB0cl9kYnVzX2NhbGxfZGF0YSA9PSBOVUxMKSB7Cj4g KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3Bp cGV3aXJlZ3JhYl0gc3Vic2NyaWJlX3RvX3NpZ25hbCBmYWlsZWQhXG4iKTsKPiArICAgICAgICBy ZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRl ciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Cj4gKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQo JmJ1aWxkZXIsICJ7c3Z9IiwgImhhbmRsZV90b2tlbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZ192YXJpYW50X25ld19zdHJpbmcocmVxdWVzdF90b2tlbikpOwo+ICsgICAgZ192YXJp YW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJzZXNzaW9uX2hhbmRsZV90b2tlbiIs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld19zdHJpbmcoc2Vzc2lv bl90b2tlbikpOwo+ICsKPiArICAgIGdfZGJ1c19wcm94eV9jYWxsKHB3X2N0eC0+cHJveHksICJD cmVhdGVTZXNzaW9uIiwKPiArICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihh e3N2fSkiLCAmYnVpbGRlciksCj4gKyAgICAgICAgICAgICAgICAgICAgICBHX0RCVVNfQ0FMTF9G TEFHU19OT05FLCAtMSwgcHdfY3R4LT5jYW5jZWxsYWJsZSwKPiArICAgICAgICAgICAgICAgICAg ICAgIG9uX3Nlc3Npb25fY3JlYXRlZF9jYWxsYmFjaywKPiArICAgICAgICAgICAgICAgICAgICAg IHB0cl9kYnVzX2NhbGxfZGF0YSAvKiB1c2VyX2RhdGEgKi8pOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogaGVscGVyIGZ1bmN0aW9uOiBnZXQgYXZhaWxhYmxlIGN1cnNvciBtb2RlIGFuZCB1cGRhdGUK PiArICoKPiArICogQHBhcmFtIGN0eCBjdHggQVZGb3JtYXRDb250ZXh0IGF2Zm9ybWF0IGNvbnRl eHQKPiArICovCj4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9hdmFpbGFibGVfY3Vyc29yX21vZGVzKEFW Rm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBnX2F1dG9wdHIoR1ZhcmlhbnQpIGNhY2hl ZF9jdXJzb3JfbW9kZXMgPSBOVUxMOwo+ICsgICAgdWludDMyX3QgYXZhaWxhYmxlX2N1cnNvcl9t b2RlczsKPiArCj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZf ZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRl IGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAg ICBjYWNoZWRfY3Vyc29yX21vZGVzID0KPiArICAgICAgICBnX2RidXNfcHJveHlfZ2V0X2NhY2hl ZF9wcm9wZXJ0eShwd19jdHgtPnByb3h5LCAiQXZhaWxhYmxlQ3Vyc29yTW9kZXMiKTsKPiArICAg IGF2YWlsYWJsZV9jdXJzb3JfbW9kZXMgPQo+ICsgICAgICAgIGNhY2hlZF9jdXJzb3JfbW9kZXMg PyBnX3ZhcmlhbnRfZ2V0X3VpbnQzMihjYWNoZWRfY3Vyc29yX21vZGVzKSA6IDA7Cj4gKwo+ICsg ICAgLyogVXNlIGVtYmVkZGVkIG9yIGhpZGRlbiBtb2RlIGZvciBub3cqLwo+ICsgICAgYXZhaWxh YmxlX2N1cnNvcl9tb2RlcyA9IGF2YWlsYWJsZV9jdXJzb3JfbW9kZXMgJgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChQT1JUQUxfQ1VSU09SX01PREVfRU1CRURERUQgfAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQT1JUQUxfQ1VSU09SX01PREVfSElEREVOKTsKPiAr ICAgIHB3X2N0eC0+YXZhaWxhYmxlX2N1cnNvcl9tb2RlcyA9IGF2YWlsYWJsZV9jdXJzb3JfbW9k ZXM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjYWxsYmFjayBmdW5jdGlvbiBvZiBjcmVhdGVkIHBy b3h5Cj4gKyAqCj4gKyAqIEBwYXJhbSBzb3VyY2UgR09iamVjdAo+ICsgKiBAcGFyYW0gcmVzIEdB c3luY1Jlc3VsdAo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIGN0eCBBVkZvcm1hdENvbnRleHQgYXZm b3JtYXQgY29udGV4dAo+ICsgKi8KPiArc3RhdGljIHZvaWQgb25fcGlwZXdpcmVfcHJveHlfY3Jl YXRlZF9jYWxsYmFjayhHT2JqZWN0ICpzb3VyY2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICpyZXMsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQo+ ICt7ClRoaXMgbG9va3MgbGlrZSBhbiBlYXJsaWVyIGZ1bmN0aW9uLiBDYW4gY29kZSBiZSBkZWR1 cGxpY2F0ZWQ/Cj4gKyAgICBnX2F1dG9wdHIoR0Vycm9yKSBlcnJvciA9IE5VTEw7Cj4gKyAgICBB VkZvcm1hdENvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRl eHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgICh2b2lkKXNvdXJjZTsKPiAr Cj4gKyAgICBpZiAoIXB3X2N0eCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwKPiArICAgICAgICAgICAgICAgIltwaXBld2lyZWdyYWJdIEludmFsaWQgcHJpdmF0ZSBjb250 ZXh0IGRhdGEhXG4iKTsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHdf Y3R4LT5wcm94eSA9IGdfZGJ1c19wcm94eV9uZXdfZmluaXNoKHJlcywgJmVycm9yKTsKPiArCj4g KyAgICBpZiAoZXJyb3IpIHsKPiArICAgICAgICBpZiAoIWdfZXJyb3JfbWF0Y2hlcyhlcnJvciwg R19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0g RXJyb3IgY3JlYXRpbmcgcHJveHk6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Cj4gKwo+ICsgICAg ICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICB1cGRhdGVfYXZhaWxhYmxlX2N1cnNvcl9t b2RlcyhjdHgpOwo+ICsgICAgY3JlYXRlX3Nlc3Npb24oY3R4KTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIEdldCB0aGUgcHJveHkgZnJvbSBkZXNrdG9wLXBvcnRhbAo+ICsgKgo+ICsgKiBAcGFyYW0g Y3R4IEFWRm9ybWF0Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0Cj4gKyAqLwo+ICtzdGF0aWMgdm9p ZCBjcmVhdGVfcGlwZXdpcmVfcHJveHkoQVZGb3JtYXRDb250ZXh0ICpjdHgpCj4gK3sKPiArICAg IFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYg KCFwd19jdHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAg ICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4dCBkYXRhIVxu Iik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGdfZGJ1c19wcm94eV9u ZXcocHdfY3R4LT5jb25uZWN0aW9uLCBHX0RCVVNfUFJPWFlfRkxBR1NfTk9ORSwgTlVMTCwKPiAr ICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsCj4g KyAgICAgICAgICAgICAgICAgICAgICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wIiwK PiArICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuU2NyZWVuQ2Fz dCIsIHB3X2N0eC0+Y2FuY2VsbGFibGUsCj4gKyAgICAgICAgICAgICAgICAgICAgIChHQXN5bmNS ZWFkeUNhbGxiYWNrKW9uX3BpcGV3aXJlX3Byb3h5X2NyZWF0ZWRfY2FsbGJhY2ssCj4gKyAgICAg ICAgICAgICAgICAgICAgIGN0eCAvKiB1c2VyX2RhdGEgKi8pOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogSW5pdGlhdGUgdGhlIHBpcGV3aXJlZ3JhYgo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4IEFWRm9y bWF0Q29udGV4dCBhdmZvcm1hdCBjb250ZXh0Cj4gKyAqLwo+ICtzdGF0aWMgaW50IGluaXRfcGlw ZXdpcmVncmFiKEFWRm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBjaGFyICphdXg7Cj4g KyAgICBnX2F1dG9wdHIoR0Vycm9yKSBlcnJvciA9IE5VTEw7Cj4gKyAgICBQaXBld2lyZUdyYWJD b250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4g KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3Bp cGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHdfY3R4LT5jYXB0 dXJlX3R5cGUgPSBERVNLVE9QX0NBUFRVUkU7Cj4gKyAgICBwd19jdHgtPmNhbmNlbGxhYmxlID0g Z19jYW5jZWxsYWJsZV9uZXcoKTsKPiArCj4gKyAgICBwd19jdHgtPmNvbm5lY3Rpb24gPSBnX2J1 c19nZXRfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sIE5VTEwsICZlcnJvcik7Cj4gKyAgICBpZiAo ZXJyb3IpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAg ICAgICAgICJbcGlwZXdpcmVncmFiXSBFcnJvciBnZXR0aW5nIHNlc3Npb24gYnVzOiAlc1xuIiwK PiArICAgICAgICAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOwo+ICsgICAgICAgIHJldHVybiBlcnJv ci0+Y29kZTsKPiArICAgIH0KPiArCj4gKyAgICBwd19jdHgtPnNlbmRlcl9uYW1lID0KPiArICAg ICAgICBnX3N0cmR1cChnX2RidXNfY29ubmVjdGlvbl9nZXRfdW5pcXVlX25hbWUocHdfY3R4LT5j b25uZWN0aW9uKSArIDEpOwo+ICsKPiArICAgIC8qIFJlcGxhY2UgZG90cyBieSB1bmRlcnNjb3Jl cyAqLwphdl9zdHJpcmVwbGFjZQo+ICsgICAgd2hpbGUgKChhdXggPSBnX3N0cnN0cl9sZW4ocHdf Y3R4LT5zZW5kZXJfbmFtZSwgLTEsICIuIikpICE9IE5VTEwpCj4gKyAgICAgICAgKmF1eCA9ICdf JzsKPiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJbcGlwZXdpcmVncmFiXSBJ bml0aWFsaXplZCAoc2VuZGVyIG5hbWU6ICVzKVxuIiwKPiArICAgICAgICAgICBwd19jdHgtPnNl bmRlcl9uYW1lKTsKPiArCj4gKyAgICBjcmVhdGVfcGlwZXdpcmVfcHJveHkoY3R4KTsKPiArCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgcGlwZXdpcmVn cmFiID0gewo+ICsgICAgLmNsYXNzX25hbWUgPSAicGlwZXdpcmVncmFiIGluZGV2IiwKPiArICAg IC5pdGVtX25hbWUgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24gPSBvcHRp b25zLAo+ICsgICAgLnZlcnNpb24gPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4gKyAgICAuY2F0 ZWdvcnkgPSBBVl9DTEFTU19DQVRFR09SWV9ERVZJQ0VfVklERU9fSU5QVVQsCj4gK307ClB1dCB0 aGlzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIG5vdCBpbiB0aGUgbWlkZGxlLgoKPiArCj4gKy8q Kgo+ICsgKiBoZWxwZXIgZnVuY3Rpb246IGNhbGN1bGF0ZSB0aGUgd2FpdCB0aW1lIGJhc2VkCj4g KyAqIG9uIHRoZSBmcmFtZSBkdXJhdGlvbgo+ICsgKgo+ICsgKiBAcGFyYW0gcyBBVkZvcm1hdENv bnRleHQgYXZmb3JtYXQgY29udGV4dAo+ICsgKiBAcmV0dXJuIGN1cnJlbnQgdGltZQo+ICsgKi8K PiArc3RhdGljIGludDY0X3Qgd2FpdF9mcmFtZShBVkZvcm1hdENvbnRleHQgKnMpCj4gK3sKPiAr ICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBpbnQ2NF90 IGN1cnRpbWUsIGRlbGF5Owo+ICsKPiArICAgIGMtPnRpbWVfZnJhbWUgKz0gYy0+ZnJhbWVfZHVy YXRpb247Cj4gKwo+ICsgICAgZm9yICg7Oykgewp3aGlsZSAoMSkKPiArICAgICAgICBjdXJ0aW1l ID0gYXZfZ2V0dGltZV9yZWxhdGl2ZSgpOwo+ICsgICAgICAgIGRlbGF5ICAgPSBjLT50aW1lX2Zy YW1lIC0gY3VydGltZTsKPiArICAgICAgICBpZiAoZGVsYXkgPD0gMCkKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgYXZfdXNsZWVwKGRlbGF5KTsKSSdtIG5vdCBzdXJlIHlvdSBuZWVk IHRvIGRvIHRoaXMsIGNoZWNrIG90aGVyIGRlbXV4ZXJzLgoKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gY3VydGltZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGhlbHBlciBmdW5jdGlvbjogR3Jh YnMgYSBmcmFtZSBmcm9tIHBpcGV3aXJlCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggQVZGb3JtYXRD b250ZXh0IGF2Zm9ybWF0IGNvbnRleHQKPiArICogQHBhcmFtIHBrdCBQYWNrZXQgaG9sZGluZyB0 aGUgZ3JhYmJlZCBmcmFtZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ3JhYl9mcmFtZShBVkZvcm1h dENvbnRleHQgKmN0eCwgQVZQYWNrZXQgKnBrdCkKPiArewo+ICsgICAgUGlwZXdpcmVHcmFiQ29u dGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgcHRocmVhZF9tdXRleF9s b2NrKCZwd19jdHgtPmN1cnJlbnRfcGt0X211dGV4KTsKPiArICAgIGF2X3BhY2tldF9yZWYocGt0 LCBwd19jdHgtPmN1cnJlbnRfcGt0KTsKVGhpcyBjYW4gZmFpbCwgc28geW91IG5lZWQgdG8gcmV0 dXJuIGFuIGVycm9yIG1lc3NhZ2UuCgo+ICsgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0 eC0+Y3VycmVudF9wa3RfbXV0ZXgpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogcmVhZCB0aGUgZnJh bWUgZnJvbSBwaXBld2lyZQo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4IENvbnRleHQgZnJvbSBhdmZv cm1hdCBjb3JlCj4gKyAqIEBwYXJhbSBwa3QgUGFja2V0IGhvbGRpbmcgdGhlIGdyYWJiZWQgZnJh bWUKPiArICogQHJldHVybiBmcmFtZSBzaXplIGluIGJ5dGVzCj4gKyAqLwo+ICtzdGF0aWMgaW50 IHBpcGV3aXJlZ3JhYl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKmN0eCwgQVZQYWNrZXQg KnBrdCkKPiArewo+ICsgICAgaW50NjRfdCBwdHM7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0 ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJl Z3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKyAgICBkbyB7Cj4gKyAgICAgICAgd2FpdF9m cmFtZShjdHgpOwo+ICsgICAgICAgIHB0cyA9IGF2X2dldHRpbWUoKTsKPiArICAgICAgICBncmFi X2ZyYW1lKGN0eCwgcGt0KTsKQ2FuIGZhaWwuCgo+ICsgICAgICAgIHBrdC0+ZHRzID0gcGt0LT5w dHMgPSBwdHM7Cj4gKyAgICAgICAgcGt0LT5kdXJhdGlvbiA9IHB3X2N0eC0+ZnJhbWVfZHVyYXRp b247Cj4gKyAgIH0gd2hpbGUoIXBrdC0+ZGF0YSk7Cj4gKwo+ICsgICAgcmV0dXJuIHBrdC0+c2l6 ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIENsb3NlcyBwaXBld2lyZSBmcmFtZSBncmFiYmVyLgo+ ICsgKgo+ICsgKiBAcGFyYW0gY3R4IENvbnRleHQgZnJvbSBhdmZvcm1hdCBjb3JlCj4gKyAqIEBy ZXR1cm4gMCBzdWNjZXNzLCAhMCBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBpcGV3aXJl Z3JhYl9yZWFkX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBQaXBld2ly ZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmICghcHdfY3R4 KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAg ICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSFcbiIpOwo+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHB3 X2N0eC0+dGhyZWFkX2xvb3AgIT0gTlVMTCkKaWYgKHB3X2N0eC0+dGhyZWFkX2xvb3ApCgpBbHNv IG51bGxpZnkgaXQgd2hlbiB5b3UgZnJlZSBpdC4KPiArICAgICAgICBwd190aHJlYWRfbG9vcF9z aWduYWwocHdfY3R4LT50aHJlYWRfbG9vcCwgZmFsc2UpOwo+ICsKPiArICAgIGlmIChwd19jdHgt PmdsaWJfbWFpbl9sb29wICE9IE5VTEwgJiYKPiArICAgICAgICBnX21haW5fbG9vcF9pc19ydW5u aW5nKHB3X2N0eC0+Z2xpYl9tYWluX2xvb3ApKSB7Cj4gKyAgICAgICAgZ19tYWluX2xvb3BfcXVp dChwd19jdHgtPmdsaWJfbWFpbl9sb29wKTsKPiArICAgIH0KPiArCj4gKyAgICBwdGhyZWFkX2pv aW4ocHdfY3R4LT5waXBld2lyZV9wdGhyZWFkLCBOVUxMKTsKPiArCj4gKyAgICBpZiAocHdfY3R4 LT5jdXJyZW50X3BrdCkgewo+ICsgICAgICAgIGF2X3BhY2tldF9mcmVlKCZwd19jdHgtPmN1cnJl bnRfcGt0KTsKPiArICAgIH1hdl9wYWNrZXRfZnJlZSgmZm9vKTsgd29ya3MgZXZlbiBpZiBmb28g aXMgTlVMTCwgc28gdGhpcyBjaGVjayBpcyAKc3VwZXJmbHVvdXMuCgo+ICsKPiArICAgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogVGhyZWFkIHRvIGluaXRpYWxpemUgdGhlIFBpcGV3 aXJlIGxpYnJhcnkgYW5kCj4gKyAqIGluaXRpYXRlIHRoZSBjb25uZXRpb24gZmxvdwo+ICsgKgo+ ICsgKiBAcGFyYW0gYXJnbyB0aHJlYWQgYXJndW1lbnQgY3R4Cj4gKyAqLwo+ICtzdGF0aWMgdm9p ZCAqcGlwZXdpcmVfZ2RidXNfaW5pdF9wdGhyZWFkKHZvaWQgKmFyZ28pCldoeSBpcyB0aGUgcmV0 dXJuIHR5cGUgb2YgdGhpcyBmdW5jdGlvbiB2b2lkICo/IFlvdSBvbmx5IHJldHVybiB6ZXJvIG9y IApBVkVSUk9SIHZhbHVlcy4gTWFrZSBpdCBpbnQuCgo+ICt7Cj4gKyAgICBpbnRwdHJfdCByZXQg PSAwOwo+ICsgICAgQVZGb3JtYXRDb250ZXh0ICpjdHggPSAoQVZGb3JtYXRDb250ZXh0ICopYXJn bzsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRhOwo+ ICsgICAgaWYgKCFwd19jdHgpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is Cj4gKyAgICAgICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBJbnZhbGlkIHByaXZhdGUgY29udGV4 dCBkYXRhIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuICh2b2lkICopQVZFUlJPUihFSU5WQUwpOwo+ ICsgICAgfQo+ICsKPiArICAgIC8qIGluaXRpYWxpemUgdGhlIFBpcGVXaXJlIGxpYnJhcnkgKi8K PiArICAgIHB3X2luaXQoTlVMTCwgTlVMTCk7Cj4gKwo+ICsgICAgcHdfY3R4LT5nbGliX21haW5f bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7Cj4gKyAgICBpZiAocHdfY3R4LT5n bGliX21haW5fbG9vcCA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiW3BpcGV3aXJlZ3JhYl0gZ19tYWluX2xvb3BfbmV3IGZhaWxlZCFcbiIpOwo+ICsgICAg ICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGV4aXRfcHdfZGVpbml0 Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChpbml0X3BpcGV3aXJlZ3JhYihjdHgpICE9IDApIHsK PiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJbcGlwZXdpcmVncmFiXSBpbml0 X3BpcGV3aXJlZ3JhYiBmYWlsZWQhXG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVQRVJN KTsKPiArICAgICAgICBnb3RvIGV4aXRfZ2xpYl9sb29wOwo+ICsgICAgfQo+ICsKPiArICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiW3BpcGV3aXJlZ3JhYl0gc3RhcnRpbmcgZ2xpYiBtYWlu IGxvb3AhXG4iKTsKPiArICAgIGdfbWFpbl9sb29wX3J1bihwd19jdHgtPmdsaWJfbWFpbl9sb29w KTsKPiArCj4gKyAgICAvKiBnX21haW5fbG9vcCBxdWl0ZWQsIGRlc3Ryb3kgcGlwZXdpcmUqLwo+ ICsgICAgcGlwZXdpcmVfZGVzdHJveShjdHgpOwo+ICsKPiArZXhpdF9nbGliX2xvb3A6Cj4gKyAg ICBnX21haW5fbG9vcF91bnJlZihwd19jdHgtPmdsaWJfbWFpbl9sb29wKTsKPiArICAgIHB3X2N0 eC0+Z2xpYl9tYWluX2xvb3AgPSBOVUxMOwo+ICtleGl0X3B3X2RlaW5pdDoKPiArICAgIHB3X2Rl aW5pdCgpOwo+ICsgPiArICAgIHJldHVybiAodm9pZCAqKXJldDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIEluaXRpYWxpemVzIHRoZSBwaXBld2lyZSBncmFiIGRldmljZSBkZW11eGVyCj4gKyAqCj4g KyAqIEBwYXJhbSBjdHggQ29udGV4dCBmcm9tIGF2Zm9ybWF0IGNvcmUKPiArICogQHJldHVybiBB VkVSUk9SX0lPIGVycm9yLCAwIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgcGlwZXdpcmVn cmFiX3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBpbnQgcmV0 ID0gMDsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdl9kYXRh Owo+ICsKPiArICAgIGlmICghcHdfY3R4KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiW3BpcGV3aXJlZ3JhYl0gSW52YWxpZCBwcml2YXRl IGNvbnRleHQgZGF0YSFcbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgYXRvbWljX2luaXQoJnB3X2N0eC0+YXZzdHJlYW1fY29kZWNfZmxh ZywgMCk7Cj4gKwo+ICsgICAgcHRocmVhZF9jb25kX2luaXQoJnB3X2N0eC0+YXZzdHJlYW1fY29k ZWNfY29uZF92YXIsIE5VTEwpOwo+ICsgICAgcHRocmVhZF9tdXRleF9pbml0KCZwd19jdHgtPmF2 c3RyZWFtX2NvZGVjX211dGV4LCBOVUxMKTsKPiArICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmcHdf Y3R4LT5jdXJyZW50X3BrdF9tdXRleCwgTlVMTCk7Cj4gKwo+ICsgICAgcHdfY3R4LT5jdXJyZW50 X3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOwo+ICsgICAgaWYgKHB3X2N0eC0+Y3VycmVudF9wa3Qg PT0gTlVMTCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAg ICAgICAgICAgICJbcGlwZXdpcmVncmFiXSBGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGF2IHBhY2tl dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwpyZXR1cm4gQVZFUlJPUihFTk9NRU0pOwoKPiAr ICAgIH0KPiArCj4gKyAgICByZXQgPSBhdl9wYXJzZV92aWRlb19yYXRlKCZwd19jdHgtPnVzZXJf ZnJhbWVfcmF0ZSwgcHdfY3R4LT5mcmFtZXJhdGUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiAr ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJbcGlw ZXdpcmVncmFiXSBhdl9wYXJzZV92aWRlb19yYXRlIGZhaWxlZCFcbiIpOwo+ICsgICAgICAgIHJl dHVybiByZXQ7ID4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gcHRocmVhZF9jcmVhdGUoJnB3X2N0 eC0+cGlwZXdpcmVfcHRocmVhZCwgTlVMTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICZw aXBld2lyZV9nZGJ1c19pbml0X3B0aHJlYWQsIGN0eCk7CkNoZWNrIHRoZSByZXR1cm4gdmFsdWUs IHRoaXMgY2FuIGZhaWwuCgo+ICsgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmF2c3Ry ZWFtX2NvZGVjX211dGV4KTsKPiArICAgIHdoaWxlIChhdG9taWNfbG9hZCgmcHdfY3R4LT5hdnN0 cmVhbV9jb2RlY19mbGFnKSA9PSAwKSB7CndoaWxlICghYXRvbWljX2xvYWQoZm9vKSkKPiArICAg ICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmcHdfY3R4LT5hdnN0cmVhbV9jb2RlY19jb25kX3ZhciwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5hdnN0cmVhbV9jb2RlY19tdXRl eCk7Cj4gKyAgICB9Cj4gKyAgICAvKiB3YWl0IHVudGlsIHNpZ25hbGVkICovCj4gKyAgICBwdGhy ZWFkX211dGV4X3VubG9jaygmcHdfY3R4LT5hdnN0cmVhbV9jb2RlY19tdXRleCk7Cj4gKwo+ICsg ICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqIHBpcGV3aXJlIGdyYWJiZXIgZGV2aWNlIGRl bXV4ZXIgZGVjbGFyYXRpb24gKi8KPiArY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9waXBld2lyZWdy YWJfZGVtdXhlciA9IHsKPiArICAgIC5uYW1lID0gInBpcGV3aXJlZ3JhYiIsCj4gKyAgICAubG9u Z19uYW1lID0gTlVMTF9JRl9DT05GSUdfU01BTEwoInNjcmVlbiBjYXB0dXJlLCB1c2luZyBwaXBl d2lyZSIpLAo+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBQaXBld2lyZUdy YWJDb250ZXh0KSwKPiArICAgIC5yZWFkX2hlYWRlciA9IHBpcGV3aXJlZ3JhYl9yZWFkX2hlYWRl ciwKPiArICAgIC5yZWFkX3BhY2tldCA9IHBpcGV3aXJlZ3JhYl9yZWFkX3BhY2tldCwKPiArICAg IC5yZWFkX2Nsb3NlID0gcGlwZXdpcmVncmFiX3JlYWRfY2xvc2UsCj4gKyAgICAuZmxhZ3MgPSBB VkZNVF9OT0ZJTEUsCj4gKyAgICAucHJpdl9jbGFzcyA9ICZwaXBld2lyZWdyYWIsCj4gK307Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K