From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v7] drm/i915: Enable second dbuf slice for ICL and TGL Date: Wed, 20 Nov 2019 21:18:37 +0200 Message-ID: <20191120191837.GJ1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> <20191118152712.GS1208@intel.com> <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> <20191118181806.GX1208@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 338A56E9EF for ; Wed, 20 Nov 2019 19:18:41 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Lisovskiy, Stanislav" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDg6MjU6NDhQTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gSGksCj4gCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0gICAgIC8qIElm IDJuZCBEQnVmIHNsaWNlIGlzIG5vIG1vcmUgcmVxdWlyZWQgZGlzYWJsZSBpdCAqLwo+ID4gPiA+ ID4gPiAtICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiByZXF1aXJlZF9zbGlj ZXMgPAo+ID4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gPiA+ID4gLSAgICAgICAg ICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRldl9wcml2LAo+ID4gPiA+ID4gPiByZXF1aXJl ZF9zbGljZXMpOwo+ID4gPiA+ID4gPiArICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgKiBJZiBz b21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwgZGlzYWJsZSBpdAo+ID4gPiA+ID4g PiBoZXJlLAo+ID4gPiA+ID4gPiArICAgICAgKiBhcyBoZXJlIHdlIG9ubHkgcmVtb3ZlIHNsaWNl cywgd2hpY2ggYXJlIG5vdCBuZWVkZWQKPiA+ID4gPiA+ID4gYW55bW9yZS4KPiA+ID4gPiA+ID4g KyAgICAgICovCj4gPiA+ID4gPiA+ICsgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx ICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRldl9wcml2LAo+ ID4gPiA+ID4gPiBzbGljZXNfaW50ZXJzZWN0aW9uKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGlz IGlzIHN0aWxsIGEgdG90YWxseSB3cm9uZyBwbGFjZSBmb3IgdGhpcy4gV2UgbmVlZCB0byBiZSBz dXJlCj4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+IHBsYW5lcyBoYXZlIHN3aXRjaGVkIG92ZXIgdG8g dGhlIG5ldyBkZGIgbGF5b3V0IGJlZm9yZSB3ZSBwb3dlcgo+ID4gPiA+ID4gb2ZmCj4gPiA+ID4g PiBhbnl0aGluZy4KPiA+ID4gPgo+ID4gPiA+IEkgaGF2ZSBqdXN0IG1vZGlmaWVkIGFscmVhZHkg ZXhpc3RpbmcgbGluZSBoZXJlLCBub3QgYWRkZWQgYnkgbWUuCj4gPiA+ID4gVGhlIHBvaW50IG9m IHRoaXMgcGF0Y2ggaXMgc3RhcnRpbmcgdG8gdXNlIHNlY29uZCBEQnVmIHNsaWNlIGJ1dAo+ID4g PiA+IG5vdCBmaXhpbmcgYWxsIGtpbmRzIG9mIGlzc3VlcyByZWxhdGVkIHRvIERCdWYgY29kZSBh dCB0aGUgc2FtZQo+ID4gPiA+IHRpbWUuCj4gPiA+Cj4gPiA+IFlvdSdyZSByZS1lbmFibGluZyBj b2RlIEkgZGlzYWJsZWQgb24gcHVycG9zZS4gSXQgaGFzIHRvIGJlIGZpeGVkCj4gPiA+IHByb3Bl cmx5IG9yIG5vdCB0b3VjaGVkIGF0IGFsbC4gSW4gaGluZHNpZ2h0IEkgc2hvdWxkIGhhdmUgcHJv YmFibHkKPiA+ID4ganVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2ZSBwZW9wbGUgYmFk IGlkZWFzLgo+ID4KPiA+IC0gICAgIC8qIElmIDJuZCBEQnVmIHNsaWNlIGlzIG5vIG1vcmUgcmVx dWlyZWQgZGlzYWJsZSBpdCAqLwo+ID4gPiA+ID4gPiAtICAgICBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMSAmJiByZXF1aXJlZF9zbGljZXMgPAo+ID4gPiA+ID4gPiBod19lbmFibGVkX3Ns aWNlcykKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRl dl9wcml2LAo+ID4gPiA+ID4gPiByZXF1aXJlZF9zbGljZXMpOwo+ID4KPiA+IEknbSBub3QgcmVl bmFibGluZyBpdCAtIHRoaXMgaXMgY29kZSBpcyBvdXQgdGhlcmUgcmlnaHQgbm93Lgo+IAo+ID4g SXQncyBfZGVhZF8gY29kZSwgYW5kIGl0J3MgbGlrZSB0aGF0IG9uIHB1cnBvc2UuIFlvdSdyZSBu b3cgYXR0ZW1wdGluZwo+ID4gdG8gcmUtZW5hYmxlIGl0IHdpdGhvdXQgZml4aW5nIHRoZSB1bmRl cmx5aW5nIGlzc3Vlcy4KPiAKPiBTb3VuZHMgbGlrZSBzb21lIHNhY3JlZCB0aGluZy4gRGVhZCBj b2RlIHdoaWNoIGlzIG5vdCBjb21tZW50ZWQsIG5laXRoZXIKPiByZW1vdmVkLCBidXQgd2hpY2gg eW91IGNhbid0IHRvdWNoLiAgCgpZb3UgY2FuIHRvdWNoIGl0IGJ5IGVpdGhlciByZW1vdmluZyBp dCBvciBmaXhpbmcgaXQuIEFueXRoaW5nIGVsc2UKaXMgYSBiaXQgcG9pbnRsZXNzLgoKPiAKPiA+ IFRoaXMgaXMgYWxsIGFnYWluIGFib3V0IGNoYW5naW5nIGFsbCBraW5kcyBvZiBzdHVmZiBhdCB0 aGUgc2FtZSB0aW1lLgo+ID4KPiA+IFdoeSB3ZSBjYW4ndCBqdXN0IGRvIHRoaW5ncyBzdGVwIGJ5 IHN0ZXA/IFlvdSBoYXZlIGEgcG9pbnQgdGhhdAo+ID4gdGhpcyBpcyB3cm9uZyBwbGFjZSBvaywg YnV0IGFzIHdlIHNlZSBjdXJyZW50IGNvZGUgY2F1c2VzIG5vCj4gPiByZWdyZXNzaW9ucy4gSnVz dCB0ZWxsIG1lIHlvdXIgaWRlYSB3aGVyZSB0byBwdXQgaXQgYW5kIEkgd2lsbAo+ID4gZG8gdGhh dCwgaWYgeW91IGRvbid0IGhhdmUgaXQgeWV0IC0gbGV0IGl0IHN0YXkgdGhlcmUsIGlmIENJIHNo b3dzCj4gPiBubyByZWdyZXNzaW9ucyBjdXJyZW50bHkuCj4gCj4gPlRoZSBzYW1lIGdsb2JhbCBz dGF0ZSB0cmlja3MgYXBwbHkgaGVyZSBhcyB3aXRoIHRoZSBjZGNsay9zYWd2IHN0dWZmLgo+ID4x LiBlbmFibGUgbmV3IHJlc291cmNlcy9idW1wIHVwIGNsb2Nrcwo+ID4yLiByZWNvbmZpZ3VyZSBw bGFuZXMvZXRjLgo+ID4zLiB3YWl0IGZvciB2YmxhbmtzCj4gPjQuIGRpc2FibGUgdW51c2VkIHJl c291cmNlcy9kcm9wIHRoZSBjbG9ja3MKPiAKPiBJdCBpcyBkaWZmZXJlbnQgd2l0aCBTQUdWLCB0 aGVyZSB3ZSByZXN0cmljdCB3aGF0cyBuZWVkZWQgZmlyc3QgYW5kIHJlbGF4Cj4gc29tZSBsaW1p dGF0aW9ucyBhZnRlcndhcmRzLgoKSXQncyBhIGdsb2JhbCByZXNvdXJjZSBzaGFyZWQgYnkgdGhl IHBpcGVzLiBIZW5jZSBpdCdzIHF1aXRlIHNpbWlsYXIKdG8gU0FHViBhbmQgY2RjbGsuCgo+IFNv IGFsbCB0aGlzIHdhcyBzaW1wbHkgYWJvdXQgdGhhdCBJIHNob3VsZCBwdXQgdGhpcyBmdW5jdGlv biBjYWxsIGludG8KPiBza2xfY29tbWl0X21vZGVzZXRfZGlzYWJsZXM/IAoKSXQgc2hvdWxkIGJl IGluIGludGVsX2F0b21pY19jb21taXRfdGFpbCgpIG1vc3QgbGlrZWx5LCBqdXN0IGxpa2UgY2Rj bGsuCgpJIGNvb2tlZCB1cCBhIHNtYWxsIHRlc3QgdGhhdCBJIGJlbGlldmUgc2hvdWxkIGVuZCB1 cCBwaW5nLXBvbmdpbmcKYmV0d2VlbiBvbmUgYW5kIHR3byBzbGljZXMgb24gaWNsLCBhbmQgc28g c2hvdWxkIGVuZCB1cCBleHBsb2RpbmcKd2hlbiB0aGUgc2Vjb25kIHNsaWNlIGdldHMgc2h1dCBk b3duIHByZW1hdHVyZWx5OgpnaXQ6Ly9naXRodWIuY29tL3ZzeXJqYWxhL2ludGVsLWdwdS10b29s cy5naXQgZGJ1Zl9zbGljZV90ZXN0Cgo+IEkgY291bGQganVzdCBoYXZlIHNhaWQgaXQgc3RyYWln aHQgYXdheSB0byBtZSwgd2l0aG91dCBtZW50aW9uZWQgImRlYWQiIGNvZGUKPiBhbmQgb3RoZXIg c3R1ZmYuLgoKSSBkb24ndCByZWFkIG1pbmRzIGVpdGhlci4KCj4gCj4gPiA+ID4gPiA+ICsgICAg IHJldHVybiBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlczsKPiA+ID4gPiA+ ID4gK30KPiA+ID4gPiA+Cj4gPiA+ID4gPiBLaW5kYSBwb2ludGxlc3MgZnVuY3Rpb24gbm93LiAn c3VwcG9ydGVkX3NsaWNlcycgaXMgbm90IGEgdmVyeQo+ID4gPiA+ID4gZ29vZAo+ID4gPiA+ID4g bmFtZS4gU2hvdWxkIGJlICdudW1fZGJ1Zl9zbGljZXMnIG9yIHNvbWV0aGluZyBhbG9uZyB0aG9z ZSBsaW5lcy4KPiA+ID4gPgo+ID4gPiA+IFN1cHBvcnRlZCBzbGljZXMgcmVhbGx5IG1lYW5zIGhv dyBtdWNoIHNsaWNlcyB3ZSBzdXBwb3J0IGluCj4gPiA+ID4gaGFyZHdhcmUuCj4gPiA+ID4gbnVt X2RidWZfc2xpY2VzIHdpbGwgbm90IHJlZmxlY3QgdGhhdCwgaXQgd2lsbCBiZSBtb3JlIGFtYmln aW91cy4KPiA+ID4gPiBJIGRvbid0IGxpa2UgdGhpcyBuYW1lLgo+ID4gPgo+ID4gPiBzdXBwb3J0 ZWRfc2xpY2VzIGRvZXNuJ3QgZXZlbiBzYXkgImRidWYiIGFueXdoZXJlLiBTbyBpdCdzIGV2ZW4g bW9yZQo+ID4gPiBhbWJpZ3VvdXMuIEFsc28gd2UgYWxyZWFkeSBoYXZlIG51bV9waXBlcywgbnVt X3Nwcml0ZXMsIGV0Yy4KPiA+Cj4gIC4uYW5kIGluIGN1cnJlbnQgY29kZSB3ZSBoYXZlLi4uICJl bmFibGVkX3NsaWNlcyIsIG5vPyBPdWNoISA6KSBJUyB0aGlzCj4gIHJlYWxseSB0aGF0IGltcG9y dGFudCBhbmQgd29ydGggYXJndWluZyBhdCB0aGUgdmVyeSBsYXN0IG1vbWVudD8KPiAgd2hldGhl ciBudW1iZXIgb2YKPiAgc3VwcG9ydGVkX3NsaWNlc19pbl9oYXJkd2FyZSwgc2hvdWxkIGJlIG5h bWVkICJzdXBwb3J0ZWQgc2xpY2VzIiBvcgo+ICAibnVtX2RidWZfc2xpY2VzIj8gSWYgeWVzLCBs ZXRzIGdvIG9uLCBtaXNzIHNvbWUgdGFyZ2V0cyBhbmQgY29udGludWUKPiAgZGlzY3Vzc2luZyB0 aGlzICJzb29vbyBpbXBvcnRhbnQiIHRoaW5nLgo+IAo+ICBTb21lIG9uZSBtaWdodCBjb21lIHVw IHRoYXQgaXQgaXMgY2FsbGVkICJudW1fc2xpY2VzIiBvcgo+ICAiZGJ1Zl9udW1fc2xpY2VzIi4g U2VyaW91c2x5LCBtYXkgYmUgInN1cHBvcnRlZF9udW1fZGJ1Zl9zbGljZXMiIHRvCj4gIGtlZXAg ZXZlcnlvbmVzIGJsb2F0ZWQgZWdvcyBoYXBweT8/CgpTaW5jZSB3ZSBoYXZlIGRkYl9zaXplIGlu IGRldmljZSBpbmZvIGFscmVhZHkgaXQgc2hvdWxkIGJlIG5leHQgdG8gdGhhdAphY3R1YWxseS4g QW5kIHdlIHNob3VsZCBwcm9iYWJseSB1bmlmeSB0aGUgdGVybWlub2xvZ3kgYSBiaXQgc28gd2Ug ZG9uJ3QKbWl4IGRidWYgYW5kIGRkYiBpbiB0aGUgc2FtZSBzZW50ZW5jZS4KCj4gCj4gPiA+ID4g PiA+ICBzdGF0aWMgdm9pZCBpY2xfZGJ1Zl9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiAtICAgICBJOTE1X1dSSVRFKERC VUZfQ1RMX1MxLCBJOTE1X1JFQUQoREJVRl9DVExfUzEpIHwKPiA+ID4gPiA+ID4gREJVRl9QT1dF Ul9SRVFVRVNUKTsKPiA+ID4gPiA+ID4gLSAgICAgSTkxNV9XUklURShEQlVGX0NUTF9TMiwgSTkx NV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+ID4gPiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4g PiA+ID4gPiA+IC0gICAgIFBPU1RJTkdfUkVBRChEQlVGX0NUTF9TMik7Cj4gPiA+ID4gPiA+IC0K PiA+ID4gPiA+ID4gLSAgICAgdWRlbGF5KDEwKTsKPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiAt ICAgICBpZiAoIShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dFUl9TVEFURSkgfHwK PiA+ID4gPiA+ID4gLSAgICAgICAgICEoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9X RVJfU1RBVEUpKQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgIERSTV9FUlJPUigiREJ1ZiBwb3dl ciBlbmFibGUgdGltZW91dFxuIik7Cj4gPiA+ID4gPiA+IC0gICAgIGVsc2UKPiA+ID4gPiA+ID4g LSAgICAgICAgICAgICAvKgo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIEZJWE1FOiBmb3Ig bm93IHByZXRlbmQgdGhhdCB3ZSBvbmx5IGhhdmUgMQo+ID4gPiA+ID4gPiBzbGljZSwKPiA+ID4g PiA+ID4gc2VlCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICogaW50ZWxfZW5hYmxlZF9kYnVm X3NsaWNlc19udW0oKS4KPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKi8KPiA+ID4gPiA+ID4g LSAgICAgICAgICAgICBkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IDE7 Cj4gPiA+ID4gPiA+ICsgICAgIC8qCj4gPiA+ID4gPiA+ICsgICAgICAqIEp1c3QgcG93ZXIgdXAg MSBzbGljZSwgd2Ugd2lsbAo+ID4gPiA+ID4gPiArICAgICAgKiBmaWd1cmUgb3V0IGxhdGVyIHdo aWNoIHNsaWNlcyB3ZSBoYXZlIGFuZCB3aGF0IHdlCj4gPiA+ID4gPiA+IG5lZWQuCj4gPiA+ID4g PiA+ICsgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICBkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5l bmFibGVkX3NsaWNlcyA9IERCVUZfUzFfQklUOwo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoYXQgc3R1 ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBtb2RpZmllZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ ID4gPiA+ID4gVGhlIGludGlhbCB2YWx1ZSBzaG91bGQgY29tZSBmcm9tIHJlYWRvdXQsIGFuZCBh ZnRlciB0aGF0IGl0Cj4gPiA+ID4gPiBzaG91bGQKPiA+ID4gPiA+IGJlIGFkanVzdGVkIGFzIHBh cnQgb2YgdGhlIG92ZXJhbGwgYXRvbWljIHN0YXRlLgo+ID4gPiA+Cj4gPiA+ID4gV2VsbCwgYXMg eW91IGNhbiBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZlbiB3b3JzZSAtIGhhcyBzb21lIHdlaXJk Cj4gPiA+ID4gaGFyZGNvZGVkIHN0dWZmIGFuZCBpcyBtb2RpZmllZCBsaWtlIHRoYXQuIEFsc28g aWYgd2UgYXJlIGVuYWJsaW5nCj4gPiA+ID4gdGhlCj4gPiA+ID4gZGJ1ZiBzbGljZXMsIHNob3Vs ZG4ndCB3ZSByZWFsbHkgZGV0ZXJtaW5lIHdoYXQgdmFsdWUgc2hvdWxkIGJlCj4gPiA+ID4gdGhl cmU/Cj4gPiA+ID4KPiA+ID4gPiBBbHNvIEkgd291bGRuJ3QgcmVhbGx5IGFsd2F5cyB0cnVzdCB0 aGUgcmVhZG91dCwgYXMgdG8gbWUgaXQgc2VlbXMKPiA+ID4gPiBpY2VsYWtlIHJlc2V0cyBpdCBj b25zdGFudGx5IHRvIDIgYWZ0ZXIgc3VzcGVuZC9yZXN1bWUuCj4gPiA+Cj4gPiA+IFRoZSBwb2lu dCBvZiByZWFkb3V0IGlzIHRoYXQgd2Ugc3luY3Job25pemUgb3VyIHNvZnR3YXJlIHN0YXRlIHdp dGgKPiA+ID4gdGhlCj4gPiA+IGN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91dCBoYXZp bmcgdG8gbW9kaWZ5IHRoZSBoYXJkd2FyZQo+ID4gPiBzdGF0ZS4KPiA+ID4gT25jZSBzeW5jaHJv bml6ZWQgdGhlIGRyaXZlciB0YWtlcyBvdmVyIGFuZCB0ZWxscyB0aGUgaHcgd2hhdCB0byBkby4K PiA+Cj4gPiBUaGF0IGlzIGVzcGVjaWFsbHkgbmljZSBhZnRlciB5b3Ugc2F5ICJyZXBvcnQgZXJy b3IgYW5kIGRvbid0IGNhcmUiCj4gPiB3aGVuIEkgcmVhbGx5IHdhbnQgdG8gcmVmbGVjdCBodyBz dGF0ZSBpbiBzdyBzdGF0ZSwgYnkgY2hlY2tpbmcgd2hldGhlcgo+ID4gd2UgY291bGQgc2V0IGRi dWYgc2xpY2VzIG9yIG5vdC4KPiA+IE5vdyB5b3Ugc2F5IHRoYXQgd2UgbmVlZCB0byBzeW5jaHJv bml6ZSBzb2Z0d2FyZSBzdGF0ZSB3aXRoIGh3IHN0YXRlLAo+ID4gaG93ZXZlciBpZiBJIGZhaWwg dG8gbW9kaWZ5IGl0IC0gdGhlbiAid2hvIGNhcmVzIi4KPiAKPiA+WWVzLiBJZiB5b3UgZmFpbCB0 byBtb2RpZnkgdGhlIGhhcmR3YXJlIHN0YXRlIHRoZSB3aG9sZSB0aGluZyBpcwo+ID5icm9rZW4g YW55d2F5LiBUaGVyZSdzIGlzICpub3RoaW5nKiB3ZSBjYW4gZG8gYXQgdGhpcyBzdGFnZSBpbiB0 aGUKPiA+Y29tbWl0IHRvIGZpeCBpdC4KPiAKPiBPaywgYnV0IHdoeSB3ZSBjYW4ndCBhdCBsZWFz dCBrZWVwIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgc3RhdGUgaW4gc3cKPiBpbnN0ZWFkIG9mIHNvbWV0 aGluZyB3aGljaCBpcyBjb21wbGV0ZWx5IHdyb25nLiBIb3cgZG9lcyB0aGF0IGhhcm0/CgpJdCBt ZXNzZXMgdXAgdGhlIHNvZnR3YXJlIHN0YXRlIHRoYXQgd2UgY29tcHV0ZWQgd2l0aCBzb21ldGhp bmcgdGhhdAp3ZSBkaWRuJ3QgY29tcHV0ZS4gU28gZ29pbmcgZm9yd2FyZCB0aGUgc3RhdGUgd2ls bCBiZSBpbmNvbnNpc3RlbnQuCgpUaGUgY29yZSBjb25jZXB0IG9mIGF0b21pYyBpcyB0aGF0IHRo ZSBzdGF0ZSBpcyBwcmVjb21wdXRlZCBhbmQKdmFsaWRhdGVkIGFoZWFkIG9mIHRpbWUuIFRoZSBj b21taXQgcGhhc2UgaXMgc3VwcG9zZWQgdG8gYmUgZHVtYiBhbmQKaXNuJ3QgYWxsb3dlZCB0byBt b2RpZnkgdGhlIHN0YXRlLiBUaGlzIGlzIGFsc28gd2h5IHdlIG9mdGVuIHBhc3MKdGhlIHN0YXRl cyBhcyBjb25zdCBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZSwgdGhvdWdoIHVuZm9ydHVuYXRlbHkK d2UgY2FuJ3QgZG8gdGhhdCBhbHdheXMgb24gYWNjb3VudCBvZiB0aGUgc3RhdGVzIGJlaW5nIHNs aWdodGx5Cm92ZXJsb2FkZWQgd2l0aCBvdGhlciBtZXRhZGF0YS4KCj4gCj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+ID4gPiA+Cj4gPiA+ID4g PiBUaGlzIHN0cnVjdCBpcyBxdWl0ZSBwb2ludGxlc3MuIFNob3VsZCBiZSBraWxsZWQgb2ZmLgo+ ID4gPiA+Cj4gPiA+ID4gTGVnYWN5IHN0dWZmLCBub3QgYWRkZWQgYnkgbWUuIFF1aXRlIGZpbmUg d2l0aCByZW1vdmluZyBpdCAtCj4gPiA+ID4gYnV0IHNob3VsZCB3ZSByZWFsbHkgZG8gYWxsIHRo aXMgYXQgdGhlIHNhbWUgdGltZSBhbmQgaW4gc2FtZQo+ID4gPiA+IHBhdGNoPwo+ID4gPgo+ID4g PiBOb3QgdGhlIHNhbWUgcGF0Y2guIEJ1dCBjbGVhbiB1cCB0aGUgY29id2VicyBmaXJzdCwgdGhl biBhZGQgdGhlIG5ldwo+ID4gPiBzdHVmZi4gTXVjaCBlYXNpZXIgdGhhdCB3YXkgYXJvdW5kLgo+ ID4KPiA+IFRoZXJlIGlzIGEgc2hpdCB0b24gbG9hZCBvZiBjb2J3ZWJzIHRvIGNsZWFuLiBQZXJz b25hbGx5IG15IG9waW5pb24gaXMKPiA+IHRoYXQgY3VycmVudCBkYnVmIGNvbnRyb2xsaW5nIGNv ZGUgaXMgdG90YWwgZ2FyYmFnZSAtIHdoaWNoIGhhcyBsb3RzIG9mCj4gPiBoYXJkY29kZWQgc3R1 ZmYuIEdvb2QgbHVjayBlbmFibGluZyBvbmx5IHNlY29uZCBkYnVmIHNsaWNlLCBnb29kIGx1Y2sK PiA+IGRpc2FibGluZy9lbmFibGluZyBkYnVmIHByb3Blcmx5Li4uLgo+ID4gV2hlcmUgeW91IHdl cmUsIHdoZW4gdGhpcyB3YXMgY29tbWl0dGVkIHRoZW4/Cj4gCj4gPkxvb2tpbmcgYXQgc29tZXRo aW5nIGVsc2UgdW5mb3J0dW5hdGVseS4gQWxzbyBpdCBoYXMganVzdCBrZXB0Cj4gPmJpdHJvdHRp bmcgc2luY2UgYmVjYXVzZSBubyBvbmUgaGFzIGNhcmVkLgo+IAo+IFRoYXQgaXMgd2hhdCBleGFj dGx5IHN1cnByaXNlcyBtZS4gV2hpbGUgd2UgaGF2ZSBpc3N1ZXMKPiBsaWtlIGNvbW1pdCBzZXJp YWxpemF0aW9uLCBzYWd2LCBtc3QsIGhhbGYgb2YgZGlzcGxheSBidWZmZXIgb25seQo+IGVuYWJs ZWQsIGJ3LCBhbmQgd2UgYXJlIGFyZ3VpbmcgYWJvdXQgaG93IHN1cHBvcnRlZF9zbGljZXMKPiBz aG91bGQgYmUgbmFtZWQuIE9yIHRoYXQgSSBzaG91bGRuJ3QgcmVmZXIgdG8gREJ1ZiBzbGljZXMg YXMgYml0cwo+IGJ1dCBkZWZpbmUgYXMgdmFsdWVzIGFuZCB0aGVuIGRlY29kZSB0aG9zZSBhcyBi aXRzLiBQcmlvcml0aWVzLgoKVXN1YWxseSBwZW9wbGUgY29tcGxhaW4gYWJvdXQgcmV2aWV3ZXJz IG5vdCBwb2ludGluZyBvdXQKYWxsIHRoZSBpc3N1ZXMgaW4gb25lIHNpdHRpbmcuIAoKPiAKPiA+ Cj4gPiBJZiB3ZSBuZWVkIHRvIGZpeCBpdCAtIGZpbmUuIEJ1dCBtYXkgYmUgd2Ugc2hvdWxkIGRv IGl0IGluIHN0YWdlcz8KPiA+IFBvaW50IG9mIHRoaXMgcGF0Y2ggaXMgImVuYWJsZSBzZWNvbmQg ZGJ1ZiBzbGljZSIsIG5leHQgcGF0Y2ggInJlbW92ZQo+ID4gdW5uZWVkZWQgc3RydWN0cyIgYW5k IHNvIG9uLgo+ID4gV2hpbGUgeW91IHdhbnQgbWUgdG8gc2h1ZmZsZSBldmVyeXRoaW5nIGF0IHRo ZSBzYW1lIHRpbWUsIHdoaWNoIGlzIG5vdAo+ID4gZ29vZCBpZGVhLCBlc3BlY2lhbGx5IGNvbnNp ZGVyaW5nIGNvbXBsZXhpdHkgYW5kIGFtb3VudCBvZiBsZWdhY3kgc3R1ZmYKPiA+IHdlIGN1cnJl bnRseSBoYXZlLgo+IAo+ID5CdWlsZGluZyBuZXcgc3R1ZmYgb24gdG9wIG9mIGEgZGVjb21wb3Np bmcgZ2FyYmFnZSBwaWxlIGlzIG5vdAo+ID5hIGdvb2QgaWRlYTogYSkgaXQncyBoYXJkZXIgdGhh biBidWlsZGluZyBvbiBjbGVhbiBmb3VuZGF0aW9uLAo+ID5iKSBpdCdsbCBwcm9iYWJseSBmYWxs IG92ZXIgYW5kIGdldCBidXJpZWQgaW4gdGhlIG9sZCBnYXJiYWdlCj4gPmF0IHdoaWNoIHBvaW50 IHlvdSdyZSBsaWtlbHkgZ29pbmcgdG8gYmUgcmlnaHQgYmFjayB3aGVyZSB5b3UKPiA+c3RhcnRl ZAo+IC4KPiBTdXJlLCBsZXQncyBjaGFuZ2UgZXZlcnl0aGluZyBhdCB0aGUgc2FtZSB0aW1lIGFu ZCB0aGVuIHdvbmRlcgo+IHdoYXQgaGFkIGZhaWxlZCBleGFjdGx5IGluIHRoYXQgaHVnZSBzZXJp ZXMgd2l0aCBsb3RzIG9mIHVucmVsYXRlZCBjaGFuZ2VzLiAKPiBTdGFuZGFyZCBwcmFjdGljZS4K ClNlcmllcyBjYW4gYmUgc3BsaXQgdXAgdG8gc21hbGxlciBjaHVua3MuIE15IHVzdWFsIE1PIGlz IHRvIHNwbGl0CnByZXAgc3R1ZmYgb3V0IHRvIHNlcGFyYXRlIHBhdGNoZXMsIGFuZCBpZiBpdCBs b29rcyBsaWtlIHRoZSBvdmVyYWxsCnNlcmllcyBpcyBnZXR0aW5nIHRvbyBiaWcgSSBldmVuIHBv c3QgdGhlIHByZXAgcGF0Y2hlcyBzZXBhcmF0ZWx5LgpJbiBmYWN0IEkgb2Z0ZW4gZW5kIHVwIHdp dGggbW9yZSB0aGFuIG9uZSBwcmVwIHNlcmllcyBmb3Igd2hhdGV2ZXIKYWN0dWFsIGdvYWwgSSB3 YXMgdHJ5aW5nIHRvIHJlYWNoLgoKPiAKPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIGZvcl9l YWNoX25ld19pbnRlbF9jcnRjX2luX3N0YXRlKGludGVsX3N0YXRlLCBjcnRjLAo+ID4gPiA+ID4g PiBjcnRjX3N0YXRlLAo+ID4gPiA+ID4gPiBpKSB7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQo+ID4gPiA+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgJmNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGU7Cj4g PiA+ID4gPiA+ICAgICAgICAgICAgICAgZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4g PiA+ID4gPiAgICAgICAgICAgICAgIGludCBoZGlzcGxheSwgdmRpc3BsYXk7Cj4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgdTMyIHBpcGVfZGJ1Zl9zbGljZV9tYXNrID0gXAo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgaTkxNV9nZXRfYWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYs Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwaXBlLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWN0aXZlX3BpcGVzLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICAgICAgICAgICAgICAgaWYgKCFjcnRjX3N0YXRlLT5ody5lbmFibGUpCj4gPiA+ID4gPiA+ ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g KyAgICAgICAgICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAqIEFjY29yZGluZyB0 byBCU3BlYyBwaXBlIGNhbiBzaGFyZSBvbmUgZGJ1Zgo+ID4gPiA+ID4gPiBzbGljZQo+ID4gPiA+ ID4gPiB3aXRoIGFub3RoZXIKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBwaXBlcyBvciBw aXBlIGNhbiB1c2UgbXVsdGlwbGUgZGJ1ZnMsIGluCj4gPiA+ID4gPiA+IGJvdGggY2FzZXMKPiA+ ID4gPiA+ID4gd2UKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBhY2NvdW50IGZvciBvdGhl ciBwaXBlcyBvbmx5IGlmIHRoZXkgaGF2ZQo+ID4gPiA+ID4gPiBleGFjdGx5Cj4gPiA+ID4gPiA+ IHNhbWUgbWFzay4KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBIb3dldmVyIHdlIG5lZWQg dG8gYWNjb3VudCBob3cgbWFueSBzbGljZXMKPiA+ID4gPiA+ID4gd2Ugc2hvdWxkCj4gPiA+ID4g PiA+IGVuYWJsZQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAqIGluIHRvdGFsLgo+ID4gPiA+ ID4gPiArICAgICAgICAgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIHRvdGFsX3Ns aWNlX21hc2sgfD0gcGlwZV9kYnVmX3NsaWNlX21hc2s7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gdG90 YWxfc2xpY2VfbWFzayB3aWxsIG5vdyBhY2NvdW50IG9ubHkgdGhlIGNydGNzIGluIHRoZSBzdGF0 ZS4KPiA+ID4gPiA+IFdoYXQKPiA+ID4gPiA+IGhhcHBlbnMgdG8gdGhlIG90aGVyIHBpcGVzJyBz bGljZXM/Cj4gPgo+ID4gU2FtZSBhcyBoYXBwZW5zIG5vdyBidHcuIFJpZ2h0IG5vdyBpdCBhbHNv IGRvZXMgdGhlIHNhbWUgdGhpbmcuCj4gCj4gPlJpZ2h0IG5vdyBpdCBkb2VzIGFic29sdXRlbHkg bm90aGluZy4gSXQncyBhbGwgZGVhZCBjb2RlLgo+IAo+IFJpZ2h0IG5vdywgdGhpcyAiZGVhZCIg Y29kZSBleGFjdGx5IGl0ZXJhdGVzIHRocm91Z2ggY3J0Y3MgaW4gc3RhdGUgYW5kCj4gYWxsb2Nh dGVzIERCdWYgUzEgaW4gcHJvcG9ydGlvbiB0byBwaXBlIHdpZHRoLgo+IFdoYXQgSSBkbyBpcyBt YWtlIGl0IGRvIHRoZSBzYW1lIHRoaW5nIGJ1dCB1c2luZyBlaXRoZXIgcmFuZ2Ugb2Ygb25lCj4g b3IgdHdvIHNsaWNlcywgZGVwZW5kaW5nIG9uIHBpcGUgY29uZmlndXJhdGlvbi4KCk9LLiBTbyBo b3cgZG9lcyBpdCBkZWFsIHdpdGggbXkgb3JpZ2luYWwgcXVlc3Rpb24/Cgo+IAo+IFNvIHNob3Vs ZCBJIGhhdmUgdGhyb3duIGF3YXkgdGhhdCBjb2RlIGFuZCByZXdyaXR0ZW4gdGhpcyBhcyB3ZWxs PwoKTm90IGlmIGl0IHdvcmtzLgoKPiAKPiA+ID4gPiA+ID4gK3N0YXRpYyB1aW50X2ZpeGVkXzE2 XzE2X3QKPiA+ID4gPiA+ID4gK2ljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiA+ICt7 Cj4gPiA+ID4gPiA+ICsgICAgIHUzMiBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaDsKPiA+ID4g PiA+ID4gKyAgICAgdWludF9maXhlZF8xNl8xNl90IGZwX3dfcmF0aW8sIGZwX2hfcmF0aW87Cj4g PiA+ID4gPiA+ICsgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBkb3duc2NhbGVfaCwgZG93bnNjYWxl X3c7Cj4gPiA+ID4gPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlID0KPiA+ID4gPiA+ID4gJmNydGNfc3RhdGUtCj4gPiA+ID4gPiA+ID4gaHcuYWRq dXN0ZWRfbW9kZTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICBz cmNfdyA9IGNydGNfc3RhdGUtPnBpcGVfc3JjX3c7Cj4gPiA+ID4gPiA+ICsgICAgIHNyY19oID0g Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfaDsKPiA+ID4gPiA+ID4gKyAgICAgZHN0X3cgPSBhZGp1c3Rl ZF9tb2RlLT5jcnRjX2hkaXNwbGF5Owo+ID4gPiA+ID4gPiArICAgICBkc3RfaCA9IGFkanVzdGVk X21vZGUtPmNydGNfdmRpc3BsYXk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgZnBf d19yYXRpbyA9IGRpdl9maXhlZDE2KHNyY193LCBkc3Rfdyk7Cj4gPiA+ID4gPiA+ICsgICAgIGZw X2hfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiA+ID4gPiArICAgICBk b3duc2NhbGVfdyA9IG1heF9maXhlZDE2KGZwX3dfcmF0aW8sCj4gPiA+ID4gPiA+IHUzMl90b19m aXhlZDE2KDEpKTsKPiA+ID4gPiA+ID4gKyAgICAgZG93bnNjYWxlX2ggPSBtYXhfZml4ZWQxNihm cF9oX3JhdGlvLAo+ID4gPiA+ID4gPiB1MzJfdG9fZml4ZWQxNigxKSk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gKyAgICAgcmV0dXJuIG11bF9maXhlZDE2KGRvd25zY2FsZV93LCBkb3duc2Nh bGVfaCk7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3VpbnRfZml4 ZWRfMTZfMTZfdAo+ID4gPiA+ID4gPiAraWNsX2dldF9waXBlX3JhdGlvKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiAr ICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiA+ID4gPiA+ID4gKyAgICAgY29uc3Qgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqZHJtX3BsYW5lX3N0YXRlOwo+ID4gPiA+ID4gPiArICAgICB1 aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9kb3duc2NhbGUsIHBpcGVfcmF0aW87Cj4gPiA+ID4gPiA+ ICsgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBtYXhfZG93bnNjYWxlID0gdTMyX3RvX2ZpeGVkMTYo MSk7Cj4gPiA+ID4gPiA+ICsgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxf Y3J0YyhjcnRjX3N0YXRlLQo+ID4gPiA+ID4gPiA+dWFwaS5jcnRjKTsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArICAgICBpZiAoIWNydGNfc3RhdGUtPnVhcGkuZW5hYmxlKQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgIHJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ICsgICAgIGRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShw bGFuZSwKPiA+ID4gPiA+ID4gZHJtX3BsYW5lX3N0YXRlLCAmY3J0Y19zdGF0ZS0+dWFwaSkgewo+ ID4gPiA+ID4gPiArICAgICAgICAgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBwbGFuZV9kb3duc2Nh bGU7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICB0b19p bnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICsgICAgICAgICAgICAgaWYgKCFpbnRlbF93bV9wbGFuZV92aXNpYmxlKGNydGNfc3RhdGUs Cj4gPiA+ID4gPiA+IHBsYW5lX3N0YXRlKSkKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgcGxh bmVfZG93bnNjYWxlID0KPiA+ID4gPiA+ID4gc2tsX3BsYW5lX2Rvd25zY2FsZV9hbW91bnQoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgICAgRFJNX0RFQlVHX0tNUygiUGxhbmUgJWQgZG93bnNjYWxlIGFtb3VudAo+ID4gPiA+ID4g PiAlZC4lZFxuIiwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2lu dGVsX3BsYW5lKHBsYW5lKS0+aWQsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICBwbGFuZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCAmIDB4ZmZmZik7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICBtYXhfZG93bnNjYWxlID0gbWF4X2ZpeGVkMTYo cGxhbmVfZG93bnNjYWxlLAo+ID4gPiA+ID4gPiBtYXhfZG93bnNjYWxlKTsKPiA+ID4gPiA+ID4g KyAgICAgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgcGlw ZV9kb3duc2NhbGUgPSBpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNydGNfc3RhdGUpOwo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgIERSTV9ERUJVR19LTVMoIlBpcGUgJWQgZG93bnNj YWxlIGFtb3VudCAlZC4lZFxuIiwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgY3J0 Yy0+cGlwZSwgcGlwZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ID4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICBwaXBlX2Rvd25zY2FsZS52YWwgJiAweGZmZmYpOwo+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ICsgICAgIHBpcGVfZG93bnNjYWxlID0gbXVsX2ZpeGVkMTYocGlwZV9kb3duc2Nh bGUsCj4gPiA+ID4gPiA+IG1heF9kb3duc2NhbGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ ICsgICAgIC8qCj4gPiA+ID4gPiA+ICsgICAgICAqIENvbnZlcnQgcmVzdWx0IHRvIHBlcmNlbnRh Z2U6IGdldCB0aGUgYWN0dWFsIHJhdGlvCj4gPiA+ID4gPiA+IGluc3RlYWQKPiA+ID4gPiA+ID4g b2YgcmF0ZSwKPiA+ID4gPiA+ID4gKyAgICAgICogdGhlbiBtdWx0aXBseSBieSAxMDAgdG8gZ2V0 IHBlcmNlbnRhZ2UuCj4gPiA+ID4gPiA+ICsgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICBwaXBl X3JhdGlvID0gdTMyX3RvX2ZpeGVkMTYoMTAwICoKPiA+ID4gPiA+ID4gZGl2X3JvdW5kX3VwX3Uz Ml9maXhlZDE2KDEsCj4gPiA+ID4gPiA+IHBpcGVfZG93bnNjYWxlKSk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gKyAgICAgRFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwg Y3J0Yy0+cGlwZSwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICBwaXBlX3JhdGlvLnZh bCA+PiAxNiwgcGlwZV9yYXRpby52YWwgJgo+ID4gPiA+ID4gPiAweGZmZmYpOwo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsgICAgIHJldHVybiBwaXBlX3JhdGlvOwo+ID4gPiA+ID4gPiArfQo+ ID4gPiA+ID4KPiA+ID4gPiA+IFl1Y2suIEkganVzdCBraWxsZWQgdGhlc2UuCj4gPiA+ID4KPiA+ ID4gPiBJIHN0aWxsIG5lZWQgcGlwZV9yYXRpbyBmcm8gSUNMIGFzIHlvdSBrbm93LCB0aGlzIGlz IGRpY3RhdGVkIGJ5Cj4gPiA+ID4gQlNwZWMsCj4gPiA+ID4gbm90IGJ5IG1lLgo+ID4gPgo+ID4g PiBUaGF0IHBhcnQgb2YgdGhlIHNwZWMgaXMgcHJldHR5IGNyYXp5IElNTy4gSSB0aGluayB3ZSBz aG91bGQganVzdAo+ID4gPiBpZ25vcmUKPiA+ID4gaXQgZm9yIG5vdy4gQWxzbyBub3RoaW5nIGlu IHRoZXJlIHNheXMgd2UgbXVzdCB1c2UgYm90aCBzbGljZXMgZm9yIGEKPiA+ID4gc2luZ2xlIHBp cGUgc28gaWdub3JpbmcgZG9lc24ndCBldmVuIHZpb2xhdGUgdGhlIHNwZWMgaW4gYW55IHdheS4K PiA+Cj4gPiBTbyB5b3UgYXJlIGluc3RydWN0aW5nIG1lIG5vdyB0byBpZ25vcmUgQlNwZWMgYXMg IndlIGFyZSBzbWFydGVyIj8KPiA+IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBwcm9wZXJseSB0byBk byBpdCB0aGlzIHdheS4gTGV0cyBmaXJzdCBjaGFuZ2UgdGhlCj4gPiBCU3BlYywgaWYgd2UgZG9u J3QgbGlrZSBwaXBlIHJhdGlvIGhlcmUgYW5kIHRoZW4gZHJpdmVyLiBDdXJyZW50bHkgdGhpcwo+ ID4gaXMgd3JpdHRlbiB0aGF0IHdheSBhbmQgaWYgd2UgYXJlIGdvaW5nIHRvIGRvIGV2ZXJ5dGhp bmcgb3VyIG93biB3YXkKPiA+IGlnbm9yaW5nIHNwZWNzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGNo YW9zLgo+IAo+ID5MaWtlIEkgc2FpIHlvdSBkb24ndCBoYXZlIHRvIHZpb2xhdGUgdGhlIHNwZWMg YXQgYWxsLiBKdXN0IGRvbid0IHVzZQo+ID50d28gc2xpY2VzIGZvciB0aGUgc2FtZSBwaXBlIGFu ZCB5b3UgY2FuIGF2b2lkIHRoZSB3aG9sZSBzdHJhbmdlIHBpcGUKPiA+cmF0aW8gbGltaXRhdGlv bi4gV2Ugc2hvdWxkIGZpbGUgYSBic3BlYyBpc3N1ZSB0byBnZXQgdGhhdCBjbGFyaWZpZWQKPiA+ dGhvdWdoLgo+IAo+IFRoYXQgaXMgYWN0dWFsbHkgYSB2aW9sYXRpb24gb2YgQlNwZWMsIHdlIGFy ZSBub3QgdXNpbmcgdHdvIHNsaWNlcyBmb3Igc2FtZQo+IHBpcGUgd2hpbGUgd2UgY291bGQuIFdl IGhhZCBhbHJlYWR5IGVub3VnaCBvZiBidyBpc3N1ZXMsIHdoeSBzaG91bGQKPiB3ZSBtYWtlIG91 ciBsaWZlIGV2ZW4gaGFyZGVyPwoKVXNpbmcgbW9yZSBzbGljZXMgaXMsIGZvciB3aGF0ZXZlciBy ZWFzb24sIGhhcmRlciBmb3IgdGhlIGhhcmR3YXJlLgpZb3UncmUgbm90IGFsbG93ZWQgdG8gdXNl IHR3byBzbGljZXMgaWYgeW91IGRvIGFueSBzaWduaWZpY2FudApkb3duc2NhbGluZy4gV2hpY2gg aXMgYSBiaXQgc2FkL29kZCBiZWNhdXNlIGluY3JlYXNpbmcgZG93bnNjYWxpbmcKaW5jcmVhc2Vz IGJhbmR3aWR0aCB1dGlsaXphdGlvbiBidXQgYXQgdGhlIHNhbWUgdGltZSBhbHNvIHByZXZlbnRz CnVzIGZyb20gdXNpbmcgdHdvIHNsaWNlcy4KCkkgdGhpbmsgdGhlIG1haW4gYmVuZWZpdCB3ZSB3 b3VsZCBnZXQgZnJvbSB0d28gc2xpY2VzIGlzIGJldHRlcgpwb3dlciBzYXZpbmdzIGJlY2F1c2Ug d2UgbWF5IGJlIGFibGUgdG8gZW5hYmxlIG1vcmUgd2F0ZXJtYXJrCmxldmVscyBvbiBhY2NvdW50 IG9mIHRoZSBsYXJnZXIgZGRiLgoKVGhlcmUgaXMgbm90aGluZyBpbiB0aGUgc3BlYyB0aGF0IEkg Y2FuIHNlZSB0aGF0IHNheXMgd2UgKm11c3QqIHVzZQp0d28gc2xpY2VzICh1bmxlc3Mgd2UncmUg YWJvdXQgdG8gZXhjZWVkIHRoZSBDRENETEt4NjQgYmFuZHdpZHRoCmxpbWl0IEkgZ3Vlc3MpLiBB bmQgc2luY2Ugd2UgaGF2ZW4ndCBiZWVuIHVzaW5nIHR3byBzbGljZXMgc28gZmFyCml0IHNlZW1z IHNhZmVyIHRvIG5vdCBqdW1wIGluIHRoZSBkZWVwIGVuZCBhbmQgZW5hYmxlIHR3byBzbGljZXMK cGVyLXBpcGUgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBkbyB0aGUgb3RoZXIgdGhpbmdzLiBJZS4g dGhlcmUKc2hvdWxkIGJlIGEgc2VwYXJhdGUgcGF0Y2ggdG8gZW5hYmxlIHRoZSB0d28gc2xpY2Vz IHBlciBwaXBlIHVzYWdlLgoKPiAKPiA+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiA+ICsgKiBUYWJs ZSB0YWtlbiBmcm9tIEJzcGVjIDQ5MjU1Cj4gPiA+ID4gPiA+ICsgKiBQaXBlcyBkbyBoYXZlIHNv bWUgcHJlZmVycmVkIERCdWYgc2xpY2UgYWZmaW5pdHksCj4gPiA+ID4gPiA+ICsgKiBwbHVzIHRo ZXJlIGFyZSBzb21lIGhhcmRjb2RlZCByZXF1aXJlbWVudHMgb24gaG93Cj4gPiA+ID4gPiA+ICsg KiB0aG9zZSBzaG91bGQgYmUgZGlzdHJpYnV0ZWQgZm9yIG11bHRpcGlwZSBzY2VuYXJpb3MuCj4g PiA+ID4gPiA+ICsgKiBGb3IgbW9yZSBEQnVmIHNsaWNlcyBhbGdvcml0aG0gY2FuIGdldCBldmVu IG1vcmUgbWVzc3kKPiA+ID4gPiA+ID4gKyAqIGFuZCBsZXNzIHJlYWRhYmxlLCBzbyBkZWNpZGVk IHRvIHVzZSBhIHRhYmxlIGFsbW9zdAo+ID4gPiA+ID4gPiArICogYXMgaXMgZnJvbSBCU3BlYyBp dHNlbGYgLSB0aGF0IHdheSBpdCBpcyBhdCBsZWFzdCBlYXNpZXIKPiA+ID4gPiA+ID4gKyAqIHRv IGNvbXBhcmUsIGNoYW5nZSBhbmQgY2hlY2suCj4gPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ID4g K3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgdGdsX2FsbG93ZWRfZGJ1ZnNbXSA9IHsKPiA+ ID4gPiA+ID4gK3sgeyAwLCAwLCAwLCAwIH0sIDAgfSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0Ff REJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xf UElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4g PiArSUNMX1BJUEVfQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklUKSwKPiA+ ID4gPiA+ID4gK0lDTF9QSVBFX0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJ VCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1MyX0JJVCwgREJV Rl9TMV9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMoREJVRl9TMV9C SVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERC VUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BRF9EQlVGX1NM SUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQkRf REJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9Q SVBFX0NEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ ICtJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4g PiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElD RVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4g PiA+ID4gPiA+ICtJQ0xfUElQRV9BQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJf QklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9CQ0Rf REJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiA+ID4gPiBEQlVGX1My X0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklU LCBEQlVGX1MxX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQsCj4gPiA+ID4gPiA+IERCVUZf UzJfQklUKSwKPiA+ID4gPiA+ID4gK307Cj4gPiA+ID4gPgo+ID4gPiA+ID4gTXkgZXllcyEKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBJIGhhdmUgdG8gdGhpbmsgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVk dWNlIGFsbCB0aGF0IHRvIGEgaGFuZGZ1bAo+ID4gPiA+ID4gb2YgbGluZXMgb2YgY29kZS4KPiA+ ID4gPgo+ID4gPiA+IFllYWgsIHRoZW4gd2UgYXJlIGdvaW5nIHRvIGhhdmUgYSBodWdlIGZ1bmN0 aW9uIHdpdGggbG90cyBvZiB3ZWlyZAo+ID4gPiA+IGRlZmluaXRpb25zLCB1bmZvcnR1bmF0ZWx5 IEJTcGVjIHRhYmxlIGhhcyBxdWl0ZSBzdHJhbmdlIERCdWYKPiA+ID4gPiBhc3NpZ25tZW50cyBs aWtlCj4gPiA+ID4gK0lDTF9QSVBFX0FCX0RCVUZfU0xJQ0VTKERCVUZfUzJfQklULCBEQlVGX1Mx X0JJVCksCj4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVG X1MyX0JJVCksCj4gPiA+ID4KPiA+ID4gPiBpLmUgc2xpY2VzIGNhbiBnZXQgbWl4ZWQgaW4gYSBx dWl0ZSB2YXJpb3VzIHdheXMuIFRoZXJlIGlzIG5vCj4gPiA+ID4gcmF0aW9uYWwgcGF0dGVybiBp biB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRvCj4gPiA+ID4gb3B0 aW1pemUgaXQgc29tZSB3YXksIGFzIG9uZSBkYXkgaXQgbWlnaHQgY2hhbmdlIGFnYWluIGluIHNv bWUKPiA+ID4gPiB1bnByZWRpY3RhYmxlIHdheS4KPiA+ID4gPgo+ID4gPiA+IFdvdWxkIHlvdSBw cmVmZXIgdG8gaGF2ZSBpdCBsaWtlCj4gPiA+ID4KPiA+ID4gPiBpZiAocGlwZXMgYXJlIEEgYW5k IEIpCj4gPiA+ID4gICAgIHByb2dyYW0gUzIgdG8gQSBhbmQgUzEgdG8gQgo+ID4gPiA+IGlmIChw aXBlcyBhcmUgQSBhbmQgQykKPiA+ID4gPiAgICAgcHJvZ3JhbSBTMSB0byBBIGFuZCBTMiB0byBD Cj4gPiA+ID4gLi4uCj4gPiA+ID4KPiA+ID4gPiBJIHdvdWxkIHByZWZlciBhdCBsZWFzdCB0byBz ZWUgaXQgaW4gYSBjb21wYXJhYmxlIHdheSB3aXRoIHRoZQo+ID4gPiA+IHRhYmxlIHdlIGhhdmUg aW4gQlNwZWMsIHJhdGhlciB0aGFuIGhhdmluZyBsb3RzIG9mIHdlaXJkIGxvb2tpbmcKPiA+ID4g PiBpZi1lbHNlIHN0YXRlbWVudHMsIEdFTiBjaGVja3MgYW5kIHNvIG9uLgo+ID4gPiA+Cj4gPiA+ ID4gSSBrbmV3IHRoaXMgdGFibGUgd2FzIG5vdCBnb2luZyB0byBsb29rIGxpa2UgaXQgaXMgZG9u ZSB0eXBpY2FsbHkKPiA+ID4gPiBoZXJlIC0gYnV0IHJlYWxseSBteSBvcGluaW9uIHRoYXQgaXQg aXMgd2F5IGJldHRlciB0aGFuIGhhcmRjb2RpbmcKPiA+ID4gPiBpdCBpbnRvIHNvbWUgd2VpcmQg YWxnb3JpdGhtLCB3aGljaCB3b3VsZCBiZSBoYXJkIHRvIGNvbXBhcmUgdG8KPiA+ID4gPiBpbml0 aWFsIHRhYmxlLCB3aGljaCBpcyBhbHJlYWR5IHN0cmFuZ2UgZW5vdWdoLgo+ID4gPiA+Cj4gPiA+ ID4gSWYgeW91IGRvbid0IGxpa2UgaXQgLSBjb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gd2h5IHRo aXMgaXMgZXhhY3RseQo+ID4gPiA+IHdvcnNlIHRoYW4gaGF2aW5nIGxvbmcgZnVuY3Rpb25zIHdp dGggaGFyZGNvZGVkIGNoZWNrcz8KPiA+ID4KPiA+ID4gSSB0aGluayB3ZSBzaG91bGQgYmUgYWJs ZSB0byBlbmNvZGUgdGhpcyBzaW1wbHkgdXNpbmcgdGhlCj4gPiA+ICJQaXBlIGFuZCBEQlVGIG9y ZGVyaW5nIiBzdHVmZiBmcm9tIHRoZSBzcGVjLiBJZS4ganVzdCBzcGVjaWZ5IHdoYXQKPiA+ID4g aXMgdGhlIGRpc3RhbmNlIG9mIGVhY2ggcGlwZSBmcm9tIGVhY2ggZGJ1ZiBzbGljZS4gVGhlbiBh bGwgd2UgaGF2ZQo+ID4gPiB0byBkbyBpcyBtaW5pbWl6ZSB0aGUgdG90YWwgZGlzdGFuY2UuIFRo ZSBmb2xsb3dpbmcgdGFibGVzIEkgdGhpbmsKPiA+ID4gc2hvdWxkIGVuY29kZSB0aGF0IHJlYXNv bmFibHkgY29uY2lzZWx5Ogo+ID4gPgo+ID4gPiAvKiBwaXBlQSAtIERCVUZfUzEgLSBwaXBlQiAt IHBpcGVDIC0gREJVRl9TMiAqLwo+ID4gPiBzdGF0aWMgY29uc3QgdTggaWNsX2RidWZfZGlzdGFu Y2VbXVtdIHsKPiA+ID4gICAgIFtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0g PSA0LCB9LAo+ID4gPiAgICAgW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVGX1MyXSA9 IDIsIH0sCj4gPiA+ICAgICBbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0g MSwgfSwKPiA+ID4gfTsKPiA+ID4KPiA+ID4gLyogcGlwZUQgLSBEQlVGX1MyIC0gcGlwZUMgLSBw aXBlQSAtIERCVUZfUzEgLSBwaXBlQiAqLwo+ID4gPiBzdGF0aWMgY29uc3QgdTggdGdsX2RidWZf ZGlzdGFuY2VbXVtdIHsKPiA+ID4gICAgIFtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJV Rl9TMl0gPSAyLCB9LAo+ID4gPiAgICAgW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVG X1MyXSA9IDQsIH0sCj4gPiA+ICAgICBbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZf UzJdID0gMSwgfSwKPiA+ID4gICAgIFtQSVBFX0RdID0geyBbREJVRl9TMV0gPSA0LCBbREJVRl9T Ml0gPSAxLCB9LAo+ID4gPiB9Owo+ID4KPiA+IEkgdGhpbmsgeW91IGFyZSBtaXNzaW5nIG15IHBv aW50LiBJIHdpbGwgZXhwbGFpbiB3aHkuCj4gPiBNeSBpbml0aWFsIGlkZWEgd2FzIHNpbWlsYXIs IHVzZSBzb21lIGtpbmQgb2YgZGlzdGFuY2UKPiA+IG1ldHJpY3MgYW5kIGVuY29kZSBldmVyeXRo aW5nIGluIGEgc21hcnQgd2F5Lgo+ID4gQ3VycmVudCBCU3BlYyB0YWJsZSBoYXMgc29tZXRpbWVz IHNsaWNlcyBzd2FwcGVkIGZvciBubyByZWFzb24uCj4gPgo+ID4gVGhlcmUgYXJlIHNlZW0gdG8g YmUgc29tZSBoYXJkd2FyZSBjb25zdHJhaW50cyB3ZSBhcmUgbm90IGF3YXJlCj4gPiBvZi4gRm9y IGV4YW1wbGUgZm9yIFRHTCBwaXBlcyBBLEIgZ2V0IFMyIGFuZCBTMSBzbGljZXMsCj4gCj4gPkEv UzEgKyBCL1MyID0gMSArIDQgPSA1Cj4gPkEvUzIgKyBCL1MxID0gMiArIDEgPSAzCj4gCj4gPiBi dXQgcGlwZXMgQSBDIGdldCBTMSBhbmQgUzIuCj4gCj4gPkEvUzEgKyBDL1MyID0gMSArIDEgPSAy Cj4gPkEvUzIgKyBDL1MxID0gMiArIDIgPSA0Cj4gCj4gPlNvIGl0J3MgZXhhY3RseSBhcyBteSBk aXN0YW5jZSB0YWJsZSBzYXlzIGl0IHNob3VsZCBiZS4KPiAKPiA+Cj4gPiBpZiB5b3UgZW5jb2Rl IGFsbCB0aGlzIGludG8gc29tZSBraW5kIG9mIGRpc3RhbmNlIGFsZ29yaXRobSwKPiA+IHRob3Nl IGRpZmZlcmVuY2VzIHdvdWxkIGJlIGVub3VybW91c2x5IGRpZmZpY3VsdCB0byBzcG90IGFuZAo+ ID4gY29tcGFyZSB3aXRoIGFjdHVhbCB0YWJsZS4gVGhhdCBpcyB3aHkgSSBkZWNpZGVkIHRvIGRv IGl0IHRoYXQKPiA+IHdheS4KPiA+Cj4gPiBNb3N0IGxpa2VseSB5ZXMgeW91IGNhbiBzb2x2ZSBp dCBieSB1c2luZyB0aGlzIG1ldHJpY3MsCj4gPiBidXQgd2lsbCBpdCByZWFsbHkgYmUgdGhlbiBt b3JlIHJlYWRhYmxlIGFuZCBjb21wYXJhYmxlCj4gPiB3aXRoIHJlZmVyZW5jZSB0YWJsZT8KPiA+ IFdoYXQgaWYgc29tZSBjb250cmFpbnRzIHdpbGwgYmUgYWRkZWQgYWdhaW4sIGxpa2UgcGlwZSBy YXRpbz8KPiA+Cj4gPiA+Cj4gPiA+IC8qCj4gPiA+ICAqIHBpcGVBIC0gREJVRl9TMCAtIERCVUZf UzEgLSBwaXBlQgo+ID4gPiAgKiBwaXBlQyAtIERCVUZfUzIgLSBEQlVGX1MzIC0gcGlwZUQKPiA+ ID4gICovCj4gPiA+IHN0YXRpYyBjb25zdCB1OCBmdXR1cmVfZGJ1Zl9kaXN0YW5jZVtdW10gewo+ ID4gPiAgICAgW1BJUEVfQV0gPSB7IFtEQlVGX1MwXSA9IDEsIFtEQlVGX1MxXSA9IDMsIH0sCj4g PiA+ICAgICBbUElQRV9CXSA9IHsgW0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwgfSwKPiA+ ID4gICAgIFtQSVBFX0NdID0geyBbREJVRl9TMl0gPSAxLCBbREJVRl9TM10gPSAzLCB9LAo+ID4g PiAgICAgW1BJUEVfRF0gPSB7IFtEQlVGX1MyXSA9IDMsIFtEQlVGX1MzXSA9IDEsIH0sCj4gPiA+ IH07Cj4gPiA+Cj4gPiA+IEkgc3VwcG9zZSB3ZSBjb3VsZCBtYWtlIHRoYXQgZXZlbiBtb3JlIG1p bmltYWwgYnkganVzdAo+ID4gPiBkaXJlY3RseSBzdGlja2luZyB0aGF0ICJQaXBlIGFuZCBEQlVG IG9yZGVyaW5nIiBsYW5ndWFnZQo+ID4gPiBpbnRvIGEgc2luZ2xlIGFycmF5IGJ1dCBhbmQgdGhl biBjYWxjdWxhdGUgZWFjaCBkaXN0YW5jZQo+ID4gPiBmcm9tIGl0LCBidXQgdGhhdCBpcyBwZXJo YXBzIG1vcmUgd29yaywgYW5kIHdlJ2QgbmVlZAo+ID4gPiBzb21lIGtpbmQgb2YgZW51bSBqdXN0 IGZvciB0aGF0IHNvIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZQo+ID4gPiBuYW1lc3BhY2UgZm9yIHRo ZSBwaXBlcyBhbmQgZGJ1ZiBzbGljZXMuIFNvIGkgaGF2ZSBhCj4gPiA+IGZlZWxpbmcgaGF2aW5n IHRob3NlIGRpc3RhbmNlcyBwcmUtY29tcHV0ZWQgaW4gYSB0YWJsZQo+ID4gPiBsaWtlIHRoZXQg aXMgbWF5YmUgYSBiZXR0ZXIgd2F5IHRvIGdvLgo+ID4KPiA+IEdvb2QgbHVjayB0aGVuIHNwb3Rp bmcgZGlmZmVyZW5jZXMgd2l0aCB0aGUgQlNwZWMgdGFibGUgb25jZSBpdAo+ID4gZ2V0cyBjaGFu Z2VkLgo+IAo+ID5XZWxsLCBJJ2QgcmF0aGVyIGRvIHRoYXQgdGhhbiBkZWNvZGUgdGhyb3VnaCBs YXllcnMgb2YgY3BwIG1hY3Jvcy4KPiA+QWxzbyBhdG0gdGhlIHRhYmxlIGhhcyBubyBleHRyYSBy ZXN0cmljdGlvbnMgc28gaXQncyBjbGVhcmx5IHRoZXJlCj4gPmp1c3QgYmVjYXVzZSBzb21lb25l IHRob3VnaHQgdGhleSdkIHdyaXRlIG91dCB0aGUgcmVzdWx0cyBvZiB0aGUKPiA+ZGlzdGFuY2Ug Y2FsY3VsYXRpb25zLiBJbiBnZW5lcmFsIGJzcGVjIHN0eWxlIGlzIHNvbWV3aGF0IGFubm95aW5n Cj4gPndoZXJlIHRoZXkgdHJ5IHRvIHdyaXRlIG91dCB0aGluZ3MgaW4gdGhlIGxvd2VzdCBsZXZl bCBvZiBhYnNyYWN0aW9uCj4gPnBvc3NpYmxlICh0aGV5IGFyZSBoYXJkd2FyZSBwZW9wbGUgYWZ0 ZXIgYWxsKS4gSSdkIG11Y2ggcHJlZmVyIGEKPiA+aGlnaGVyIGxldmVsIGRlc2NyaXB0aW9uIG9m IHRoZSBpc3N1ZS4KPiAKPiBJIHdvdWxkIHByZWZlciB0byBzZWUgaW1tZWRpYXRlbHkgd2hhdCBp cyBkaWZmZXJlbnQgYXMgdGhpcyB0YWJsZQo+IG1ha2VzIGl0IHBvc3NpYmxlIHJpZ2h0IGF3YXkK PiBBbHNvIHRvIG1lIHRoaXMgdGFibGUgc2ltcGx5IGludHVpdGl2ZWx5IG1vcmUgdW5kZXJzdGFu ZGFibGUuCj4gCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHRnbF9h bGxvd2VkX2RidWZzW10gPSB7Cj4gPiA+ID4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4g PiA+ID4gPiA+ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9C SVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERC VUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9C SVQgfCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9EX0RCVUZfU0xJQ0VTKERC VUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJfREJVRl9T TElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0FD X0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xf UElQRV9CQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4g PiArSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ ID4gPiA+ID4gK0lDTF9QSVBFX0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9DRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJV Rl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJEX0RCVUZfU0xJQ0VTKERCVUZfUzFf QklULCBEQlVGX1MxX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiAr SUNMX1BJUEVfQUJDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MxX0JJVCwKPiA+ID4g PiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUNEX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4g PiA+ID4gPiArSUNMX1BJUEVfQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJDRF9E QlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMV9CSVQsCj4gPiA+ID4gPiA+IERCVUZfUzJf QklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICt9Owo+IAo+IFdlIGhh dmUgc2ltaWxhciBDRENMSyB0YWJsZSBpbiBpbnRlbF9jZGNsaywgd2hpbGUgeW91IGNvdWxkIAo+ IGFsc28gYXJndWUgdGhhdCB3ZSBtaWdodCBoYWQgY29tZSB1cCB3aXRoIHNvbWUgZm9ybXVsYS4K ClRoZSBjZGNsayB0YWJsZSBoYXMgb25lIHJlZHVuZGFuY3kgdGhhdCBJJ20gbm90IDEwMCUgZmFu IG9mOgppdCBzcGVjaWZpZXMgYm90aCB0aGUgY2RjbGsgZnJlcXVlbmN5IGFuZCB0aGUgY2QyeCBk aXZpZGVyLgpXZSBjb3VsZCBtYWtlIGRvIHdpdGgganVzdCBlaXRoZXIgb25lIGFuZCBjYWxjdWxh dGUgdGhlIG90aGVyCm9uZS4KCk9uIHRoZSBmbGlwIHNpZGUgdGhhdCByZWR1bmRhbmN5IHdvdWxk IGFsbG93IHVzIHRvIGNyb3NzIGNoZWNrCnRoYXQgdGhlIHZhbHVlcyBwcm9kdWNlIHRoZSBleHBl Y3RlZCByZXN1bHRzLiBJIGFjdHVhbGx5IGhhdmUKYSBwYXRjaCBmb3IgdGhhdCBidXJpZWQgaW4g c29tZSBicmFuY2guCgpBcGFydCBmcm9tIHRoYXQgSSBkb24ndCBzZWUgd2hhdCB0aGUgY2RjbGsg dGFibGUgaGFzIHRvIGRvCndpdGggdGhpcyBzdHVmZi4gV2UgY2FuJ3QgZGVyaXZlIHRoYXQgY2Rj bGsgdGFibGUgZnJvbSBhbnl0aGluZwptdWNoIHNpbXBsZXIuCgpBbnl3YXlzLCBteSBwcmVmZXJy ZWQgYXBwcm9hY2ggdG8gdGhpcyBzb3J0IG9mIHN0dWZmIGlzIHRvCm1ha2UgdGhlIGNvbXB1dGVy IGRvIHRoZSBjYWxjdWxhdGlvbnMuIFRoYXQncyB3aGF0IGl0J3MgZ29vZAphdC4gSHVtYW5zLCBu b3Qgc28gZ3JlYXQgYXQgY29tcHV0YXRpb25zLCBvciBldmVuIGNvcHkgcGFzdGluZy4KVGhvdWdo IGFzIHdpdGggdGhlIGNkY2xrIHRhYmxlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBtYWtlCmh1bWFu cyBkbyB0aGUgY2FsY3VsYXRpb25zL2NvcHkgcGFzdGUgYW5kIHRoZW4gaGF2ZSB0aGUKY29tcHV0 ZXIgZG91YmxlIGNoZWNrIGl0IGFsbCBtYWtlcyBzZW5zZS4KCi0tIApWaWxsZSBTeXJqw6Rsw6QK SW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34294C432C0 for ; Wed, 20 Nov 2019 19:18:43 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0301520855 for ; Wed, 20 Nov 2019 19:18:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0301520855 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 946386E9EF; Wed, 20 Nov 2019 19:18:42 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 338A56E9EF for ; Wed, 20 Nov 2019 19:18:41 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 11:18:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,223,1571727600"; d="scan'208";a="237860205" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by fmsmga002.fm.intel.com with SMTP; 20 Nov 2019 11:18:37 -0800 Received: by stinkbox (sSMTP sendmail emulation); Wed, 20 Nov 2019 21:18:37 +0200 Date: Wed, 20 Nov 2019 21:18:37 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: "Lisovskiy, Stanislav" Message-ID: <20191120191837.GJ1208@intel.com> References: <20191114122449.26409-1-stanislav.lisovskiy@intel.com> <20191115201944.GO1208@intel.com> <20191118152712.GS1208@intel.com> <4f13f1993b67930ac88f6fd8adcf47f197a02799.camel@intel.com> <20191118181806.GX1208@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Subject: Re: [Intel-gfx] [PATCH v7] drm/i915: Enable second dbuf slice for ICL and TGL X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "intel-gfx@lists.freedesktop.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191120191837.DcsQjxa1PVQAVMFnXkYbpBT-_GxXohm6Zx2TekUSVqc@z> T24gTW9uLCBOb3YgMTgsIDIwMTkgYXQgMDg6MjU6NDhQTSArMDAwMCwgTGlzb3Zza2l5LCBTdGFu aXNsYXYgd3JvdGU6Cj4gSGksCj4gCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0gICAgIC8qIElm IDJuZCBEQnVmIHNsaWNlIGlzIG5vIG1vcmUgcmVxdWlyZWQgZGlzYWJsZSBpdCAqLwo+ID4gPiA+ ID4gPiAtICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiByZXF1aXJlZF9zbGlj ZXMgPAo+ID4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ID4gPiA+ID4gLSAgICAgICAg ICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRldl9wcml2LAo+ID4gPiA+ID4gPiByZXF1aXJl ZF9zbGljZXMpOwo+ID4gPiA+ID4gPiArICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgKiBJZiBz b21lIG90aGVyIERCdWYgc2xpY2UgaXMgbm90IG5lZWRlZCwgZGlzYWJsZSBpdAo+ID4gPiA+ID4g PiBoZXJlLAo+ID4gPiA+ID4gPiArICAgICAgKiBhcyBoZXJlIHdlIG9ubHkgcmVtb3ZlIHNsaWNl cywgd2hpY2ggYXJlIG5vdCBuZWVkZWQKPiA+ID4gPiA+ID4gYW55bW9yZS4KPiA+ID4gPiA+ID4g KyAgICAgICovCj4gPiA+ID4gPiA+ICsgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx ICYmIHJlcXVpcmVkX3NsaWNlcyAhPQo+ID4gPiA+ID4gPiBod19lbmFibGVkX3NsaWNlcykKPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRldl9wcml2LAo+ ID4gPiA+ID4gPiBzbGljZXNfaW50ZXJzZWN0aW9uKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGlz IGlzIHN0aWxsIGEgdG90YWxseSB3cm9uZyBwbGFjZSBmb3IgdGhpcy4gV2UgbmVlZCB0byBiZSBz dXJlCj4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+IHBsYW5lcyBoYXZlIHN3aXRjaGVkIG92ZXIgdG8g dGhlIG5ldyBkZGIgbGF5b3V0IGJlZm9yZSB3ZSBwb3dlcgo+ID4gPiA+ID4gb2ZmCj4gPiA+ID4g PiBhbnl0aGluZy4KPiA+ID4gPgo+ID4gPiA+IEkgaGF2ZSBqdXN0IG1vZGlmaWVkIGFscmVhZHkg ZXhpc3RpbmcgbGluZSBoZXJlLCBub3QgYWRkZWQgYnkgbWUuCj4gPiA+ID4gVGhlIHBvaW50IG9m IHRoaXMgcGF0Y2ggaXMgc3RhcnRpbmcgdG8gdXNlIHNlY29uZCBEQnVmIHNsaWNlIGJ1dAo+ID4g PiA+IG5vdCBmaXhpbmcgYWxsIGtpbmRzIG9mIGlzc3VlcyByZWxhdGVkIHRvIERCdWYgY29kZSBh dCB0aGUgc2FtZQo+ID4gPiA+IHRpbWUuCj4gPiA+Cj4gPiA+IFlvdSdyZSByZS1lbmFibGluZyBj b2RlIEkgZGlzYWJsZWQgb24gcHVycG9zZS4gSXQgaGFzIHRvIGJlIGZpeGVkCj4gPiA+IHByb3Bl cmx5IG9yIG5vdCB0b3VjaGVkIGF0IGFsbC4gSW4gaGluZHNpZ2h0IEkgc2hvdWxkIGhhdmUgcHJv YmFibHkKPiA+ID4ganVzdCByaXBwZWQgaXQgYWxsIG91dCB0byBub3QgZ2l2ZSBwZW9wbGUgYmFk IGlkZWFzLgo+ID4KPiA+IC0gICAgIC8qIElmIDJuZCBEQnVmIHNsaWNlIGlzIG5vIG1vcmUgcmVx dWlyZWQgZGlzYWJsZSBpdCAqLwo+ID4gPiA+ID4gPiAtICAgICBpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMSAmJiByZXF1aXJlZF9zbGljZXMgPAo+ID4gPiA+ID4gPiBod19lbmFibGVkX3Ns aWNlcykKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICBpY2xfZGJ1Zl9zbGljZXNfdXBkYXRlKGRl dl9wcml2LAo+ID4gPiA+ID4gPiByZXF1aXJlZF9zbGljZXMpOwo+ID4KPiA+IEknbSBub3QgcmVl bmFibGluZyBpdCAtIHRoaXMgaXMgY29kZSBpcyBvdXQgdGhlcmUgcmlnaHQgbm93Lgo+IAo+ID4g SXQncyBfZGVhZF8gY29kZSwgYW5kIGl0J3MgbGlrZSB0aGF0IG9uIHB1cnBvc2UuIFlvdSdyZSBu b3cgYXR0ZW1wdGluZwo+ID4gdG8gcmUtZW5hYmxlIGl0IHdpdGhvdXQgZml4aW5nIHRoZSB1bmRl cmx5aW5nIGlzc3Vlcy4KPiAKPiBTb3VuZHMgbGlrZSBzb21lIHNhY3JlZCB0aGluZy4gRGVhZCBj b2RlIHdoaWNoIGlzIG5vdCBjb21tZW50ZWQsIG5laXRoZXIKPiByZW1vdmVkLCBidXQgd2hpY2gg eW91IGNhbid0IHRvdWNoLiAgCgpZb3UgY2FuIHRvdWNoIGl0IGJ5IGVpdGhlciByZW1vdmluZyBp dCBvciBmaXhpbmcgaXQuIEFueXRoaW5nIGVsc2UKaXMgYSBiaXQgcG9pbnRsZXNzLgoKPiAKPiA+ IFRoaXMgaXMgYWxsIGFnYWluIGFib3V0IGNoYW5naW5nIGFsbCBraW5kcyBvZiBzdHVmZiBhdCB0 aGUgc2FtZSB0aW1lLgo+ID4KPiA+IFdoeSB3ZSBjYW4ndCBqdXN0IGRvIHRoaW5ncyBzdGVwIGJ5 IHN0ZXA/IFlvdSBoYXZlIGEgcG9pbnQgdGhhdAo+ID4gdGhpcyBpcyB3cm9uZyBwbGFjZSBvaywg YnV0IGFzIHdlIHNlZSBjdXJyZW50IGNvZGUgY2F1c2VzIG5vCj4gPiByZWdyZXNzaW9ucy4gSnVz dCB0ZWxsIG1lIHlvdXIgaWRlYSB3aGVyZSB0byBwdXQgaXQgYW5kIEkgd2lsbAo+ID4gZG8gdGhh dCwgaWYgeW91IGRvbid0IGhhdmUgaXQgeWV0IC0gbGV0IGl0IHN0YXkgdGhlcmUsIGlmIENJIHNo b3dzCj4gPiBubyByZWdyZXNzaW9ucyBjdXJyZW50bHkuCj4gCj4gPlRoZSBzYW1lIGdsb2JhbCBz dGF0ZSB0cmlja3MgYXBwbHkgaGVyZSBhcyB3aXRoIHRoZSBjZGNsay9zYWd2IHN0dWZmLgo+ID4x LiBlbmFibGUgbmV3IHJlc291cmNlcy9idW1wIHVwIGNsb2Nrcwo+ID4yLiByZWNvbmZpZ3VyZSBw bGFuZXMvZXRjLgo+ID4zLiB3YWl0IGZvciB2YmxhbmtzCj4gPjQuIGRpc2FibGUgdW51c2VkIHJl c291cmNlcy9kcm9wIHRoZSBjbG9ja3MKPiAKPiBJdCBpcyBkaWZmZXJlbnQgd2l0aCBTQUdWLCB0 aGVyZSB3ZSByZXN0cmljdCB3aGF0cyBuZWVkZWQgZmlyc3QgYW5kIHJlbGF4Cj4gc29tZSBsaW1p dGF0aW9ucyBhZnRlcndhcmRzLgoKSXQncyBhIGdsb2JhbCByZXNvdXJjZSBzaGFyZWQgYnkgdGhl IHBpcGVzLiBIZW5jZSBpdCdzIHF1aXRlIHNpbWlsYXIKdG8gU0FHViBhbmQgY2RjbGsuCgo+IFNv IGFsbCB0aGlzIHdhcyBzaW1wbHkgYWJvdXQgdGhhdCBJIHNob3VsZCBwdXQgdGhpcyBmdW5jdGlv biBjYWxsIGludG8KPiBza2xfY29tbWl0X21vZGVzZXRfZGlzYWJsZXM/IAoKSXQgc2hvdWxkIGJl IGluIGludGVsX2F0b21pY19jb21taXRfdGFpbCgpIG1vc3QgbGlrZWx5LCBqdXN0IGxpa2UgY2Rj bGsuCgpJIGNvb2tlZCB1cCBhIHNtYWxsIHRlc3QgdGhhdCBJIGJlbGlldmUgc2hvdWxkIGVuZCB1 cCBwaW5nLXBvbmdpbmcKYmV0d2VlbiBvbmUgYW5kIHR3byBzbGljZXMgb24gaWNsLCBhbmQgc28g c2hvdWxkIGVuZCB1cCBleHBsb2RpbmcKd2hlbiB0aGUgc2Vjb25kIHNsaWNlIGdldHMgc2h1dCBk b3duIHByZW1hdHVyZWx5OgpnaXQ6Ly9naXRodWIuY29tL3ZzeXJqYWxhL2ludGVsLWdwdS10b29s cy5naXQgZGJ1Zl9zbGljZV90ZXN0Cgo+IEkgY291bGQganVzdCBoYXZlIHNhaWQgaXQgc3RyYWln aHQgYXdheSB0byBtZSwgd2l0aG91dCBtZW50aW9uZWQgImRlYWQiIGNvZGUKPiBhbmQgb3RoZXIg c3R1ZmYuLgoKSSBkb24ndCByZWFkIG1pbmRzIGVpdGhlci4KCj4gCj4gPiA+ID4gPiA+ICsgICAg IHJldHVybiBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3VwcG9ydGVkX3NsaWNlczsKPiA+ID4gPiA+ ID4gK30KPiA+ID4gPiA+Cj4gPiA+ID4gPiBLaW5kYSBwb2ludGxlc3MgZnVuY3Rpb24gbm93LiAn c3VwcG9ydGVkX3NsaWNlcycgaXMgbm90IGEgdmVyeQo+ID4gPiA+ID4gZ29vZAo+ID4gPiA+ID4g bmFtZS4gU2hvdWxkIGJlICdudW1fZGJ1Zl9zbGljZXMnIG9yIHNvbWV0aGluZyBhbG9uZyB0aG9z ZSBsaW5lcy4KPiA+ID4gPgo+ID4gPiA+IFN1cHBvcnRlZCBzbGljZXMgcmVhbGx5IG1lYW5zIGhv dyBtdWNoIHNsaWNlcyB3ZSBzdXBwb3J0IGluCj4gPiA+ID4gaGFyZHdhcmUuCj4gPiA+ID4gbnVt X2RidWZfc2xpY2VzIHdpbGwgbm90IHJlZmxlY3QgdGhhdCwgaXQgd2lsbCBiZSBtb3JlIGFtYmln aW91cy4KPiA+ID4gPiBJIGRvbid0IGxpa2UgdGhpcyBuYW1lLgo+ID4gPgo+ID4gPiBzdXBwb3J0 ZWRfc2xpY2VzIGRvZXNuJ3QgZXZlbiBzYXkgImRidWYiIGFueXdoZXJlLiBTbyBpdCdzIGV2ZW4g bW9yZQo+ID4gPiBhbWJpZ3VvdXMuIEFsc28gd2UgYWxyZWFkeSBoYXZlIG51bV9waXBlcywgbnVt X3Nwcml0ZXMsIGV0Yy4KPiA+Cj4gIC4uYW5kIGluIGN1cnJlbnQgY29kZSB3ZSBoYXZlLi4uICJl bmFibGVkX3NsaWNlcyIsIG5vPyBPdWNoISA6KSBJUyB0aGlzCj4gIHJlYWxseSB0aGF0IGltcG9y dGFudCBhbmQgd29ydGggYXJndWluZyBhdCB0aGUgdmVyeSBsYXN0IG1vbWVudD8KPiAgd2hldGhl ciBudW1iZXIgb2YKPiAgc3VwcG9ydGVkX3NsaWNlc19pbl9oYXJkd2FyZSwgc2hvdWxkIGJlIG5h bWVkICJzdXBwb3J0ZWQgc2xpY2VzIiBvcgo+ICAibnVtX2RidWZfc2xpY2VzIj8gSWYgeWVzLCBs ZXRzIGdvIG9uLCBtaXNzIHNvbWUgdGFyZ2V0cyBhbmQgY29udGludWUKPiAgZGlzY3Vzc2luZyB0 aGlzICJzb29vbyBpbXBvcnRhbnQiIHRoaW5nLgo+IAo+ICBTb21lIG9uZSBtaWdodCBjb21lIHVw IHRoYXQgaXQgaXMgY2FsbGVkICJudW1fc2xpY2VzIiBvcgo+ICAiZGJ1Zl9udW1fc2xpY2VzIi4g U2VyaW91c2x5LCBtYXkgYmUgInN1cHBvcnRlZF9udW1fZGJ1Zl9zbGljZXMiIHRvCj4gIGtlZXAg ZXZlcnlvbmVzIGJsb2F0ZWQgZWdvcyBoYXBweT8/CgpTaW5jZSB3ZSBoYXZlIGRkYl9zaXplIGlu IGRldmljZSBpbmZvIGFscmVhZHkgaXQgc2hvdWxkIGJlIG5leHQgdG8gdGhhdAphY3R1YWxseS4g QW5kIHdlIHNob3VsZCBwcm9iYWJseSB1bmlmeSB0aGUgdGVybWlub2xvZ3kgYSBiaXQgc28gd2Ug ZG9uJ3QKbWl4IGRidWYgYW5kIGRkYiBpbiB0aGUgc2FtZSBzZW50ZW5jZS4KCj4gCj4gPiA+ID4g PiA+ICBzdGF0aWMgdm9pZCBpY2xfZGJ1Zl9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiAtICAgICBJOTE1X1dSSVRFKERC VUZfQ1RMX1MxLCBJOTE1X1JFQUQoREJVRl9DVExfUzEpIHwKPiA+ID4gPiA+ID4gREJVRl9QT1dF Ul9SRVFVRVNUKTsKPiA+ID4gPiA+ID4gLSAgICAgSTkxNV9XUklURShEQlVGX0NUTF9TMiwgSTkx NV9SRUFEKERCVUZfQ1RMX1MyKSB8Cj4gPiA+ID4gPiA+IERCVUZfUE9XRVJfUkVRVUVTVCk7Cj4g PiA+ID4gPiA+IC0gICAgIFBPU1RJTkdfUkVBRChEQlVGX0NUTF9TMik7Cj4gPiA+ID4gPiA+IC0K PiA+ID4gPiA+ID4gLSAgICAgdWRlbGF5KDEwKTsKPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiAt ICAgICBpZiAoIShJOTE1X1JFQUQoREJVRl9DVExfUzEpICYgREJVRl9QT1dFUl9TVEFURSkgfHwK PiA+ID4gPiA+ID4gLSAgICAgICAgICEoSTkxNV9SRUFEKERCVUZfQ1RMX1MyKSAmIERCVUZfUE9X RVJfU1RBVEUpKQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgIERSTV9FUlJPUigiREJ1ZiBwb3dl ciBlbmFibGUgdGltZW91dFxuIik7Cj4gPiA+ID4gPiA+IC0gICAgIGVsc2UKPiA+ID4gPiA+ID4g LSAgICAgICAgICAgICAvKgo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIEZJWE1FOiBmb3Ig bm93IHByZXRlbmQgdGhhdCB3ZSBvbmx5IGhhdmUgMQo+ID4gPiA+ID4gPiBzbGljZSwKPiA+ID4g PiA+ID4gc2VlCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICogaW50ZWxfZW5hYmxlZF9kYnVm X3NsaWNlc19udW0oKS4KPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKi8KPiA+ID4gPiA+ID4g LSAgICAgICAgICAgICBkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5lbmFibGVkX3NsaWNlcyA9IDE7 Cj4gPiA+ID4gPiA+ICsgICAgIC8qCj4gPiA+ID4gPiA+ICsgICAgICAqIEp1c3QgcG93ZXIgdXAg MSBzbGljZSwgd2Ugd2lsbAo+ID4gPiA+ID4gPiArICAgICAgKiBmaWd1cmUgb3V0IGxhdGVyIHdo aWNoIHNsaWNlcyB3ZSBoYXZlIGFuZCB3aGF0IHdlCj4gPiA+ID4gPiA+IG5lZWQuCj4gPiA+ID4g PiA+ICsgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICBkZXZfcHJpdi0+d20uc2tsX2h3LmRkYi5l bmFibGVkX3NsaWNlcyA9IERCVUZfUzFfQklUOwo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoYXQgc3R1 ZmYgcmVhbGx5IHNob3VsZG4ndCBiZSBtb2RpZmllZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb25zLgo+ ID4gPiA+ID4gVGhlIGludGlhbCB2YWx1ZSBzaG91bGQgY29tZSBmcm9tIHJlYWRvdXQsIGFuZCBh ZnRlciB0aGF0IGl0Cj4gPiA+ID4gPiBzaG91bGQKPiA+ID4gPiA+IGJlIGFkanVzdGVkIGFzIHBh cnQgb2YgdGhlIG92ZXJhbGwgYXRvbWljIHN0YXRlLgo+ID4gPiA+Cj4gPiA+ID4gV2VsbCwgYXMg eW91IGNhbiBzZWUgY3VycmVudGx5IHRoaXMgaXMgZXZlbiB3b3JzZSAtIGhhcyBzb21lIHdlaXJk Cj4gPiA+ID4gaGFyZGNvZGVkIHN0dWZmIGFuZCBpcyBtb2RpZmllZCBsaWtlIHRoYXQuIEFsc28g aWYgd2UgYXJlIGVuYWJsaW5nCj4gPiA+ID4gdGhlCj4gPiA+ID4gZGJ1ZiBzbGljZXMsIHNob3Vs ZG4ndCB3ZSByZWFsbHkgZGV0ZXJtaW5lIHdoYXQgdmFsdWUgc2hvdWxkIGJlCj4gPiA+ID4gdGhl cmU/Cj4gPiA+ID4KPiA+ID4gPiBBbHNvIEkgd291bGRuJ3QgcmVhbGx5IGFsd2F5cyB0cnVzdCB0 aGUgcmVhZG91dCwgYXMgdG8gbWUgaXQgc2VlbXMKPiA+ID4gPiBpY2VsYWtlIHJlc2V0cyBpdCBj b25zdGFudGx5IHRvIDIgYWZ0ZXIgc3VzcGVuZC9yZXN1bWUuCj4gPiA+Cj4gPiA+IFRoZSBwb2lu dCBvZiByZWFkb3V0IGlzIHRoYXQgd2Ugc3luY3Job25pemUgb3VyIHNvZnR3YXJlIHN0YXRlIHdp dGgKPiA+ID4gdGhlCj4gPiA+IGN1cnJlbnQgc3RhdGUgb2YgaGFyZHdhcmUgd2l0aG91dCBoYXZp bmcgdG8gbW9kaWZ5IHRoZSBoYXJkd2FyZQo+ID4gPiBzdGF0ZS4KPiA+ID4gT25jZSBzeW5jaHJv bml6ZWQgdGhlIGRyaXZlciB0YWtlcyBvdmVyIGFuZCB0ZWxscyB0aGUgaHcgd2hhdCB0byBkby4K PiA+Cj4gPiBUaGF0IGlzIGVzcGVjaWFsbHkgbmljZSBhZnRlciB5b3Ugc2F5ICJyZXBvcnQgZXJy b3IgYW5kIGRvbid0IGNhcmUiCj4gPiB3aGVuIEkgcmVhbGx5IHdhbnQgdG8gcmVmbGVjdCBodyBz dGF0ZSBpbiBzdyBzdGF0ZSwgYnkgY2hlY2tpbmcgd2hldGhlcgo+ID4gd2UgY291bGQgc2V0IGRi dWYgc2xpY2VzIG9yIG5vdC4KPiA+IE5vdyB5b3Ugc2F5IHRoYXQgd2UgbmVlZCB0byBzeW5jaHJv bml6ZSBzb2Z0d2FyZSBzdGF0ZSB3aXRoIGh3IHN0YXRlLAo+ID4gaG93ZXZlciBpZiBJIGZhaWwg dG8gbW9kaWZ5IGl0IC0gdGhlbiAid2hvIGNhcmVzIi4KPiAKPiA+WWVzLiBJZiB5b3UgZmFpbCB0 byBtb2RpZnkgdGhlIGhhcmR3YXJlIHN0YXRlIHRoZSB3aG9sZSB0aGluZyBpcwo+ID5icm9rZW4g YW55d2F5LiBUaGVyZSdzIGlzICpub3RoaW5nKiB3ZSBjYW4gZG8gYXQgdGhpcyBzdGFnZSBpbiB0 aGUKPiA+Y29tbWl0IHRvIGZpeCBpdC4KPiAKPiBPaywgYnV0IHdoeSB3ZSBjYW4ndCBhdCBsZWFz dCBrZWVwIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgc3RhdGUgaW4gc3cKPiBpbnN0ZWFkIG9mIHNvbWV0 aGluZyB3aGljaCBpcyBjb21wbGV0ZWx5IHdyb25nLiBIb3cgZG9lcyB0aGF0IGhhcm0/CgpJdCBt ZXNzZXMgdXAgdGhlIHNvZnR3YXJlIHN0YXRlIHRoYXQgd2UgY29tcHV0ZWQgd2l0aCBzb21ldGhp bmcgdGhhdAp3ZSBkaWRuJ3QgY29tcHV0ZS4gU28gZ29pbmcgZm9yd2FyZCB0aGUgc3RhdGUgd2ls bCBiZSBpbmNvbnNpc3RlbnQuCgpUaGUgY29yZSBjb25jZXB0IG9mIGF0b21pYyBpcyB0aGF0IHRo ZSBzdGF0ZSBpcyBwcmVjb21wdXRlZCBhbmQKdmFsaWRhdGVkIGFoZWFkIG9mIHRpbWUuIFRoZSBj b21taXQgcGhhc2UgaXMgc3VwcG9zZWQgdG8gYmUgZHVtYiBhbmQKaXNuJ3QgYWxsb3dlZCB0byBt b2RpZnkgdGhlIHN0YXRlLiBUaGlzIGlzIGFsc28gd2h5IHdlIG9mdGVuIHBhc3MKdGhlIHN0YXRl cyBhcyBjb25zdCBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZSwgdGhvdWdoIHVuZm9ydHVuYXRlbHkK d2UgY2FuJ3QgZG8gdGhhdCBhbHdheXMgb24gYWNjb3VudCBvZiB0aGUgc3RhdGVzIGJlaW5nIHNs aWdodGx5Cm92ZXJsb2FkZWQgd2l0aCBvdGhlciBtZXRhZGF0YS4KCj4gCj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uIHsKPiA+ID4gPiA+Cj4gPiA+ID4g PiBUaGlzIHN0cnVjdCBpcyBxdWl0ZSBwb2ludGxlc3MuIFNob3VsZCBiZSBraWxsZWQgb2ZmLgo+ ID4gPiA+Cj4gPiA+ID4gTGVnYWN5IHN0dWZmLCBub3QgYWRkZWQgYnkgbWUuIFF1aXRlIGZpbmUg d2l0aCByZW1vdmluZyBpdCAtCj4gPiA+ID4gYnV0IHNob3VsZCB3ZSByZWFsbHkgZG8gYWxsIHRo aXMgYXQgdGhlIHNhbWUgdGltZSBhbmQgaW4gc2FtZQo+ID4gPiA+IHBhdGNoPwo+ID4gPgo+ID4g PiBOb3QgdGhlIHNhbWUgcGF0Y2guIEJ1dCBjbGVhbiB1cCB0aGUgY29id2VicyBmaXJzdCwgdGhl biBhZGQgdGhlIG5ldwo+ID4gPiBzdHVmZi4gTXVjaCBlYXNpZXIgdGhhdCB3YXkgYXJvdW5kLgo+ ID4KPiA+IFRoZXJlIGlzIGEgc2hpdCB0b24gbG9hZCBvZiBjb2J3ZWJzIHRvIGNsZWFuLiBQZXJz b25hbGx5IG15IG9waW5pb24gaXMKPiA+IHRoYXQgY3VycmVudCBkYnVmIGNvbnRyb2xsaW5nIGNv ZGUgaXMgdG90YWwgZ2FyYmFnZSAtIHdoaWNoIGhhcyBsb3RzIG9mCj4gPiBoYXJkY29kZWQgc3R1 ZmYuIEdvb2QgbHVjayBlbmFibGluZyBvbmx5IHNlY29uZCBkYnVmIHNsaWNlLCBnb29kIGx1Y2sK PiA+IGRpc2FibGluZy9lbmFibGluZyBkYnVmIHByb3Blcmx5Li4uLgo+ID4gV2hlcmUgeW91IHdl cmUsIHdoZW4gdGhpcyB3YXMgY29tbWl0dGVkIHRoZW4/Cj4gCj4gPkxvb2tpbmcgYXQgc29tZXRo aW5nIGVsc2UgdW5mb3J0dW5hdGVseS4gQWxzbyBpdCBoYXMganVzdCBrZXB0Cj4gPmJpdHJvdHRp bmcgc2luY2UgYmVjYXVzZSBubyBvbmUgaGFzIGNhcmVkLgo+IAo+IFRoYXQgaXMgd2hhdCBleGFj dGx5IHN1cnByaXNlcyBtZS4gV2hpbGUgd2UgaGF2ZSBpc3N1ZXMKPiBsaWtlIGNvbW1pdCBzZXJp YWxpemF0aW9uLCBzYWd2LCBtc3QsIGhhbGYgb2YgZGlzcGxheSBidWZmZXIgb25seQo+IGVuYWJs ZWQsIGJ3LCBhbmQgd2UgYXJlIGFyZ3VpbmcgYWJvdXQgaG93IHN1cHBvcnRlZF9zbGljZXMKPiBz aG91bGQgYmUgbmFtZWQuIE9yIHRoYXQgSSBzaG91bGRuJ3QgcmVmZXIgdG8gREJ1ZiBzbGljZXMg YXMgYml0cwo+IGJ1dCBkZWZpbmUgYXMgdmFsdWVzIGFuZCB0aGVuIGRlY29kZSB0aG9zZSBhcyBi aXRzLiBQcmlvcml0aWVzLgoKVXN1YWxseSBwZW9wbGUgY29tcGxhaW4gYWJvdXQgcmV2aWV3ZXJz IG5vdCBwb2ludGluZyBvdXQKYWxsIHRoZSBpc3N1ZXMgaW4gb25lIHNpdHRpbmcuIAoKPiAKPiA+ Cj4gPiBJZiB3ZSBuZWVkIHRvIGZpeCBpdCAtIGZpbmUuIEJ1dCBtYXkgYmUgd2Ugc2hvdWxkIGRv IGl0IGluIHN0YWdlcz8KPiA+IFBvaW50IG9mIHRoaXMgcGF0Y2ggaXMgImVuYWJsZSBzZWNvbmQg ZGJ1ZiBzbGljZSIsIG5leHQgcGF0Y2ggInJlbW92ZQo+ID4gdW5uZWVkZWQgc3RydWN0cyIgYW5k IHNvIG9uLgo+ID4gV2hpbGUgeW91IHdhbnQgbWUgdG8gc2h1ZmZsZSBldmVyeXRoaW5nIGF0IHRo ZSBzYW1lIHRpbWUsIHdoaWNoIGlzIG5vdAo+ID4gZ29vZCBpZGVhLCBlc3BlY2lhbGx5IGNvbnNp ZGVyaW5nIGNvbXBsZXhpdHkgYW5kIGFtb3VudCBvZiBsZWdhY3kgc3R1ZmYKPiA+IHdlIGN1cnJl bnRseSBoYXZlLgo+IAo+ID5CdWlsZGluZyBuZXcgc3R1ZmYgb24gdG9wIG9mIGEgZGVjb21wb3Np bmcgZ2FyYmFnZSBwaWxlIGlzIG5vdAo+ID5hIGdvb2QgaWRlYTogYSkgaXQncyBoYXJkZXIgdGhh biBidWlsZGluZyBvbiBjbGVhbiBmb3VuZGF0aW9uLAo+ID5iKSBpdCdsbCBwcm9iYWJseSBmYWxs IG92ZXIgYW5kIGdldCBidXJpZWQgaW4gdGhlIG9sZCBnYXJiYWdlCj4gPmF0IHdoaWNoIHBvaW50 IHlvdSdyZSBsaWtlbHkgZ29pbmcgdG8gYmUgcmlnaHQgYmFjayB3aGVyZSB5b3UKPiA+c3RhcnRl ZAo+IC4KPiBTdXJlLCBsZXQncyBjaGFuZ2UgZXZlcnl0aGluZyBhdCB0aGUgc2FtZSB0aW1lIGFu ZCB0aGVuIHdvbmRlcgo+IHdoYXQgaGFkIGZhaWxlZCBleGFjdGx5IGluIHRoYXQgaHVnZSBzZXJp ZXMgd2l0aCBsb3RzIG9mIHVucmVsYXRlZCBjaGFuZ2VzLiAKPiBTdGFuZGFyZCBwcmFjdGljZS4K ClNlcmllcyBjYW4gYmUgc3BsaXQgdXAgdG8gc21hbGxlciBjaHVua3MuIE15IHVzdWFsIE1PIGlz IHRvIHNwbGl0CnByZXAgc3R1ZmYgb3V0IHRvIHNlcGFyYXRlIHBhdGNoZXMsIGFuZCBpZiBpdCBs b29rcyBsaWtlIHRoZSBvdmVyYWxsCnNlcmllcyBpcyBnZXR0aW5nIHRvbyBiaWcgSSBldmVuIHBv c3QgdGhlIHByZXAgcGF0Y2hlcyBzZXBhcmF0ZWx5LgpJbiBmYWN0IEkgb2Z0ZW4gZW5kIHVwIHdp dGggbW9yZSB0aGFuIG9uZSBwcmVwIHNlcmllcyBmb3Igd2hhdGV2ZXIKYWN0dWFsIGdvYWwgSSB3 YXMgdHJ5aW5nIHRvIHJlYWNoLgoKPiAKPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIGZvcl9l YWNoX25ld19pbnRlbF9jcnRjX2luX3N0YXRlKGludGVsX3N0YXRlLCBjcnRjLAo+ID4gPiA+ID4g PiBjcnRjX3N0YXRlLAo+ID4gPiA+ID4gPiBpKSB7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQo+ID4gPiA+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgJmNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGU7Cj4g PiA+ID4gPiA+ICAgICAgICAgICAgICAgZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4g PiA+ID4gPiAgICAgICAgICAgICAgIGludCBoZGlzcGxheSwgdmRpc3BsYXk7Cj4gPiA+ID4gPiA+ ICsgICAgICAgICAgICAgdTMyIHBpcGVfZGJ1Zl9zbGljZV9tYXNrID0gXAo+ID4gPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgaTkxNV9nZXRfYWxsb3dlZF9kYnVmX21hc2soZGV2X3ByaXYs Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwaXBlLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWN0aXZlX3BpcGVzLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3J0Y19zdGF0ZSk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICAgICAgICAgICAgICAgaWYgKCFjcnRjX3N0YXRlLT5ody5lbmFibGUpCj4gPiA+ID4gPiA+ ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g KyAgICAgICAgICAgICAvKgo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAqIEFjY29yZGluZyB0 byBCU3BlYyBwaXBlIGNhbiBzaGFyZSBvbmUgZGJ1Zgo+ID4gPiA+ID4gPiBzbGljZQo+ID4gPiA+ ID4gPiB3aXRoIGFub3RoZXIKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBwaXBlcyBvciBw aXBlIGNhbiB1c2UgbXVsdGlwbGUgZGJ1ZnMsIGluCj4gPiA+ID4gPiA+IGJvdGggY2FzZXMKPiA+ ID4gPiA+ID4gd2UKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBhY2NvdW50IGZvciBvdGhl ciBwaXBlcyBvbmx5IGlmIHRoZXkgaGF2ZQo+ID4gPiA+ID4gPiBleGFjdGx5Cj4gPiA+ID4gPiA+ IHNhbWUgbWFzay4KPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBIb3dldmVyIHdlIG5lZWQg dG8gYWNjb3VudCBob3cgbWFueSBzbGljZXMKPiA+ID4gPiA+ID4gd2Ugc2hvdWxkCj4gPiA+ID4g PiA+IGVuYWJsZQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAqIGluIHRvdGFsLgo+ID4gPiA+ ID4gPiArICAgICAgICAgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIHRvdGFsX3Ns aWNlX21hc2sgfD0gcGlwZV9kYnVmX3NsaWNlX21hc2s7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gdG90 YWxfc2xpY2VfbWFzayB3aWxsIG5vdyBhY2NvdW50IG9ubHkgdGhlIGNydGNzIGluIHRoZSBzdGF0 ZS4KPiA+ID4gPiA+IFdoYXQKPiA+ID4gPiA+IGhhcHBlbnMgdG8gdGhlIG90aGVyIHBpcGVzJyBz bGljZXM/Cj4gPgo+ID4gU2FtZSBhcyBoYXBwZW5zIG5vdyBidHcuIFJpZ2h0IG5vdyBpdCBhbHNv IGRvZXMgdGhlIHNhbWUgdGhpbmcuCj4gCj4gPlJpZ2h0IG5vdyBpdCBkb2VzIGFic29sdXRlbHkg bm90aGluZy4gSXQncyBhbGwgZGVhZCBjb2RlLgo+IAo+IFJpZ2h0IG5vdywgdGhpcyAiZGVhZCIg Y29kZSBleGFjdGx5IGl0ZXJhdGVzIHRocm91Z2ggY3J0Y3MgaW4gc3RhdGUgYW5kCj4gYWxsb2Nh dGVzIERCdWYgUzEgaW4gcHJvcG9ydGlvbiB0byBwaXBlIHdpZHRoLgo+IFdoYXQgSSBkbyBpcyBt YWtlIGl0IGRvIHRoZSBzYW1lIHRoaW5nIGJ1dCB1c2luZyBlaXRoZXIgcmFuZ2Ugb2Ygb25lCj4g b3IgdHdvIHNsaWNlcywgZGVwZW5kaW5nIG9uIHBpcGUgY29uZmlndXJhdGlvbi4KCk9LLiBTbyBo b3cgZG9lcyBpdCBkZWFsIHdpdGggbXkgb3JpZ2luYWwgcXVlc3Rpb24/Cgo+IAo+IFNvIHNob3Vs ZCBJIGhhdmUgdGhyb3duIGF3YXkgdGhhdCBjb2RlIGFuZCByZXdyaXR0ZW4gdGhpcyBhcyB3ZWxs PwoKTm90IGlmIGl0IHdvcmtzLgoKPiAKPiA+ID4gPiA+ID4gK3N0YXRpYyB1aW50X2ZpeGVkXzE2 XzE2X3QKPiA+ID4gPiA+ID4gK2ljbF9waXBlX2Rvd25zY2FsZV9hbW91bnQoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUKPiA+ID4gPiA+ID4gKmNydGNfc3RhdGUpCj4gPiA+ID4gPiA+ICt7 Cj4gPiA+ID4gPiA+ICsgICAgIHUzMiBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaDsKPiA+ID4g PiA+ID4gKyAgICAgdWludF9maXhlZF8xNl8xNl90IGZwX3dfcmF0aW8sIGZwX2hfcmF0aW87Cj4g PiA+ID4gPiA+ICsgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBkb3duc2NhbGVfaCwgZG93bnNjYWxl X3c7Cj4gPiA+ID4gPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlID0KPiA+ID4gPiA+ID4gJmNydGNfc3RhdGUtCj4gPiA+ID4gPiA+ID4gaHcuYWRq dXN0ZWRfbW9kZTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICBz cmNfdyA9IGNydGNfc3RhdGUtPnBpcGVfc3JjX3c7Cj4gPiA+ID4gPiA+ICsgICAgIHNyY19oID0g Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfaDsKPiA+ID4gPiA+ID4gKyAgICAgZHN0X3cgPSBhZGp1c3Rl ZF9tb2RlLT5jcnRjX2hkaXNwbGF5Owo+ID4gPiA+ID4gPiArICAgICBkc3RfaCA9IGFkanVzdGVk X21vZGUtPmNydGNfdmRpc3BsYXk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgZnBf d19yYXRpbyA9IGRpdl9maXhlZDE2KHNyY193LCBkc3Rfdyk7Cj4gPiA+ID4gPiA+ICsgICAgIGZw X2hfcmF0aW8gPSBkaXZfZml4ZWQxNihzcmNfaCwgZHN0X2gpOwo+ID4gPiA+ID4gPiArICAgICBk b3duc2NhbGVfdyA9IG1heF9maXhlZDE2KGZwX3dfcmF0aW8sCj4gPiA+ID4gPiA+IHUzMl90b19m aXhlZDE2KDEpKTsKPiA+ID4gPiA+ID4gKyAgICAgZG93bnNjYWxlX2ggPSBtYXhfZml4ZWQxNihm cF9oX3JhdGlvLAo+ID4gPiA+ID4gPiB1MzJfdG9fZml4ZWQxNigxKSk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gKyAgICAgcmV0dXJuIG11bF9maXhlZDE2KGRvd25zY2FsZV93LCBkb3duc2Nh bGVfaCk7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3VpbnRfZml4 ZWRfMTZfMTZfdAo+ID4gPiA+ID4gPiAraWNsX2dldF9waXBlX3JhdGlvKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiAr ICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiA+ID4gPiA+ID4gKyAgICAgY29uc3Qgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqZHJtX3BsYW5lX3N0YXRlOwo+ID4gPiA+ID4gPiArICAgICB1 aW50X2ZpeGVkXzE2XzE2X3QgcGlwZV9kb3duc2NhbGUsIHBpcGVfcmF0aW87Cj4gPiA+ID4gPiA+ ICsgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBtYXhfZG93bnNjYWxlID0gdTMyX3RvX2ZpeGVkMTYo MSk7Cj4gPiA+ID4gPiA+ICsgICAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxf Y3J0YyhjcnRjX3N0YXRlLQo+ID4gPiA+ID4gPiA+dWFwaS5jcnRjKTsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArICAgICBpZiAoIWNydGNfc3RhdGUtPnVhcGkuZW5hYmxlKQo+ID4gPiA+ID4g PiArICAgICAgICAgICAgIHJldHVybiBtYXhfZG93bnNjYWxlOwo+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ICsgICAgIGRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZShw bGFuZSwKPiA+ID4gPiA+ID4gZHJtX3BsYW5lX3N0YXRlLCAmY3J0Y19zdGF0ZS0+dWFwaSkgewo+ ID4gPiA+ID4gPiArICAgICAgICAgICAgIHVpbnRfZml4ZWRfMTZfMTZfdCBwbGFuZV9kb3duc2Nh bGU7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICB0b19p bnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICsgICAgICAgICAgICAgaWYgKCFpbnRlbF93bV9wbGFuZV92aXNpYmxlKGNydGNfc3RhdGUs Cj4gPiA+ID4gPiA+IHBsYW5lX3N0YXRlKSkKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgcGxh bmVfZG93bnNjYWxlID0KPiA+ID4gPiA+ID4gc2tsX3BsYW5lX2Rvd25zY2FsZV9hbW91bnQoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgICAgRFJNX0RFQlVHX0tNUygiUGxhbmUgJWQgZG93bnNjYWxlIGFtb3VudAo+ID4gPiA+ID4g PiAlZC4lZFxuIiwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2lu dGVsX3BsYW5lKHBsYW5lKS0+aWQsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICBwbGFuZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ID4gPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGxhbmVfZG93bnNjYWxlLnZhbCAmIDB4ZmZmZik7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICBtYXhfZG93bnNjYWxlID0gbWF4X2ZpeGVkMTYo cGxhbmVfZG93bnNjYWxlLAo+ID4gPiA+ID4gPiBtYXhfZG93bnNjYWxlKTsKPiA+ID4gPiA+ID4g KyAgICAgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgICAgcGlw ZV9kb3duc2NhbGUgPSBpY2xfcGlwZV9kb3duc2NhbGVfYW1vdW50KGNydGNfc3RhdGUpOwo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICAgIERSTV9ERUJVR19LTVMoIlBpcGUgJWQgZG93bnNj YWxlIGFtb3VudCAlZC4lZFxuIiwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgY3J0 Yy0+cGlwZSwgcGlwZV9kb3duc2NhbGUudmFsID4+IDE2LAo+ID4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICBwaXBlX2Rvd25zY2FsZS52YWwgJiAweGZmZmYpOwo+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ICsgICAgIHBpcGVfZG93bnNjYWxlID0gbXVsX2ZpeGVkMTYocGlwZV9kb3duc2Nh bGUsCj4gPiA+ID4gPiA+IG1heF9kb3duc2NhbGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ ICsgICAgIC8qCj4gPiA+ID4gPiA+ICsgICAgICAqIENvbnZlcnQgcmVzdWx0IHRvIHBlcmNlbnRh Z2U6IGdldCB0aGUgYWN0dWFsIHJhdGlvCj4gPiA+ID4gPiA+IGluc3RlYWQKPiA+ID4gPiA+ID4g b2YgcmF0ZSwKPiA+ID4gPiA+ID4gKyAgICAgICogdGhlbiBtdWx0aXBseSBieSAxMDAgdG8gZ2V0 IHBlcmNlbnRhZ2UuCj4gPiA+ID4gPiA+ICsgICAgICAqLwo+ID4gPiA+ID4gPiArICAgICBwaXBl X3JhdGlvID0gdTMyX3RvX2ZpeGVkMTYoMTAwICoKPiA+ID4gPiA+ID4gZGl2X3JvdW5kX3VwX3Uz Ml9maXhlZDE2KDEsCj4gPiA+ID4gPiA+IHBpcGVfZG93bnNjYWxlKSk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gKyAgICAgRFJNX0RFQlVHX0tNUygiUGlwZSAlZCByYXRpbyAlZC4lZFxuIiwg Y3J0Yy0+cGlwZSwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICBwaXBlX3JhdGlvLnZh bCA+PiAxNiwgcGlwZV9yYXRpby52YWwgJgo+ID4gPiA+ID4gPiAweGZmZmYpOwo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsgICAgIHJldHVybiBwaXBlX3JhdGlvOwo+ID4gPiA+ID4gPiArfQo+ ID4gPiA+ID4KPiA+ID4gPiA+IFl1Y2suIEkganVzdCBraWxsZWQgdGhlc2UuCj4gPiA+ID4KPiA+ ID4gPiBJIHN0aWxsIG5lZWQgcGlwZV9yYXRpbyBmcm8gSUNMIGFzIHlvdSBrbm93LCB0aGlzIGlz IGRpY3RhdGVkIGJ5Cj4gPiA+ID4gQlNwZWMsCj4gPiA+ID4gbm90IGJ5IG1lLgo+ID4gPgo+ID4g PiBUaGF0IHBhcnQgb2YgdGhlIHNwZWMgaXMgcHJldHR5IGNyYXp5IElNTy4gSSB0aGluayB3ZSBz aG91bGQganVzdAo+ID4gPiBpZ25vcmUKPiA+ID4gaXQgZm9yIG5vdy4gQWxzbyBub3RoaW5nIGlu IHRoZXJlIHNheXMgd2UgbXVzdCB1c2UgYm90aCBzbGljZXMgZm9yIGEKPiA+ID4gc2luZ2xlIHBp cGUgc28gaWdub3JpbmcgZG9lc24ndCBldmVuIHZpb2xhdGUgdGhlIHNwZWMgaW4gYW55IHdheS4K PiA+Cj4gPiBTbyB5b3UgYXJlIGluc3RydWN0aW5nIG1lIG5vdyB0byBpZ25vcmUgQlNwZWMgYXMg IndlIGFyZSBzbWFydGVyIj8KPiA+IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBwcm9wZXJseSB0byBk byBpdCB0aGlzIHdheS4gTGV0cyBmaXJzdCBjaGFuZ2UgdGhlCj4gPiBCU3BlYywgaWYgd2UgZG9u J3QgbGlrZSBwaXBlIHJhdGlvIGhlcmUgYW5kIHRoZW4gZHJpdmVyLiBDdXJyZW50bHkgdGhpcwo+ ID4gaXMgd3JpdHRlbiB0aGF0IHdheSBhbmQgaWYgd2UgYXJlIGdvaW5nIHRvIGRvIGV2ZXJ5dGhp bmcgb3VyIG93biB3YXkKPiA+IGlnbm9yaW5nIHNwZWNzLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGNo YW9zLgo+IAo+ID5MaWtlIEkgc2FpIHlvdSBkb24ndCBoYXZlIHRvIHZpb2xhdGUgdGhlIHNwZWMg YXQgYWxsLiBKdXN0IGRvbid0IHVzZQo+ID50d28gc2xpY2VzIGZvciB0aGUgc2FtZSBwaXBlIGFu ZCB5b3UgY2FuIGF2b2lkIHRoZSB3aG9sZSBzdHJhbmdlIHBpcGUKPiA+cmF0aW8gbGltaXRhdGlv bi4gV2Ugc2hvdWxkIGZpbGUgYSBic3BlYyBpc3N1ZSB0byBnZXQgdGhhdCBjbGFyaWZpZWQKPiA+ dGhvdWdoLgo+IAo+IFRoYXQgaXMgYWN0dWFsbHkgYSB2aW9sYXRpb24gb2YgQlNwZWMsIHdlIGFy ZSBub3QgdXNpbmcgdHdvIHNsaWNlcyBmb3Igc2FtZQo+IHBpcGUgd2hpbGUgd2UgY291bGQuIFdl IGhhZCBhbHJlYWR5IGVub3VnaCBvZiBidyBpc3N1ZXMsIHdoeSBzaG91bGQKPiB3ZSBtYWtlIG91 ciBsaWZlIGV2ZW4gaGFyZGVyPwoKVXNpbmcgbW9yZSBzbGljZXMgaXMsIGZvciB3aGF0ZXZlciBy ZWFzb24sIGhhcmRlciBmb3IgdGhlIGhhcmR3YXJlLgpZb3UncmUgbm90IGFsbG93ZWQgdG8gdXNl IHR3byBzbGljZXMgaWYgeW91IGRvIGFueSBzaWduaWZpY2FudApkb3duc2NhbGluZy4gV2hpY2gg aXMgYSBiaXQgc2FkL29kZCBiZWNhdXNlIGluY3JlYXNpbmcgZG93bnNjYWxpbmcKaW5jcmVhc2Vz IGJhbmR3aWR0aCB1dGlsaXphdGlvbiBidXQgYXQgdGhlIHNhbWUgdGltZSBhbHNvIHByZXZlbnRz CnVzIGZyb20gdXNpbmcgdHdvIHNsaWNlcy4KCkkgdGhpbmsgdGhlIG1haW4gYmVuZWZpdCB3ZSB3 b3VsZCBnZXQgZnJvbSB0d28gc2xpY2VzIGlzIGJldHRlcgpwb3dlciBzYXZpbmdzIGJlY2F1c2Ug d2UgbWF5IGJlIGFibGUgdG8gZW5hYmxlIG1vcmUgd2F0ZXJtYXJrCmxldmVscyBvbiBhY2NvdW50 IG9mIHRoZSBsYXJnZXIgZGRiLgoKVGhlcmUgaXMgbm90aGluZyBpbiB0aGUgc3BlYyB0aGF0IEkg Y2FuIHNlZSB0aGF0IHNheXMgd2UgKm11c3QqIHVzZQp0d28gc2xpY2VzICh1bmxlc3Mgd2UncmUg YWJvdXQgdG8gZXhjZWVkIHRoZSBDRENETEt4NjQgYmFuZHdpZHRoCmxpbWl0IEkgZ3Vlc3MpLiBB bmQgc2luY2Ugd2UgaGF2ZW4ndCBiZWVuIHVzaW5nIHR3byBzbGljZXMgc28gZmFyCml0IHNlZW1z IHNhZmVyIHRvIG5vdCBqdW1wIGluIHRoZSBkZWVwIGVuZCBhbmQgZW5hYmxlIHR3byBzbGljZXMK cGVyLXBpcGUgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBkbyB0aGUgb3RoZXIgdGhpbmdzLiBJZS4g dGhlcmUKc2hvdWxkIGJlIGEgc2VwYXJhdGUgcGF0Y2ggdG8gZW5hYmxlIHRoZSB0d28gc2xpY2Vz IHBlciBwaXBlIHVzYWdlLgoKPiAKPiA+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiA+ICsgKiBUYWJs ZSB0YWtlbiBmcm9tIEJzcGVjIDQ5MjU1Cj4gPiA+ID4gPiA+ICsgKiBQaXBlcyBkbyBoYXZlIHNv bWUgcHJlZmVycmVkIERCdWYgc2xpY2UgYWZmaW5pdHksCj4gPiA+ID4gPiA+ICsgKiBwbHVzIHRo ZXJlIGFyZSBzb21lIGhhcmRjb2RlZCByZXF1aXJlbWVudHMgb24gaG93Cj4gPiA+ID4gPiA+ICsg KiB0aG9zZSBzaG91bGQgYmUgZGlzdHJpYnV0ZWQgZm9yIG11bHRpcGlwZSBzY2VuYXJpb3MuCj4g PiA+ID4gPiA+ICsgKiBGb3IgbW9yZSBEQnVmIHNsaWNlcyBhbGdvcml0aG0gY2FuIGdldCBldmVu IG1vcmUgbWVzc3kKPiA+ID4gPiA+ID4gKyAqIGFuZCBsZXNzIHJlYWRhYmxlLCBzbyBkZWNpZGVk IHRvIHVzZSBhIHRhYmxlIGFsbW9zdAo+ID4gPiA+ID4gPiArICogYXMgaXMgZnJvbSBCU3BlYyBp dHNlbGYgLSB0aGF0IHdheSBpdCBpcyBhdCBsZWFzdCBlYXNpZXIKPiA+ID4gPiA+ID4gKyAqIHRv IGNvbXBhcmUsIGNoYW5nZSBhbmQgY2hlY2suCj4gPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ID4g K3N0cnVjdCBkYnVmX3NsaWNlX2NvbmZfZW50cnkgdGdsX2FsbG93ZWRfZGJ1ZnNbXSA9IHsKPiA+ ID4gPiA+ID4gK3sgeyAwLCAwLCAwLCAwIH0sIDAgfSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0Ff REJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xf UElQRV9CX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4g PiArSUNMX1BJUEVfQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERCVUZfUzJfQklUKSwKPiA+ ID4gPiA+ID4gK0lDTF9QSVBFX0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQgfCBEQlVGX1MyX0JJ VCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQl9EQlVGX1NMSUNFUyhEQlVGX1MyX0JJVCwgREJV Rl9TMV9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUNfREJVRl9TTElDRVMoREJVRl9TMV9C SVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0JDX0RCVUZfU0xJQ0VTKERC VUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BRF9EQlVGX1NM SUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQkRf REJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9Q SVBFX0NEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ ICtJQ0xfUElQRV9BQkRfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4g PiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNfREJVRl9TTElD RVMoREJVRl9TMV9CSVQsIERCVUZfUzFfQklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4g PiA+ID4gPiA+ICtJQ0xfUElQRV9BQ0RfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJf QklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9CQ0Rf REJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklULAo+ID4gPiA+ID4gPiBEQlVGX1My X0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9BQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklU LCBEQlVGX1MxX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQsCj4gPiA+ID4gPiA+IERCVUZf UzJfQklUKSwKPiA+ID4gPiA+ID4gK307Cj4gPiA+ID4gPgo+ID4gPiA+ID4gTXkgZXllcyEKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBJIGhhdmUgdG8gdGhpbmsgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVk dWNlIGFsbCB0aGF0IHRvIGEgaGFuZGZ1bAo+ID4gPiA+ID4gb2YgbGluZXMgb2YgY29kZS4KPiA+ ID4gPgo+ID4gPiA+IFllYWgsIHRoZW4gd2UgYXJlIGdvaW5nIHRvIGhhdmUgYSBodWdlIGZ1bmN0 aW9uIHdpdGggbG90cyBvZiB3ZWlyZAo+ID4gPiA+IGRlZmluaXRpb25zLCB1bmZvcnR1bmF0ZWx5 IEJTcGVjIHRhYmxlIGhhcyBxdWl0ZSBzdHJhbmdlIERCdWYKPiA+ID4gPiBhc3NpZ25tZW50cyBs aWtlCj4gPiA+ID4gK0lDTF9QSVBFX0FCX0RCVUZfU0xJQ0VTKERCVUZfUzJfQklULCBEQlVGX1Mx X0JJVCksCj4gPiA+ID4gK0lDTF9QSVBFX0FDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVG X1MyX0JJVCksCj4gPiA+ID4KPiA+ID4gPiBpLmUgc2xpY2VzIGNhbiBnZXQgbWl4ZWQgaW4gYSBx dWl0ZSB2YXJpb3VzIHdheXMuIFRoZXJlIGlzIG5vCj4gPiA+ID4gcmF0aW9uYWwgcGF0dGVybiBp biB0aG9zZSBhbmQgY291bGQgYmUgZXZlbiBkYW5nZXJvdXMgdG8gdHJ5IHRvCj4gPiA+ID4gb3B0 aW1pemUgaXQgc29tZSB3YXksIGFzIG9uZSBkYXkgaXQgbWlnaHQgY2hhbmdlIGFnYWluIGluIHNv bWUKPiA+ID4gPiB1bnByZWRpY3RhYmxlIHdheS4KPiA+ID4gPgo+ID4gPiA+IFdvdWxkIHlvdSBw cmVmZXIgdG8gaGF2ZSBpdCBsaWtlCj4gPiA+ID4KPiA+ID4gPiBpZiAocGlwZXMgYXJlIEEgYW5k IEIpCj4gPiA+ID4gICAgIHByb2dyYW0gUzIgdG8gQSBhbmQgUzEgdG8gQgo+ID4gPiA+IGlmIChw aXBlcyBhcmUgQSBhbmQgQykKPiA+ID4gPiAgICAgcHJvZ3JhbSBTMSB0byBBIGFuZCBTMiB0byBD Cj4gPiA+ID4gLi4uCj4gPiA+ID4KPiA+ID4gPiBJIHdvdWxkIHByZWZlciBhdCBsZWFzdCB0byBz ZWUgaXQgaW4gYSBjb21wYXJhYmxlIHdheSB3aXRoIHRoZQo+ID4gPiA+IHRhYmxlIHdlIGhhdmUg aW4gQlNwZWMsIHJhdGhlciB0aGFuIGhhdmluZyBsb3RzIG9mIHdlaXJkIGxvb2tpbmcKPiA+ID4g PiBpZi1lbHNlIHN0YXRlbWVudHMsIEdFTiBjaGVja3MgYW5kIHNvIG9uLgo+ID4gPiA+Cj4gPiA+ ID4gSSBrbmV3IHRoaXMgdGFibGUgd2FzIG5vdCBnb2luZyB0byBsb29rIGxpa2UgaXQgaXMgZG9u ZSB0eXBpY2FsbHkKPiA+ID4gPiBoZXJlIC0gYnV0IHJlYWxseSBteSBvcGluaW9uIHRoYXQgaXQg aXMgd2F5IGJldHRlciB0aGFuIGhhcmRjb2RpbmcKPiA+ID4gPiBpdCBpbnRvIHNvbWUgd2VpcmQg YWxnb3JpdGhtLCB3aGljaCB3b3VsZCBiZSBoYXJkIHRvIGNvbXBhcmUgdG8KPiA+ID4gPiBpbml0 aWFsIHRhYmxlLCB3aGljaCBpcyBhbHJlYWR5IHN0cmFuZ2UgZW5vdWdoLgo+ID4gPiA+Cj4gPiA+ ID4gSWYgeW91IGRvbid0IGxpa2UgaXQgLSBjb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gd2h5IHRo aXMgaXMgZXhhY3RseQo+ID4gPiA+IHdvcnNlIHRoYW4gaGF2aW5nIGxvbmcgZnVuY3Rpb25zIHdp dGggaGFyZGNvZGVkIGNoZWNrcz8KPiA+ID4KPiA+ID4gSSB0aGluayB3ZSBzaG91bGQgYmUgYWJs ZSB0byBlbmNvZGUgdGhpcyBzaW1wbHkgdXNpbmcgdGhlCj4gPiA+ICJQaXBlIGFuZCBEQlVGIG9y ZGVyaW5nIiBzdHVmZiBmcm9tIHRoZSBzcGVjLiBJZS4ganVzdCBzcGVjaWZ5IHdoYXQKPiA+ID4g aXMgdGhlIGRpc3RhbmNlIG9mIGVhY2ggcGlwZSBmcm9tIGVhY2ggZGJ1ZiBzbGljZS4gVGhlbiBh bGwgd2UgaGF2ZQo+ID4gPiB0byBkbyBpcyBtaW5pbWl6ZSB0aGUgdG90YWwgZGlzdGFuY2UuIFRo ZSBmb2xsb3dpbmcgdGFibGVzIEkgdGhpbmsKPiA+ID4gc2hvdWxkIGVuY29kZSB0aGF0IHJlYXNv bmFibHkgY29uY2lzZWx5Ogo+ID4gPgo+ID4gPiAvKiBwaXBlQSAtIERCVUZfUzEgLSBwaXBlQiAt IHBpcGVDIC0gREJVRl9TMiAqLwo+ID4gPiBzdGF0aWMgY29uc3QgdTggaWNsX2RidWZfZGlzdGFu Y2VbXVtdIHsKPiA+ID4gICAgIFtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJVRl9TMl0g PSA0LCB9LAo+ID4gPiAgICAgW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVGX1MyXSA9 IDIsIH0sCj4gPiA+ICAgICBbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZfUzJdID0g MSwgfSwKPiA+ID4gfTsKPiA+ID4KPiA+ID4gLyogcGlwZUQgLSBEQlVGX1MyIC0gcGlwZUMgLSBw aXBlQSAtIERCVUZfUzEgLSBwaXBlQiAqLwo+ID4gPiBzdGF0aWMgY29uc3QgdTggdGdsX2RidWZf ZGlzdGFuY2VbXVtdIHsKPiA+ID4gICAgIFtQSVBFX0FdID0geyBbREJVRl9TMV0gPSAxLCBbREJV Rl9TMl0gPSAyLCB9LAo+ID4gPiAgICAgW1BJUEVfQl0gPSB7IFtEQlVGX1MxXSA9IDEsIFtEQlVG X1MyXSA9IDQsIH0sCj4gPiA+ICAgICBbUElQRV9DXSA9IHsgW0RCVUZfUzFdID0gMiwgW0RCVUZf UzJdID0gMSwgfSwKPiA+ID4gICAgIFtQSVBFX0RdID0geyBbREJVRl9TMV0gPSA0LCBbREJVRl9T Ml0gPSAxLCB9LAo+ID4gPiB9Owo+ID4KPiA+IEkgdGhpbmsgeW91IGFyZSBtaXNzaW5nIG15IHBv aW50LiBJIHdpbGwgZXhwbGFpbiB3aHkuCj4gPiBNeSBpbml0aWFsIGlkZWEgd2FzIHNpbWlsYXIs IHVzZSBzb21lIGtpbmQgb2YgZGlzdGFuY2UKPiA+IG1ldHJpY3MgYW5kIGVuY29kZSBldmVyeXRo aW5nIGluIGEgc21hcnQgd2F5Lgo+ID4gQ3VycmVudCBCU3BlYyB0YWJsZSBoYXMgc29tZXRpbWVz IHNsaWNlcyBzd2FwcGVkIGZvciBubyByZWFzb24uCj4gPgo+ID4gVGhlcmUgYXJlIHNlZW0gdG8g YmUgc29tZSBoYXJkd2FyZSBjb25zdHJhaW50cyB3ZSBhcmUgbm90IGF3YXJlCj4gPiBvZi4gRm9y IGV4YW1wbGUgZm9yIFRHTCBwaXBlcyBBLEIgZ2V0IFMyIGFuZCBTMSBzbGljZXMsCj4gCj4gPkEv UzEgKyBCL1MyID0gMSArIDQgPSA1Cj4gPkEvUzIgKyBCL1MxID0gMiArIDEgPSAzCj4gCj4gPiBi dXQgcGlwZXMgQSBDIGdldCBTMSBhbmQgUzIuCj4gCj4gPkEvUzEgKyBDL1MyID0gMSArIDEgPSAy Cj4gPkEvUzIgKyBDL1MxID0gMiArIDIgPSA0Cj4gCj4gPlNvIGl0J3MgZXhhY3RseSBhcyBteSBk aXN0YW5jZSB0YWJsZSBzYXlzIGl0IHNob3VsZCBiZS4KPiAKPiA+Cj4gPiBpZiB5b3UgZW5jb2Rl IGFsbCB0aGlzIGludG8gc29tZSBraW5kIG9mIGRpc3RhbmNlIGFsZ29yaXRobSwKPiA+IHRob3Nl IGRpZmZlcmVuY2VzIHdvdWxkIGJlIGVub3VybW91c2x5IGRpZmZpY3VsdCB0byBzcG90IGFuZAo+ ID4gY29tcGFyZSB3aXRoIGFjdHVhbCB0YWJsZS4gVGhhdCBpcyB3aHkgSSBkZWNpZGVkIHRvIGRv IGl0IHRoYXQKPiA+IHdheS4KPiA+Cj4gPiBNb3N0IGxpa2VseSB5ZXMgeW91IGNhbiBzb2x2ZSBp dCBieSB1c2luZyB0aGlzIG1ldHJpY3MsCj4gPiBidXQgd2lsbCBpdCByZWFsbHkgYmUgdGhlbiBt b3JlIHJlYWRhYmxlIGFuZCBjb21wYXJhYmxlCj4gPiB3aXRoIHJlZmVyZW5jZSB0YWJsZT8KPiA+ IFdoYXQgaWYgc29tZSBjb250cmFpbnRzIHdpbGwgYmUgYWRkZWQgYWdhaW4sIGxpa2UgcGlwZSBy YXRpbz8KPiA+Cj4gPiA+Cj4gPiA+IC8qCj4gPiA+ICAqIHBpcGVBIC0gREJVRl9TMCAtIERCVUZf UzEgLSBwaXBlQgo+ID4gPiAgKiBwaXBlQyAtIERCVUZfUzIgLSBEQlVGX1MzIC0gcGlwZUQKPiA+ ID4gICovCj4gPiA+IHN0YXRpYyBjb25zdCB1OCBmdXR1cmVfZGJ1Zl9kaXN0YW5jZVtdW10gewo+ ID4gPiAgICAgW1BJUEVfQV0gPSB7IFtEQlVGX1MwXSA9IDEsIFtEQlVGX1MxXSA9IDMsIH0sCj4g PiA+ICAgICBbUElQRV9CXSA9IHsgW0RCVUZfUzBdID0gMywgW0RCVUZfUzFdID0gMSwgfSwKPiA+ ID4gICAgIFtQSVBFX0NdID0geyBbREJVRl9TMl0gPSAxLCBbREJVRl9TM10gPSAzLCB9LAo+ID4g PiAgICAgW1BJUEVfRF0gPSB7IFtEQlVGX1MyXSA9IDMsIFtEQlVGX1MzXSA9IDEsIH0sCj4gPiA+ IH07Cj4gPiA+Cj4gPiA+IEkgc3VwcG9zZSB3ZSBjb3VsZCBtYWtlIHRoYXQgZXZlbiBtb3JlIG1p bmltYWwgYnkganVzdAo+ID4gPiBkaXJlY3RseSBzdGlja2luZyB0aGF0ICJQaXBlIGFuZCBEQlVG IG9yZGVyaW5nIiBsYW5ndWFnZQo+ID4gPiBpbnRvIGEgc2luZ2xlIGFycmF5IGJ1dCBhbmQgdGhl biBjYWxjdWxhdGUgZWFjaCBkaXN0YW5jZQo+ID4gPiBmcm9tIGl0LCBidXQgdGhhdCBpcyBwZXJo YXBzIG1vcmUgd29yaywgYW5kIHdlJ2QgbmVlZAo+ID4gPiBzb21lIGtpbmQgb2YgZW51bSBqdXN0 IGZvciB0aGF0IHNvIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZQo+ID4gPiBuYW1lc3BhY2UgZm9yIHRo ZSBwaXBlcyBhbmQgZGJ1ZiBzbGljZXMuIFNvIGkgaGF2ZSBhCj4gPiA+IGZlZWxpbmcgaGF2aW5n IHRob3NlIGRpc3RhbmNlcyBwcmUtY29tcHV0ZWQgaW4gYSB0YWJsZQo+ID4gPiBsaWtlIHRoZXQg aXMgbWF5YmUgYSBiZXR0ZXIgd2F5IHRvIGdvLgo+ID4KPiA+IEdvb2QgbHVjayB0aGVuIHNwb3Rp bmcgZGlmZmVyZW5jZXMgd2l0aCB0aGUgQlNwZWMgdGFibGUgb25jZSBpdAo+ID4gZ2V0cyBjaGFu Z2VkLgo+IAo+ID5XZWxsLCBJJ2QgcmF0aGVyIGRvIHRoYXQgdGhhbiBkZWNvZGUgdGhyb3VnaCBs YXllcnMgb2YgY3BwIG1hY3Jvcy4KPiA+QWxzbyBhdG0gdGhlIHRhYmxlIGhhcyBubyBleHRyYSBy ZXN0cmljdGlvbnMgc28gaXQncyBjbGVhcmx5IHRoZXJlCj4gPmp1c3QgYmVjYXVzZSBzb21lb25l IHRob3VnaHQgdGhleSdkIHdyaXRlIG91dCB0aGUgcmVzdWx0cyBvZiB0aGUKPiA+ZGlzdGFuY2Ug Y2FsY3VsYXRpb25zLiBJbiBnZW5lcmFsIGJzcGVjIHN0eWxlIGlzIHNvbWV3aGF0IGFubm95aW5n Cj4gPndoZXJlIHRoZXkgdHJ5IHRvIHdyaXRlIG91dCB0aGluZ3MgaW4gdGhlIGxvd2VzdCBsZXZl bCBvZiBhYnNyYWN0aW9uCj4gPnBvc3NpYmxlICh0aGV5IGFyZSBoYXJkd2FyZSBwZW9wbGUgYWZ0 ZXIgYWxsKS4gSSdkIG11Y2ggcHJlZmVyIGEKPiA+aGlnaGVyIGxldmVsIGRlc2NyaXB0aW9uIG9m IHRoZSBpc3N1ZS4KPiAKPiBJIHdvdWxkIHByZWZlciB0byBzZWUgaW1tZWRpYXRlbHkgd2hhdCBp cyBkaWZmZXJlbnQgYXMgdGhpcyB0YWJsZQo+IG1ha2VzIGl0IHBvc3NpYmxlIHJpZ2h0IGF3YXkK PiBBbHNvIHRvIG1lIHRoaXMgdGFibGUgc2ltcGx5IGludHVpdGl2ZWx5IG1vcmUgdW5kZXJzdGFu ZGFibGUuCj4gCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgZGJ1Zl9zbGljZV9jb25mX2VudHJ5IHRnbF9h bGxvd2VkX2RidWZzW10gPSB7Cj4gPiA+ID4gPiA+ICt7IHsgMCwgMCwgMCwgMCB9LCAwIH0sCj4g PiA+ID4gPiA+ICtJQ0xfUElQRV9BX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklUIHwgREJVRl9TMl9C SVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQl9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCB8IERC VUZfUzJfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0NfREJVRl9TTElDRVMoREJVRl9TMV9C SVQgfCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9EX0RCVUZfU0xJQ0VTKERC VUZfUzFfQklUIHwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJfREJVRl9T TElDRVMoREJVRl9TMl9CSVQsIERCVUZfUzFfQklUKSwKPiA+ID4gPiA+ID4gK0lDTF9QSVBFX0FD X0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICtJQ0xf UElQRV9CQ19EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4g PiArSUNMX1BJUEVfQURfREJVRl9TTElDRVMoREJVRl9TMV9CSVQsIERCVUZfUzJfQklUKSwKPiA+ ID4gPiA+ID4gK0lDTF9QSVBFX0JEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCksCj4gPiA+ID4gPiA+ICtJQ0xfUElQRV9DRF9EQlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJV Rl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJEX0RCVUZfU0xJQ0VTKERCVUZfUzFf QklULCBEQlVGX1MxX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiAr SUNMX1BJUEVfQUJDX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MxX0JJVCwKPiA+ID4g PiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUNEX0RCVUZfU0xJQ0VT KERCVUZfUzFfQklULCBEQlVGX1MyX0JJVCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4g PiA+ID4gPiArSUNMX1BJUEVfQkNEX0RCVUZfU0xJQ0VTKERCVUZfUzFfQklULCBEQlVGX1MyX0JJ VCwKPiA+ID4gPiA+ID4gREJVRl9TMl9CSVQpLAo+ID4gPiA+ID4gPiArSUNMX1BJUEVfQUJDRF9E QlVGX1NMSUNFUyhEQlVGX1MxX0JJVCwgREJVRl9TMV9CSVQsCj4gPiA+ID4gPiA+IERCVUZfUzJf QklULAo+ID4gPiA+ID4gPiBEQlVGX1MyX0JJVCksCj4gPiA+ID4gPiA+ICt9Owo+IAo+IFdlIGhh dmUgc2ltaWxhciBDRENMSyB0YWJsZSBpbiBpbnRlbF9jZGNsaywgd2hpbGUgeW91IGNvdWxkIAo+ IGFsc28gYXJndWUgdGhhdCB3ZSBtaWdodCBoYWQgY29tZSB1cCB3aXRoIHNvbWUgZm9ybXVsYS4K ClRoZSBjZGNsayB0YWJsZSBoYXMgb25lIHJlZHVuZGFuY3kgdGhhdCBJJ20gbm90IDEwMCUgZmFu IG9mOgppdCBzcGVjaWZpZXMgYm90aCB0aGUgY2RjbGsgZnJlcXVlbmN5IGFuZCB0aGUgY2QyeCBk aXZpZGVyLgpXZSBjb3VsZCBtYWtlIGRvIHdpdGgganVzdCBlaXRoZXIgb25lIGFuZCBjYWxjdWxh dGUgdGhlIG90aGVyCm9uZS4KCk9uIHRoZSBmbGlwIHNpZGUgdGhhdCByZWR1bmRhbmN5IHdvdWxk IGFsbG93IHVzIHRvIGNyb3NzIGNoZWNrCnRoYXQgdGhlIHZhbHVlcyBwcm9kdWNlIHRoZSBleHBl Y3RlZCByZXN1bHRzLiBJIGFjdHVhbGx5IGhhdmUKYSBwYXRjaCBmb3IgdGhhdCBidXJpZWQgaW4g c29tZSBicmFuY2guCgpBcGFydCBmcm9tIHRoYXQgSSBkb24ndCBzZWUgd2hhdCB0aGUgY2RjbGsg dGFibGUgaGFzIHRvIGRvCndpdGggdGhpcyBzdHVmZi4gV2UgY2FuJ3QgZGVyaXZlIHRoYXQgY2Rj bGsgdGFibGUgZnJvbSBhbnl0aGluZwptdWNoIHNpbXBsZXIuCgpBbnl3YXlzLCBteSBwcmVmZXJy ZWQgYXBwcm9hY2ggdG8gdGhpcyBzb3J0IG9mIHN0dWZmIGlzIHRvCm1ha2UgdGhlIGNvbXB1dGVy IGRvIHRoZSBjYWxjdWxhdGlvbnMuIFRoYXQncyB3aGF0IGl0J3MgZ29vZAphdC4gSHVtYW5zLCBu b3Qgc28gZ3JlYXQgYXQgY29tcHV0YXRpb25zLCBvciBldmVuIGNvcHkgcGFzdGluZy4KVGhvdWdo IGFzIHdpdGggdGhlIGNkY2xrIHRhYmxlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBtYWtlCmh1bWFu cyBkbyB0aGUgY2FsY3VsYXRpb25zL2NvcHkgcGFzdGUgYW5kIHRoZW4gaGF2ZSB0aGUKY29tcHV0 ZXIgZG91YmxlIGNoZWNrIGl0IGFsbCBtYWtlcyBzZW5zZS4KCi0tIApWaWxsZSBTeXJqw6Rsw6QK SW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4