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 8B58041046 for ; Sat, 12 Feb 2022 17:59:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B1EAC68B27E; Sat, 12 Feb 2022 19:59:13 +0200 (EET) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B249168AA82 for ; Sat, 12 Feb 2022 19:59:07 +0200 (EET) Received: by mail-wr1-f44.google.com with SMTP id d27so16520009wrb.5 for ; Sat, 12 Feb 2022 09:59:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=ZBRQst84uYodc+hoIDsxivMsgKgetjuhTU85J7XqIjk=; b=c1YrvsTTpgHgV9S4kCOMxSZm+KyneaP93cg/3pQABY+Qddbp8vieMCAyNN7fZ2KZhu BZ/NwM90G/toyZ9rHQqEAILz1ZoTg5g7w09D79XbM87wDvrZ1WypmV95RHEMVqLjDoCi UGz2fcVNIo8skOjS+0ElN9NJvfk3X2SRjPbNIVGeqogJbrWO4CU1aforBfzCnVvvyWTy 5KTS0VaTxTt/cgvhTS/zxGw6mLGeUcRTOa8KDM/iT6JDyDMDXAoGqu705V5EnCS0jH4A iDtPYUOWAiN8+VzRDuGeHvihPw0pRif98JsR40OpFiZcb2KpA9yru7QXTpj8ntB31Yi0 LhmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=ZBRQst84uYodc+hoIDsxivMsgKgetjuhTU85J7XqIjk=; b=ywe8KrDZrhDuI+eGYhymvE0lv5B+GJnAqOyUuq4x0sVyQ7g3XWY+Kt4ASzWxmR5iWk kAk5QQMNCBBeb2BgytNEK+Cp/u/5HkAU3FgZ+OoT3vCYNr+4gTdf33imwDnV9fEE/AXv 0EVGOcg1vBEd78RyAA9IOPZKeW7MAnnrlBXPs4+ksIIEHaKuzRgv59wG1XHjE70wmQhR lxlsqsEFduxAQhWgr2nkvXlvqbusK4wRnfkLs6s/AQOUmM8EcRlFiJYMKv7ziNoqWaR8 2Atz1gY9lqslAjdW7NqvLqtoQl2BJvAcwMb4PElSfPihCTuC7/y91ctksu1OZ5/wMDJM xi0w== X-Gm-Message-State: AOAM530Xbzht2wDayqzMsdvtcan1Y2VFVma8FLJXuq1P0C25cJq1mtXP cAlU4ns6Gc4jVn69t4PuPPIoEZvugLxvQy1O5V8fX1v8OotJO4qc X-Google-Smtp-Source: ABdhPJzxPYtTdQ2QgfS6zPRascD0QIO9v6+mcnrRaoYsk08vNSLsAO8T/OuYX9M521QpWpyUAMttDaNDEDg+LkJfGM4= X-Received: by 2002:a05:6000:2c2:: with SMTP id o2mr5624162wry.30.1644688746513; Sat, 12 Feb 2022 09:59:06 -0800 (PST) MIME-Version: 1.0 References: <20220210011352.11582-1-markg85@gmail.com> <20220210011352.11582-2-markg85@gmail.com> <27c0aa14924e7dea69492e888e3a057f77f819ad.camel@acc.umu.se> In-Reply-To: <27c0aa14924e7dea69492e888e3a057f77f819ad.camel@acc.umu.se> From: Mark Gaiser Date: Sat, 12 Feb 2022 18:57:31 +0100 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v5 1/1] avformat: Add IPFS protocol support. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gU2F0LCBGZWIgMTIsIDIwMjIgYXQgMToxOSBQTSBUb21hcyBIw6RyZGluIDx0am9wcGVuQGFj Yy51bXUuc2U+IHdyb3RlOgoKPiB0b3IgMjAyMi0wMi0xMCBrbG9ja2FuIDAyOjEzICswMTAwIHNr cmV2IE1hcmsgR2Fpc2VyOgo+ID4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yOgo+ID4gLSBm ZnBsYXkgaXBmczovLzxjaWQ+Cj4gPiAtIGZmcGxheSBpcG5zOi8vPGNpZD4KPiA+Cj4gPiBJUEZT IGRhdGEgY2FuIGJlIHBsYXllZCBmcm9tIHNvIGNhbGxlZCAiaXBmcyBnYXRld2F5cyIuCj4gPiBB IGdhdGV3YXkgaXMgZXNzZW50aWFsbHkgYSB3ZWJzZXJ2ZXIgdGhhdCBnaXZlcyBhY2Nlc3MgdG8g dGhlCj4gPiBkaXN0cmlidXRlZCBJUEZTIG5ldHdvcmsuCj4gPgo+ID4gVGhpcyBwcm90b2NvbCBz dXBwb3J0IChpcGZzIGFuZCBpcG5zKSB0aGVyZWZvcmUgdHJhbnNsYXRlcwo+ID4gaXBmczovLyBh bmQgaXBuczovLyB0byBhIGh0dHA6Ly8gdXJsLiBUaGlzIHJlc3VsdGluZyB1cmwgaXMKPiA+IHRo ZW4gaGFuZGxlZCBieSB0aGUgaHR0cCBwcm90b2NvbC4gSXQgY291bGQgYWxzbyBiZSBodHRwcwo+ ID4gZGVwZW5kaW5nIG9uIHRoZSBnYXRld2F5IHByb3ZpZGVkLgo+ID4KPiA+IFRvIHVzZSB0aGlz IHByb3RvY29sLCBhIGdhdGV3YXkgbXVzdCBiZSBwcm92aWRlZC4KPiA+IElmIHlvdSBkbyBub3Ro aW5nIGl0IHdpbGwgdHJ5IHRvIGZpbmQgaXQgaW4geW91cgo+ID4gJEhPTUUvLmlwZnMvZ2F0ZXdh eSBmaWxlLiBUaGUgd2F5cyB0byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+ID4gMS4gRGVmaW5lIGEg LWdhdGV3YXkgPHVybD4gdG8gdGhlIGdhdGV3YXkuCj4gPiAyLiBEZWZpbmUgJElQRlNfR0FURVdB WSB3aXRoIHRoZSBmdWxsIGh0dHAgbGluayB0byB0aGUgZ2F0ZXdheS4KPiA+IDMuIERlZmluZSAk SVBGU19QQVRIIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBhdGguCj4gPiA0LiBIYXZl IElQRlMgcnVubmluZyBpbiB5b3VyIGxvY2FsIHVzZXIgZm9sZGVyICh1bmRlciAkSE9NRS8uaXBm cykuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogTWFyayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29t Pgo+ID4gLS0tCj4gPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICB8ICAgMiArCj4gPiAgZG9j L3Byb3RvY29scy50ZXhpICAgICAgICB8ICAzMCArKysrCj4gPiAgbGliYXZmb3JtYXQvTWFrZWZp bGUgICAgICB8ICAgMiArCj4gPiAgbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyB8IDMyNgo+ID4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBsaWJhdmZvcm1hdC9w cm90b2NvbHMuYyAgIHwgICAyICsKPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDM2MiBpbnNlcnRpb25z KCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiA+ Cj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gPiBpbmRleCA1YjE5YTM1 ZjU5Li42ZmYwOWU3OTc0IDEwMDc1NQo+ID4gLS0tIGEvY29uZmlndXJlCj4gPiArKysgYi9jb25m aWd1cmUKPiA+IEBAIC0zNTg1LDYgKzM1ODUsOCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3 b3JrIgo+ID4gIHVkcGxpdGVfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ID4gIHVuaXhfcHJv dG9jb2xfZGVwcz0ic3lzX3VuX2giCj4gPiAgdW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsi Cj4gPiAraXBmc19wcm90b2NvbF9zZWxlY3Q9Imh0dHBzX3Byb3RvY29sIgo+ID4gK2lwbnNfcHJv dG9jb2xfc2VsZWN0PSJodHRwc19wcm90b2NvbCIKPiA+Cj4gPiAgIyBleHRlcm5hbCBsaWJyYXJ5 IHByb3RvY29scwo+ID4gIGxpYmFtcXBfcHJvdG9jb2xfZGVwcz0ibGlicmFiYml0bXEiCj4gPiBk aWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhpIGIvZG9jL3Byb3RvY29scy50ZXhpCj4gPiBp bmRleCBkMjA3ZGYwYjUyLi43YzljMGE0ODA4IDEwMDY0NAo+ID4gLS0tIGEvZG9jL3Byb3RvY29s cy50ZXhpCj4gPiArKysgYi9kb2MvcHJvdG9jb2xzLnRleGkKPiA+IEBAIC0yMDI1LDUgKzIwMjUs MzUgQEAgZGVjb2RpbmcgZXJyb3JzLgo+ID4KPiA+ICBAZW5kIHRhYmxlCj4gPgo+ID4gK0BzZWN0 aW9uIGlwZnMKPiA+ICsKPiA+ICtJbnRlclBsYW5ldGFyeSBGaWxlIFN5c3RlbSAoSVBGUykgcHJv dG9jb2wgc3VwcG9ydC4gT25lIGNhbiBhY2Nlc3MKPiA+IGZpbGVzIHN0b3JlZAo+ID4gK29uIHRo ZSBJUEZTIG5ldHdvcmsgdGhyb3VnaCBzbyBjYWxsZWQgZ2F0ZXdheXMuIFRob3NlIGFyZSBodHRw KHMpCj4gPiBlbmRwb2ludHMuCj4gPiArVGhpcyBwcm90b2NvbCB3cmFwcyB0aGUgSVBGUyBuYXRp dmUgcHJvdG9jb2xzIChpcGZzOi8vIGFuZCBpcG5zOi8vKQo+ID4gdG8gYmUgc2VuZAo+ID4gK3Rv IHN1Y2ggYSBnYXRld2F5LiBVc2VycyBjYW4gKGFuZCBzaG91bGQpIGhvc3QgdGhlaXIgb3duIG5v ZGUgd2hpY2gKPiA+IG1lYW5zIHRoaXMKPiA+ICtwcm90b2NvbCB3aWxsIHVzZSB5b3VyIGxvY2Fs IG1hY2hpbmUgZ2F0ZXdheSB0byBhY2Nlc3MgZmlsZXMgb24gdGhlCj4gPiBJUEZTIG5ldHdvcmsu Cj4gPiArCj4gPiArSWYgYSB1c2VyIGRvZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3duIHRo ZW4gdGhlIHB1YmxpYyBnYXRld2F5Cj4gPiBkd2ViLmxpbmsgaXMKPiA+ICt1c2VkIGJ5IGRlZmF1 bHQuCj4gPiArCj4gPiArWW91IGNhbiB1c2UgdGhpcyBwcm90b2NvbCBpbiAyIHdheXMuIFVzaW5n IElQRlM6Cj4gPiArQGV4YW1wbGUKPiA+ICtmZnBsYXkgaXBmczovL1FtYkd0SmcyM3NraHZGbXU5 bUppZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQKPiA+ICtAZW5kIGV4YW1wbGUKPiA+ICsKPiA+ ICtPciB0aGUgSVBOUyBwcm90b2NvbCAoSVBOUyBpcyBtdXRhYmxlIElQRlMpOgo+ID4gK0BleGFt cGxlCj4gPiArZmZwbGF5IGlwbnM6Ly9RbWJHdEpnMjNza2h2Rm11OW1KaWVQVkJ5aGZ6dTVyd283 NE1Fa1ZEWUFtRjVUCj4gPiArQGVuZCBleGFtcGxlCj4gPiArCj4gPiArWW91IGNhbiBhbHNvIGNo YW5nZSB0aGUgZ2F0ZXdheSB0byBiZSB1c2VkOgo+ID4gKwo+ID4gK0B0YWJsZSBAb3B0aW9uCj4g PiArCj4gPiArQGl0ZW0gZ2F0ZXdheQo+ID4gK0RlZmluZXMgdGhlIGdhdGV3YXkgdG8gdXNlLiBX aGVuIG5vdGhpbmcgaXMgcHJvdmlkZWQgdGhlIHByb3RvY29sCj4gPiB3aWxsIGZpcnN0IHRyeQo+ ID4gK3lvdXIgbG9jYWwgZ2F0ZXdheS4gSWYgdGhhdCBmYWlscyBkd2ViLmxpbmsgd2lsbCBiZSB1 c2VkLgo+ID4gKwo+ID4gK0BlbmQgdGFibGUKPiA+Cj4gPiAgQGMgbWFuIGVuZCBQUk9UT0NPTFMK PiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2Vm aWxlCj4gPiBpbmRleCAzZGM2YTQ3OWNjLi40ZWRjZTg0MjBmIDEwMDY0NAo+ID4gLS0tIGEvbGli YXZmb3JtYXQvTWFrZWZpbGUKPiA+ICsrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiBAQCAt NjU2LDYgKzY1Niw4IEBAIE9CSlMtJChDT05GSUdfU1JUUF9QUk9UT0NPTCkgICAgICAgICAgICAg Kz0KPiA+IHNydHBwcm90by5vIHNydHAubwo+ID4gIE9CSlMtJChDT05GSUdfU1VCRklMRV9QUk9U T0NPTCkgICAgICAgICAgKz0gc3ViZmlsZS5vCj4gPiAgT0JKUy0kKENPTkZJR19URUVfUFJPVE9D T0wpICAgICAgICAgICAgICArPSB0ZWVwcm90by5vIHRlZV9jb21tb24ubwo+ID4gIE9CSlMtJChD T05GSUdfVENQX1BST1RPQ09MKSAgICAgICAgICAgICAgKz0gdGNwLm8KPiA+ICtPQkpTLSQoQ09O RklHX0lQRlNfUFJPVE9DT0wpICAgICAgICAgICAgICs9IGlwZnNnYXRld2F5Lm8KPiA+ICtPQkpT LSQoQ09ORklHX0lQTlNfUFJPVE9DT0wpICAgICAgICAgICAgICs9IGlwZnNnYXRld2F5Lm8KPiA+ ICBUTFMtT0JKUy0kKENPTkZJR19HTlVUTFMpICAgICAgICAgICAgICAgICs9IHRsc19nbnV0bHMu bwo+ID4gIFRMUy1PQkpTLSQoQ09ORklHX0xJQlRMUykgICAgICAgICAgICAgICAgKz0gdGxzX2xp YnRscy5vCj4gPiAgVExTLU9CSlMtJChDT05GSUdfTUJFRFRMUykgICAgICAgICAgICAgICArPSB0 bHNfbWJlZHRscy5vCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyBi L2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBp bmRleCAwMDAwMDAwMDAwLi45ZWJjZWQxMGM3Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9s aWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jCj4gPiBAQCAtMCwwICsxLDMyNiBAQAo+ID4gKy8qCj4g PiArICogSVBGUyBhbmQgSVBOUyBwcm90b2NvbCBzdXBwb3J0IHRocm91Z2ggSVBGUyBHYXRld2F5 Lgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBNYXJrIEdhaXNlcgo+ID4gKyAqCj4gPiArICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKPiA+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIKPiA+IHZlcnNpb24uCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+ICsgKgo+ID4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Cj4gPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQQo+ID4gMDIxMTAtMTMwMSBVU0EKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5j bHVkZSAiYXZmb3JtYXQuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4g PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvaW50ZXJuYWwuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ID4gKyNpbmNs dWRlICJsaWJhdnV0aWwvdHJlZS5oIgo+ID4gKyNpbmNsdWRlIDxmY250bC5oPgo+ID4gKyNpZiBI QVZFX0lPX0gKPiA+ICsjaW5jbHVkZSA8aW8uaD4KPiA+ICsjZW5kaWYKPiA+ICsjaWYgSEFWRV9V TklTVERfSAo+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiA+ICsjZW5kaWYKPiA+ICsjaW5jbHVk ZSAib3Nfc3VwcG9ydC5oIgo+ID4gKyNpbmNsdWRlICJ1cmwuaCIKPiA+ICsjaW5jbHVkZSA8c3Rk bGliLmg+Cj4gPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1 Y3QgSVBGU0dhdGV3YXlDb250ZXh0IHsKPiA+ICsgICAgQVZDbGFzcyAqY2xhc3M7Cj4gPiArICAg IFVSTENvbnRleHQgKmlubmVyOwo+ID4gKyAgICBjaGFyICpnYXRld2F5Owo+ID4gK30gSVBGU0dh dGV3YXlDb250ZXh0Owo+ID4gKwo+ID4gKy8vIEEgYmVzdC1lZmZvcnQgd2F5IHRvIGZpbmQgdGhl IElQRlMgZ2F0ZXdheS4KPiA+ICsvLyBPbmx5IHRoZSBtb3N0IGFwcHJvcGlhdGUgZ2F0ZXdheSBp cyBzZXQuIEl0J3Mgbm90IGFjdHVhbGx5Cj4gPiByZXF1ZXN0ZWQKPiA+ICsvLyAoaHR0cCBjYWxs KSB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHNsb3dkb3duIGluIHN0YXJ0dXAuIEEKPiA+IHBvdGVu dGlhbCB0aW1lb3V0Cj4gPiArLy8gaXMgaGFuZGxlZCBieSB0aGUgSFRUUCBwcm90b2NvbC4KPiA+ ICtzdGF0aWMgaW50IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShVUkxDb250ZXh0ICpoLCBjaGFyICpn YXRld2F5KQo+ID4gK3sKPiA+ICsgICAgY2hhciBpcGZzX2Z1bGxfZGF0YV9mb2xkZXJbUEFUSF9N QVhdOwo+ID4gKyAgICBjaGFyIGlwZnNfZ2F0ZXdheV9maWxlW1BBVEhfTUFYXTsKPiA+ICsgICAg c3RydWN0IHN0YXQgc3Q7Cj4gPiArICAgIGludCBzdGF0X3JldCA9IDA7Cj4gPiArICAgIGludCBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArICAgIEZJTEUgKmdhdGV3YXlfZmlsZSA9IE5VTEw7 Cj4gPiArICAgIGNoYXIgZ2F0ZXdheV9maWxlX2RhdGFbUEFUSF9NQVhdOwo+ID4gKwo+ID4gKyAg ICAvLyBXZSBjb3VsZCBhbHJlYWR5IGhhdmUgYSBnYXRld2F5IChpdCB3b3VsZCBoYXZlIGJlZW4g cGFzc2VkIGFzCj4gPiAtZ2F0ZXdheSkuCj4gPiArICAgIGlmICgqZ2F0ZXdheSAhPSAnXDAnKSB7 Cj4gPiArICAgICAgICByZXQgPSAxOwo+ID4gKyAgICAgICAgZ290byBlcnI7Cj4gPiArICAgIH0K Pgo+IFdoeSBldmVuIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB0aGlzIGlzIHRoZSBjYXNlPwo+Cj4g PiArCj4gPiArICAgIC8vIFRlc3QgJElQRlNfR0FURVdBWS4KPiA+ICsgICAgaWYgKGdldGVudigi SVBGU19HQVRFV0FZIikgIT0gTlVMTCkgewo+ID4gKyAgICAgICAgc25wcmludGYoZ2F0ZXdheSwg UEFUSF9NQVgsICIlcyIsIGdldGVudigiSVBGU19HQVRFV0FZIikpOwo+Cj4gUGFzc2luZyBidWZm ZXIgbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtaW5nIFBBVEhfTUFYIHdvdWxkIGJlIGJldHRlci4K PiBUaGF0IHdheSBpdCBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IHRoaXMgYnJlYWtpbmcuCj4KPiBP ciBzdGljayB0aGUgYnVmZmVyIGluIElQRlNHYXRld2F5Q29udGV4dCBhbmQgdXNlIHNpemVvZigp Cj4KCkF3ZXNvbWUhIERpZG4ndCBldmVuIGNvbnNpZGVyIHRoZSBvcHRpb24geWV0LiBXaWxsIGRv LgoKPgo+ID4gKyAgICAgICAgcmV0ID0gMTsKPiA+ICsgICAgICAgIGdvdG8gZXJyOwo+ID4gKyAg ICB9IGVsc2UKPiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19HQVRF V0FZIGlzIGVtcHR5LlxuIik7Cj4gPiArCj4gPiArICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0aGUg SVBGUyBmb2xkZXIgdG8gLSBldmVudHVhbGx5IC0gcmVhZCB0aGUKPiA+IGNvbnRlbnRzIG9mCj4g PiArICAgIC8vIHRoZSAiZ2F0ZXdheSIgZmlsZSB3aGljaCB3b3VsZCB0ZWxsIHVzIHRoZSBnYXRl d2F5IHRvIHVzZS4KPiA+ICsgICAgaWYgKGdldGVudigiSVBGU19QQVRIIikgPT0gTlVMTCkgewo+ ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19ERUJVRywgIiRJUEZTX1BBVEggaXMgZW1wdHku XG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIC8vIFRyeSB2aWEgdGhlIGhvbWUgZm9sZGVyLgo+ID4g KyAgICAgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiJEhPTUUgYXBwZWFycyB0byBiZSBlbXB0eS5cbiIpOwo+ ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgICAgICAgICBn b3RvIGVycjsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIC8vIFZlcmlmeSB0aGUg Y29tcG9zZWQgcGF0aCBmaXRzLgo+ID4gKyAgICAgICAgaWYgKHNucHJpbnRmKGlwZnNfZnVsbF9k YXRhX2ZvbGRlciwgUEFUSF9NQVgsICIlcy8uaXBmcy8iLAo+Cj4gc2l6ZW9mKGlwZnNfZnVsbF9k YXRhX2ZvbGRlcikKPiBUaGlzIGdvZXMgZm9yIG1vc3QgUEFUSF9NQVggaW4gaGVyZQo+CgpZZWFo LCBpIGtpbmRhIHRob3VnaHQgdXNpbmcgUEFUSF9NQVggZXZlcnl3aGVyZSB3b3VsZCBiZSBjb25z aXN0ZW50LgpGbGlwcGluZyBhbGwgb2YgdGhvc2UgdG8gc2l6ZW9mKC4uLikKCj4KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBnZXRlbnYoIkhPTUUiKSkgPiBQQVRIX01BWCkgewo+ID4gKyAgICAg ICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJUaGUgSVBGUyBkYXRhIHBhdGggZXhjZWVk cyB0aGUKPiA+IG1heCBwYXRoIGxlbmd0aCAoJWkpXG4iLCBQQVRIX01BWCk7Cj4gPiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgLy8gU3RhdCB0aGUgZm9sZGVyLgo+ID4g KyAgICAgICAgLy8gSXQgc2hvdWxkIGV4aXN0IGluIGEgZGVmYXVsdCBJUEZTIHNldHVwIHdoZW4g cnVuIGFzIGxvY2FsCj4gPiB1c2VyLgo+ID4gKyNpZm5kZWYgX1dJTjMyCj4gPiArICAgICAgICBz dGF0X3JldCA9IHN0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+ID4gKyNlbHNlCj4g PiArICAgICAgICBzdGF0X3JldCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAm c3QpOwo+ID4gKyNlbmRpZgo+ID4gKyAgICAgICAgaWYgKHN0YXRfcmV0IDwgMCkgewo+ID4gKyAg ICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5kIElQRlMgZm9s ZGVyLiBXZQo+ID4gdHJpZWQ6XG4iKTsKPiA+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9H X0lORk8sICItICRJUEZTX1BBVEgsIHdoaWNoIHdhcwo+ID4gZW1wdHkuXG4iKTsKPiA+ICsgICAg ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICItICRIT01FLy5pcGZzIChmdWxsIHVyaTog JXMpCj4gPiB3aGljaCBkb2Vzbid0IGV4aXN0LlxuIiwgaXBmc19mdWxsX2RhdGFfZm9sZGVyKTsK PiA+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gPiArICAgICAgICAgICAg Z290byBlcnI7Cj4gPiArICAgICAgICB9Cj4KPiBSaWdodC4gVGhpcyBtYWtlcyBtb3JlIHNlbnNl Cj4KPiA+ICsgICAgfSBlbHNlCj4gPiArICAgICAgICBzbnByaW50ZihpcGZzX2Z1bGxfZGF0YV9m b2xkZXIsIFBBVEhfTUFYLCAiJXMiLAo+ID4gZ2V0ZW52KCJJUEZTX1BBVEgiKSk7Cj4gPiArCj4g PiArICAgIC8vIENvcHkgdGhlIGZ1bGx5IGNvbXBvc2VkIGdhdGV3YXkgcGF0aCBpbnRvIGlwZnNf Z2F0ZXdheV9maWxlLgo+ID4gKyAgICBpZiAoc25wcmludGYoaXBmc19nYXRld2F5X2ZpbGUsIFBB VEhfTUFYLCAiJXNnYXRld2F5IiwKPiA+ICsgICAgICAgICAgICAgICAgIGlwZnNfZnVsbF9kYXRh X2ZvbGRlcikgPiBQQVRIX01BWCkgewo+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJP UiwgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSBwYXRoIGV4Y2VlZHMKPiA+IHRoZSBtYXggcGF0aCBs ZW5ndGggKCVpKVxuIiwgUEFUSF9NQVgpOwo+ID4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9F TlQpOwo+ID4gKyAgICAgICAgZ290byBlcnI7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgLy8g R2V0IHRoZSBjb250ZW50cyBvZiB0aGUgZ2F0ZXdheSBmaWxlLgo+ID4gKyAgICBnYXRld2F5X2Zp bGUgPSBhdl9mb3Blbl91dGY4KGlwZnNfZ2F0ZXdheV9maWxlLCAiciIpOwo+ID4gKyAgICBpZiAo IWdhdGV3YXlfZmlsZSkgewo+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlRo ZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6Cj4gPiAlcykgZG9lc24ndCBleGlzdC4gSXMg dGhlIGdhdGV3YXkgZW5hYmxlZD9cbiIsIGlwZnNfZ2F0ZXdheV9maWxlKTsKPiA+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRU5PRU5UKTsKPiA+ICsgICAgICAgIGdvdG8gZXJyOwo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIC8vIFJlYWQgYSBzaW5nbGUgbGluZSAoZmdldHMgc3RvcHMgYXQgbmV3 IGxpbmUgbWFyaykuCj4gPiArICAgIGZnZXRzKGdhdGV3YXlfZmlsZV9kYXRhLCBQQVRIX01BWCAt IDEsIGdhdGV3YXlfZmlsZSk7Cj4gPiArCj4gPiArICAgIC8vIFJlcGxhY2UgdGhlIGxhc3QgY2hh ciB3aXRoIFwwCj4gPiArICAgIGdhdGV3YXlfZmlsZV9kYXRhW1BBVEhfTUFYIC0gMV0gPSAwOwo+ ID4gKwo+ID4gKyAgICAvLyBSZXBsYWNlIGZpcnN0IG9jY3VyZW5jZSBvZiBlbmQgb2YgbGluZSB3 aXRoIFwwCj4gPiArICAgIGdhdGV3YXlfZmlsZV9kYXRhW3N0cmNzcG4oZ2F0ZXdheV9maWxlX2Rh dGEsICJcclxuIildID0gMDsKPgo+IFdvbid0IHRoaXMgYmUganVzdCBcbiBvbiBVbml4LWxpa2Ug c3lzdGVtcz8gQ291bGQgYmUgdHdvIGxpbmVzLCBvbmUKPiB3aXRoIHN0cmNzcG4oLi4sICJcbiIp IGFuZCB0aGUgb3RoZXIgd2l0aCAiXHIiLgo+CgpUaGUgY3VycmVudCBsb2dpYyB3b3JrcyB3aXRo IGxpbnV4LgpTcGxpdHRpbmcgaXQgdXAgcmVnYXJkbGVzcywgaXQgY2FuJ3QgaHVydCBhbmQgbWln aHQgY2F0Y2ggc29tZSBuYXN0eSBlZGdlCmNhc2VzLgoKPgo+ID4gKwo+ID4gKyAgICAvLyBJZiBz dHJsZW4gZmluZHMgYW55dGhpbmcgbG9uZ2VyIHRoZW4gMCBjaGFyYWN0ZXJzIHRoZW4gd2UKPiA+ IGhhdmUgYQo+ID4gKyAgICAvLyBwb3RlbnRpYWwgZ2F0ZXdheSB1cmwuCj4gPiArICAgIGlmIChz dHJsZW4oZ2F0ZXdheV9maWxlX2RhdGEpIDwgMSkgewo+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19FUlJPUiwgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6Cj4gPiAlcykgYXBw ZWFycyB0byBiZSBlbXB0eS4gSXMgdGhlIGdhdGV3YXkgc3RhcnRlZD9cbiIsCj4gPiBpcGZzX2dh dGV3YXlfZmlsZSk7Cj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4gPiArICAg ICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvLyBBdCB0aGlzIHBvaW50 IGdhdGV3YXlfZmlsZV9kYXRhIGNvbnRhaW5zIGF0IGxlYXN0IHNvbWV0aGluZy4KPiA+ICsgICAg Ly8gQ29weSBpdCBpbnRvIGdhdGV3YXkuCj4gPiArICAgIGlmIChzbnByaW50ZihnYXRld2F5LCBQ QVRIX01BWCwgIiVzIiwgZ2F0ZXdheV9maWxlX2RhdGEpID4gMCkgewo+ID4gKyAgICAgICAgcmV0 ID0gMTsKPiA+ICsgICAgICAgIGdvdG8gZXJyOwo+ID4gKyAgICB9IGVsc2UKPiA+ICsgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICJVbmtub3duIGVycm9yIGluIHRoZSBJUEZTIGdhdGV3 YXkKPiA+IGZpbGUuXG4iKTsKPiA+ICsKPiA+ICtlcnI6Cj4gPiArICAgIGlmIChnYXRld2F5X2Zp bGUpCj4gPiArICAgICAgICBmY2xvc2UoZ2F0ZXdheV9maWxlKTsKPiA+ICsKPiA+ICsgICAgcmV0 dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLy8gRm9yIG5vdyBqdXN0IG1ha2VzIHN1cmUgdGhh dCB0aGUgZ2F0ZXdheSBlbmRzIGluIHVybCB3ZSBleHBlY3QuCj4gPiArLy8gTGlrZSBodHRwOi8v bG9jYWxob3N0OjgwODAvLgo+ID4gKy8vIEV4cGxpY2l0bHkgd2l0aCB0aGUgdHJhbGluZyBzbGFz aC4KPiA+ICtzdGF0aWMgaW50IHNhbml0aXplX2lwZnNfZ2F0ZXdheShVUkxDb250ZXh0ICpoLCBj aGFyICpnYXRld2F5KQo+ID4gK3sKPiA+ICsgICAgY29uc3QgY2hhciAqdXJsX3dpdGhvdXRfcHJv dG9jb2w7Cj4gPiArICAgIGludCByZXQgPSAxOwo+ID4gKwo+ID4gKyAgICAvLyBUZXN0IGlmIHRo ZSBnYXRld2F5IHN0YXJ0cyB3aXRoIGVpdGhlciBodHRwOi8vIG9yIGh0dHBzOi8vCj4gPiArICAg IC8vIFRoZSByZW1haW5kZXIgaXMgc3RvcmVkIGluIHVybF93aXRob3V0X3Byb3RvY29sCj4gPiAr ICAgIGlmIChhdl9zdHJpc3RhcnQoZ2F0ZXdheSwgImh0dHA6Ly8iLCAmdXJsX3dpdGhvdXRfcHJv dG9jb2wpID09IDAKPiA+ICsgICAgICAgICYmIGF2X3N0cmlzdGFydChnYXRld2F5LCAiaHR0cHM6 Ly8iLCAmdXJsX3dpdGhvdXRfcHJvdG9jb2wpCj4gPiA9PSAwKSB7Cj4gPiArICAgICAgICBhdl9s b2coaCwgQVZfTE9HX0VSUk9SLCAiVGhlIGdhdGV3YXkgVVJMIGRpZG4ndCBzdGFydCB3aXRoCj4g PiBodHRwOi8vIG9yIGh0dHBzOi8vIGFuZCBpcyB0aGVyZWZvcmUgaW52YWxpZC5cbiIpOwo+ID4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFSUxTRVEpOwo+ID4gKyAgICAgICAgZ290byBlcnI7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgLy8gV2Ugbm93IGtub3cgdGhlIHJlbWFpbmRlciBvZiB0 aGUgdXJsIHdpdGhvdXQgdGhlIHByb3RvY29sLgo+ID4gQ2hlY2sgaXQgZm9yCj4gPiArICAgIC8v IHNvbWUgbGVuZ3RoLiBBdCBsZWFzdCAxIGNoYXJhY3Rlci4KPiA+ICsgICAgaWYgKHN0cmxlbih1 cmxfd2l0aG91dF9wcm90b2NvbCkgPCAxKSB7Cj4gPiArICAgICAgICBhdl9sb2coaCwgQVZfTE9H X0VSUk9SLCAiVGhlIGdhdGV3YXkgdXJsICh3aXRob3V0IHRoZQo+ID4gcHJvdG9jb2wgcGFydCkg aXMgdG9vIHNob3J0IHRvIGJlIGEgdmFsaWQgVVJMLlxuIik7Cj4gPiArICAgICAgICByZXQgPSBB VkVSUk9SKEVJTFNFUSk7Cj4gPiArICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+Cj4gSSB0 aGluayB3ZSBjYW4ganVzdCByZWx5IG9uIHRoZSBodHRwIHByb3RvY29sIHN0dWZmIHRvIGRlYWwg d2l0aCB0aGlzCj4KCkRvIHlvdSBtaW5kIGlmIEkga2VlcCBpdCBpbj8gSXQgZG9lc24ndCBzZWVt IHRvIGh1cnQgYW5kIGFnYWluIGRvZXMgaGVscCBpbgpkZWJ1Z2dpbmcgc2NlbmFyaW9zLgoKCj4K PiA+ICsKPiA+ICsKPiA+ICsgICAgaWYgKGdhdGV3YXlbc3RybGVuKGdhdGV3YXkpIC0gMV0gIT0g Jy8nKSB7Cj4gPiArICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIGFk ZCBhICcvJwo+ID4gKyAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgaXQncyBiaWdnZXIg dGhlbiAwIGJlY2F1c2UgdGhhdCdzCj4gPiBoYW5kbGVkCj4gPiArICAgICAgICAvLyBpbiBwb3B1 bGF0ZV9pcGZzX2dhdGV3YXkKPiA+ICsKPiA+ICsgICAgICAgIGlmIChzdHJsZW4oZ2F0ZXdheSkg PCAoUEFUSF9NQVggLSAyKSkgewo+ID4gKyAgICAgICAgICAgIC8vIFdlIGhhdmUgcm9vbS4gR2V0 IHRoZSBsZW5ndGggYW5kIGFkZCBhICcvJyBhbmQgYSAnXDAnCj4gPiArICAgICAgICAgICAgaW50 IGdhdGV3YXlfbGVuZ3RoID0gc3RybGVuKGdhdGV3YXkpOwo+ID4gKyAgICAgICAgICAgIGdhdGV3 YXlbZ2F0ZXdheV9sZW5ndGhdID0gJy8nOwo+ID4gKyAgICAgICAgICAgIGdhdGV3YXlbZ2F0ZXdh eV9sZW5ndGggKyAxXSA9ICdcMCc7Cj4gPiArICAgICAgICB9IGVsc2UKPiA+ICsgICAgICAgICAg ICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiVGhlIGdhdGV3YXkgdXJsIGlzIGxvbmdlciB0aGVu Cj4gPiB0aGUgYWxsb3dlZCBtYXggcGF0aCBsZW5ndGggKCVpKS5cbiIsIFBBVEhfTUFYKTsKPiA+ ICsKPiA+ICsgICAgICAgIHJldCA9IDE7Cj4gPiArICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAg fQo+Cj4gUm9sbGluZyB0aGlzIGludG8gdGhlIHNucHJpbnRmKCkgd291bGQgYmUgcHJldHRpZXIK PgoKVWdoIDpQCldlbGwsIEkgZGlkIHRoYXQgYmVmb3JlIEkgY2hhbmdlZCBpdCB0byB0aGlzLiBJ dCB3b3JrZWQgYnV0IGl0IHRocmV3IGEKY29tcGlsZSB3YXJuaW5nIGFib3V0IHRoZSByZXN1bHRp bmcgc2l6ZSB0cnVuY2F0aW5nIHRoZSBnYXRld2F5IHZhcmlhYmxlLgpUaGlzIHNlZW1lZCBzaW1w bGVyIHRoYW4gY2hlY2tpbmcgZm9yIGl0LiBCdXQgdGhlbiBhZ2FpbiwgSSBhbSBub3cgY2hlY2tp bmcKZm9yIHRoYXQgbGVuZ3RoIGluIG90aGVyIHBsYWNlcyB0b28gc28gSSBtaWdodCBhcyB3ZWxs IGRvIHRoYXQgaGVyZSB0b28uCgoKPgo+ID4gKwo+ID4gK2VycjoKPiA+ICsgICAgcmV0dXJuIHJl dDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB0cmFuc2xhdGVfaXBmc190b19odHRwKFVS TENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKQo+ID4gK3sKPiA+ ICsgICAgY29uc3QgY2hhciAqaXBmc19jaWQ7Cj4gPiArICAgIGNoYXIgKmZ1bGx1cmkgPSBOVUxM Owo+ID4gKyAgICBjaGFyIGlwZnNfZ2F0ZXdheVtQQVRIX01BWF07Cj4gPiArICAgIGludCByZXQ7 Cj4gPiArICAgIElQRlNHYXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiA+ICsKPiA+ ICsgICAgLy8gVGVzdCBmb3IgaXBmczovLywgaXBmczosIGlwbnM6Ly8gYW5kIGlwbnM6LiBUaGlz IHByZWZpeCBpcwo+ID4gc3RyaXBwZWQgZnJvbQo+ID4gKyAgICAvLyB0aGUgc3RyaW5nIGxlYXZp bmcganVzdCB0aGUgQ0lEIGluIGlwZnNfY2lkLgo+ID4gKyAgICBpbnQgaXNfaXBmcyA9IGF2X3N0 cmlzdGFydCh1cmksICJpcGZzOi8vIiwgJmlwZnNfY2lkKTsKPiA+ICsgICAgaW50IGlzX2lwbnMg PSBhdl9zdHJpc3RhcnQodXJpLCAiaXBuczovLyIsICZpcGZzX2NpZCk7Cj4gPiArCj4gPiArICAg IC8vIFdlIG11c3QgaGF2ZSBlaXRoZXIgaXBucyBvciBpcGZzLgo+ID4gKyAgICBpZiAoIWlzX2lw ZnMgJiYgIWlzX2lwbnMpIHsKPiA+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCB1cmwgJXNcbiIs IHVyaSk7Cj4gPiArICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+Cj4gU2hvdWxkbid0IHRo aXMgY2hlY2sgdGhhdCB0aGUgVVJMIGlzIHByZWNpc2VseSB3aGF0IHRoZSBwcm90b2NvbAo+IGV4 cGVjdHM/IGlwZnMgZm9yIGZmX2lwZnNfcHJvdG9jb2wgYW5kIGlwbnMgZm9yIGZmX2lwbnNfcHJv dG9jb2wuIE1heWJlCj4gdGhhdCdzIHZhbGlkYXRlZCBmdXJ0aGVyIHVwIGhvd2V2ZXIuLgo+CgpX ZWxsLCB0aGUgcHJvdG9jb2wgaGFzIDIgcG90ZW50aWFsIHdheXM6CjxnYXRld2F5Pi88cHJvdG9j b2w+LzxpcGZzIGNpZD4gKGV4aXN0ZWQgc2luY2UgdGhlIHN0YXJ0IG9mIElQRlMpCmFuZAo8aXBm cyBjaWQ+Ljxwcm90b2NvbD4uPGdhdGV3YXk+IChjYWxsZWQgc3ViZG9tYWluIGdhdGV3YXkpCgpB biBleGFtcGxlIG9mIGJvdGg6Cmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9pcGZzL2JhZnliZWlnYWdk NW5tbm4yaXlzMmYzZG9ybzd5ZHJldnlyMm16YXJ3aWRnYWRhd21hbWl0ZXlkYnppCmh0dHA6Ly9i YWZ5YmVpZ2FnZDVubW5uMml5czJmM2Rvcm83eWRyZXZ5cjJtemFyd2lkZ2FkYXdtYW1pdGV5ZGJ6 aS5pcGZzLmxvY2FsaG9zdDo4MDgwCgpCb3RoIGFyZSB2YWxpZCBidXQgdGhlIGZvcm1lciBpcyBl YXNpZXIuClRoZSBsYXR0ZXIgcmVhbGx5IG1vc3RseSBleGlzdHMgZm9yIHdlYnNpdGUvYnJvd3Nl ciBwdXJwb3NlcyBbMV0uClRoZXJlZm9yZSBJIGxpa2UgdG8gdXNlIHRoZSBmb3JtZXIgYmVjYXVz ZSBpdCdzIG11Y2ggZWFzaWVyLiBJdCBvbmx5CnJlcXVpcmVzIGEgZ2V0ZXdheSBwcm92aWRlZCBi eSB0aGUgdXNlci4KQW5kIGFmdGVyIHRoYXQgaXQncyBvbmx5IGEgbWF0dGVyIG9mIGFwcGVuZGlu ZyBzdHJpbmdzLiBUaGUgYWx0ZXJuYXRpdmUKb3B0aW9uIGlzIG1vcmUgdHJpY2t5IHRvIGdldCBy aWdodC4KUmVnYXJkbGVzcywgdGhlIHdheSBJIGNvbmNhdGVuYXRlIHRoZSBzdHJpbmdzIG5vdyBp cyBob3cgSSBjb25zdHJ1Y3QgYQp2YWxpZCB1cmwuCgpJZiB0aGF0IFVSTCBpc24ndCB2YWxpZCB0 aGVuIHRoZXJlJ3MgbGlrZWx5IGEgZ2F0ZXdheSBwZXJtaXNzaW9uIGlzc3VlLiBCdXQKdGhhdCdz IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgcHJvdG9jb2wgYW5kIGxpa2VseSBzb21ldGhpbmcg dGhlIGh0dHAocykKcHJvdG9jb2wgaW5mb3JtcyB5b3UgYWJvdXQgYW55aG93LgoKQW55aG93LCB0 aGFuayB5b3UgYWdhaW4gZm9yIHRoZSByZXZpZXchCkknbGwgc2VuZCBhIFY2IGxhdGVyIHRoaXMg ZXZlbmluZy4KQXJlIHdlIGNsb3NlIHRvIG1lcmdpbmcgaXQ/IDspCgpbMV0gaHR0cHM6Ly9jb2Rl Y2xpbWJpbmcuY29tL3doeS1pLWFtLWV4Y2l0ZWQtYWJvdXQtc3ViZG9tYWluLWlwZnMtZ2F0ZXdh eXMvCgoKPiAvVG9tYXMKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1w ZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs Cj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWct ZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K