From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,2/2] dmaengine: sprd: Add Spreadtrum DMA configuration From: Vinod Koul Message-Id: <20180517061135.GV13271@vkoul-mobl> Date: Thu, 17 May 2018 11:41:35 +0530 To: Baolin Wang Cc: Dan Williams , Eric Long , Mark Brown , dmaengine@vger.kernel.org, LKML List-ID: T24gMTctMDUtMTgsIDE0OjAyLCBCYW9saW4gV2FuZyB3cm90ZToKPiBIaSBWaW5vZCwKPiAKPiBP biAxNyBNYXkgMjAxOCBhdCAxMzoxNCwgVmlub2QgPHZrb3VsQGtlcm5lbC5vcmc+IHdyb3RlOgo+ ID4gT24gMTEtMDUtMTgsIDIxOjA2LCBCYW9saW4gV2FuZyB3cm90ZToKPiA+PiArc3RydWN0IHNw cmRfZG1hX2NvbmZpZyB7Cj4gPj4gKyAgICAgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY2ZnOwo+ ID4+ICsgICAgIHUzMiBibG9ja19sZW47Cj4gPj4gKyAgICAgdTMyIHRyYW5zY2F0aW9uX2xlbjsK PiA+Cj4gPiAvcy90cmFuc2NhdGlvbi90cmFuc2FjdGlvbgo+IAo+IE9LLgo+IAo+ID4KPiA+IG5v dyBpbiBjb2RlIEkgc2VlIGJsb2NrX2xlbiBhbmQgdGhpcyBmaWxsZWQgYnkgbGVuIHdoaWNoIGlz IHNnX2RtYV9sZW4oKT8KPiA+IFNvIHdoeSB0d28gdmFyaWJhbGVzIHdoZW4geW91IGFyZSB1c2lu ZyBvbmx5IG9uZS4KPiAKPiBMaWtlIEkgZXhwbGFpbmVkIGJlZm9yZSwgd2UgaGF2ZSB0cmFuc2Fj dGlvbiB0cmFuc2ZlciwgYmxvY2sgdHJhbnNmZXIKPiBhbmQgZnJhZ21lbnQgdHJhbnNmZXIsIGFu ZCB3ZSBzaG91bGQgc2V0IHRoZSBsZW5ndGggZm9yIGVhY2ggdHJhbnNmZXIuCj4gSW4gZnV0dXJl LCB3ZSB3ZSB3aWxsIHVzZSB0aGVzZSB0d28gdmFyaWFibGVzIGluIGN5Y2xpYyBtb2RlLCBidXQg Zm9yCj4gcHJlcF9zZywgd2UganVzdCBtYWtlIHRoZW0gZXF1YWwgdG8KClBsZWFzZSBhZGQgdGhl bSB3aGVuIHlvdSBoYXZlIHVzZSBmb3IgaXQuIFNvcnJ5IGxpbnV4IGtlcm5lbCBpcyBub3QgYSBw bGFjZSBmb3IKZHVtcGluZyBmdXR1cmUgdXNlIHdvcmsKCj4gCj4gPgo+ID4gU2Vjb25kLCB5b3Ug YXJlIHN0b3JpbmcgcGFyYW1ldGVycyBwcm9ncmFtbWVkIHRocnUgX3ByZXAgY2FsbCBpbnRvCj4g PiBfZG1hX2NvbmZpZy4gVGhhdCBpcyBub3QgY29ycmVjdC4KPiA+Cj4gPiBXZSB1c2UgdGhlc2Ug dG8gc3RvcmUgY2hhbm5lbCBwYXJhbWV0ZXJzIGFuZCBOT1QgdHJhbnNhY3Rpb24gcGFyYW1ldGVy cyB3aGljaAo+ID4gd291bGQgZGlmZmVyIHdpdGggZWFjaCB0eG4uIE5vIHdvbmRlciB5b3UgY2Fu IG9ubHkgc3VwcG9ydCBvbmx5IDEgdHhuIDopCj4gCj4gRmluZSwgd2UgY2FuIHJlbW92ZSBibG9j a19sZW4vdHJhbnNjYXRpb25fbGVuIGZyb20gJ3N0cnVjdAo+IHNwcmRfZG1hX2NvbmZpZycuIEFu eSBvdGhlciBpc3N1ZXMgZm9yIHRoZSAnc3RydWN0IHNwcmRfZG1hX2NvbmZpZyc/CgpZZXMgc2Vl IHRoZSBjb21tZW50cyBvbiBwcmVwXwoKPiAKPiA+Cj4gPiBMYXN0bHksIGlmIHRoZXNlIGFyZSBz YW1lIHZhbHVlcyB3aHkgbm90IHVzZSBzcmMvZHN0bl9tYXhfYnVyc3Q/Cj4gCj4gVGhlIGZyYWdt ZW50IGxlbmd0aCB3aWxsIGJlIGZpbGxlZCBieSBzcmMvZHN0bl9tYXhfYnVyc3Qsc28gd2UgY2Fu IG5vdAo+IHVzZSBpdCBhZ2Fpbi4KPiAKPiA+Cj4gPj4gK3N0YXRpYyBlbnVtIHNwcmRfZG1hX2Rh dGF3aWR0aAo+ID4+ICtzcHJkX2RtYV9nZXRfZGF0YXdpZHRoKGVudW0gZG1hX3NsYXZlX2J1c3dp ZHRoIGJ1c3dpZHRoKQo+ID4+ICt7Cj4gPj4gKyAgICAgc3dpdGNoIChidXN3aWR0aCkgewo+ID4+ ICsgICAgIGNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKPiA+PiArICAgICBjYXNlIERN QV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgo+ID4+ICsgICAgIGNhc2UgRE1BX1NMQVZFX0JVU1dJ RFRIXzRfQllURVM6Cj4gPj4gKyAgICAgY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfOF9CWVRFUzoK PiA+PiArICAgICAgICAgICAgIHJldHVybiBmZnMoYnVzd2lkdGgpIC0gMTsKPiA+PiArICAgICBk ZWZhdWx0Ogo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuIFNQUkRfRE1BX0RBVEFXSURUSF80X0JZ VEVTOwo+ID4KPiA+IERvZXMgZGVmYXVsdCBtYWtlIHNlbnNlLCBzaG91bGQgd2UgZXJyb3Igb3V0 Pwo+IAo+IE5vdCBvbmUgZXJyb3IsIG1heWJlIHdlIGNhbiBnaXZlIHNvbWUgd2FybmluZyBpbmZv cm1hdGlvbi4KCndlbGwgY2xpZW50IHByb2dyYW1tZWQgYSB3cm9uZyB2YWx1ZSwgc28gSSBleHBl Y3QgdGhpcyB0byBlcnJvciBvdXQuCgo+IAo+ID4KPiA+PiArc3RhdGljIHUzMiBzcHJkX2RtYV9n ZXRfc3RlcChlbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBidXN3aWR0aCkKPiA+PiArewo+ID4+ICsg ICAgIHN3aXRjaCAoYnVzd2lkdGgpIHsKPiA+PiArICAgICBjYXNlIERNQV9TTEFWRV9CVVNXSURU SF8xX0JZVEU6Cj4gPj4gKyAgICAgY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKPiA+ PiArICAgICBjYXNlIERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOgo+ID4+ICsgICAgIGNhc2Ug RE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVM6Cj4gPj4gKyAgICAgICAgICAgICByZXR1cm4gYnVz d2lkdGg7Cj4gPj4gKwo+ID4+ICsgICAgIGRlZmF1bHQ6Cj4gPj4gKyAgICAgICAgICAgICByZXR1 cm4gU1BSRF9ETUFfRFdPUkRfU1RFUDsKPiA+Cj4gPiBEb2VzIGRlZmF1bHQgbWFrZSBzZW5zZSwg c2hvdWxkIHdlIGVycm9yIG91dD8KPiAKPiBEaXR0by4KPiAKPiA+Cj4gPj4gK3N0YXRpYyBpbnQg c3ByZF9kbWFfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNwcmRfZG1hX2Rl c2MgKnNkZXNjLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IHNyYywg ZG1hX2FkZHJfdCBkc3QsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzcHJk X2RtYV9jb25maWcgKnNsYXZlX2NmZykKPiA+PiArewo+ID4+ICsgICAgIHN0cnVjdCBzcHJkX2Rt YV9kZXYgKnNkZXYgPSB0b19zcHJkX2RtYV9kZXYoY2hhbik7Cj4gPj4gKyAgICAgc3RydWN0IHNw cmRfZG1hX2NobiAqc2NoYW4gPSB0b19zcHJkX2RtYV9jaGFuKGNoYW4pOwo+ID4+ICsgICAgIHN0 cnVjdCBzcHJkX2RtYV9jaG5faHcgKmh3ID0gJnNkZXNjLT5jaG5faHc7Cj4gPj4gKyAgICAgdTMy IGZpeF9tb2RlID0gMCwgZml4X2VuID0gMCwgd3JhcF9lbiA9IDAsIHdyYXBfbW9kZSA9IDA7Cj4g Pj4gKyAgICAgdTMyIHNyY19kYXRhd2lkdGgsIGRzdF9kYXRhd2lkdGgsIHRlbXA7Cj4gPj4gKwo+ ID4+ICsgICAgIGlmIChzbGF2ZV9jZmctPmNmZy5zbGF2ZV9pZCkKPiA+PiArICAgICAgICAgICAg IHNjaGFuLT5kZXZfaWQgPSBzbGF2ZV9jZmctPmNmZy5zbGF2ZV9pZDsKPiA+PiArCj4gPj4gKyAg ICAgaHctPmNmZyA9IFNQUkRfRE1BX0RPTk9UX1dBSVRfQkRPTkUgPDwgU1BSRF9ETUFfV0FJVF9C RE9ORV9PRkZTRVQ7Cj4gPj4gKwo+ID4+ICsgICAgIHRlbXAgPSBzbGF2ZV9jZmctPndyYXBfcHRy ICYgU1BSRF9ETUFfTE9XX0FERFJfTUFTSzsKPiA+PiArICAgICB0ZW1wIHw9IChzcmMgPj4gU1BS RF9ETUFfSElHSF9BRERSX09GRlNFVCkgJiBTUFJEX0RNQV9ISUdIX0FERFJfTUFTSzsKPiA+PiAr ICAgICBody0+d3JhcF9wdHIgPSB0ZW1wOwo+ID4+ICsKPiA+PiArICAgICB0ZW1wID0gc2xhdmVf Y2ZnLT53cmFwX3RvICYgU1BSRF9ETUFfTE9XX0FERFJfTUFTSzsKPiA+PiArICAgICB0ZW1wIHw9 IChkc3QgPj4gU1BSRF9ETUFfSElHSF9BRERSX09GRlNFVCkgJiBTUFJEX0RNQV9ISUdIX0FERFJf TUFTSzsKPiA+PiArICAgICBody0+d3JhcF90byA9IHRlbXA7Cj4gPj4gKwo+ID4+ICsgICAgIGh3 LT5zcmNfYWRkciA9IHNyYyAmIFNQUkRfRE1BX0xPV19BRERSX01BU0s7Cj4gPj4gKyAgICAgaHct PmRlc19hZGRyID0gZHN0ICYgU1BSRF9ETUFfTE9XX0FERFJfTUFTSzsKPiA+PiArCj4gPj4gKyAg ICAgaWYgKChzbGF2ZV9jZmctPnNyY19zdGVwICE9IDAgJiYgc2xhdmVfY2ZnLT5kc3Rfc3RlcCAh PSAwKQo+ID4+ICsgICAgICAgICB8fCAoc2xhdmVfY2ZnLT5zcmNfc3RlcCB8IHNsYXZlX2NmZy0+ ZHN0X3N0ZXApID09IDApIHsKPiA+Cj4gPiB0aGlzIGNoZWNrIGRvZXNudCBzZWVtIHJpZ2h0IHRv IG1lLCB3aGF0IGFyZSB5b3UgdHJ5aW5nIGhlcmU/Cj4gCj4gVGhpcyBpcyBTUFJEIERNQSBpbnRl cm5hbCBmZWF0dXJlOiBhZGRyZXNzLWZpeCB0cmFuc2Zlci4gSWYgdGhlIHNyYwo+IHN0ZXAgYW5k IGRzdCBzdGVwIGJvdGggYXJlIDAgb3IgYm90aCBhcmUgbm90IDAsIHRoYXQgbWVhbnMgd2UgY2Fu IG5vdAo+IGVuYWJsZSB0aGUgZml4IG1vZGUuCj4gSWYgb25lIGlzIDAgYW5kIGFub3RoZXIgb25l IGlzIG5vdCwgd2UgY2FuIGVuYWJsZSB0aGUgZml4IG1vZGUuCgpBIGNvbW1lbnQgaGVyZSB3b3Vs ZCBoZWxwIGV4cGxhaW4gdGhpcyA6KQoKPiAKPiA+Cj4gPj4gKyAgICAgICAgICAgICBmaXhfZW4g PSAwOwo+ID4+ICsgICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgICAgICBmaXhfZW4gPSAxOwo+ ID4+ICsgICAgICAgICAgICAgaWYgKHNsYXZlX2NmZy0+c3JjX3N0ZXApCj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgIGZpeF9tb2RlID0gMTsKPiA+PiArICAgICAgICAgICAgIGVsc2UKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgZml4X21vZGUgPSAwOwo+ID4+ICsgICAgIH0KPiA+PiArCj4g Pj4gKyAgICAgaWYgKHNsYXZlX2NmZy0+d3JhcF9wdHIgJiYgc2xhdmVfY2ZnLT53cmFwX3RvKSB7 Cj4gPj4gKyAgICAgICAgICAgICB3cmFwX2VuID0gMTsKPiA+PiArICAgICAgICAgICAgIGlmIChz bGF2ZV9jZmctPndyYXBfdG8gPT0gc3JjKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIHdy YXBfbW9kZSA9IDA7Cj4gPj4gKyAgICAgICAgICAgICB9IGVsc2UgaWYgKHNsYXZlX2NmZy0+d3Jh cF90byA9PSBkc3QpIHsKPiA+PiArICAgICAgICAgICAgICAgICAgICAgd3JhcF9tb2RlID0gMTsK PiA+PiArICAgICAgICAgICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGRl dl9lcnIoc2Rldi0+ZG1hX2Rldi5kZXYsICJpbnZhbGlkIHdyYXAgbW9kZVxuIik7Cj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4+ICsgICAgICAgICAgICAgfQo+ ID4+ICsgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgaHctPmludGMgPSBzbGF2ZV9jZmctPmludF9t b2RlIHwgU1BSRF9ETUFfQ0ZHX0VSUl9JTlRfRU47Cj4gPj4gKwo+ID4+ICsgICAgIHNyY19kYXRh d2lkdGggPSBzcHJkX2RtYV9nZXRfZGF0YXdpZHRoKHNsYXZlX2NmZy0+Y2ZnLnNyY19hZGRyX3dp ZHRoKTsKPiA+PiArICAgICBkc3RfZGF0YXdpZHRoID0gc3ByZF9kbWFfZ2V0X2RhdGF3aWR0aChz bGF2ZV9jZmctPmNmZy5kc3RfYWRkcl93aWR0aCk7Cj4gPj4gKwo+ID4+ICsgICAgIHRlbXAgPSBz cmNfZGF0YXdpZHRoIDw8IFNQUkRfRE1BX1NSQ19EQVRBV0lEVEhfT0ZGU0VUOwo+ID4+ICsgICAg IHRlbXAgfD0gZHN0X2RhdGF3aWR0aCA8PCBTUFJEX0RNQV9ERVNfREFUQVdJRFRIX09GRlNFVDsK PiA+PiArICAgICB0ZW1wIHw9IHNsYXZlX2NmZy0+cmVxX21vZGUgPDwgU1BSRF9ETUFfUkVRX01P REVfT0ZGU0VUOwo+ID4+ICsgICAgIHRlbXAgfD0gd3JhcF9tb2RlIDw8IFNQUkRfRE1BX1dSQVBf U0VMX09GRlNFVDsKPiA+PiArICAgICB0ZW1wIHw9IHdyYXBfZW4gPDwgU1BSRF9ETUFfV1JBUF9F Tl9PRkZTRVQ7Cj4gPj4gKyAgICAgdGVtcCB8PSBmaXhfbW9kZSA8PCBTUFJEX0RNQV9GSVhfU0VM X09GRlNFVDsKPiA+PiArICAgICB0ZW1wIHw9IGZpeF9lbiA8PCBTUFJEX0RNQV9GSVhfRU5fT0ZG U0VUOwo+ID4+ICsgICAgIHRlbXAgfD0gc2xhdmVfY2ZnLT5jZmcuc3JjX21heGJ1cnN0ICYgU1BS RF9ETUFfRlJHX0xFTl9NQVNLOwo+ID4+ICsgICAgIGh3LT5mcmdfbGVuID0gdGVtcDsKPiA+PiAr Cj4gPj4gKyAgICAgaHctPmJsa19sZW4gPSBzbGF2ZV9jZmctPmJsb2NrX2xlbiAmIFNQUkRfRE1B X0JMS19MRU5fTUFTSzsKPiA+PiArICAgICBody0+dHJzY19sZW4gPSBzbGF2ZV9jZmctPnRyYW5z Y2F0aW9uX2xlbiAmIFNQUkRfRE1BX1RSU0NfTEVOX01BU0s7Cj4gPj4gKwo+ID4+ICsgICAgIHRl bXAgPSAoc2xhdmVfY2ZnLT5kc3Rfc3RlcCAmIFNQUkRfRE1BX1RSU0ZfU1RFUF9NQVNLKSA8PAo+ ID4+ICsgICAgICAgICAgICAgU1BSRF9ETUFfREVTVF9UUlNGX1NURVBfT0ZGU0VUOwo+ID4+ICsg ICAgIHRlbXAgfD0gKHNsYXZlX2NmZy0+c3JjX3N0ZXAgJiBTUFJEX0RNQV9UUlNGX1NURVBfTUFT SykgPDwKPiA+PiArICAgICAgICAgICAgIFNQUkRfRE1BX1NSQ19UUlNGX1NURVBfT0ZGU0VUOwo+ ID4+ICsgICAgIGh3LT50cnNmX3N0ZXAgPSB0ZW1wOwo+ID4+ICsKPiA+PiArICAgICBody0+ZnJn X3N0ZXAgPSAwOwo+ID4+ICsgICAgIGh3LT5zcmNfYmxrX3N0ZXAgPSAwOwo+ID4+ICsgICAgIGh3 LT5kZXNfYmxrX3N0ZXAgPSAwOwo+ID4+ICsgICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4gK3N0 YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgo+ID4+ICtzcHJkX2RtYV9wcmVw X3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ws Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNnbGVuLCBlbnVtIGRtYV90 cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3MsIHZvaWQgKmNvbnRleHQpCj4gPj4gK3sKPiA+PiArICAgICBzdHJ1Y3Qgc3By ZF9kbWFfY2huICpzY2hhbiA9IHRvX3NwcmRfZG1hX2NoYW4oY2hhbik7Cj4gPj4gKyAgICAgc3Ry dWN0IHNwcmRfZG1hX2NvbmZpZyAqc2xhdmVfY2ZnID0gJnNjaGFuLT5zbGF2ZV9jZmc7Cj4gPj4g KyAgICAgdTMyIHNyY19zdGVwID0gMCwgZHN0X3N0ZXAgPSAwLCBsZW4gPSAwOwo+ID4+ICsgICAg IGRtYV9hZGRyX3Qgc3JjID0gMCwgZHN0ID0gMDsKPiA+PiArICAgICBzdHJ1Y3Qgc3ByZF9kbWFf ZGVzYyAqc2Rlc2M7Cj4gPj4gKyAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiA+PiArICAg ICBpbnQgcmV0LCBpOwo+ID4+ICsKPiA+PiArICAgICAvKiBUT0RPOiBub3cgd2Ugb25seSBzdXBw b3J0IG9uZSBzZyBmb3IgZWFjaCBETUEgY29uZmlndXJhdGlvbi4gKi8KPiA+PiArICAgICBpZiAo IWlzX3NsYXZlX2RpcmVjdGlvbihkaXIpIHx8IHNnbGVuID4gMSkKPiA+PiArICAgICAgICAgICAg IHJldHVybiBOVUxMOwo+ID4+ICsKPiA+PiArICAgICBzZGVzYyA9IGt6YWxsb2Moc2l6ZW9mKCpz ZGVzYyksIEdGUF9OT1dBSVQpOwo+ID4+ICsgICAgIGlmICghc2Rlc2MpCj4gPj4gKyAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKPiA+PiArCj4gPj4gKyAgICAgZm9yX2VhY2hfc2coc2dsLCBzZywg c2dsZW4sIGkpIHsKPiA+PiArICAgICAgICAgICAgIGxlbiA9IHNnX2RtYV9sZW4oc2cpOwo+ID4+ ICsKPiA+PiArICAgICAgICAgICAgIGlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgc3JjID0gc2dfZG1hX2FkZHJlc3Moc2cpOwo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICBkc3QgPSBzbGF2ZV9jZmctPmNmZy5kc3RfYWRkcjsKPiA+PiArICAg ICAgICAgICAgICAgICAgICAgc3JjX3N0ZXAgPSBzcHJkX2RtYV9nZXRfc3RlcChzbGF2ZV9jZmct PmNmZy5zcmNfYWRkcl93aWR0aCk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGRzdF9zdGVw ID0gU1BSRF9ETUFfTk9ORV9TVEVQOwo+ID4+ICsgICAgICAgICAgICAgfSBlbHNlIHsKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgc3JjID0gc2xhdmVfY2ZnLT5jZmcuc3JjX2FkZHI7Cj4gPj4g KyAgICAgICAgICAgICAgICAgICAgIGRzdCA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKPiA+PiArICAg ICAgICAgICAgICAgICAgICAgc3JjX3N0ZXAgPSBTUFJEX0RNQV9OT05FX1NURVA7Cj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgIGRzdF9zdGVwID0gc3ByZF9kbWFfZ2V0X3N0ZXAoc2xhdmVfY2Zn LT5jZmcuZHN0X2FkZHJfd2lkdGgpOwo+ID4+ICsgICAgICAgICAgICAgfQo+ID4+ICsgICAgIH0K PiA+PiArCj4gPj4gKyAgICAgc3ByZF9kbWFfZmlsbF9jb25maWcoc2xhdmVfY2ZnLCBzcmNfc3Rl cCwgZHN0X3N0ZXAsIGxlbiwgZmxhZ3MpOwo+ID4+ICsKPiA+PiArICAgICByZXQgPSBzcHJkX2Rt YV9jb25maWcoY2hhbiwgc2Rlc2MsIHNyYywgZHN0LCBzbGF2ZV9jZmcpOwo+ID4+ICsgICAgIGlm IChyZXQpIHsKPiA+PiArICAgICAgICAgICAgIGtmcmVlKHNkZXNjKTsKPiA+PiArICAgICAgICAg ICAgIHJldHVybiBOVUxMOwo+ID4+ICsgICAgIH0KPiA+Cj4gPiBBbSBtb3JlIGludHJpZ3VlZCBo ZXJlLCB0aGUgYWJvdmUgY2FsbCBmaWxscyB5b3UgY29uZmlnIHN0cnVjdCBidXQgeW91IGRvIG5v dAo+ID4gdXNlIGl0Li4gc28gd2hhdCBpcyB0aGUgdXNlIG9mIHRoYXQuCj4gCj4gSSBkaWQgbm90 IGdldCB5b3UgaGVyZS4gV2UgaGF2ZSBwYXNzZWQgdGhlIHNsYXZlX2NmZyB0bwo+IHNwcmRfZG1h X2NvbmZpZygpIHRvIGNvbmZpZ3VyZSBETUEgaGFyZHdhcmUgY2hhbm5lbC4gVGhhbmtzLgoKQnV0 IHlvdSBhcmUgbm90IHVzaW5nIHRoYXQuLi4gU28gd2h5IGJvdGhlciBjb25maWd1cmluZyEKCkFn YWluIHRoaXMgaXMgYSBjaGFubmVsIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGFuZCBub3QgdHJh bnNhY3Rpb24gc3BlY2lmaWMuClRoZSB2YWx1ZXMgc2hvdWxkIGdvIGludG8gZGVzY3JpcHRvciBh bmQgbm90IHNvbWV0aGluZyB3aGljaCBpcyBjaGFubmVsIHNwZWNpZmljCg==