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 3B4E5400C2 for ; Wed, 23 Mar 2022 11:25:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0EDF868B1EA; Wed, 23 Mar 2022 13:25:41 +0200 (EET) Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1481568B1D4 for ; Wed, 23 Mar 2022 13:25:34 +0200 (EET) Received: by mail-wm1-f46.google.com with SMTP id p12-20020a05600c430c00b0038cbdf52227so751552wme.2 for ; Wed, 23 Mar 2022 04:25:34 -0700 (PDT) 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=7PSvsoicMMmXt4LlRVJ40A+NAHY21abgiEi9nq9c1xQ=; b=eJsbC67X+tYUGcxUEtsx85qXSZBixzH35H2WlHYKEpp4QPfr1q2OL4SI03iCt+fHjv hKne2+FsqDjBv7Y/OZTYxerUf0izlOf9LjsOi0DwGtj/mUDLTnvw0xLsrmicMIQD0I2l JxLvl652w8pLZLfVDspi2nUukwgmgN5R5z/fwbTnhkvpqm72KvpI1dD8WAC9eAlEChg2 evHSYHmtGUhjJaXeJ+K5/k2BAT7XZ10RYnlgf9sATfbEnSYj5immAmGa0NR+TsJS75FV BRQ4o7Gn4itmCcjAow67hV9i3I+UcBBZXHzcARDDDAUM0wLq4l3kexEZzrKWpl79XKfr 73Ng== 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=7PSvsoicMMmXt4LlRVJ40A+NAHY21abgiEi9nq9c1xQ=; b=rztBzL1o5mOZVY3pubvrvlX76oBhRjdcIH+dAfmIgLRp5C5BFI2rvQifHgtEVJwu30 /WOF7vhJbyuoOSVzcKHdw/BQ5uugIOzOvLYzESMH0zogku++PXaxmm1vqiAprnXSoGBb mLHQEBhnEaqmrovHmKRduAJAdRYOLZFeog5BG58ab6n2vAwcyqQh5IeMT32CJQLD6OcY Yy7EKRr9/eIuToKDhZj5d7VqHpHlstOU9WoLqLVZBXvxs7REV9HfJ0K95cDRXvxJgSp0 XSBOL5MJYYm6GgxDc4F3/cQypxp3b9O9CHGMTDoICv2COEsMCij9XSt4p2+amgmZZjFs Lcog== X-Gm-Message-State: AOAM532ohBJ2A29CMpznbDQTZC+E1UPhXzB5WCXTa6rz+1L6BTvyBper ek8fHaEXJXGh9kaBsl9VinyXsxyt3XGlzbBmqE0r8Y3D X-Google-Smtp-Source: ABdhPJyofuCcxKmkCoLTpeA1lDermbEGb2EeFz3iEfcA1vJXD1xtnloNODiV1KfHfQUUFrQBIAAZi4JiWwMJUTGz7nY= X-Received: by 2002:a7b:c30c:0:b0:38c:8ff1:625b with SMTP id k12-20020a7bc30c000000b0038c8ff1625bmr8683215wmj.30.1648034732819; Wed, 23 Mar 2022 04:25:32 -0700 (PDT) MIME-Version: 1.0 References: <20220318145005.241414-1-markg85@gmail.com> <20220318145005.241414-2-markg85@gmail.com> In-Reply-To: From: Mark Gaiser Date: Wed, 23 Mar 2022 12:24:38 +0100 Message-ID: To: FFmpeg development discussions and patches , michael@niedermayer.cc X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v9 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: T24gRnJpLCBNYXIgMTgsIDIwMjIgYXQgMzo1OSBQTSBNYXJrIEdhaXNlciA8bWFya2c4NUBnbWFp bC5jb20+IHdyb3RlOgoKPiBPbiBGcmksIE1hciAxOCwgMjAyMiBhdCAzOjUwIFBNIE1hcmsgR2Fp c2VyIDxtYXJrZzg1QGdtYWlsLmNvbT4gd3JvdGU6Cj4KPj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBv cnQgZm9yOgo+PiAtIGZmcGxheSBpcGZzOi8vPGNpZD4KPj4gLSBmZnBsYXkgaXBuczovLzxjaWQ+ Cj4+Cj4+IElQRlMgZGF0YSBjYW4gYmUgcGxheWVkIGZyb20gc28gY2FsbGVkICJpcGZzIGdhdGV3 YXlzIi4KPj4gQSBnYXRld2F5IGlzIGVzc2VudGlhbGx5IGEgd2Vic2VydmVyIHRoYXQgZ2l2ZXMg YWNjZXNzIHRvIHRoZQo+PiBkaXN0cmlidXRlZCBJUEZTIG5ldHdvcmsuCj4+Cj4+IFRoaXMgcHJv dG9jb2wgc3VwcG9ydCAoaXBmcyBhbmQgaXBucykgdGhlcmVmb3JlIHRyYW5zbGF0ZXMKPj4gaXBm czovLyBhbmQgaXBuczovLyB0byBhIGh0dHA6Ly8gdXJsLiBUaGlzIHJlc3VsdGluZyB1cmwgaXMK Pj4gdGhlbiBoYW5kbGVkIGJ5IHRoZSBodHRwIHByb3RvY29sLiBJdCBjb3VsZCBhbHNvIGJlIGh0 dHBzCj4+IGRlcGVuZGluZyBvbiB0aGUgZ2F0ZXdheSBwcm92aWRlZC4KPj4KPj4gVG8gdXNlIHRo aXMgcHJvdG9jb2wsIGEgZ2F0ZXdheSBtdXN0IGJlIHByb3ZpZGVkLgo+PiBJZiB5b3UgZG8gbm90 aGluZyBpdCB3aWxsIHRyeSB0byBmaW5kIGl0IGluIHlvdXIKPj4gJEhPTUUvLmlwZnMvZ2F0ZXdh eSBmaWxlLiBUaGUgd2F5cyB0byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+PiAxLiBEZWZpbmUgYSAt Z2F0ZXdheSA8dXJsPiB0byB0aGUgZ2F0ZXdheS4KPj4gMi4gRGVmaW5lICRJUEZTX0dBVEVXQVkg d2l0aCB0aGUgZnVsbCBodHRwIGxpbmsgdG8gdGhlIGdhdGV3YXkuCj4+IDMuIERlZmluZSAkSVBG U19QQVRIIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBhdGguCj4+IDQuIEhhdmUgSVBG UyBydW5uaW5nIGluIHlvdXIgbG9jYWwgdXNlciBmb2xkZXIgKHVuZGVyICRIT01FLy5pcGZzKS4K Pj4KPj4gU2lnbmVkLW9mZi1ieTogTWFyayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29tPgo+PiAt LS0KPj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgIDIgKwo+PiAgZG9jL3Byb3RvY29s cy50ZXhpICAgICAgICB8ICAzMCArKysrCj4+ICBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgIHwg ICAyICsKPj4gIGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMgfCAzMTAgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPj4gIGxpYmF2Zm9ybWF0L3Byb3RvY29scy5jICAgfCAg IDIgKwo+PiAgNSBmaWxlcyBjaGFuZ2VkLCAzNDYgaW5zZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPj4KPj4gZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZSBiL2NvbmZpZ3VyZQo+PiBpbmRleCA1YjE5YTM1ZjU5Li42ZmYwOWU3OTc0IDEwMDc1 NQo+PiAtLS0gYS9jb25maWd1cmUKPj4gKysrIGIvY29uZmlndXJlCj4+IEBAIC0zNTg1LDYgKzM1 ODUsOCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+PiAgdWRwbGl0ZV9wcm90b2Nv bF9zZWxlY3Q9Im5ldHdvcmsiCj4+ICB1bml4X3Byb3RvY29sX2RlcHM9InN5c191bl9oIgo+PiAg dW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4+ICtpcGZzX3Byb3RvY29sX3NlbGVjdD0i aHR0cHNfcHJvdG9jb2wiCj4+ICtpcG5zX3Byb3RvY29sX3NlbGVjdD0iaHR0cHNfcHJvdG9jb2wi Cj4+Cj4+ICAjIGV4dGVybmFsIGxpYnJhcnkgcHJvdG9jb2xzCj4+ICBsaWJhbXFwX3Byb3RvY29s X2RlcHM9ImxpYnJhYmJpdG1xIgo+PiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhpIGIv ZG9jL3Byb3RvY29scy50ZXhpCj4+IGluZGV4IGQyMDdkZjBiNTIuLjdjOWMwYTQ4MDggMTAwNjQ0 Cj4+IC0tLSBhL2RvYy9wcm90b2NvbHMudGV4aQo+PiArKysgYi9kb2MvcHJvdG9jb2xzLnRleGkK Pj4gQEAgLTIwMjUsNSArMjAyNSwzNSBAQCBkZWNvZGluZyBlcnJvcnMuCj4+Cj4+ICBAZW5kIHRh YmxlCj4+Cj4+ICtAc2VjdGlvbiBpcGZzCj4+ICsKPj4gK0ludGVyUGxhbmV0YXJ5IEZpbGUgU3lz dGVtIChJUEZTKSBwcm90b2NvbCBzdXBwb3J0LiBPbmUgY2FuIGFjY2VzcyBmaWxlcwo+PiBzdG9y ZWQKPj4gK29uIHRoZSBJUEZTIG5ldHdvcmsgdGhyb3VnaCBzbyBjYWxsZWQgZ2F0ZXdheXMuIFRo b3NlIGFyZSBodHRwKHMpCj4+IGVuZHBvaW50cy4KPj4gK1RoaXMgcHJvdG9jb2wgd3JhcHMgdGhl IElQRlMgbmF0aXZlIHByb3RvY29scyAoaXBmczovLyBhbmQgaXBuczovLykgdG8KPj4gYmUgc2Vu ZAo+PiArdG8gc3VjaCBhIGdhdGV3YXkuIFVzZXJzIGNhbiAoYW5kIHNob3VsZCkgaG9zdCB0aGVp ciBvd24gbm9kZSB3aGljaAo+PiBtZWFucyB0aGlzCj4+ICtwcm90b2NvbCB3aWxsIHVzZSB5b3Vy IGxvY2FsIG1hY2hpbmUgZ2F0ZXdheSB0byBhY2Nlc3MgZmlsZXMgb24gdGhlIElQRlMKPj4gbmV0 d29yay4KPj4gKwo+PiArSWYgYSB1c2VyIGRvZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3du IHRoZW4gdGhlIHB1YmxpYyBnYXRld2F5Cj4+IGR3ZWIubGluayBpcwo+PiArdXNlZCBieSBkZWZh dWx0Lgo+PiArCj4+ICtZb3UgY2FuIHVzZSB0aGlzIHByb3RvY29sIGluIDIgd2F5cy4gVXNpbmcg SVBGUzoKPj4gK0BleGFtcGxlCj4+ICtmZnBsYXkgaXBmczovL1FtYkd0SmcyM3NraHZGbXU5bUpp ZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQKPj4gK0BlbmQgZXhhbXBsZQo+PiArCj4+ICtPciB0 aGUgSVBOUyBwcm90b2NvbCAoSVBOUyBpcyBtdXRhYmxlIElQRlMpOgo+PiArQGV4YW1wbGUKPj4g K2ZmcGxheSBpcG5zOi8vUW1iR3RKZzIzc2todkZtdTltSmllUFZCeWhmenU1cndvNzRNRWtWRFlB bUY1VAo+PiArQGVuZCBleGFtcGxlCj4+ICsKPj4gK1lvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIGdh dGV3YXkgdG8gYmUgdXNlZDoKPj4gKwo+PiArQHRhYmxlIEBvcHRpb24KPj4gKwo+PiArQGl0ZW0g Z2F0ZXdheQo+PiArRGVmaW5lcyB0aGUgZ2F0ZXdheSB0byB1c2UuIFdoZW4gbm90aGluZyBpcyBw cm92aWRlZCB0aGUgcHJvdG9jb2wgd2lsbAo+PiBmaXJzdCB0cnkKPj4gK3lvdXIgbG9jYWwgZ2F0 ZXdheS4gSWYgdGhhdCBmYWlscyBkd2ViLmxpbmsgd2lsbCBiZSB1c2VkLgo+PiArCj4+ICtAZW5k IHRhYmxlCj4+Cj4+ICBAYyBtYW4gZW5kIFBST1RPQ09MUwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZm b3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+PiBpbmRleCAzZGM2YTQ3OWNj Li40ZWRjZTg0MjBmIDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+PiArKysg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+PiBAQCAtNjU2LDYgKzY1Niw4IEBAIE9CSlMtJChDT05G SUdfU1JUUF9QUk9UT0NPTCkgICAgICAgICAgICAgKz0KPj4gc3J0cHByb3RvLm8gc3J0cC5vCj4+ ICBPQkpTLSQoQ09ORklHX1NVQkZJTEVfUFJPVE9DT0wpICAgICAgICAgICs9IHN1YmZpbGUubwo+ PiAgT0JKUy0kKENPTkZJR19URUVfUFJPVE9DT0wpICAgICAgICAgICAgICArPSB0ZWVwcm90by5v IHRlZV9jb21tb24ubwo+PiAgT0JKUy0kKENPTkZJR19UQ1BfUFJPVE9DT0wpICAgICAgICAgICAg ICArPSB0Y3Aubwo+PiArT0JKUy0kKENPTkZJR19JUEZTX1BST1RPQ09MKSAgICAgICAgICAgICAr PSBpcGZzZ2F0ZXdheS5vCj4+ICtPQkpTLSQoQ09ORklHX0lQTlNfUFJPVE9DT0wpICAgICAgICAg ICAgICs9IGlwZnNnYXRld2F5Lm8KPj4gIFRMUy1PQkpTLSQoQ09ORklHX0dOVVRMUykgICAgICAg ICAgICAgICAgKz0gdGxzX2dudXRscy5vCj4+ICBUTFMtT0JKUy0kKENPTkZJR19MSUJUTFMpICAg ICAgICAgICAgICAgICs9IHRsc19saWJ0bHMubwo+PiAgVExTLU9CSlMtJChDT05GSUdfTUJFRFRM UykgICAgICAgICAgICAgICArPSB0bHNfbWJlZHRscy5vCj4+IGRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9pcGZzZ2F0ZXdheS5jIGIvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYwo+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwLi4yYjI5MDVkMmMyCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYwo+PiBAQCAtMCwwICsxLDMx MCBAQAo+PiArLyoKPj4gKyAqIElQRlMgYW5kIElQTlMgcHJvdG9jb2wgc3VwcG9ydCB0aHJvdWdo IElQRlMgR2F0ZXdheS4KPj4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBNYXJrIEdhaXNlcgo+PiAr ICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPj4gKyAqCj4+ICsgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+ICsg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCj4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKPj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCj4+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEKPj4gMDIxMTAtMTMwMSBVU0EKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSAiYXZmb3Jt YXQuaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPj4gKyNpbmNsdWRlICJs aWJhdnV0aWwvYXZzdHJpbmcuaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIK Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3Ry ZWUuaCIKPj4gKyNpbmNsdWRlIDxmY250bC5oPgo+PiArI2lmIEhBVkVfSU9fSAo+PiArI2luY2x1 ZGUgPGlvLmg+Cj4+ICsjZW5kaWYKPj4gKyNpZiBIQVZFX1VOSVNURF9ICj4+ICsjaW5jbHVkZSA8 dW5pc3RkLmg+Cj4+ICsjZW5kaWYKPj4gKyNpbmNsdWRlICJvc19zdXBwb3J0LmgiCj4+ICsjaW5j bHVkZSAidXJsLmgiCj4+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4+ICsjaW5jbHVkZSA8c3lzL3N0 YXQuaD4KPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgSVBGU0dhdGV3YXlDb250ZXh0IHsKPj4gKyAg ICBBVkNsYXNzICpjbGFzczsKPj4gKyAgICBVUkxDb250ZXh0ICppbm5lcjsKPj4gKyAgICAvLyBJ cyBmaWxsZWQgYnkgdGhlIC1nYXRld2F5IGFyZ3VtZW50IGFuZCBub3QgY2hhbmdlZCBhZnRlci4K Pj4gKyAgICBjaGFyICpnYXRld2F5Owo+PiArICAgIC8vIElmIHRoZSBhYm92ZSBnYXRld2F5IGlz IG5vbiBudWxsLCBpdCB3aWxsIGJlIGNvcGllZCBpbnRvIHRoaXMKPj4gYnVmZmVyLgo+PiArICAg IC8vIEVsc2UgdGhpcyBidWZmZXIgd2lsbCBjb250YWluIHRoZSBhdXRvIGRldGVjdGVkIGdhdGV3 YXkuCj4+ICsgICAgLy8gSW4gZWl0aGVyIGNhc2UsIHRoZSBnYXRld2F5IHRvIHVzZSB3aWxsIGJl IGluIHRoaXMgYnVmZmVyLgo+PiArICAgIGNoYXIgZ2F0ZXdheV9idWZmZXJbUEFUSF9NQVhdOwo+ PiArfSBJUEZTR2F0ZXdheUNvbnRleHQ7Cj4+ICsKPj4gKy8vIEEgYmVzdC1lZmZvcnQgd2F5IHRv IGZpbmQgdGhlIElQRlMgZ2F0ZXdheS4KPj4gKy8vIE9ubHkgdGhlIG1vc3QgYXBwcm9waWF0ZSBn YXRld2F5IGlzIHNldC4gSXQncyBub3QgYWN0dWFsbHkgcmVxdWVzdGVkCj4+ICsvLyAoaHR0cCBj YWxsKSB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHNsb3dkb3duIGluIHN0YXJ0dXAuIEEgcG90ZW50 aWFsCj4+IHRpbWVvdXQKPj4gKy8vIGlzIGhhbmRsZWQgYnkgdGhlIEhUVFAgcHJvdG9jb2wuCj4+ ICtzdGF0aWMgaW50IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShVUkxDb250ZXh0ICpoKQo+PiArewo+ PiArICAgIElQRlNHYXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPj4gKyAgICBjaGFy IGlwZnNfZnVsbF9kYXRhX2ZvbGRlcltQQVRIX01BWF07Cj4+ICsgICAgY2hhciBpcGZzX2dhdGV3 YXlfZmlsZVtQQVRIX01BWF07Cj4+ICsgICAgc3RydWN0IHN0YXQgc3Q7Cj4+ICsgICAgaW50IHN0 YXRfcmV0ID0gMDsKPj4gKyAgICBpbnQgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+PiArICAgIEZJ TEUgKmdhdGV3YXlfZmlsZSA9IE5VTEw7Cj4+ICsKPj4gKyAgICAvLyBUZXN0ICRJUEZTX0dBVEVX QVkuCj4+ICsgICAgaWYgKGdldGVudigiSVBGU19HQVRFV0FZIikgIT0gTlVMTCkgewo+PiArICAg ICAgICBpZiAoc25wcmludGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1 ZmZlciksICIlcyIsCj4+ICsgICAgICAgICAgICAgICAgICAgICBnZXRlbnYoIklQRlNfR0FURVdB WSIpKSA+PQo+PiBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKSB7Cj4+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGU19HQVRFV0FZIGVudmlyb25tZW50Cj4+ IHZhcmlhYmxlIGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoLiBXZSBhbGxvdyBhIG1heCBvZiAl enUgY2hhcmFjdGVyc1xuIiwKPj4gc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSk7Cj4+ICsgICAg ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgICAgICBnb3RvIGVycjsK Pj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIHJldCA9IDE7Cj4+ICsgICAgICAgIGdvdG8g ZXJyOwo+PiArICAgIH0gZWxzZQo+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0RFQlVHLCAi JElQRlNfR0FURVdBWSBpcyBlbXB0eS5cbiIpOwo+PiArCj4+ICsgICAgLy8gV2UgbmVlZCB0byBr bm93IHRoZSBJUEZTIGZvbGRlciB0byAtIGV2ZW50dWFsbHkgLSByZWFkIHRoZQo+PiBjb250ZW50 cyBvZgo+PiArICAgIC8vIHRoZSAiZ2F0ZXdheSIgZmlsZSB3aGljaCB3b3VsZCB0ZWxsIHVzIHRo ZSBnYXRld2F5IHRvIHVzZS4KPj4gKyAgICBpZiAoZ2V0ZW52KCJJUEZTX1BBVEgiKSA9PSBOVUxM KSB7Cj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19QQVRIIGlzIGVt cHR5LlxuIik7Cj4+ICsKPj4gKyAgICAgICAgLy8gVHJ5IHZpYSB0aGUgaG9tZSBmb2xkZXIuCj4+ ICsgICAgICAgIGlmIChnZXRlbnYoIkhPTUUiKSA9PSBOVUxMKSB7Cj4+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICIkSE9NRSBhcHBlYXJzIHRvIGJlIGVtcHR5LlxuIik7 Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgICAgICBn b3RvIGVycjsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8vIFZlcmlmeSB0aGUgY29t cG9zZWQgcGF0aCBmaXRzLgo+PiArICAgICAgICBpZiAoc25wcmludGYoaXBmc19mdWxsX2RhdGFf Zm9sZGVyLAo+PiBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICIlcy8uaXBmcy8iLCBnZXRlbnYoIkhPTUUiKSkgPj0KPj4gc2l6ZW9mKGlwZnNf ZnVsbF9kYXRhX2ZvbGRlcikpIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FS TklORywgIlRoZSBJUEZTIGRhdGEgcGF0aCBleGNlZWRzIHRoZQo+PiBtYXggcGF0aCBsZW5ndGgg KCV6dSlcbiIsIHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpKTsKPj4gKyAgICAgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+PiArICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgLy8gU3RhdCB0aGUgZm9sZGVyLgo+PiArICAgICAgICAv LyBJdCBzaG91bGQgZXhpc3QgaW4gYSBkZWZhdWx0IElQRlMgc2V0dXAgd2hlbiBydW4gYXMgbG9j YWwKPj4gdXNlci4KPj4gKyNpZm5kZWYgX1dJTjMyCj4+ICsgICAgICAgIHN0YXRfcmV0ID0gc3Rh dChpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsICZzdCk7Cj4+ICsjZWxzZQo+PiArICAgICAgICBzdGF0 X3JldCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+PiArI2VuZGlm Cj4+ICsgICAgICAgIGlmIChzdGF0X3JldCA8IDApIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5kIElQRlMgZm9sZGVyLiBXZQo+PiB0cmllZDpc biIpOwo+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiLSAkSVBGU19QQVRI LCB3aGljaCB3YXMgZW1wdHkuXG4iKTsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0df SU5GTywgIi0gJEhPTUUvLmlwZnMgKGZ1bGwgdXJpOiAlcykgd2hpY2gKPj4gZG9lc24ndCBleGlz dC5cbiIsIGlwZnNfZnVsbF9kYXRhX2ZvbGRlcik7Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVS Uk9SKEVOT0VOVCk7Cj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPj4gKyAgICAgICAgfQo+PiAr ICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgIGlmIChzbnByaW50ZihpcGZzX2Z1bGxfZGF0YV9mb2xk ZXIsCj4+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpLCAiJXMiLAo+PiArICAgICAgICAg ICAgICAgICBnZXRlbnYoIklQRlNfUEFUSCIpKSA+PSBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9s ZGVyKSkgewo+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQ RlNfUEFUSCBlbnZpcm9ubWVudAo+PiB2YXJpYWJsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0 aC4gV2UgYWxsb3cgYSBtYXggb2YgJXp1IGNoYXJhY3RlcnNcbiIsCj4+IHNpemVvZihjLT5nYXRl d2F5X2J1ZmZlcikpOwo+PiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+PiAr ICAgICAgICAgICAgZ290byBlcnI7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgIH0KPj4gKwo+ PiArICAgIC8vIENvcHkgdGhlIGZ1bGx5IGNvbXBvc2VkIGdhdGV3YXkgcGF0aCBpbnRvIGlwZnNf Z2F0ZXdheV9maWxlLgo+PiArICAgIGlmIChzbnByaW50ZihpcGZzX2dhdGV3YXlfZmlsZSwgc2l6 ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSwKPj4gIiVzZ2F0ZXdheSIsCj4+ICsgICAgICAgICAgICAg ICAgIGlwZnNfZnVsbF9kYXRhX2ZvbGRlcikgPj0gc2l6ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSkg ewo+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5 IGZpbGUgcGF0aCBleGNlZWRzCj4+IHRoZSBtYXggcGF0aCBsZW5ndGggKCV6dSlcbiIsIHNpemVv ZihpcGZzX2dhdGV3YXlfZmlsZSkpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7 Cj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8vIEdldCB0aGUg Y29udGVudHMgb2YgdGhlIGdhdGV3YXkgZmlsZS4KPj4gKyAgICBnYXRld2F5X2ZpbGUgPSBhdl9m b3Blbl91dGY4KGlwZnNfZ2F0ZXdheV9maWxlLCAiciIpOwo+PiArICAgIGlmICghZ2F0ZXdheV9m aWxlKSB7Cj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdh dGV3YXkgZmlsZSAoZnVsbCB1cmk6ICVzKQo+PiBkb2Vzbid0IGV4aXN0LiBJcyB0aGUgZ2F0ZXdh eSBlbmFibGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUpOwo+PiArICAgICAgICByZXQgPSBBVkVS Uk9SKEVOT0VOVCk7Cj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiArICAgIH0KPj4gKwo+PiArICAg IC8vIFJlYWQgYSBzaW5nbGUgbGluZSAoZmdldHMgc3RvcHMgYXQgbmV3IGxpbmUgbWFyaykuCj4+ ICsgICAgZmdldHMoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikg LSAxLAo+PiBnYXRld2F5X2ZpbGUpOwo+PiArCj4+ICsgICAgLy8gUmVwbGFjZSB0aGUgbGFzdCBj aGFyIHdpdGggXDAKPj4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzaXplb2YoYy0+Z2F0ZXdheV9i dWZmZXIpIC0gMV0gPSAwOwo+PiArCj4+ICsgICAgLy8gUmVwbGFjZSBmaXJzdCBvY2N1cmVuY2Ug b2YgZW5kIG9mIGxpbmUgd2l0aCBcMAo+PiArICAgIGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4o Yy0+Z2F0ZXdheV9idWZmZXIsICJcciIpXSA9IDA7Cj4+ICsgICAgYy0+Z2F0ZXdheV9idWZmZXJb c3RyY3NwbihjLT5nYXRld2F5X2J1ZmZlciwgIlxuIildID0gMDsKPj4gKwo+PiArICAgIC8vIElm IHN0cmxlbiBmaW5kcyBhbnl0aGluZyBsb25nZXIgdGhlbiAwIGNoYXJhY3RlcnMgdGhlbiB3ZSBo YXZlIGEKPj4gKyAgICAvLyBwb3RlbnRpYWwgZ2F0ZXdheSB1cmwuCj4+ICsgICAgaWYgKHN0cmxl bihjLT5nYXRld2F5X2J1ZmZlcikgPCAxKSB7Cj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0df V0FSTklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6ICVzKQo+PiBhcHBlYXJz IHRvIGJlIGVtcHR5LiBJcyB0aGUgZ2F0ZXdheSBzdGFydGVkP1xuIiwgaXBmc19nYXRld2F5X2Zp bGUpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+ICsgICAgICAgIGdvdG8g ZXJyOwo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgIC8vIFdlJ3JlIGRvbmUsIHRoZSBjLT5n YXRld2F5X2J1ZmZlciBoYXMgc29tZXRoaW5nIHRoYXQgbG9va3MKPj4gdmFsaWQuCj4+ICsgICAg ICAgIHJldCA9IDE7Cj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiArICAgIH0KPj4gKwo+PiArZXJy Ogo+PiArICAgIGlmIChnYXRld2F5X2ZpbGUpCj4+ICsgICAgICAgIGZjbG9zZShnYXRld2F5X2Zp bGUpOwo+PiArCj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0 cmFuc2xhdGVfaXBmc190b19odHRwKFVSTENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVyaSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wdGlvbnMpCj4+ICt7Cj4+ICsgICAgY29uc3QgY2hhciAqaXBmc19jaWQ7Cj4+ICsgICAg Y2hhciAqZnVsbHVyaSA9IE5VTEw7Cj4+ICsgICAgaW50IHJldDsKPj4gKyAgICBJUEZTR2F0ZXdh eUNvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4+ICsKPj4gKyAgICAvLyBUZXN0IGZvciBpcGZz Oi8vLCBpcGZzOiwgaXBuczovLyBhbmQgaXBuczouIFRoaXMgcHJlZml4IGlzCj4+IHN0cmlwcGVk IGZyb20KPj4gKyAgICAvLyB0aGUgc3RyaW5nIGxlYXZpbmcganVzdCB0aGUgQ0lEIGluIGlwZnNf Y2lkLgo+PiArICAgIGludCBpc19pcGZzID0gYXZfc3RyaXN0YXJ0KHVyaSwgImlwZnM6Ly8iLCAm aXBmc19jaWQpOwo+PiArICAgIGludCBpc19pcG5zID0gYXZfc3RyaXN0YXJ0KHVyaSwgImlwbnM6 Ly8iLCAmaXBmc19jaWQpOwo+PiArCj4+ICsgICAgLy8gV2UgbXVzdCBoYXZlIGVpdGhlciBpcG5z IG9yIGlwZnMuCj4+ICsgICAgaWYgKCFpc19pcGZzICYmICFpc19pcG5zKSB7Cj4+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJO SU5HLCAiVW5zdXBwb3J0ZWQgdXJsICVzXG4iLCB1cmkpOwo+PiArICAgICAgICBnb3RvIGVycjsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLyBJZiB0aGUgQ0lEIGhhcyBhIGxlbmd0aCBncmVhdGVy IHRoZW4gMCB0aGVuIHdlIGFzc3VtZSB3ZSBoYXZlIGEKPj4gcHJvcGVyIHdvcmtpbmcgb25lLgo+ PiArICAgIC8vIEl0IGNvdWxkIHN0aWxsIGJlIHdyb25nIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIGdh dGV3YXkgc2hvdWxkIHNhdmUKPj4gdXMgYW5kCj4+ICsgICAgLy8gcnV0dXJuIGEgNDAzIGVycm9y LiBUaGUgaHR0cCBwcm90b2NvbCBoYW5kbGVzIHRoaXMuCj4+ICsgICAgaWYgKHN0cmxlbihpcGZz X2NpZCkgPCAxKSB7Cj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIkEgQ0lE IG11c3QgYmUgcHJvdmlkZWQuXG4iKTsKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSUxTRVEp Owo+PiArICAgICAgICBnb3RvIGVycjsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLyBQb3B1bGF0 ZSBjLT5nYXRld2F5X2J1ZmZlciB3aXRoIHdoYXRldmVyIGlzIGluIGMtPmdhdGV3YXkKPj4gKyAg ICBpZiAoYy0+Z2F0ZXdheSAhPSBOVUxMKSB7Cj4+ICsgICAgICAgIGlmIChzbnByaW50ZihjLT5n YXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSwgIiVzIiwKPj4gKyAgICAg ICAgICAgICAgICAgICAgIGMtPmdhdGV3YXkpID49IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikp IHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSAtZ2F0ZXdh eSBwYXJhbWV0ZXIgaXMgdG9vCj4+IGxvbmcuIFdlIGFsbG93IGEgbWF4IG9mICV6dSBjaGFyYWN0 ZXJzXG4iLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKTsKPj4gKyAgICAgICAgICAgIHJldCA9 IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+PiArICAgICAgICB9 Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgLy8gUG9wdWxhdGUgdGhlIElQRlMgZ2F0ZXdh eSBpZiB3ZSBoYXZlIGFueS4KPj4gKyAgICAgICAgLy8gSWYgbm90LCBpbmZvcm0gdGhlIHVzZXIg aG93IHRvIHByb3Blcmx5IHNldCBvbmUuCj4+ICsgICAgICAgIHJldCA9IHBvcHVsYXRlX2lwZnNf Z2F0ZXdheShoKTsKPj4gKwo+PiArICAgICAgICBpZiAocmV0IDwgMSkgewo+PiArICAgICAgICAg ICAgLy8gV2UgZmFsbGJhY2sgb24gZHdlYi5saW5rIChtYW5hZ2VkIGJ5IFByb3RvY29sIExhYnMp Lgo+PiArICAgICAgICAgICAgc25wcmludGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5n YXRld2F5X2J1ZmZlciksICIKPj4gaHR0cHM6Ly9kd2ViLmxpbmsiKTsKPj4KPgo+IEp1c3QgdG8g bWFrZSB0aGlzIHBhcnQgY2xlYXIuCj4gSSd2ZSBiZWVuIGhvbGRpbmcgb2ZmIHNlbmRpbmcgdGhp cyBwYXRjaCB0aWxsIEkgcmVjZWl2ZWQgYW5kIE9LIGZyb20KPiBQcm90b2NvbCBMYWJzICh0aGV5 IG1haW50YWluIHRoaXMgZ2F0ZXdheSBhbmQgSVBGUykuCj4gVGhleSBhcHByb3ZlIGhhdmluZyB0 aGlzIGZhbGxiYWNrIGdhdGV3YXkgaW4gdGhlIGZmbXBlZyBjb2RlYmFzZS4KPgo+IFRoaXMgYWxz byBtZWFucyB0aGF0LCBzdGFydGluZyBmcm9tIHRoaXMgcGF0Y2gsICJmZnBsYXkgaXBmczovLzxj aWQ+IiB3aWxsCj4ganVzdCB3b3JrIG9uIGFueSBwbGF0Zm9ybSB3aGVyZSBmZm1wZWcgcnVucyBh bmQgdGhpcyBwcm90b2NvbCBpcyBlbmFibGVkIQo+IFRoYXQncyBodWdlIQo+Cj4gT3RoZXIgdGhh biB0aGF0IGl0J3MgaW1wbGVtZW50ZWQgZXhhY3RseSBhcyBwcmV2aW91c2x5IGRpc2N1c3NlZCBp biB0aGUgVjgKPiBzZXJpZXMuCj4KPiArCj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9H X1dBUk5JTkcsICJJUEZTIGRvZXMgbm90IGFwcGVhciB0byBiZQo+PiBydW5uaW5nLiBZb3XigJly ZSBub3cgdXNpbmcgdGhlIHB1YmxpYyBnYXRld2F5IGF0IGR3ZWIubGluay5cbiIpOwo+PiArICAg ICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiSW5zdGFsbGluZyBJUEZTIGxvY2FsbHkg aXMKPj4gcmVjb21tZW5kZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHks IGFuZCBub3Qgc2hhcmUgYWxsIHlvdXIKPj4gYWN0aXZpdHkgd2l0aCBhIHNpbmdsZSBJUEZTIGdh dGV3YXkuXG4iKTsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlRoZXJl IGFyZSBtdWx0aXBsZSBvcHRpb25zIHRvIGRlZmluZQo+PiB0aGlzIGdhdGV3YXkuXG4iKTsKPj4g KyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIjEuIENhbGwgZmZtcGVnIHdpdGgg YSBnYXRld2F5IHBhcmFtLAo+PiB3aXRob3V0IGEgdHJhaWxpbmcgc2xhc2g6IC1nYXRld2F5IDx1 cmw+LlxuIik7Cj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICIyLiBEZWZp bmUgYW4gJElQRlNfR0FURVdBWQo+PiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBmdWxs IEhUVFAgVVJMIHRvIHRoZSBnYXRld2F5IHdpdGhvdXQgdHJhaWxpbmcKPj4gZm9yd2FyZCBzbGFz aC5cbiIpOwo+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiMy4gRGVmaW5l IGFuICRJUEZTX1BBVEggZW52aXJvbm1lbnQKPj4gdmFyaWFibGUgYW5kIHBvaW50IGl0IHRvIHRo ZSBJUEZTIGRhdGEgcGF0aCAtIHRoaXMgaXMgdHlwaWNhbGx5IH4vLmlwZnNcbiIpOwo+PiArICAg ICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLy8gVGVzdCBpZiB0aGUgZ2F0ZXdheSBzdGFy dHMgd2l0aCBlaXRoZXIgaHR0cDovLyBvciBodHRwczovLwo+PiArICAgIGlmIChhdl9zdHJpc3Rh cnQoYy0+Z2F0ZXdheV9idWZmZXIsICJodHRwOi8vIiwgTlVMTCkgPT0gMAo+PiArICAgICAgICAm JiBhdl9zdHJpc3RhcnQoYy0+Z2F0ZXdheV9idWZmZXIsICJodHRwczovLyIsIE5VTEwpID09IDAp IHsKPj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIGdhdGV3YXkgVVJM IGRpZG4ndCBzdGFydCB3aXRoCj4+IGh0dHA6Ly8gb3IgaHR0cHM6Ly8gYW5kIGlzIHRoZXJlZm9y ZSBpbnZhbGlkLlxuIik7Cj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlMU0VRKTsKPj4gKyAg ICAgICAgZ290byBlcnI7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLy8gQ29uY2F0ZW5hdGUgdGhl IHVybC4KPj4gKyAgICAvLyBUaGlzIGVuZHMgdXAgd2l0aCBzb21ldGhpbmcgbGlrZToKPj4gaHR0 cDovL2xvY2FsaG9zdDo4MDgwL2lwZnMvUW0uLi4uLgo+PiArICAgIC8vIFRoZSBmb3JtYXQgb2Yg IiVzJXMlcyVzIiBpcyB0aGUgZm9sbG93aW5nOgo+PiArICAgIC8vIDFzdCAlcyA9IFRoZSBnYXRl d2F5Lgo+PiArICAgIC8vIDJuZCAlcyA9IElmIHRoZSBnYXRld2F5IGRpZG4ndCBlbmQgaW4gYSBz bGFzaCwgYWRkIGEgIi8iLgo+PiBPdGhlcndpc2UgaXQncyBhbiBlbXB0eSBzdHJpbmcKPj4gKyAg ICAvLyAzcmQgJXMgPSBFaXRoZXIgaXBucy8gb3IgaXBmcy8uCj4+ICsgICAgLy8gNHRoICVzID0g VGhlIElQRlMgQ0lEIChRbS4uLiwgYmFmeS4uLiwgLi4uKS4KPj4gKyAgICBmdWxsdXJpID0gYXZf YXNwcmludGYoIiVzJXMlcyVzIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Z2F0 ZXdheV9idWZmZXIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIChjLT5nYXRld2F5X2J1 ZmZlcltzdHJsZW4oYy0+Z2F0ZXdheV9idWZmZXIpIC0KPj4gMV0gPT0gJy8nKSA/ICIiIDogIi8i LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNfaXBucykgPyAiaXBucy8iIDogImlw ZnMvIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBmc19jaWQpOwo+PiArCj4+ICsg ICAgLy8gUGFzcyB0aGUgVVJMIGJhY2sgdG8gRkZNcGVnJ3MgcHJvdG9jb2wgaGFuZGxlci4KPj4g KyAgICBpZiAoKHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZjLT5pbm5lciwgZnVsbHVyaSwg ZmxhZ3MsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaC0+aW50ZXJy dXB0X2NhbGxiYWNrLCBvcHRpb25zLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaC0+cHJvdG9jb2xfd2hpdGVsaXN0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaC0+cHJvdG9jb2xfYmxhY2tsaXN0LCBoKSkKPj4gKyAgICAgICAgPCAwKSB7 Cj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlVuYWJsZSB0byBvcGVuIHJl c291cmNlOiAlc1xuIiwKPj4gZnVsbHVyaSk7Cj4+ICsgICAgICAgIGdvdG8gZXJyOwo+PiArICAg IH0KPj4gKwo+PiArZXJyOgo+PiArICAgIGF2X2ZyZWUoZnVsbHVyaSk7Cj4+ICsgICAgcmV0dXJu IHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBpcGZzX3JlYWQoVVJMQ29udGV4dCAqaCwg dW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKPj4gK3sKPj4gKyAgICBJUEZTR2F0ZXdheUNv bnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4+ICsgICAgcmV0dXJuIGZmdXJsX3JlYWQoYy0+aW5u ZXIsIGJ1Ziwgc2l6ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQ2NF90IGlwZnNfc2VlayhV UkxDb250ZXh0ICpoLCBpbnQ2NF90IHBvcywgaW50IHdoZW5jZSkKPj4gK3sKPj4gKyAgICBJUEZT R2F0ZXdheUNvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4+ICsgICAgcmV0dXJuIGZmdXJsX3Nl ZWsoYy0+aW5uZXIsIHBvcywgd2hlbmNlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBpcGZz X2Nsb3NlKFVSTENvbnRleHQgKmgpCj4+ICt7Cj4+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpj ID0gaC0+cHJpdl9kYXRhOwo+PiArICAgIGF2X2ZyZWUoYy0+Z2F0ZXdheSk7Cj4+ICsgICAgcmV0 dXJuIGZmdXJsX2Nsb3NlcCgmYy0+aW5uZXIpOwo+PiArfQo+PiArCj4+ICsjZGVmaW5lIE9GRlNF VCh4KSBvZmZzZXRvZihJUEZTR2F0ZXdheUNvbnRleHQsIHgpCj4+ICsKPj4gK3N0YXRpYyBjb25z dCBBVk9wdGlvbiBvcHRpb25zW10gPSB7Cj4+ICsgICAgeyJnYXRld2F5IiwgIlRoZSBnYXRld2F5 IHRvIGFzayBmb3IgSVBGUyBkYXRhLiIsIE9GRlNFVChnYXRld2F5KSwKPj4gQVZfT1BUX1RZUEVf U1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAwLCAwLCBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTX0s Cj4+ICsgICAge05VTEx9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgaXBm c19jb250ZXh0X2NsYXNzID0gewo+PiArICAgIC5jbGFzc19uYW1lICAgPSAiSVBGUyIsCj4+ICsg ICAgLml0ZW1fbmFtZSAgICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+PiArICAgIC5vcHRpb24g ICAgICAgPSBvcHRpb25zLAo+PiArICAgIC52ZXJzaW9uICAgICAgPSBMSUJBVlVUSUxfVkVSU0lP Tl9JTlQsCj4+ICt9Owo+PiArCj4+ICtjb25zdCBVUkxQcm90b2NvbCBmZl9pcGZzX3Byb3RvY29s ID0gewo+PiArICAgIC5uYW1lICAgICAgICAgICAgID0gImlwZnMiLAo+PiArICAgIC51cmxfb3Bl bjIgICAgICAgID0gdHJhbnNsYXRlX2lwZnNfdG9faHR0cCwKPj4gKyAgICAudXJsX3JlYWQgICAg ICAgICA9IGlwZnNfcmVhZCwKPj4gKyAgICAudXJsX3NlZWsgICAgICAgICA9IGlwZnNfc2VlaywK Pj4gKyAgICAudXJsX2Nsb3NlICAgICAgICA9IGlwZnNfY2xvc2UsCj4+ICsgICAgLnByaXZfZGF0 YV9zaXplICAgPSBzaXplb2YoSVBGU0dhdGV3YXlDb250ZXh0KSwKPj4gKyAgICAucHJpdl9kYXRh X2NsYXNzICA9ICZpcGZzX2NvbnRleHRfY2xhc3MsCj4+ICt9Owo+PiArCj4+ICtjb25zdCBVUkxQ cm90b2NvbCBmZl9pcG5zX3Byb3RvY29sID0gewo+PiArICAgIC5uYW1lICAgICAgICAgICAgID0g ImlwbnMiLAo+PiArICAgIC51cmxfb3BlbjIgICAgICAgID0gdHJhbnNsYXRlX2lwZnNfdG9faHR0 cCwKPj4gKyAgICAudXJsX3JlYWQgICAgICAgICA9IGlwZnNfcmVhZCwKPj4gKyAgICAudXJsX3Nl ZWsgICAgICAgICA9IGlwZnNfc2VlaywKPj4gKyAgICAudXJsX2Nsb3NlICAgICAgICA9IGlwZnNf Y2xvc2UsCj4+ICsgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoSVBGU0dhdGV3YXlDb250 ZXh0KSwKPj4gKyAgICAucHJpdl9kYXRhX2NsYXNzICA9ICZpcGZzX2NvbnRleHRfY2xhc3MsCj4+ ICt9Owo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMgYi9saWJhdmZvcm1h dC9wcm90b2NvbHMuYwo+PiBpbmRleCA5NDhmYWU0MTFmLi42NzViNjg0YmQzIDEwMDY0NAo+PiAt LS0gYS9saWJhdmZvcm1hdC9wcm90b2NvbHMuYwo+PiArKysgYi9saWJhdmZvcm1hdC9wcm90b2Nv bHMuYwo+PiBAQCAtNzMsNiArNzMsOCBAQCBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfbGli c3J0X3Byb3RvY29sOwo+PiAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX2xpYnNzaF9wcm90 b2NvbDsKPj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJzbWJjbGllbnRfcHJvdG9j b2w7Cj4+ICBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfbGliem1xX3Byb3RvY29sOwo+PiAr ZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX2lwZnNfcHJvdG9jb2w7Cj4+ICtleHRlcm4gY29u c3QgVVJMUHJvdG9jb2wgZmZfaXBuc19wcm90b2NvbDsKPj4KPj4gICNpbmNsdWRlICJsaWJhdmZv cm1hdC9wcm90b2NvbF9saXN0LmMiCj4+Cj4+IC0tCj4+IDIuMzUuMQo+Pgo+PgpwaW5nLi4uCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K