From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH 05/17] drm/i915/icl: compute the MG PLL registers Date: Thu, 1 Mar 2018 15:35:22 -0800 Message-ID: <20180301233522.GA12557@intel.com> References: <20180222035519.13486-1-paulo.r.zanoni@intel.com> <20180222035519.13486-6-paulo.r.zanoni@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 44C746EDC6 for ; Thu, 1 Mar 2018 23:32:24 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180222035519.13486-6-paulo.r.zanoni@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMTI6NTU6MDdBTSAtMDMwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IFRoaXMgaW1wbGVtZW50cyB0aGUgIk1HIFBMTCBQcm9ncmFtbWluZyIgc2VxdWVuY2Ug ZnJvbSBvdXIgc3BlYy4gVGhlCj4gYmlnZ2VzdCBwcm9ibGVtIHdhcyB0aGF0IHRoZSBzcGVjIGFz c3VtZXMgcmVhbCBudW1iZXJzLCBzbyB3ZSBoYWQgdG8KPiBhZGp1c3Qgc29tZSBudW1iZXJzIGFu ZCBhbGN1bGF0aW9ucyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgS2VybmVsCj4gcHJlZmVycyB0 byBkZWFsIHdpdGggaW50ZWdlcnMuCj4gCj4gSSByZWNvbW1lbmQgZ3JhYmJpbmcgc29tZSBjb2Zm ZWUsIGEgcGVuIGFuZCBwYXBlciBiZWZvcmUgcmV2aWV3aW5nCj4gdGhpcyBwYXRjaC4KPiAKPiB2 MjoKPiAgLSBDb3JyZWN0bHkgaWRlbnRpZnkgRFAgZW5jb2RlcnMgYWZ0ZXIgdXBzdHJlYW0gY2hh bmdlLgo+ICAtIFNtYWxsIGNoZWNrcGF0Y2ggaXNzdWVzLgo+ICAtIFJlYmFzZS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3IuYyB8IDIxNyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystCj4gIDEgZmlsZSBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcGxsX21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBsbF9tZ3Iu Ywo+IGluZGV4IDVkN2JhY2M4MDY4OC4uOWEyOTY1ZTBiODgzIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwbGxfbWdyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcGxsX21nci5jCj4gQEAgLTI1MTQsMTEgKzI1MTQsMjI2IEBAIHN0YXRpYyBl bnVtIGludGVsX2RwbGxfaWQgaWNsX3BvcnRfdG9fbWdfcGxsX2lkKGVudW0gcG9ydCBwb3J0KQo+ ICAJcmV0dXJuIHBvcnQgLSBQT1JUX0MgKyBEUExMX0lEX0lDTF9NR1BMTDE7Cj4gIH0KPiAgCj4g K3N0YXRpYyBib29sIGljbF9tZ19wbGxfZmluZF9kaXZpc29ycyhpbnQgY2xvY2tfa2h6LCBib29s IGlzX2RwLCBib29sIHVzZV9zc2MsCj4gKwkJCQkgICAgIHVpbnQzMl90ICp0YXJnZXRfZGNvX2to eiwKPiArCQkJCSAgICAgc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgKnN0YXRlKQo+ICt7Cj4g Kwl1aW50MzJfdCBkY29fbWluX2ZyZXEsIGRjb19tYXhfZnJlcTsKPiArCWludCBkaXYxX3ZhbHNb XSA9IHs3LCA1LCAzLCAyfTsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJaW50IGRpdjI7Cj4gKwo+ ICsJZGNvX21pbl9mcmVxID0gaXNfZHAgPyA4MTAwMDAwIDogdXNlX3NzYyA/IDgwMDAwMDAgOiA3 OTkyMDAwOwo+ICsJZGNvX21heF9mcmVxID0gaXNfZHAgPyA4MTAwMDAwIDogMTAwMDAwMDA7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGl2MV92YWxzKTsgaSsrKSB7Cj4gKwkJ aW50IGRpdjEgPSBkaXYxX3ZhbHNbaV07Cj4gKwo+ICsJCWZvciAoZGl2MiA9IDEwOyBkaXYyID4g MDsgZGl2Mi0tKSB7Cj4gKwkJCWludCBkY28gPSBkaXYxICogZGl2MiAqIGNsb2NrX2toeiAqIDU7 Cj4gKwkJCWludCBhX2RpdnJhdGlvLCB0bGluZWRydiwgaW5wdXRzZWwsIGhzZGl2Owo+ICsKPiAr CQkJaWYgKGRjbyA8IGRjb19taW5fZnJlcSB8fCBkY28gPiBkY29fbWF4X2ZyZXEpCj4gKwkJCQlj b250aW51ZTsKPiArCj4gKwkJCWlmIChkaXYyID49IDIpIHsKPiArCQkJCWFfZGl2cmF0aW8gPSBp c19kcCA/IDEwIDogNTsKPiArCQkJCXRsaW5lZHJ2ID0gMjsKPiArCQkJfSBlbHNlIHsKPiArCQkJ CWFfZGl2cmF0aW8gPSA1Owo+ICsJCQkJdGxpbmVkcnYgPSAwOwo+ICsJCQl9Cj4gKwkJCWlucHV0 c2VsID0gaXNfZHAgPyAwIDogMTsKPiArCj4gKwkJCXN3aXRjaCAoZGl2MSkgewo+ICsJCQlkZWZh dWx0Ogo+ICsJCQkJTUlTU0lOR19DQVNFKGRpdjEpOwo+ICsJCQljYXNlIDI6Cj4gKwkJCQloc2Rp diA9IDA7Cj4gKwkJCQlicmVhazsKPiArCQkJY2FzZSAzOgo+ICsJCQkJaHNkaXYgPSAxOwo+ICsJ CQkJYnJlYWs7Cj4gKwkJCWNhc2UgNToKPiArCQkJCWhzZGl2ID0gMjsKPiArCQkJCWJyZWFrOwo+ ICsJCQljYXNlIDc6Cj4gKwkJCQloc2RpdiA9IDM7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsK PiArCQkJKnRhcmdldF9kY29fa2h6ID0gZGNvOwo+ICsKPiArCQkJc3RhdGUtPm1nX3JlZmNsa2lu X2N0bCA9IE1HX1JFRkNMS0lOX0NUTF9PRF8yX01VWCgxKTsKPiArCj4gKwkJCXN0YXRlLT5tZ19j bGt0b3AyX2NvcmVjbGtjdGwxID0KPiArCQkJCU1HX0NMS1RPUDJfQ09SRUNMS0NUTDFfQV9ESVZS QVRJTyhhX2RpdnJhdGlvKTsKPiArCj4gKwkJCXN0YXRlLT5tZ19jbGt0b3AyX2hzY2xrY3RsID0K PiArCQkJCU1HX0NMS1RPUDJfSFNDTEtDVExfVExJTkVEUlZfQ0xLU0VMKHRsaW5lZHJ2KSB8Cj4g KwkJCQlNR19DTEtUT1AyX0hTQ0xLQ1RMX0NPUkVfSU5QVVRTRUwoaW5wdXRzZWwpIHwKPiArCQkJ CU1HX0NMS1RPUDJfSFNDTEtDVExfSFNESVZfUkFUSU8oaHNkaXYpIHwKPiArCQkJCU1HX0NMS1RP UDJfSFNDTEtDVExfRFNESVZfUkFUSU8oZGl2Mik7Cj4gKwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGUg c3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiB1c2VzIHJlYWwgbnVtYmVycywgc28gdGhl IG1hdGggaGFkIHRvIGJlCj4gKyAqIGFkYXB0ZWQgdG8gaW50ZWdlci1vbmx5IGNhbGN1bGF0aW9u LCB0aGF0J3Mgd2h5IGl0IGxvb2tzIHNvIGRpZmZlcmVudC4KPiArICovCj4gIHN0YXRpYyBib29s IGljbF9jYWxjX21nX3BsbF9zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKPiAgCQkJCSAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsIGludCBjbG9jaywKPiAg CQkJCSAgc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgKnBsbF9zdGF0ZSkKPiAgewo+IC0JLyog VE9ETyAqLwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShl bmNvZGVyLT5iYXNlLmRldik7Cj4gKwlpbnQgcmVmY2xrX2toeiA9IGRldl9wcml2LT5jZGNsay5o dy5yZWY7Cj4gKwl1aW50MzJfdCBkY29fa2h6LCBtMWRpdiwgbTJkaXZfaW50LCBtMmRpdl9yZW0s IG0yZGl2X2ZyYWM7Cj4gKwl1aW50MzJfdCBpcmVmX25kaXYsIGlyZWZfdHJpbSwgaXJlZl9wdWxz ZV93Owo+ICsJdWludDMyX3QgcHJvcF9jb2VmZiwgaW50X2NvZWZmOwo+ICsJdWludDMyX3QgdGRj X3RhcmdldGNudCwgZmVlZGZ3Z2FpbjsKPiArCXVpbnQ2NF90IHNzY19zdGVwc2l6ZSwgc3NjX3N0 ZXBsZW4sIHNzY19zdGVwbG9nOwo+ICsJdWludDY0X3QgdG1wOwo+ICsJYm9vbCB1c2Vfc3NjID0g ZmFsc2U7Cj4gKwlib29sIGlzX2RwID0gIWludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwg SU5URUxfT1VUUFVUX0hETUkpOwo+ICsKPiArCWlmICghaWNsX21nX3BsbF9maW5kX2Rpdmlzb3Jz KGNsb2NrLCBpc19kcCwgdXNlX3NzYywgJmRjb19raHosCj4gKwkJCQkgICAgICBwbGxfc3RhdGUp KSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIGZpbmQgZGl2aXNvcnMgZm9yIGNsb2Nr ICVkXG4iLCBjbG9jayk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCW0xZGl2ID0g MjsKPiArCW0yZGl2X2ludCA9IGRjb19raHogLyAocmVmY2xrX2toeiAqIG0xZGl2KTsKPiArCWlm IChtMmRpdl9pbnQgPiAyNTUpIHsKPiArCQltMWRpdiA9IDQ7Cj4gKwkJbTJkaXZfaW50ID0gZGNv X2toeiAvIChyZWZjbGtfa2h6ICogbTFkaXYpOwo+ICsJCWlmIChtMmRpdl9pbnQgPiAyNTUpIHsK PiArCQkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIGZpbmQgbWRpdiBmb3IgY2xvY2sgJWRcbiIs Cj4gKwkJCQkgICAgICBjbG9jayk7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwl9Cj4g KwltMmRpdl9yZW0gPSBkY29fa2h6ICUgKHJlZmNsa19raHogKiBtMWRpdik7Cj4gKwo+ICsJdG1w ID0gKHVpbnQ2NF90KW0yZGl2X3JlbSAqICgxIDw8IDIyKTsKPiArCWRvX2Rpdih0bXAsIHJlZmNs a19raHogKiBtMWRpdik7Cj4gKwltMmRpdl9mcmFjID0gdG1wOwo+ICsKPiArCXN3aXRjaCAocmVm Y2xrX2toeikgewo+ICsJY2FzZSAxOTIwMDoKPiArCQlpcmVmX25kaXYgPSAxOwo+ICsJCWlyZWZf dHJpbSA9IDI4Owo+ICsJCWlyZWZfcHVsc2VfdyA9IDE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI0 MDAwOgo+ICsJCWlyZWZfbmRpdiA9IDE7Cj4gKwkJaXJlZl90cmltID0gMjU7Cj4gKwkJaXJlZl9w dWxzZV93ID0gMjsKPiArCQlicmVhazsKPiArCWNhc2UgMzg0MDA6Cj4gKwkJaXJlZl9uZGl2ID0g MjsKPiArCQlpcmVmX3RyaW0gPSAyODsKPiArCQlpcmVmX3B1bHNlX3cgPSAxOwo+ICsJCWJyZWFr Owo+ICsJZGVmYXVsdDoKPiArCQlNSVNTSU5HX0NBU0UocmVmY2xrX2toeik7Cj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiB0ZGNfcmVzID0gMC4wMDAwMDMKPiArCSAq IHRkY190YXJnZXRjbnQgPSBpbnQoMiAvICh0ZGNfcmVzICogOCAqIDUwICogMS4xKSAvIHJlZmNs a19taHogKyAwLjUpCj4gKwkgKgo+ICsJICogVGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwMDAgaXMg ZHVlIHRvIHJlZmNsayBNSHogdG8gS0h6IGNvbnZlcnNpb24uCj4gKwkgKiAwLjAwMDAwMyAqIDgg KiA1MCAqIDEuMSA9IDAuMDAxMzIsIGFsc28ga25vd24gYXMgMTMyIC8gMTAwMDAwLgo+ICsJICog VGhlIDAuNSB0cmFuc2Zvcm1lZCB0byA1IHJlc3VsdHMgaW4gYSBtdWx0aXBsaWNhdGlvbiBieSAx MCBhbmQgdGhlCj4gKwkgKiBsYXN0IGRpdmlzaW9uIGJ5IDEwLgo+ICsJICovCgpKdXN0IGEgbml0 IGhlcmUgaW4gdGhlIGNvbW1lbnQgYWJvdmUgc2luY2UgdGhhdCBkZWZpbml0ZWx5IGdvdCBtZSBj b25mdXNlZCB3aXRoIHRoZQpyZWZjbGsgaW4gTWh6IHRvIEtoeiBjb252ZXJzaW9uLiBTbyBpbiB0 aGUgZXF1YXRpb24gYmVsb3csIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSBpbiBLaHogdG8g TWh6CnNvIGl0cyBhIGRpdmlzaW9uIGJ5IDEwMDAgdGhhdCBiZWNvbWVzIGEgbXVsdGlwbGllciBi eSAxMDAwIGluIHRoZSBudW1lcmF0b3IuIFNvIEkgdGhpbmsgdGhlIGNvbW1lbnQgc2hvdWxkCmJl IHVwZGF0ZWQgdG8gY2xhcmlmeSB0aGlzLgoKQXBhcnQgZnJvbSB0aGlzLCBkb3VibGUgY2hlY2tl ZCBhbGwgdGhlIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBzcGVjIGFuZCBsb29rIGdvb2QuIFNvCgpS ZXZpZXdlZC1ieTsgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KCk1h bmFzaQoKPiArCXRkY190YXJnZXRjbnQgPSAoMiAqIDEwMDAgKiAxMDAwMDAgKiAxMCAvICgxMzIg KiByZWZjbGtfa2h6KSArIDUpIC8gMTA7Cj4gKwo+ICsJLyoKPiArCSAqIEhlcmUgd2UgZGl2aWRl IGRjb19raHogYnkgMTAgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGRpdmlkZW5kIHRvIGZpdCBpbgo+ ICsJICogMzIgYml0cy4gVGhhdCdzIG5vdCBhIHByb2JsZW0gc2luY2Ugd2Ugcm91bmQgdGhlIGRp dmlzaW9uIGRvd24KPiArCSAqIGFueXdheS4KPiArCSAqLwo+ICsJZmVlZGZ3Z2FpbiA9ICh1c2Vf c3NjIHx8IG0yZGl2X3JlbSA+IDApID8KPiArCQltMWRpdiAqIDEwMDAwMDAgKiAxMDAgLyAoZGNv X2toeiAqIDMgLyAxMCkgOiAwOwo+ICsKPiArCWlmIChkY29fa2h6ID49IDkwMDAwMDApIHsKPiAr CQlwcm9wX2NvZWZmID0gNTsKPiArCQlpbnRfY29lZmYgPSAxMDsKPiArCX0gZWxzZSB7Cj4gKwkJ cHJvcF9jb2VmZiA9IDQ7Cj4gKwkJaW50X2NvZWZmID0gODsKPiArCX0KPiArCj4gKwlpZiAodXNl X3NzYykgewo+ICsJCXRtcCA9ICh1aW50NjRfdClkY29fa2h6ICogNDcgKiAzMjsKPiArCQlkb19k aXYodG1wLCByZWZjbGtfa2h6ICogbTFkaXYgKiAxMDAwMCk7Cj4gKwkJc3NjX3N0ZXBzaXplID0g dG1wOwo+ICsKPiArCQl0bXAgPSAodWludDY0X3QpZGNvX2toeiAqIDEwMDA7Cj4gKwkJc3NjX3N0 ZXBsZW4gPSBESVZfUk9VTkRfVVBfVUxMKHRtcCwgMzIgKiAyICogMzIpOwo+ICsJfSBlbHNlIHsK PiArCQlzc2Nfc3RlcHNpemUgPSAwOwo+ICsJCXNzY19zdGVwbGVuID0gMDsKPiArCX0KPiArCXNz Y19zdGVwbG9nID0gNDsKPiArCj4gKwlwbGxfc3RhdGUtPm1nX3BsbF9kaXYwID0gKG0yZGl2X3Jl bSA+IDAgPyBNR19QTExfRElWMF9GUkFDTkVOX0ggOiAwKSB8Cj4gKwkJCQkgIE1HX1BMTF9ESVYw X0ZCRElWX0ZSQUMobTJkaXZfZnJhYykgfAo+ICsJCQkJICBNR19QTExfRElWMF9GQkRJVl9JTlQo bTJkaXZfaW50KTsKPiArCj4gKwlwbGxfc3RhdGUtPm1nX3BsbF9kaXYxID0gTUdfUExMX0RJVjFf SVJFRl9ORElWUkFUSU8oaXJlZl9uZGl2KSB8Cj4gKwkJCQkgTUdfUExMX0RJVjFfRElUSEVSX0RJ Vl8yIHwKPiArCQkJCSBNR19QTExfRElWMV9ORElWUkFUSU8oMSkgfAo+ICsJCQkJIE1HX1BMTF9E SVYxX0ZCUFJFRElWKG0xZGl2KTsKPiArCj4gKwlwbGxfc3RhdGUtPm1nX3BsbF9sZiA9IE1HX1BM TF9MRl9URENUQVJHRVRDTlQodGRjX3RhcmdldGNudCkgfAo+ICsJCQkgICAgICAgTUdfUExMX0xG X0FGQ0NOVFNFTF81MTIgfAo+ICsJCQkgICAgICAgTUdfUExMX0xGX0dBSU5DVFJMKDEpIHwKPiAr CQkJICAgICAgIE1HX1BMTF9MRl9JTlRfQ09FRkYoaW50X2NvZWZmKSB8Cj4gKwkJCSAgICAgICBN R19QTExfTEZfUFJPUF9DT0VGRihwcm9wX2NvZWZmKTsKPiArCj4gKwlwbGxfc3RhdGUtPm1nX3Bs bF9mcmFjX2xvY2sgPSBNR19QTExfRlJBQ19MT0NLX1RSVUVMT0NLX0NSSVRfMzIgfAo+ICsJCQkJ ICAgICAgTUdfUExMX0ZSQUNfTE9DS19FQVJMWUxPQ0tfQ1JJVF8zMiB8Cj4gKwkJCQkgICAgICBN R19QTExfRlJBQ19MT0NLX0xPQ0tUSFJFU0goMTApIHwKPiArCQkJCSAgICAgIE1HX1BMTF9GUkFD X0xPQ0tfRENPRElUSEVSRU4gfAo+ICsJCQkJICAgICAgTUdfUExMX0ZSQUNfTE9DS19GRUVERldS REdBSU4oZmVlZGZ3Z2Fpbik7Cj4gKwlpZiAodXNlX3NzYyB8fCBtMmRpdl9yZW0gPiAwKQo+ICsJ CXBsbF9zdGF0ZS0+bWdfcGxsX2ZyYWNfbG9jayB8PSBNR19QTExfRlJBQ19MT0NLX0ZFRURGV1JE Q0FMX0VOOwo+ICsKPiArCXBsbF9zdGF0ZS0+bWdfcGxsX3NzYyA9ICh1c2Vfc3NjID8gTUdfUExM X1NTQ19FTiA6IDApIHwKPiArCQkJCU1HX1BMTF9TU0NfVFlQRSgyKSB8Cj4gKwkJCQlNR19QTExf U1NDX1NURVBMRU5HVEgoc3NjX3N0ZXBsZW4pIHwKPiArCQkJCU1HX1BMTF9TU0NfU1RFUE5VTShz c2Nfc3RlcGxvZykgfAo+ICsJCQkJTUdfUExMX1NTQ19GSUxFTiB8Cj4gKwkJCQlNR19QTExfU1ND X1NURVBTSVpFKHNzY19zdGVwc2l6ZSk7Cj4gKwo+ICsJcGxsX3N0YXRlLT5tZ19wbGxfdGRjX2Nv bGRzdF9iaWFzID0gTUdfUExMX1REQ19DT0xEU1RfQ09MRFNUQVJUOwo+ICsKPiArCWlmIChyZWZj bGtfa2h6ICE9IDM4NDAwKSB7Cj4gKwkJcGxsX3N0YXRlLT5tZ19wbGxfdGRjX2NvbGRzdF9iaWFz IHw9Cj4gKwkJCU1HX1BMTF9URENfQ09MRFNUX0lSRUZJTlRfRU4gfAo+ICsJCQlNR19QTExfVERD X0NPTERTVF9SRUZCSUFTX1NUQVJUX1BVTFNFX1coaXJlZl9wdWxzZV93KSB8Cj4gKwkJCU1HX1BM TF9URENfQ09MRFNUX0NPTERTVEFSVCB8Cj4gKwkJCU1HX1BMTF9URENfVERDQ09WQ0NPUlJfRU4g fAo+ICsJCQlNR19QTExfVERDX1REQ1NFTCgzKTsKPiArCj4gKwkJcGxsX3N0YXRlLT5tZ19wbGxf YmlhcyA9IE1HX1BMTF9CSUFTX0JJQVNfR0JfU0VMKDMpIHwKPiArCQkJCQkgTUdfUExMX0JJQVNf SU5JVF9EQ09BTVAoMHgzRikgfAo+ICsJCQkJCSBNR19QTExfQklBU19CSUFTX0JPTlVTKDEwKSB8 Cj4gKwkJCQkJIE1HX1BMTF9CSUFTX0JJQVNDQUxfRU4gfAo+ICsJCQkJCSBNR19QTExfQklBU19D VFJJTSgxMikgfAo+ICsJCQkJCSBNR19QTExfQklBU19WUkVGX1JEQUMoNCkgfAo+ICsJCQkJCSBN R19QTExfQklBU19JUkVGVFJJTShpcmVmX3RyaW0pOwo+ICsJfQo+ICsKPiAgCXJldHVybiB0cnVl Owo+ICB9Cj4gIAo+IC0tIAo+IDIuMTQuMwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK