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 84CC74AEA7 for ; Wed, 22 May 2024 16:08:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 370FA68D3A1; Wed, 22 May 2024 19:08:00 +0300 (EEST) Received: from b-painless.mh.aa.net.uk (b-painless.mh.aa.net.uk [81.187.30.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6279568D1CA for ; Wed, 22 May 2024 19:07:53 +0300 (EEST) Received: from d.d.4.7.5.a.7.e.a.b.5.5.d.2.9.3.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:392d:55ba:e7a5:74dd] helo=andrews-2024-laptop.sayers) by painless-b.tch.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1s9oVM-00EAaV-0B for ffmpeg-devel@ffmpeg.org; Wed, 22 May 2024 17:07:52 +0100 Date: Wed, 22 May 2024 17:07:51 +0100 From: Andrew Sayers To: FFmpeg development discussions and patches Message-ID: References: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> <20240515155446.3589239-1-ffmpeg-devel@pileofstuff.org> <20240515155446.3589239-2-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH v4 1/4] doc: Explain what "context" means 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: T24gV2VkLCBNYXkgMjIsIDIwMjQgYXQgMTE6MzE6NTJBTSArMDIwMCwgU3RlZmFubyBTYWJhdGlu aSB3cm90ZToKPiBTb3JyeSBmb3IgdGhlIHNsb3cgcmVwbHkuCgpXZWxjb21lIGJhY2sgOikKCkkn dmUgZ2F0aGVyZWQgc29tZSBjcml0aXF1ZXMgb2YgbXkgb3duIG92ZXIgdGhlIHBhc3Qgd2Vlaywg d2hpY2ggSSdsbCBwZXBwZXIKdGhyb3VnaG91dCB0aGUgcmVwbHkuICBTdGFydGluZyB3aXRoLi4u CgpUaGUgZG9jdW1lbnQgYXNzdW1lcyAob3IgaXMgYXQgbGVhc3QgZGVzaWduZWQgdG8gYmUgc2Vj dXJlIGFnYWluc3QpIHJlYWRlcnMKc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgcmVhZGluZyB0aHJv dWdoIHRvIHRoZSBib3R0b20uICBJIGZvdW5kIGRveHlnZW4ncwpAdGFibGVvZmNvbnRlbnRzIGNv bW1hbmQgd2hpbGUgd3JpdGluZyB0aGlzIGUtbWFpbCwgd2hpY2ggSSB3aWxsIGRlZmluaXRlbHkK dXNlIGluIHRoZSBuZXh0IHZlcnNpb24sIGFuZCB3aGljaCBtaWdodCBwcm92b2tlIGEgcmV3cml0 ZSBhaW1lZCBhdCBwZW9wbGUKanVtcGluZyBhcm91bmQgdGhlIGRvY3VtZW50IGxvb2tpbmcgZm9y IGFuc3dlcnMgdG8gc3BlY2lmaWMgcXVlc3Rpb25zLgoKPiAKPiBPbiBkYXRlIFdlZG5lc2RheSAy MDI0LTA1LTE1IDE2OjU0OjE5ICswMTAwLCBBbmRyZXcgU2F5ZXJzIHdyb3RlOgo+ID4gRGVyaXZl ZCBmcm9tIGRldGFpbGVkIGV4cGxhbmF0aW9ucyBraW5kbHkgcHJvdmlkZWQgYnkgU3RlZmFubyBT YWJhdGluaToKPiA+IGh0dHBzOi8vZmZtcGVnLm9yZy9waXBlcm1haWwvZmZtcGVnLWRldmVsLzIw MjQtQXByaWwvMzI1OTAzLmh0bWwKPiA+IC0tLQo+ID4gIGRvYy9jb250ZXh0Lm1kIHwgMzk0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAxIGZp bGUgY2hhbmdlZCwgMzk0IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZG9j L2NvbnRleHQubWQKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RvYy9jb250ZXh0Lm1kIGIvZG9jL2Nv bnRleHQubWQKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5m Yjg1YjNmMzY2Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kb2MvY29udGV4dC5tZAo+ID4g QEAgLTAsMCArMSwzOTQgQEAKPiA+ICsjIEludHJvZHVjdGlvbiB0byBjb250ZXh0cwo+ID4gKwo+ ID4gKyZsZHF1bzslQ29udGV4dCZyZHF1bzsKPiAKPiBJcyB0aGlzIHN0eWxlIG9mIHF1b3Rpbmcg bmVlZGVkPyBFc3BlY2lhbGx5IEknZCBhdm9pZCBzcGVjaWFsIG1hcmt1cAo+IHRvIHNpbXBsaWZ5 IHVucmVkZW5kZXJlZCB0ZXh0IHJlYWRpbmcgKHdoaWNoIGlzIHRoZSBwb2ludCBvZiBtYXJrZG93 bgo+IGFmdGVyYWxsKS4KClNob3J0IGFuc3dlcjogSSdsbCBjaGFuZ2UgaXQgaW4gdGhlIG5leHQg cGF0Y2ggYW5kIHNlZSB3aGF0IGhhcHBlbnMuCgpMb25nIGFuc3dlcjogSFRNTCBxdW90ZXMgYXJl IHVnbHkgZm9yIGV2ZXJ5b25lLCBVVEYtOCBpcyBncmVhdCB1bnRpbCBzb21lb25lCnR1cm5zIHVw IGNvbXBsYWluaW5nIHdlIGJyb2tlIHRoZWlyIExhdGluLTEgd29ya2Zsb3cuICBJJ3ZlIGFsd2F5 cyBwcmVmZXJyZWQKQVNDSUktb25seSByZXByZXNlbnRhdGlvbnMgZm9yIHRoYXQgcmVhc29uLCBi dXQgaGFwcHkgdG8gdHJ5IHRoZSBvdGhlciB3YXkKYW5kIHNlZSBpZiBhbnlvbmUgc3RpbGwgY2Fy ZXMuCgo+IAo+ID4gaXMgYSBuYW1lIGZvciBhIHdpZGVseS11c2VkIHByb2dyYW1taW5nIGlkaW9t Lgo+IAo+ID4gK1RoaXMgZG9jdW1lbnQgZXhwbGFpbnMgdGhlIGdlbmVyYWwgaWRpb20gYW5kIHRo ZSBjb252ZW50aW9ucyBGRm1wZWcgaGFzIGJ1aWx0IGFyb3VuZCBpdC4KPiA+ICsKPiA+ICtUaGlz IGRvY3VtZW50IHVzZXMgb2JqZWN0LW9yaWVudGVkIGFuYWxvZ2llcyB0byBoZWxwIHJlYWRlcnMg ZmFtaWxpYXIgd2l0aAo+ID4gK1tvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmddKGh0dHBzOi8v ZW4ud2lraXBlZGlhLm9yZy93aWtpL09iamVjdC1vcmllbnRlZF9wcm9ncmFtbWluZykKPiA+ICts ZWFybiBhYm91dCBjb250ZXh0cy4gIEJ1dCBjb250ZXh0cyBjYW4gYWxzbyBiZSB1c2VkIG91dHNp ZGUgb2YgT09QLAo+ID4gK2FuZCBldmVuIGluIHNpdHVhdGlvbnMgd2hlcmUgT09QIGlzbid0IGhl bHBmdWwuICBTbyB0aGVzZSBhbmFsb2dpZXMKPiA+ICtzaG91bGQgb25seSBiZSB1c2VkIGFzIGEg Zmlyc3Qgc3RlcCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgY29udGV4dHMuCj4gPiArCj4gPiArIyMg JmxkcXVvO0NvbnRleHQmcmRxdW87IGFzIGEgd2F5IHRvIHRoaW5rIGFib3V0IGNvZGUKPiA+ICsK PiA+ICtBIGNvbnRleHQgaXMgYW55IGRhdGEgc3RydWN0dXJlIHRoYXQgaXMgcGFzc2VkIHRvIHNl dmVyYWwgZnVuY3Rpb25zCj4gPiArKG9yIHNldmVyYWwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZ1 bmN0aW9uKSB0aGF0IGFsbCBvcGVyYXRlIG9uIHRoZSBzYW1lIGVudGl0eS4KPiA+ICtGb3IgZXhh bXBsZSwgW29iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZ10oaHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvT2JqZWN0LW9yaWVudGVkX3Byb2dyYW1taW5nKQo+ID4gK2xhbmd1YWdlcyB1c3Vh bGx5IHByb3ZpZGUgbWVtYmVyIGZ1bmN0aW9ucyB3aXRoIGEgYHRoaXNgIG9yIGBzZWxmYCB2YWx1 ZToKPiA+ICsKPiAKPiA+ICtgYGBjCj4gPiArY2xhc3MgbXlfY3h4X2NsYXNzIHsKPiA+ICsgIHZv aWQgbXlfbWVtYmVyX2Z1bmN0aW9uKCkgewo+ID4gKyAgICAvLyB0aGUgaW1wbGljaXQgb2JqZWN0 IHBhcmFtZXRlciBwcm92aWRlcyBjb250ZXh0IGZvciB0aGUgbWVtYmVyIGZ1bmN0aW9uOgo+ID4g KyAgICBzdGQ6OmNvdXQgPDwgdGhpczsKPiA+ICsgIH0KPiA+ICt9Owo+ID4gK2BgYAo+IAo+IEkn bSBub3QgY29udmluY2VkIHRoaXMgaXMgcmVhbGx5IHVzZWZ1bDogaWYgeW91IGtub3cgQysrIHRo aXMgaXMKPiByZWR1bmRhbnQsIGlmIHlvdSBkb24ndCB0aGlzIGlzIGNvbmZ1c2luZyBhbmQgZG9u J3QgYWRkIG11Y2ggaW5mb3JtYXRpb24uCgpUaGUgZXhhbXBsZSBpcyB0aGVyZSB0byBicmVhayB1 cCBhIHdhbGwgb2YgdGV4dCAoc3ludGF4LWhpZ2hsaWdodGVkIGluIHRoZQpyZW5kZXJlZCBvdXRw dXQpLCBhbmQgdG8gbGV0IHRoZSByZWFkZXIga25vdyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUg b25lIG9mCnRob3NlIGRvY3VtZW50cyB0aGF0IGFsdGVybmF0ZXMgYmV0d2VlbiB0ZXh0IGFuZCBj b2RlLCBzbyB0aGV5J3JlIHJlYWR5IGZvciB0aGUKbW9yZSBzdWJzdGFudGl2ZSBleGFtcGxlcyBs YXRlciBvbi4gIEkgdGFrZSB0aGUgcG9pbnQgYWJvdXQgQysrIHRob3VnaCAtCndvdWxkIHRoaXMg UHl0aG9uIGV4YW1wbGUgYmUgbW9yZSByZWFkYWJsZT8KCiAgICBjbGFzcyBNeUNsYXNzOgogICAg ICAgIGRlZiBteV9mdW5jKHNlbGYpOgogICAgICAgICAgICAjIElmIGEgUHl0aG9uIGZ1bmN0aW9u IGlzIHBhcnQgb2YgYSBjbGFzcywKICAgICAgICAgICAgIyBpdHMgZmlyc3QgcGFyYW1ldGVyIG11 c3QgYmUgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcwoKPiAKPiA+ICsKPiA+ICtDb250ZXh0cyBh cmUgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBvZiBPT1AsIGJ1dCBjYW4gYWxzbyBiZSB1 c2VkIGluIHByb2NlZHVyYWwgY29kZS4KPiAKPiBJJ2QgZHJvcCB0aGlzIGxpbmUsIGFuZCBkcm9w IHRoZSBhbmNob3Igb24gT09QIGF0IHRoZSBzYW1lIHRpbWUgc2luY2UKPiBpdCdzIGFkZGluZyBu byBtdWNoIGluZm9ybWF0aW9uLgoKRnVuZGFtZW50YWxseSwgdGhpcyBkb2N1bWVudCBhZGRyZXNz ZXMgdHdvIGF1ZGllbmNlczoKCjEuIHBlb3BsZSBjb21pbmcgZnJvbSBhIG5vbi1PT1AgYmFja2dy b3VuZCwgd2hvIHdhbnQgdG8gbGVhcm4gY29udGV4dHMKICAgZnJvbSBmaXJzdCBwcmluY2lwbGVz LCBhbmQgYXQgYmVzdCBzZWUgT09QIHN0dWZmIGFzIGJhY2tncm91bmQgaW5mb3JtYXRpb24KCjIu IHBlb3BsZSBjb21pbmcgZnJvbSBhbiBPT1AgYmFja2dyb3VuZC4gIFRoZXJlJ3Mgbm8gcG9saXRl IHdheSB0byBzYXkgdGhpcyAtCiAgIHRoZWlyIGluY2VudGl2ZSBpcyB0byB3cml0ZSBGRm1wZWcg b2ZmIGFzIGEgZmFpbGVkIGF0dGVtcHQgYXQgT09QLCBzbyB0aGV5CiAgIGRvbid0IGhhdmUgdG8g bGVhcm4gYSBuZXcgd2F5IG9mIHdvcmtpbmcgdGhhdCdzIGp1c3QgZGlmZmVyZW50IGVub3VnaCB0 bwogICBtYWtlIHRoZW0gZmVlbCBkdW1iCgpJIHRoaW5rIGEgZ29vZCB3YXkgdG8gZXZhbHVhdGUg dGhlIGRvY3VtZW50IG1pZ2h0IGJlIHRvIHJlYWQgaXQgdGhyb3VnaCB0d2ljZSwKc3RvcHBpbmcg YWZ0ZXIgZWFjaCBwYXJhZ3JhcGggdG8gYXNrIHR3byB1bmZhaXIgcXVlc3Rpb25zLi4uCgoxLiB3 aGF0IGhhcyB0aGlzIHRvbGQgbWUgYWJvdXQgRkZtcGVnIGl0c2VsZiwgYXMgb3Bwb3NlZCB0byBz b21lIG90aGVyIHRoaW5nCiAgIHlvdSB3aXNoIEkgY2FyZWQgYWJvdXQ/CgoyLiBjb3VsZG4ndCB5 b3UgaGF2ZSBqdXN0IGRvbmUgdGhpcyB0aGUgc3RhbmRhcmQgT09QIHdheT8KClRoZSBlYXJsaWVy IHBhcmFncmFwaCBhY2tub3dsZWRnZWQgdGhhdCBjb250ZXh0cyByZXNlbWJsZSBPT1AgKHRlbGxp bmcgdGhlIE9PUAphdWRpZW5jZSB3ZSBnZXQgaXQpLCB0aGVuIHRoaXMgcGFyYWdyYXBoIGFkZHMg ImJ1dCB0aGV5J3JlIG5vdCB0aGUgc2FtZSIKKHRlbGxpbmcgdGhlIE9PUCBhdWRpZW5jZSB3ZSBk aXNhZ3JlZSkuICBUbyBiZSBtb3JlIHVzZWZ1bCB0byBub24tT09QIGZvbGssCmhvdyBhYm91dDoK CiAgICBDb250ZXh0cyBjYW4gYmUgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBvZiBPT1As IGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGluCiAgICBwcm9jZWR1cmFsIHByb2plY3RzIGxpa2UgRkZt cGVnLgoKPiAKPiA+ICtGb3IgZXhhbXBsZSwgbW9zdCBjYWxsYmFjayBmdW5jdGlvbnMgY2FuIGJl IHVuZGVyc3Rvb2QgdG8gdXNlIGNvbnRleHRzOgo+IAo+ID4gKwo+ID4gK2BgYGMKPiA+ICtzdHJ1 Y3QgTXlTdHJ1Y3Qgewo+ID4gKyAgaW50IGNvdW50ZXI7Cj4gPiArfTsKPiA+ICsKPiA+ICt2b2lk IG15X2NhbGxiYWNrKCB2b2lkICpteV92YXJfICkgewo+ID4gKyAgLy8gbXlfdmFyIHByb3ZpZGVz IGNvbnRleHQgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbjoKPiA+ICsgIHN0cnVjdCBNeVN0cnVj dCAqbXlfdmFyID0gKHN0cnVjdCBNeVN0cnVjdCAqKW15X3Zhcl87Cj4gPiArICBwcmludGYoIkNh bGxlZCAlZCB0aW1lKHMpIiwgKytteV92YXItPmNvdW50ZXIpOwo+ID4gK30KPiA+ICsKPiA+ICt2 b2lkIGluaXQoKSB7Cj4gPiArICBzdHJ1Y3QgTXlTdHJ1Y3QgbXlfdmFyOwo+ID4gKyAgbXlfdmFy LmNvdW50ZXIgPSAwOwo+ID4gKyAgcmVnaXN0ZXJfY2FsbGJhY2soIG15X2NhbGxiYWNrLCAmbXlf dmFyICk7Cj4gCj4gc3R5bGU6IGZ1bihteV9jYWxsYmFjaywgLi4uKSAoc28gc3BhY2VzIGFyb3Vu ZCBwYXJlbnRoZXNlcykgaGVyZSBhbmQKPiBiZWxvdwoK8J+roQoKLi4uIG5vIHdhaXQgSSBqdXN0 IHNhaWQgVW5pY29kZSBpcyBiYWQgLi4uCgpJIG1lYW4sIHdpbGwgZG8uCgo+IAo+ID4gK30KPiA+ ICtgYGAKPiA+ICsKPiA+ICtJbiB0aGUgYnJvYWRlc3Qgc2Vuc2UsICZsZHF1bztjb250ZXh0JnJk cXVvOyBpcyBqdXN0IGEgd2F5IHRvIHRoaW5rIGFib3V0IGNvZGUuCj4gPiArWW91IGNhbiBldmVu IHVzZSBpdCB0byB0aGluayBhYm91dCBjb2RlIHdyaXR0ZW4gYnkgcGVvcGxlIHdobyBoYXZlIG5l dmVyCj4gPiAraGVhcmQgdGhlIHRlcm0sIG9yIHdobyB3b3VsZCBkaXNhZ3JlZSB3aXRoIHlvdSBh Ym91dCB3aGF0IGl0IG1lYW5zLgo+ID4gKwo+ID4gKyMjICZsZHF1bztDb250ZXh0JnJkcXVvOyBh cyBhIHRvb2wgb2YgY29tbXVuaWNhdGlvbgo+ID4gKwo+ID4gKyZsZHF1bzslQ29udGV4dCZsZHF1 bzsgY2FuIGp1c3QgYmUgYSB3b3JkIHRvIHVuZGVyc3RhbmQgY29kZSBpbiB5b3VyIG93biBoZWFk LAo+ID4gK2J1dCBpdCBjYW4gYWxzbyBiZSBhIHRlcm0geW91IHVzZSB0byBleHBsYWluIHlvdXIg aW50ZXJmYWNlcy4KPiA+ICtIZXJlIGlzIGEgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2sgZXhhbXBs ZSB0aGF0IG1ha2VzIHRoZSBjb250ZXh0IGV4cGxpY2l0Ogo+ID4gKwo+ID4gK2BgYGMKPiA+ICtz dHJ1Y3QgQ2FsbGJhY2tDb250ZXh0IHsKPiA+ICsgIGludCBjb3VudGVyOwo+ID4gK307Cj4gPiAr Cj4gPiArdm9pZCBteV9jYWxsYmFjayggdm9pZCAqY3R4XyApIHsKPiA+ICsgIC8vIGN0eCBwcm92 aWRlcyBjb250ZXh0IGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb246Cj4gPiArICBzdHJ1Y3QgQ2Fs bGJhY2tDb250ZXh0ICpjdHggPSAoc3RydWN0IENhbGxiYWNrQ29udGV4dCAqKWN0eF87Cj4gPiAr ICBwcmludGYoIkNhbGxlZCAlZCB0aW1lKHMpIiwgKytjdHgtPmNvdW50ZXIpOwo+ID4gK30KPiA+ ICsKPiA+ICt2b2lkIGluaXQoKSB7Cj4gPiArICBzdHJ1Y3QgQ2FsbGJhY2tDb250ZXh0IGN0eDsK PiA+ICsgIGN0eC5jb3VudGVyID0gMDsKPiA+ICsgIHJlZ2lzdGVyX2NhbGxiYWNrKCBteV9jYWxs YmFjaywgJmN0eCApOwo+ID4gK30KPiA+ICtgYGAKPiA+ICsKPiA+ICtUaGUgZGlmZmVyZW5jZSBo ZXJlIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudC4gIElmIGEgcGllY2Ugb2YgY29kZQo+ID4gKyph cHBlYXJzIGNvbXBhdGlibGUgd2l0aCBjb250ZXh0cyosIHRoZW4geW91IGFyZSAqYWxsb3dlZCB0 byB0aGluawo+ID4gK3RoYXQgd2F5KiwgYnV0IGlmIGEgcGllY2Ugb2YgY29kZSAqZXhwbGljaXRs eSBzdGF0ZXMgaXQgdXNlcwo+ID4gK2NvbnRleHRzKiwgdGhlbiB5b3UgYXJlICpyZXF1aXJlZCB0 byBmb2xsb3cgdGhhdCBhcHByb2FjaCouCj4gPiArCj4gCj4gPiArRm9yIGV4YW1wbGUsIGltYWdp bmUgc29tZW9uZSBtb2RpZmllZCBgTXlTdHJ1Y3RgIGluIHRoZSBlYXJsaWVyIGV4YW1wbGUKPiA+ ICt0byBjb3VudCBzZXZlcmFsIHVucmVsYXRlZCBldmVudHMgYWNyb3NzIHRoZSB3aG9sZSBwcm9n cmFtLiAgVGhhdCB3b3VsZCBtZWFuCj4gPiAraXQgY29udGFpbmVkIGluZm9ybWF0aW9uIGFib3V0 IG11bHRpcGxlIGVudGl0aWVzLCBzbyB3YXMgbm90IGEgY29udGV4dC4KPiA+ICtCdXQgbm9ib2R5 IGV2ZXIgKnNhaWQqIGl0IHdhcyBhIGNvbnRleHQsIHNvIHRoYXQgaXNuJ3QgbmVjZXNzYXJpbHkg d3JvbmcuCj4gPiArSG93ZXZlciwgcHJvcG9zaW5nIHRoZSBzYW1lIGNoYW5nZSB0byB0aGUgYENh bGxiYWNrQ29udGV4dGAgaW4gdGhlIGxhdGVyIGV4YW1wbGUKPiA+ICt3b3VsZCB2aW9sYXRlIGEg Z3VhcmFudGVlLCBhbmQgc2hvdWxkIGJlIHBvaW50ZWQgb3V0IGluIGEgY29kZSByZXZpZXcuCj4g PiArCj4gCj4gSSdtIG5vdCB2ZXJ5IGNvbnZpbmNlZCBieSB0aGUgY2FsbGJhY2sgZXhhbXBsZS4g VGhlIHVzZSBvZiBjb250ZXh0cyBpbgo+IHRoZSBGRm1wZWcgQVBJIGlzIHZlcnkgbXVjaCBzaW1w bGVyLCBpdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YKPiBjb25maWd1cmF0aW9uIGFuZCBzdGF0 ZSAodGhhdCBpcyB0aGV5IHRyYWNrIHRoZSAib2JqZWN0IiB3aGVyZSB0bwo+IG9wZXJhdGUgb24p LCBzbyB0aGUgY2FsbGJhY2sgZXhhbXBsZSBoZXJlIGlzIGEgYml0IG1pc2xlYWRpbmcuCj4gCj4g Q2FsbGJhY2tzIGFyZSB1c2VkIGluIHRoZSBpbnRlcm5hbHMgdG8gaW1wbGVtZW50IGRpZmZlcmVu dCBlbGVtZW50cwo+IChjb2RlY3MsIHByb3RvY29scywgZmlsdGVycywgZXRjLi4uKSBpbXBsZW1l bnRpbmcgYSBjb21tb24gQVBJLCBidXQgaW4KPiB0aGlzIGNhc2UgdGhlIHJlbGF0aW9uIHdpdGgg ImNvbnRleHRzIiBpcyBsZXNzIHN0cmFpZ2h0Zm9yd2FyZC4KCkkgZ28gYmFjayBhbmQgZm9ydGgg b24gdGhpcyBvbmUsIGJ1dCB5b3VyIHBvaW50IG1hZGUgbWUgdGhpbmsgYWJvdXQgaXQKaW4gYSBu ZXcgd2F5Li4uCgpBVklPQ29udGV4dDo6cmVhZF9wYWNrZXQgaXMgYSBjYWxsYmFjayBmdW5jdGlv biwgYW5kIGEgcmVhZGVyIHdobyBoYXMganVzdApsZWFybnQgYWJvdXQgY29udGV4dHMgd291bGQg bmF0dXJhbGx5IGFzc3VtZSB3ZSBpbnRlbmQgaXRzIGZpcnN0IGFyZ3VtZW50CnRvIGJlIGludGVy cHJldGVkIGFzIGEgY29udGV4dC4gIEdpdmVuIHRoYXQgbmV3IHJlYWRlcnMgYXJlIGxpa2VseSB0 byBsZWFybgphdmlvX2FsbG9jX2NvbnRleHQoKSBhcm91bmQgdGhlIHNhbWUgdGltZSBhcyByZWFk aW5nIHRoaXMgZG9jdW1lbnQsCml0J3MgaW1wb3J0YW50IHdlIGdpdmUgdGhlbSB0aGUgdG9vbHMg dG8gdW5kZXJzdGFuZCB0aGF0IGZ1bmN0aW9uLgoKSG93IGFib3V0IGNoYW5naW5nIHRoZSB0b3Bt b3N0IGNhbGxiYWNrIGV4YW1wbGUgdG8gcmVhZCBkYXRhIGZyb20gYSBGSUxFKgood2l0aG91dCBt ZW50aW9uaW5nIEFWSU9Db250ZXh0KSwgdGhlbiBlbXBoYXNpc2luZyBob3cgeW91IGNhbiB0aGlu ayBvZiBpdAphcyBhIGNvbnRleHQgZGVzcGl0ZSBub3QgZm9sbG93aW5nIEZGbXBlZydzIHJ1bGVz LCB0aGVuIGZpbmFsbHkgbWVudGlvbmluZwpob3cgeW91IGNvdWxkIHBhc3MgdGhlIGNhbGxiYWNr IHRvIGF2aW9fYWxsb2NfY29udGV4dCgpIGlmIHlvdSB3YW50ZWQ/Cgo+IAo+ID4gK0B3YXJuaW5n IEd1YXJhbnRlZWluZyB0byB1c2UgY29udGV4dHMgZG9lcyBub3QgbWVhbiBndWFyYW50ZWVpbmcg dG8gdXNlCj4gPiArb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLiAgRm9yIGV4YW1wbGUsIEZG bXBlZyBjcmVhdGVzIGl0cyBjb250ZXh0cwo+ID4gK3Byb2NlZHVyYWxseSBpbnN0ZWFkIG9mIHdp dGggY29uc3RydWN0b3JzLgo+IAo+IEknbSBhZnJhaWQgdGhpcyBpcyBtb3JlIGNvbmZ1c2luZyB0 aGFuIGhlbHBmdWwsIHNpbmNlIHRoZSBGRm1wZWcgQVBJCj4gaXMgbm90IE9PUC4gSSdkIGRyb3Ag dGhpcyBzZW50ZW5jZS4KCk15IGNvbmNlcm4gaXMgdGhhdCBpZiBhbiBPT1AgcmVhZGVyIGFza3Mg ImNvdWxkbid0IHlvdSBoYXZlIGp1c3QgZG9uZSB0aGlzCnRoZSBzdGFuZGFyZCBPT1Agd2F5PyIs IHRoZXkgd2lsbCBiZSB0ZW1wdGVkIHRvIGFuc3dlciAib2gsIHNvIHlvdSAqdXNlZCB0byoKZmFp bCBhdCBPT1AgYnV0IG5vd2FkYXlzIHlvdSBwcm9taXNlIHRvIGRvIGl0IHJpZ2h0IiwgYW5kIG5v dCBib3RoZXIgcmVhZGluZwphbnkgZnVydGhlci4gIFNvIHRoZXJlIG5lZWRzIHRvIGJlIHNvbWV0 aGluZyBleWUtY2F0Y2hpbmcgaGVyZSwgYnV0IHllcyB0aGlzCnBhcmFncmFwaCBuZWVkcyB0byBi ZSBtb3JlIHVzZWZ1bCB0byBub24tT09QIHJlYWRlcnMuCgpUaGlzIHdpbGwgcHJvYmFibHkgbmVl ZCB0byBiZSByZXdyaXR0ZW4gYmFzZWQgb24gdGhlIGNhbGxiYWNrIGRpc2N1c3Npb24sCnNvIEkn bGwgdGhpbmsgYWJvdXQgd2F5cyB0byBjaGFuZ2UgdGhpcyBhdCB0aGUgc2FtZSB0aW1lLgoKPiAK PiA+ICsKPiA+ICsjIyBDb250ZXh0cyBpbiB0aGUgcmVhbCB3b3JsZAo+ID4gKwo+ID4gK1RvIHVu ZGVyc3RhbmQgaG93IGNvbnRleHRzIGFyZSB1c2VkIGluIHRoZSByZWFsIHdvcmxkLCBpdCBtaWdo dCBiZQo+ID4gK3VzZWZ1bCB0byBjb21wYXJlIFtjdXJsJ3MgTUQ1IGhhc2ggY29udGV4dF0oaHR0 cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9ibG9iL2JiZWVjY2RlYTg1MDdmZjUwZWZjYTcwYTBi MzNkMjhhZWY3MjAyNjcvbGliL2N1cmxfbWQ1LmgjTDQ4KQo+ID4gK3dpdGggQHJlZiBBVk1ENSAi RkZtcGVnJ3MgZXF1aXZhbGVudCBjb250ZXh0Ii4KPiA+ICsKPiAKPiA+ICtUaGUgW01ENSBhbGdv cml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01ENSkgcHJvZHVjZXMKPiA+ICth IGZpeGVkLWxlbmd0aCBkaWdlc3QgZnJvbSBhcmJpdHJhcnktbGVuZ3RoIGRhdGEuICBJdCBkb2Vz IHRoaXMgYnkgY2FsY3VsYXRpbmcKPiA+ICt0aGUgZGlnZXN0IGZvciBhIHByZWZpeCBvZiB0aGUg ZGF0YSwgdGhlbiBsb2FkaW5nIHRoZSBuZXh0IHBhcnQgYW5kIGFkZGluZyBpdAo+ID4gK3RvIHRo ZSBwcmV2aW91cyBkaWdlc3QsIGFuZCBzbyBvbi4gIFByb2plY3RzIHRoYXQgdXNlIE1ENSBnZW5l cmFsbHkgdXNlIHNvbWUKPiA+ICtraW5kIG9mIGNvbnRleHQsIHNvIGNvbXBhcmluZyB0aGVtIGNh biByZXZlYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiBwcm9qZWN0cy4KPiA+ICsKPiA+ICtgYGBjCj4g PiArLy8gQ3VybCdzIE1ENSBjb250ZXh0IGxvb2tzIGxpa2UgdGhpczoKPiA+ICtzdHJ1Y3QgTUQ1 X2NvbnRleHQgewo+ID4gKyAgY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgKm1kNV9oYXNoOyAgICAv KiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KPiA+ICsgIHZvaWQgICAgICAgICAgICAgICAg ICAqbWQ1X2hhc2hjdHg7ICAgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0ICovCj4gPiArfTsKPiA+ ICsKPiA+ICsvLyBGRm1wZWcncyBNRDUgY29udGV4dCBsb29rcyBsaWtlIHRoaXM6Cj4gPiArdHlw ZWRlZiBzdHJ1Y3QgQVZNRDUgewo+ID4gKyAgICB1aW50NjRfdCBsZW47Cj4gPiArICAgIHVpbnQ4 X3QgIGJsb2NrWzY0XTsKPiA+ICsgICAgdWludDMyX3QgQUJDRFs0XTsKPiA+ICt9IEFWTUQ1Owo+ ID4gK2BgYAo+ID4gKwo+ID4gK0N1cmwncyBzdHJ1Y3QgbmFtZSBlbmRzIHdpdGggYF9jb250ZXh0 YCwgZ3VhcmFudGVlaW5nIGNvbnRleHRzIGFyZSB0aGUgY29ycmVjdAo+ID4gK2ludGVycHJldGF0 aW9uLiAgRkZtcGVnJ3Mgc3RydWN0IGRvZXMgbm90IGV4cGxpY2l0bHkgc2F5IGl0J3MgYSBjb250 ZXh0LCBidXQKPiA+ICtAcmVmIGxpYmF2dXRpbC9tZDUuYyAiaXRzIGZ1bmN0aW9ucyBkbyIgc28g d2UgY2FuIHJlYXNvbmFibHkgYXNzdW1lCj4gPiAraXQncyB0aGUgaW50ZW5kZWQgaW50ZXJwcmV0 YXRpb24uCj4gPiArCj4gPiArQ3VybCdzIHN0cnVjdCB1c2VzIGB2b2lkICptZDVfaGFzaGN0eGAg dG8gYXZvaWQgZ3VhcmFudGVlaW5nCj4gPiAraW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiB0aGUg cHVibGljIGludGVyZmFjZSwgd2hlcmVhcyBGRm1wZWcgbWFrZXMKPiA+ICtldmVyeXRoaW5nIGFj Y2Vzc2libGUuICBUaGlzIGtpbmQgb2YgZGF0YSBoaWRpbmcgaXMgYW4gYWR2YW5jZWQgY29udGV4 dC1vcmllbnRlZAo+ID4gK2NvbnZlbnRpb24sIGFuZCBpcyBkaXNjdXNzZWQgYmVsb3cuICBVc2lu ZyBpdCBpbiB0aGlzIGNhc2UgaGFzIHN0cmVuZ3RocyBhbmQKPiA+ICt3ZWFrbmVzc2VzLiAgT24g b25lIGhhbmQsIGl0IG1lYW5zIGNoYW5naW5nIHRoZSBsYXlvdXQgaW4gYSBmdXR1cmUgdmVyc2lv bgo+ID4gK29mIGN1cmwgd29uJ3QgYnJlYWsgZG93bnN0cmVhbSBwcm9ncmFtcyB0aGF0IHVzZWQg dGhhdCBkYXRhLiAgT24gdGhlIG90aGVyIGhhbmQsCj4gPiArdGhlIE1ENSBhbGdvcml0aG0gaGFz IGJlZW4gc3RhYmxlIGZvciAzMCB5ZWFycywgc28gaXQncyBhcmd1YWJseSBtb3JlIGltcG9ydGFu dAo+ID4gK3RvIGxldCBwZW9wbGUgZGlnIGluIHdoZW4gZGVidWdnaW5nIHRoZWlyIG93biBjb2Rl Lgo+ID4gKwo+ID4gK0N1cmwncyBzdHJ1Y3QgaXMgZGVjbGFyZWQgYXMgYHN0cnVjdCA8dHlwZT4g eyAuLi4gfWAsIHdoZXJlYXMgRkZtcGVnIHVzZXMKPiA+ICtgdHlwZWRlZiBzdHJ1Y3QgPHR5cGU+ IHsgLi4uIH0gPHR5cGU+YC4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSB1c2VkIHdpdGggYm90aAo+ ID4gK2NvbnRleHQgYW5kIG5vbi1jb250ZXh0IHN0cnVjdHMsIHNvIGRvbid0IHNheSBhbnl0aGlu ZyBhYm91dCBjb250ZXh0cyBhcyBzdWNoLgo+ID4gK1NwZWNpZmljYWxseSwgRkZtcGVnJ3MgY29u dmVudGlvbiBpcyBhIHdvcmthcm91bmQgZm9yIGFuIGlzc3VlIHdpdGggQyBncmFtbWFyOgo+ID4g Kwo+ID4gK2BgYGMKPiA+ICt2b2lkIG15X2Z1bmN0aW9uKCAuLi4gKSB7Cj4gPiArICBpbnQgICAg ICAgICAgICAgICAgbXlfdmFyOyAgICAgICAgLy8gZ29vZAo+ID4gKyAgTUQ1X2NvbnRleHQgICAg ICAgIG15X2N1cmxfY3R4OyAgIC8vIGVycm9yOiBDIG5lZWRzIHlvdSB0byBleHBsaWNpdGx5IHNh eSAic3RydWN0Igo+ID4gKyAgc3RydWN0IE1ENV9jb250ZXh0IG15X2N1cmxfY3R4OyAgIC8vIGdv b2Q6IGFkZGVkICJzdHJ1Y3QiCj4gPiArICBBVk1ENSAgICAgICAgICAgICAgbXlfZmZtcGVnX2N0 eDsgLy8gZ29vZDogdHlwZWRlZidzIGF2b2lkIHRoZSBuZWVkIGZvciAic3RydWN0Igo+ID4gK30K PiA+ICtgYGAKPiA+ICsKPiA+ICtCb3RoIE1ENSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxvbmctdGVz dGVkLCB3aWRlbHktdXNlZCBleGFtcGxlcyBvZiBjb250ZXh0cwo+ID4gK2luIHRoZSByZWFsIHdv cmxkLiAgVGhleSBzaG93IGhvdyBjb250ZXh0cyBjYW4gc29sdmUgdGhlIHNhbWUgcHJvYmxlbQo+ ID4gK2luIGRpZmZlcmVudCB3YXlzLgo+IAo+IEknbSBjb25jZXJuZWQgdGhhdCB0aGlzIGlzIGFk ZGluZyBtb3JlIGluZm9ybWF0aW9uIHRoYW4gcmVhbGx5Cj4gbmVlZGVkLiBFc3BlY2lhbGx5IGNv bXBhcmluZyB3aXRoIGludGVybmFscyBvZiBjdXJsIG1lYW5zIHRoYXQgbm93IHRoZQo+IGRvY3Mg bmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jaCBhbHNvIHdpdGggdGhlIGN1cmwncyBBUEksIG1lYW5p bmcgdGhhdAo+IGl0IHdpbGwgYmUgb3V0ZGF0ZWQgdmVyeSBzb29uLiBJJ2QgcmF0aGVyIGRyb3Ag dGhlIGN1cmwgY29tcGFyaXNvbgo+IGFsdG9nZXRoZXIuCgpUaGUgdmFsdWUgb2YgdGhpcyBzZWN0 aW9uIGRlcGVuZHMgb24gdGhlIHJlYWRlci4uLgoKVGhpcyB0ZWxscyBhIG5vbi1PT1AgcmVhZGVy IHRoYXQgRkZtcGVnIGRpZG4ndCBpbnZlbnQgY29udGV4dHMsIGFuZCByZWFzb25hYmxlCnBlb3Bs ZSBjYW4gZGlzYWdyZWUgYWJvdXQgd2hhdCB0aGV5IG1lYW4uICBTbyB3aGVuIHdlIGdldCBpbnRv IHRoZSBhbWJpZ3VvdXMKY2FzZXMgbGF0ZXIgb24sIHRoZXkgaGF2ZSBhIGJldHRlciBpZGVhIGFi b3V0IHdoaWNoIHRoaW5ncyBhcmUganVzdCBob3cKY29udGV4dHMgd29yaywgYW5kIHdoaWNoIGFy ZSBzcGVjaWZpY2FsbHkgaG93IEZGbXBlZyB1c2VzIHRoZW0uCgpUaGlzIHRlbGxzIGFuIE9PUCBy ZWFkZXIgdGhhdCBpdCdzIG5vdCAiT09QIHN0YW5kYXJkLCBGRm1wZWcgbm9uLXN0YW5kYXJkIiwK aXQncyB0aGF0IEZGbXBlZyBpcyB1c2luZyBhIEMgc3RhbmRhcmQgdGhhdCdzIG5vdCB1c2VkIGlu IE9PUCBsYW5ndWFnZXMuCgpDdXJsJ3MgYE1ENV9jb250ZXh0YCB3YXMgbGFzdCBtb2RpZmllZCBp biAyMDIwIChpbnRlcmVzdGluZ2x5LCB0byBnZXQgcmlkIG9mCnRoZSBgdHlwZWRlZiBzdHJ1Y3Rg IHRyaWNrKS4gIEl0J3MgYSBzbG93LW1vdmluZyB0YXJnZXQsIGJ1dCB5b3UncmUgcmlnaHQgaXQn cwpub3QgYSBzdGF0aWMgb25lLgoKSSdkIGFyZ3VlIHRoZSBhYm92ZSBtZWFucyB0aGlzIHNob3Vs ZCBiZSAqc29tZXdoZXJlKiBpbiB0aGUgZG9jdW1lbnQsIGJ1dCBub3QKbmVjZXNzYXJpbHkgaGVy ZSBpbiB0aGUgbWlkZGxlLiAgSSdsbCBzZWUgaWYgaXQgd29ya3MgYmV0dGVyIGFzIGEgcGFyYWdy YXBoCmhlcmUgYW5kIGFuIGFwcGVuZGl4IG9yIHNvbWV0aGluZyBhdCB0aGUgYm90dG9tLgoKPiA+ ICsKPiA+ICsjIyBGRm1wZWcncyBhZHZhbmNlZCBjb250ZXh0LW9yaWVudGVkIGNvbnZlbnRpb25z Cj4gPiArCj4gPiArUHJvamVjdHMgdGhhdCBtYWtlIGhlYXZ5IHVzZSBvZiBjb250ZXh0cyB0ZW5k IHRvIGRldmVsb3AgY29udmVudGlvbnMKPiA+ICt0byBtYWtlIHRoZW0gbW9yZSB1c2VmdWwuICBU aGlzIHNlY3Rpb24gZGlzY3Vzc2VzIGNvbnZlbnRpb25zIHVzZWQgaW4gRkZtcGVnLAo+ID4gK3Nv bWUgb2Ygd2hpY2ggYXJlIHVzZWQgaW4gb3RoZXIgcHJvamVjdHMsIG90aGVycyBhcmUgdW5pcXVl IHRvIHRoaXMgcHJvamVjdC4KPiA+ICsKPiA+ICsjIyMgTmFtaW5nOiAmbGRxdW87Q29udGV4dCZy ZHF1bzsgYW5kICZsZHF1bztjdHgmcmRxdW87Cj4gPiArCj4gPiArYGBgYwo+ID4gKy8vIENvbnRl eHQgc3RydWN0IG5hbWVzIHVzdWFsbHkgZW5kIHdpdGggYENvbnRleHRgOgo+ID4gK3N0cnVjdCBB VlNvbWVDb250ZXh0IHsKPiA+ICsgIC4uLgo+ID4gK307Cj4gPiArCj4gPiArLy8gRnVuY3Rpb25z IGFyZSB1c3VhbGx5IG5hbWVkIGFmdGVyIHRoZWlyIGNvbnRleHQsCj4gPiArLy8gY29udGV4dCBw YXJhbWV0ZXJzIHVzdWFsbHkgY29tZSBmaXJzdCBhbmQgYXJlIG9mdGVuIGNhbGxlZCBgY3R4YDoK PiA+ICt2b2lkIGF2X3NvbWVfZnVuY3Rpb24oIEFWU29tZUNvbnRleHQgKmN0eCwgLi4uICk7Cj4g PiArYGBgCj4gPiArCj4gPiArSWYgYW4gRkZtcGVnIHN0cnVjdCBpcyBpbnRlbmRlZCBmb3IgdXNl IGFzIGEgY29udGV4dCwgaXRzIG5hbWUgdXN1YWxseQo+ID4gK21ha2VzIHRoYXQgY2xlYXIuICBF eGNlcHRpb25zIHRvIHRoaXMgcnVsZSBpbmNsdWRlIEFWTUQ1IChkaXNjdXNzZWQgYWJvdmUpLAo+ ID4gK3doaWNoIGlzIG9ubHkgaWRlbnRpZmllZCBhcyBhIGNvbnRleHQgYnkgdGhlIGZ1bmN0aW9u cyB0aGF0IGNhbGwgaXQuCj4gPiArCj4gPiArSWYgYSBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkIHdp dGggYSBjb250ZXh0LCBpdHMgbmFtZSB1c3VhbGx5Cj4gPiArYmVnaW5zIHdpdGggc29tZSB2YXJp YW50IG9mIHRoZSBjb250ZXh0IG5hbWUgKGUuZy4gYXZfbWQ1X2FsbG9jKCkKPiA+ICtvciBhdmNv ZGVjX2FsbG9jX2NvbnRleHQzKCkpLiAgRXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUgaW5jbHVkZQo+ ID4gK0ByZWYgYXZmb3JtYXQuaCAiQVZGb3JtYXRDb250ZXh0J3MgZnVuY3Rpb25zIiwgbWFueSBv ZiB3aGljaAo+ID4gK2JlZ2luIHdpdGgganVzdCBgYXZfYC4KPiA+ICsKPiA+ICtJZiBhIGZ1bmN0 aW9uIGhhcyBhIGNvbnRleHQgcGFyYW1ldGVyLCBpdCB1c3VhbGx5IGNvbWVzIGZpcnN0IGFuZCBp dHMgbmFtZQo+ID4gK29mdGVuIGNvbnRhaW5zIGBjdHhgLiAgRXhjZXB0aW9ucyBpbmNsdWRlIGF2 X2JzZl9hbGxvYygpLCB3aGljaCBwdXRzIHRoZQo+ID4gK2NvbnRleHQgYXJndW1lbnQgc2Vjb25k IHRvIGVtcGhhc2lzZSBpdCdzIGFuIG91dCB2YXJpYWJsZS4KPiA+ICsKPiA+ICsjIyMgRGF0YSBo aWRpbmc6IHByaXZhdGUgY29udGV4dHMKPiA+ICsKPiA+ICtgYGBjCj4gPiArLy8gQ29udGV4dCBz dHJ1Y3RzIG9mdGVuIGhpZGUgcHJpdmF0ZSBjb250ZXh0Ogo+ID4gK3N0cnVjdCBBVlNvbWVDb250 ZXh0IHsKPiA+ICsgIHZvaWQgKnByaXZfZGF0YTsgLy8gc29tZXRpbWVzIGp1c3QgY2FsbGVkICJp bnRlcm5hbCIKPiA+ICt9Owo+ID4gK2BgYAo+ID4gKwo+ID4gK0NvbnRleHRzIHVzdWFsbHkgcHJl c2VudCBhIHB1YmxpYyBpbnRlcmZhY2UsIHNvIGNoYW5naW5nIGEgY29udGV4dCdzIG1lbWJlcnMK PiA+ICtmb3JjZXMgZXZlcnlvbmUgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5IHRvIGF0IGxlYXN0IHJl Y29tcGlsZSB0aGVpciBwcm9ncmFtLAo+ID4gK2lmIG5vdCByZXdyaXRlIGl0IHRvIHJlbWFpbiBj b21wYXRpYmxlLiAgSGlkaW5nIGluZm9ybWF0aW9uIGluIGEgcHJpdmF0ZSBjb250ZXh0Cj4gPiAr ZW5zdXJlcyBpdCBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBhZmZlY3RpbmcgZG93bnN0cmVhbSBz b2Z0d2FyZS4KPiA+ICsKPiA+ICtPYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1lcnMgbWF5IGJlIHRl bXB0ZWQgdG8gY29tcGFyZSBwcml2YXRlIGNvbnRleHRzIHRvCj4gPiArKnByaXZhdGUgY2xhc3Mg bWVtYmVycyouICBUaGF0J3Mgb2Z0ZW4gYWNjdXJhdGUsIGJ1dCBmb3IgZXhhbXBsZSBpdCBjYW4g YWxzbwo+ID4gK2JlIHVzZWQgbGlrZSBhICp2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlKiAtIGEgbGlz dCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUKPiA+ICtndWFyYW50ZWVkIHRvIGV4aXN0LCBidXQgbWF5 IGJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnQKPiA+ICtzdWItY2xhc3Nl cy4gIFdoZW4gdGhpbmtpbmcgYWJvdXQgcHJpdmF0ZSBjb250ZXh0cywgcmVtZW1iZXIgdGhhdCBG Rm1wZWcKPiA+ICtpc24ndCAqbGFyZ2UgZW5vdWdoKiB0byBuZWVkIHNvbWUgY29tbW9uIE9PUCB0 ZWNobmlxdWVzLCBldmVuIHRob3VnaCBpdCdzCj4gPiArc29sdmluZyBhIHByb2JsZW0gdGhhdCdz ICpjb21wbGV4IGVub3VnaCogdG8gYmVuZWZpdCBmcm9tIHNvbWUgcmFyZXIgdGVjaG5pcXVlcy4K PiA+ICsKPiA+ICsjIyMgTWFuYWdlIGxpZmV0aW1lOiBhbGxvY2F0ZSwgaW5pdGlhbGl6ZSBhbmQg ZnJlZQo+ID4gKwo+ID4gK2BgYGMKPiA+ICt2b2lkIG15X2Z1bmN0aW9uKCAuLi4gKSB7Cj4gPiAr Cj4gPiArICAgIC8vIENvbnRleHQgc3RydWN0cyBhcmUgYWxsb2NhdGVkIHRoZW4gaW5pdGlhbGl6 ZWQgd2l0aCBhc3NvY2lhdGVkIGZ1bmN0aW9uczoKPiA+ICsKPiA+ICsgICAgQVZTb21lQ29udGV4 dCAqY3R4ID0gYXZfc29tZV9jb250ZXh0X2FsbG9jKCAuLi4gKTsKPiA+ICsKPiA+ICsgICAgLy8g Li4uIGNvbmZpZ3VyZSBjdHggLi4uCj4gPiArCj4gPiArICAgIGF2X3NvbWVfY29udGV4dF9pbml0 KCBjdHgsIC4uLiApOwo+ID4gKwo+ID4gKyAgICAvLyAuLi4gdXNlIGN0eCAuLi4KPiA+ICsKPiA+ ICsgICAgLy8gQ29udGV4dCBzdHJ1Y3RzIGFyZSBmcmVlZCB3aXRoIGFzc29jaWF0ZWQgZnVuY3Rp b25zOgo+ID4gKwo+ID4gKyAgICBhdl9zb21lX2NvbnRleHRfZnJlZSggY3R4ICk7Cj4gPiArCj4g PiArfQo+ID4gK2BgYAo+ID4gKwo+ID4gK0ZGbXBlZyBjb250ZXh0cyBnbyB0aHJvdWdoIHRoZSBm b2xsb3dpbmcgc3RhZ2VzIG9mIGxpZmU6Cj4gPiArCj4gPiArMS4gYWxsb2NhdGlvbiAob2Z0ZW4g YSBmdW5jdGlvbiB0aGF0IGVuZHMgd2l0aCBgX2FsbG9jYCkKPiA+ICsgICAqIGEgcmFuZ2Ugb2Yg bWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdXNlIGJ5IHRoZSBzdHJ1Y3R1cmUKPiA+ICsgICAqIG1l bW9yeSBpcyBhbGxvY2F0ZWQgb24gYm91bmRhcmllcyB0aGF0IGltcHJvdmUgY2FjaGluZwo+ID4g KyAgICogbWVtb3J5IGlzIHJlc2V0IHRvIHplcm9lcywgc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmVz IG1heSBiZSBpbml0aWFsaXplZAo+ID4gKzIuIGNvbmZpZ3VyYXRpb24gKGltcGxlbWVudGVkIGJ5 IHNldHRpbmcgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBvYmplY3QpCj4gPiArICAgKiBubyBmdW5j dGlvbiBmb3IgdGhpcyAtIGNhbGxpbmcgY29kZSBwb3B1bGF0ZXMgdGhlIHN0cnVjdHVyZSBkaXJl Y3RseQo+ID4gKyAgICogbWVtb3J5IGlzIHBvcHVsYXRlZCB3aXRoIHVzZWZ1bCB2YWx1ZXMKPiA+ ICsgICAqIHNpbXBsZSBjb250ZXh0cyBjYW4gc2tpcCB0aGlzIHN0YWdlCj4gPiArMy4gaW5pdGlh bGl6YXRpb24gKG9mdGVuIGEgZnVuY3Rpb24gdGhhdCBlbmRzIHdpdGggYF9pbml0YCkKPiA+ICsg ICAqIHNldHVwIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlv biAoZS5nLiBvcGVuaW5nIGZpbGVzKQo+ID4gKzUuIG5vcm1hbCB1c2FnZQo+ID4gKyAgICogbW9z dCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGlzIHN0YWdlCj4gPiArICAgKiBkb2N1bWVudGF0 aW9uIGltcGxpZXMgc29tZSBtZW1iZXJzIGFyZSBub3cgcmVhZC1vbmx5IChvciBub3QgdXNlZCBh dCBhbGwpCj4gPiArICAgKiBzb21lIGNvbnRleHRzIGFsbG93IHJlLWluaXRpYWxpemF0aW9uCj4g PiArNi4gY2xvc2luZyAob2Z0ZW4gYSBmdW5jdGlvbiB0aGF0IGVuZHMgd2l0aCBgX2Nsb3NlKClg KQo+ID4gKyAgICogdGVhcmRvd24gYWN0aW9ucyBhcmUgcGVyZm9ybWVkIChlLmcuIGNsb3Npbmcg ZmlsZXMpCj4gPiArNy4gZGVhbGxvY2F0aW9uIChvZnRlbiBhIGZ1bmN0aW9uIHRoYXQgZW5kcyB3 aXRoIGBfZnJlZSgpYCkKPiA+ICsgICAqIG1lbW9yeSBpcyByZXR1cm5lZCB0byB0aGUgcG9vbCBv ZiBhdmFpbGFibGUgbWVtb3J5Cj4gPiArCj4gPiArVGhpcyBjYW4gbWlzbGVhZCBvYmplY3Qtb3Jp ZW50ZWQgcHJvZ3JhbW1lcnMsIHdobyBleHBlY3Qgc29tZXRoaW5nIG1vcmUgbGlrZToKPiA+ICsK PiA+ICsxLiBhbGxvY2F0aW9uICh1c3VhbGx5IGEgYG5ld2Aga2V5d29yZCkKPiA+ICsgICAqIGEg cmFuZ2Ugb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdXNlIGJ5IHRoZSBzdHJ1Y3R1cmUKPiA+ ICsgICAqIG1lbW9yeSAqbWF5KiBiZSByZXNldCAoZS5nLiBmb3Igc2VjdXJpdHkgcmVhc29ucykK PiA+ICsyLiBpbml0aWFsaXphdGlvbiAodXN1YWxseSBhIGNvbnN0cnVjdG9yKQo+ID4gKyAgICog bWVtb3J5IGlzIHBvcHVsYXRlZCB3aXRoIHVzZWZ1bCB2YWx1ZXMKPiA+ICsgICAqIHJlbGF0ZWQg c2V0dXAgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGJhc2VkIG9uIGFyZ3VtZW50cyAoZS5nLiBvcGVu aW5nIGZpbGVzKQo+ID4gKzMuIG5vcm1hbCB1c2FnZQo+ID4gKyAgICogbW9zdCBmdW5jdGlvbnMg YXJlIGNhbGxlZCBpbiB0aGlzIHN0YWdlCj4gPiArICAgKiBjb21waWxlciBlbmZvcmNlcyB0aGF0 IHNvbWUgbWVtYmVycyBhcmUgcmVhZC1vbmx5IChvciBwcml2YXRlKQo+ID4gKyAgICogbm8gZ29p bmcgYmFjayB0byB0aGUgcHJldmlvdXMgc3RhZ2UKPiA+ICs0LiBmaW5hbGl6YXRpb24gKHVzdWFs bHkgYSBkZXN0cnVjdG9yKQo+ID4gKyAgICogdGVhcmRvd24gYWN0aW9ucyBhcmUgcGVyZm9ybWVk IChlLmcuIGNsb3NpbmcgZmlsZXMpCj4gPiArNS4gZGVhbGxvY2F0aW9uICh1c3VhbGx5IGEgYGRl bGV0ZWAga2V5d29yZCkKPiA+ICsgICAqIG1lbW9yeSBpcyByZXR1cm5lZCB0byB0aGUgcG9vbCBv ZiBhdmFpbGFibGUgbWVtb3J5Cj4gPiArCj4gPiArRkZtcGVnJ3MgYWxsb2NhdGlvbiBzdGFnZSBp cyBicm9hZGx5IHNpbWlsYXIgdG8gT09QLCBidXQgY2FuIGRvIHNvbWUgaGlnaGVyLWxldmVsCj4g PiArb3BlcmF0aW9ucy4gIEZvciBleGFtcGxlLCBBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3RzIChk aXNjdXNzZWQgYmVsb3cpIGNvbnRhaW4gYW4KPiA+ICtBVkNsYXNzIG1lbWJlciB0aGF0IGlzIHNl dCBkdXJpbmcgYWxsb2NhdGlvbi4KPiA+ICsKPiA+ICtGRm1wZWcncyAiY29uZmlndXJhdGlvbiIg YW5kICJpbml0aWFsaXphdGlvbiIgc3RhZ2VzIGNvbWJpbmUgdG8gcmVzZW1ibGUgT09QJ3MKPiA+ ICsiaW5pdGlhbGl6YXRpb24iIHN0YWdlLiAgVGhpcyBjYW4gbWlzbGVhZCBvYmplY3Qtb3JpZW50 ZWQgZGV2ZWxvcGVycywKPiA+ICt3aG8gYXJlIHVzZWQgdG8gZG9pbmcgYm90aCBhdCBvbmNlLiAg VGhpcyBtZWFucyBGRm1wZWcgY29udGV4dHMgZG9uJ3QgaGF2ZQo+ID4gK2EgZGlyZWN0IGVxdWl2 YWxlbnQgb2YgT09QIGNvbnN0cnVjdG9ycywgYXMgdGhleSB3b3VsZCBiZSBkb2luZwo+ID4gK3R3 byBqb2JzIGluIG9uZSBmdW5jdGlvbi4KPiA+ICsKPiA+ICtGRm1wZWcncyB0aHJlZS1zdGFnZSBj cmVhdGlvbiBwcm9jZXNzIGlzIHVzZWZ1bCBmb3IgY29tcGxpY2F0ZWQgc3RydWN0dXJlcy4KPiA+ ICtGb3IgZXhhbXBsZSwgQVZDb2RlY0NvbnRleHQgY29udGFpbnMgbWFueSBtZW1iZXJzIHRoYXQg KmNhbiogYmUgc2V0IGJlZm9yZQo+ID4gK2luaXRpYWxpemF0aW9uLCBidXQgaW4gcHJhY3RpY2Ug bW9zdCBwcm9ncmFtcyBzZXQgZmV3IGlmIGFueSBvZiB0aGVtLgo+ID4gK0ltcGxlbWVudGluZyB0 aGlzIHdpdGggYSBjb25zdHJ1Y3RvciB3b3VsZCBpbnZvbHZlIGEgZnVuY3Rpb24gd2l0aCBhIGxp c3QKPiA+ICtvZiBhcmd1bWVudHMgdGhhdCB3YXMgZXh0cmVtZWx5IGxvbmcgYW5kIGNoYW5nZWQg d2hlbmV2ZXIgdGhlIHN0cnVjdCB3YXMKPiA+ICt1cGRhdGVkLiAgRm9yIGNvbnRleHRzIHRoYXQg ZG9uJ3QgbmVlZCB0aGUgZXh0cmEgZmxleGliaWxpdHksIEZGbXBlZyB1c3VhbGx5Cj4gPiArcHJv dmlkZXMgYSBjb21iaW5lZCBhbGxvY2F0b3IgYW5kIGluaXRpYWxpemVyIGZ1bmN0aW9uLiAgRm9y IGhpc3RvcmljYWwgcmVhc29ucywKPiA+ICtzdWZmaXhlcyBsaWtlIGBfYWxsb2NgLCBgX2luaXRg LCBgX2FsbG9jX2NvbnRleHRgIGFuZCBldmVuIGBfb3BlbmAgY2FuIGluZGljYXRlCj4gPiArdGhl IGZ1bmN0aW9uIGRvZXMgYW55IGNvbWJpbmF0aW9uIG9mIGFsbG9jYXRpb24gYW5kIGluaXRpYWxp emF0aW9uLgo+ID4gKwo+ID4gK0ZGbXBlZydzICJjbG9zaW5nIiBzdGFnZSBpcyBicm9hZGx5IHNp bWlsYXIgdG8gT09QJ3MgImZpbmFsaXphdGlvbiIgc3RhZ2UsCj4gPiArYnV0IHNvbWUgY29udGV4 dHMgYWxsb3cgcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgZmluYWxpemF0aW9uLiAgRm9yIGV4YW1w bGUsCj4gPiArU3dyQ29udGV4dCBsZXRzIHlvdSBjYWxsIHN3cl9jbG9zZSgpIHRoZW4gc3dyX2lu aXQoKSB0byByZXVzZSBhIGNvbnRleHQuCj4gPiArCj4gPiArRkZtcGVnJ3MgImRlYWxsb2NhdGlv biIgc3RhZ2UgaXMgYnJvYWRseSBzaW1pbGFyIHRvIE9PUCwgYnV0IGNhbiBwZXJmb3JtIHNvbWUK PiA+ICtoaWdoZXItbGV2ZWwgZnVuY3Rpb25zIChzaW1pbGFyIHRvIHRoZSBhbGxvY2F0aW9uIHN0 YWdlKS4KPiA+ICsKPiA+ICtWZXJ5IGZldyBjb250ZXh0cyBuZWVkIHRoZSBmbGV4aWJpbGl0eSBv ZiBzZXBhcmF0ZSAiY2xvc2luZyIgYW5kCj4gPiArImRlYWxsb2NhdGlvbiIgc3RhZ2VzLCBzbyB0 aGVzZSBhcmUgdXN1YWxseSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLgo+ID4gK0Ns b3NpbmcgZnVuY3Rpb25zIHVzdWFsbHkgZW5kIHdpdGggIl9jbG9zZSIsIHdoaWxlIGRlYWxsb2Nh dGlvbgo+ID4gK2Z1bmN0aW9ucyB1c3VhbGx5IGVuZCB3aXRoICJfZnJlZSIuCgpTb21lIGNoYW5n ZXMgSSdtIHBsYW5uaW5nIHRvIG1ha2UgaW4gdGhlIG5leHQgcmV3cml0ZS4uLgoKKiBzb21lIGZ1 bmN0aW9ucyBoYXBwZW4gdG8gZW5kIHdpdGggIl9maW5hbGl6ZSgpIiAoZS5nLiBhdl9ic2ZfbGlz dF9maW5hbGl6ZSgpKSwKICBidXQgaXQncyBqdXN0IGEgY29pbmNpZGVuY2UgdGhhdCB0aGV5IHNo YXJlIGEgbmFtZSB3aXRoIHRoZSBPT1Agc3RhZ2UKCiogSSB0aGluayB0aGF0IGUuZy4gYXZfbWVk aWFjb2RlY19kZWZhdWx0X2ZyZWUoKSBuZWVkcyB0byBiZSBjYWxsZWQgaW1tZWRpYXRlbHkKICBi ZWZvcmUgKG9yIGFmdGVyPykgY2xvc2luZyB0aGUgYXNzb2NpYXRlZCBjb250ZXh0LCB3aGljaCB3 b3VsZCBtYWtlIGl0IGEKICBzZXBhcmF0ZSAiZGVjb25maWd1cmF0aW9uIiBzdGFnZSBhY2NvcmRp bmcgdG8gdGhlIGxvZ2ljIGFib3ZlLgoKPiA+ICsKPiA+ICsjIyMgUmVmbGVjdGlvbjogQVZPcHRp b25zLWVuYWJsZWQgc3RydWN0cwo+ID4gKwo+ID4gK09iamVjdC1vcmllbnRlZCBwcm9ncmFtbWlu ZyBwdXRzIG1vcmUgZm9jdXMgb24gZGF0YSBoaWRpbmcgdGhhbiBGRm1wZWcgbmVlZHMsCj4gPiAr YnV0IGl0IGFsc28gcHV0cyBsZXNzIGZvY3VzIG9uCj4gPiArW3JlZmxlY3Rpb25dKGh0dHBzOi8v ZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlZmxlY3Rpb25fKGNvbXB1dGVyX3Byb2dyYW1taW5nKSku Cj4gPiArCj4gPiArVG8gdW5kZXJzdGFuZCBGRm1wZWcncyByZWZsZWN0aW9uIHJlcXVpcmVtZW50 cywgcnVuIGBmZm1wZWcgLWggZnVsbGAgb24gdGhlCj4gPiArY29tbWFuZC1saW5lLCB0aGVuIGFz ayB5b3Vyc2VsZiBob3cgeW91IHdvdWxkIGltcGxlbWVudCBhbGwgdGhvc2Ugb3B0aW9ucwo+ID4g K3dpdGggdGhlIEMgc3RhbmRhcmQgW2BnZXRvcHRgIGZ1bmN0aW9uXShodHRwczovL2VuLndpa2lw ZWRpYS5vcmcvd2lraS9HZXRvcHQpLgo+ID4gK1lvdSBjYW4gYWxzbyBhc2sgdGhlIHNhbWUgcXVl c3Rpb24gZm9yIGFueSBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMgeW91IGtub3cuCj4gPiAr W1B5dGhvbidzIGFyZ3BhcnNlIG1vZHVsZV0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJy YXJ5L2FyZ3BhcnNlLmh0bWwpCj4gPiAraXMgYSBnb29kIGV4YW1wbGUgLSBpdHMgYXBwcm9hY2gg d29ya3Mgd2VsbCB3aXRoIGZhciBtb3JlIGNvbXBsZXggcHJvZ3JhbXMKPiA+ICt0aGFuIGBnZXRv cHRgLCBidXQgd291bGQgeW91IGxpa2UgdG8gbWFpbnRhaW4gYW4gYXJncGFyc2UgaW1wbGVtZW50 YXRpb24KPiA+ICt3aXRoIDE1LDAwMCBvcHRpb25zIGFuZCBncm93aW5nPwo+ID4gKwo+ID4gK01v c3Qgc29sdXRpb25zIGFzc3VtZSB5b3UgY2FuIGp1c3QgcHV0IGFsbCBvcHRpb25zIGluIGEgc2lu Z2xlIGJsb2NrLAo+ID4gK3doaWNoIGlzIHVud29ya2FibGUgYXQgRkZtcGVnJ3Mgc2NhbGUuICBJ bnN0ZWFkLCB3ZSBzcGxpdCBjb25maWd1cmF0aW9uCj4gPiArYWNyb3NzIG1hbnkgKkFWT3B0aW9u cy1lbmFibGVkIHN0cnVjdHMqLCB3aGljaCB1c2UgdGhlIEByZWYgYXZvcHRpb25zCj4gPiArIkFW T3B0aW9ucyBBUEkiIHRvIHJlZmxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgdXNlci1jb25m aWd1cmFibGUgbWVtYmVycywKPiA+ICtpbmNsdWRpbmcgbWVtYmVycyBpbiBwcml2YXRlIGNvbnRl eHRzLgo+ID4gKwo+ID4gK0FuICpBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3QqIGlzIGEgc3RydWN0 IHRoYXQgY29udGFpbnMgYW4gQVZDbGFzcyBlbGVtZW50IGFzCj4gPiAraXRzIGZpcnN0IG1lbWJl ciwgYW5kIHVzZXMgdGhhdCBlbGVtZW50IHRvIHByb3ZpZGUgYWNjZXNzIHRvIGluc3RhbmNlcyBv Zgo+ID4gK0FWT3B0aW9uLCBlYWNoIG9mIHdoaWNoIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0 IGEgc2luZ2xlIG9wdGlvbi4KPiA+ICtUaGUgQVZDbGFzcyBjYW4gYWxzbyBpbmNsdWRlIG1vcmUg QHJlZiBBVkNsYXNzICJBVkNsYXNzZXMiIGZvciBwcml2YXRlIGNvbnRleHRzLAo+ID4gK21ha2lu ZyBpdCBwb3NzaWJsZSB0byBzZXQgb3B0aW9ucyB0aHJvdWdoIHRoZSBBUEkgdGhhdCBhcmVuJ3QK PiA+ICthY2Nlc3NpYmxlIGRpcmVjdGx5Lgo+ID4gKwo+ID4gK0FWT3B0aW9ucy1hY2Nlc3NpYmxl IG1lbWJlcnMgb2YgYSBjb250ZXh0IHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZQo+ID4g K0FWT3B0aW9ucyBBUEkgd2hlbmV2ZXIgcG9zc2libGUsIGV2ZW4gaWYgdGhleSdyZSBub3QgaGlk ZGVuIGF3YXkgaW4gYSBwcml2YXRlCj4gPiArY29udGV4dC4gIFRoYXQgZW5zdXJlcyB2YWx1ZXMg YXJlIHZhbGlkYXRlZCBhcyB0aGV5J3JlIHNldCwgYW5kIG1lYW5zIHlvdSB3b24ndAo+ID4gK2hh dmUgdG8gZG8gYXMgbXVjaCB3b3JrIGlmIGEgZnV0dXJlIHZlcnNpb24gb2YgRkZtcGVnIGNoYW5n ZXMgdGhlIGxheW91dC4KPiA+ICsKPiA+ICtBVkNsYXNzIHdhcyBjcmVhdGVkIHZlcnkgZWFybHkg aW4gRkZtcGVnJ3MgaGlzdG9yeSwgbG9uZyBiZWZvcmUgQVZPcHRpb25zLgo+ID4gK0l0cyBuYW1l IHN1Z2dlc3RzIHNvbWUga2luZCBvZiByZWxhdGlvbnNoaXAgdG8gYW4gT09QCj4gPiArYmFzZSBb Y2xhc3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NsYXNzXyhjb21wdXRlcl9wcm9n cmFtbWluZykpLAo+ID4gK2J1dCB0aGUgbmFtZSBoYXMgYmVjb21lIGxlc3MgYWNjdXJhdGUgYXMg RkZtcGVnIGV2b2x2ZWQsIHRvIHRoZSBwb2ludCB3aGVyZQo+ID4gK0FWQ2xhc3MgYW5kIEFWT3B0 aW9uIGFyZSBsYXJnZWx5IHN5bm9ueW1vdXMgaW4gbW9kZXJuIHVzYWdlLiAgVGhlIGRpZmZlcmVu Y2UKPiA+ICttaWdodCBzdGlsbCBtYXR0ZXIgaWYgeW91IG5lZWQgdG8gc3VwcG9ydCBvbGQgdmVy c2lvbnMgb2YgRkZtcGVnLAo+ID4gK3doZXJlIHlvdSBtaWdodCBmaW5kICpBVkNsYXNzIGNvbnRl eHQgc3RydWN0dXJlcyogKGNvbnRhaW4gYW4gQVZDbGFzcyBlbGVtZW50Cj4gPiArYXMgdGhlaXIg Zmlyc3QgbWVtYmVyKSB0aGF0IGFyZSBub3QgKkFWT3B0aW9ucy1lbmFibGVkKiAoZG9uJ3QgdXNl IHRoYXQgZWxlbWVudAo+ID4gK3RvIHByb3ZpZGUgYWNjZXNzIHRvIGluc3RhbmNlcyBvZiBBVk9w dGlvbikuCgpPbmUgbW9yZSBub3RlIEknbSBwbGFubmluZyBmb3IgdGhlIG5leHQgcmV3cml0ZS4u LgoKKiBhcyB5b3UndmUgbWVudGlvbmVkIGVsc2V3aGVyZSwgQVZDbGFzcyBpcyBpbnZvbHZlZCBp biBmb3JtYXR0aW5nIGxvZyBtZXNzYWdlcywKICBzbyBpZiB5b3UgZS5nLiBtYWtlIHlvdXIgb3du IGxvZ2dpbmcgZnJhbWV3b3JrLCBpdCBtaWdodCBoZWxwIHRvIHRoaW5rIGFib3V0CiAgQVZDbGFz cyBjb250ZXh0IHN0cnVjdHVyZXMgYXMgZGlzdGluY3QgZnJvbSBmcm9tIEFWT3B0aW9ucy1lbmFi bGVkIHN0cnVjdHMKCj4gPiArT2JqZWN0LW9yaWVudGVkIHByb2dyYW1tZXJzIG1heSBiZSB0ZW1w dGVkIHRvIGNvbXBhcmUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyIKPiA+ICt0byBPT1AgZ2V0 dGVycyBhbmQgc2V0dGVycy4gIFRoZXJlIGlzIHNvbWUgb3ZlcmxhcCBpbiBmdW5jdGlvbmFsaXR5 LCBidXQgT09QCj4gPiArZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgdXN1YWxseSBzcGVjaWZpYyB0 byBhIHNpbmdsZSBtZW1iZXIgYW5kIGRvbid0IHByb3ZpZGUKPiA+ICttZXRhZGF0YSBhYm91dCB0 aGUgbWVtYmVyOyB3aGVyZWFzIEFWT3B0aW9ucyBoYXMgYSBzaW5nbGUgQVBJIHRoYXQgY292ZXJz Cj4gPiArZXZlcnkgb3B0aW9uLCBhbmQgcHJvdmlkZXMgaGVscCB0ZXh0IGV0Yy4gYXMgd2VsbC4K PiA+ICsKPiA+ICtPYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1lcnMgbWF5IGJlIHRlbXB0ZWQgdG8g Y29tcGFyZSBBVk9wdGlvbnMtYWNjZXNzaWJsZQo+ID4gK21lbWJlcnMgb2YgYSBwdWJsaWMgY29u dGV4dCB0byBwcm90ZWN0ZWQgbWVtYmVycyBvZiBhIGNsYXNzLiAgQm90aCBwcm92aWRlCj4gPiAr Z2xvYmFsIGFjY2VzcyB0aHJvdWdoIGFuIEFQSSwgYW5kIHVucmVzdHJpY3RlZCBhY2Nlc3MgZm9y IHRydXN0ZWQgZnJpZW5kcy4KPiA+ICtCdXQgdGhpcyBpcyBqdXN0IGEgaGFwcHkgYWNjaWRlbnQs IG5vdCBhIGd1YXJhbnRlZS4KPiAKPiBUaGlzIHBhcnQgbG9va3MgZmluZSwgYWx0aG91Z2ggdGhl cmUgaXMgdG9vIG11Y2ggT09QIGphcmdvbiBmb3IgbXkKPiB0YXN0ZTogdGhpcyB3b3VsZCBtYWtl IHJlYWRpbmcgZm9yIHByb2dyYW1tZXJzIG5vdCBmYW1pbGlhciB3aXRoIE9PUAo+IGhhcmRlciB0 aGFuIG5lZWRlZCBzaW5jZSBzaGUgd2lsbCBtaXNzIG1hbnkgcmVmZXJlbmNlcy4KPiAKPiA+ICsK PiA+ICsjIyBGaW5hbCBleGFtcGxlOiBjb250ZXh0IGZvciBhIGNvZGVjCj4gPiArCj4gPiArQVZD b2RlY0NvbnRleHQgaXMgYW4gQVZPcHRpb25zLWVuYWJsZWQgc3RydWN0IHRoYXQgY29udGFpbnMg aW5mb3JtYXRpb24KPiA+ICthYm91dCBlbmNvZGluZyBvciBkZWNvZGluZyBvbmUgc3RyZWFtIG9m IGRhdGEgKGUuZy4gdGhlIHZpZGVvIGluIGEgbW92aWUpLgo+ID4gK0l0J3MgYSBnb29kIGV4YW1w bGUgb2YgbWFueSBvZiB0aGUgaXNzdWVzIGFib3ZlLgo+ID4gKwo+ID4gK1RoZSBuYW1lICJBVkNv ZGVjQ29udGV4dCIgdGVsbHMgdXMgdGhpcyBpcyBhIGNvbnRleHQuICBNYW55IG9mCj4gPiArQHJl ZiBsaWJhdmNvZGVjL2F2Y29kZWMuaCAiaXRzIGZ1bmN0aW9ucyIgc3RhcnQgd2l0aCBhbiBgYXZj dHhgIHBhcmFtZXRlciwKPiA+ICtpbmRpY2F0aW5nIHRoaXMgb2JqZWN0IHByb3ZpZGVzIGNvbnRl eHQgZm9yIHRoYXQgZnVuY3Rpb24uCj4gPiArCj4gPiArQVZDb2RlY0NvbnRleHQ6OmludGVybmFs IGNvbnRhaW5zIHRoZSBwcml2YXRlIGNvbnRleHQuICBGb3IgZXhhbXBsZSwKPiA+ICtjb2RlYy1z cGVjaWZpYyBpbmZvcm1hdGlvbiBtaWdodCBiZSBzdG9yZWQgaGVyZS4KPiA+ICsKPiA+ICtBVkNv ZGVjQ29udGV4dCBpcyBhbGxvY2F0ZWQgd2l0aCBhdmNvZGVjX2FsbG9jX2NvbnRleHQzKCksIGlu aXRpYWxpemVkIHdpdGgKPiA+ICthdmNvZGVjX29wZW4yKCksIGFuZCBmcmVlZCB3aXRoIGF2Y29k ZWNfZnJlZV9jb250ZXh0KCkuICBNb3N0IG9mIGl0cyBtZW1iZXJzCj4gPiArYXJlIGNvbmZpZ3Vy ZWQgd2l0aCB0aGUgQHJlZiBhdm9wdGlvbnMgIkFWT3B0aW9ucyBBUEkiLCBidXQgZm9yIGV4YW1w bGUgeW91Cj4gPiArY2FuIHNldCBBVkNvZGVjQ29udGV4dDo6b3BhcXVlIG9yIEFWQ29kZWNDb250 ZXh0OjpkcmF3X2hvcml6X2JhbmQoKSBpZiB5b3VyCj4gPiArcHJvZ3JhbSBoYXBwZW5zIHRvIG5l ZWQgdGhlbS4KPiA+ICsKPiA+ICtBVkNvZGVjQ29udGV4dCBwcm92aWRlcyBhbiBhYnN0cmFjdCBp bnRlcmZhY2UgdG8gbWFueSBkaWZmZXJlbnQgKmNvZGVjcyouCj4gPiArT3B0aW9ucyBzdXBwb3J0 ZWQgYnkgbWFueSBjb2RlY3MgKGUuZy4gImJpdHJhdGUiKSBhcmUga2VwdCBpbiBBVkNvZGVjQ29u dGV4dAo+ID4gK2FuZCByZWZsZWN0ZWQgYXMgQVZPcHRpb25zLiAgT3B0aW9ucyB0aGF0IGFyZSBz cGVjaWZpYyB0byBvbmUgY29kZWMgYXJlCj4gPiArc3RvcmVkIGluIHRoZSBpbnRlcm5hbCBjb250 ZXh0LCBhbmQgcmVmbGVjdGVkIGZyb20gdGhlcmUuCj4gPiArCj4gPiArVG8gc3VwcG9ydCBhIHNw ZWNpZmljIGNvZGVjLCBBVkNvZGVjQ29udGV4dCdzIHByaXZhdGUgY29udGV4dCBpcyBzZXQgdG8K PiA+ICthbiBlbmNvZGVyLXNwZWNpZmljIGRhdGEgdHlwZS4gIEZvciBleGFtcGxlLCB0aGUgdmlk ZW8gY29kZWMKPiA+ICtbSC4yNjRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FkdmFu Y2VkX1ZpZGVvX0NvZGluZykgaXMgc3VwcG9ydGVkIHZpYQo+ID4gK1t0aGUgeDI2NCBsaWJyYXJ5 XShodHRwczovL3d3dy52aWRlb2xhbi5vcmcvZGV2ZWxvcGVycy94MjY0Lmh0bWwpLCBhbmQKPiA+ ICtpbXBsZW1lbnRlZCBpbiBYMjY0Q29udGV4dC4KPiAKPiA+IEFsdGhvdWdoIGluY2x1ZGVkIGlu IHRoZSBkb2N1bWVudGF0aW9uLCBYMjY0Q29udGV4dCBpcyBub3QgcGFydCBvZiB0aGUgcHVibGlj IEFQSS4KPiAKPiBXaHkgaW5jbHVkZWQgaW4gdGhlIGRvYz8gVGhhdCBpcyBhIHByaXZhdGUgc3Ry dWN0IGFuZCB0aGVyZWZvcmUgc2hvdWxkCj4gbm90IGJlIGluY2x1ZGVkIGluIHRoZSBkb3h5LgoK RG94eWdlbiBkb2Vzbid0IHByb3ZpZGUgYW4gb2J2aW91cyBtZWNoYW5pc20gdG8gaW5jbHVkZSBv bmx5IHRoZSBwdWJsaWMgQVBJLgpDaGFuZ2luZyB0aGF0IHdvdWxkIGJlIGF0IGJlc3QgYSBiaWcg am9iLCBhbmQgaXQgaXNuJ3Qgb2J2aW91cyB3aGVyZSB0byBldmVuCnN0YXJ0IHVudGlsL3VubGVz cyBlLmcuIFsxXSBnZXRzIG1lcmdlZCBpbi4gIEl0IHNlZW1zIGxpa2UgYSBiZXR0ZXIgcGxhbgp0 byBwdXQgdGhlIHdhcm5pbmcgaW4gYW5kIHRha2UgaXQgb3V0IGlmIGFuZCB3aGVuIHRoZSBzaXRl IGdldHMgdXBkYXRlZC4KClsxXSBodHRwczovL2ZmbXBlZy5vcmcvcGlwZXJtYWlsL2ZmbXBlZy1k ZXZlbC8yMDI0LUFwcmlsLzMyNjAzMS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVs QGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K