Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [8/8] xhci: move usb2 get port status link resume handling to its own function From: Mathias Nyman Message-Id: <1544192376-6619-9-git-send-email-mathias.nyman@linux.intel.com> Date: Fri, 7 Dec 2018 16:19:36 +0200 To: gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, Mathias Nyman List-ID: UmVmYWN0b3JpbmcsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkJ1dCB3b3J0aCBtZW50aW9uaW5n IHRoYXQgY2hlY2tpbmcgZm9yIHBvcnQgbGluayByZXN1bWUgc3RhdGUgaXMgbm93IGJlaGluZAph IGFkZGl0aW9uYWwgcG9ydCBwb3dlciBjaGVjay4KClRoaXMgaXMgZmluZSBhcyBwb3J0cyBjYW4n dCBiZSBpbiByZXN1bWUgc3RhdGUgaWYgcG9ydCBwb3dlciBiaXQgaXMgbm90CnNldC4KCnhoY2kg c3BlYyBzZWN0aW9uIDQuMTkuMS4xLjYgZmlndXJlIDM0IHNob3dzIHRoYXQgcG9ydCBwb3dlciBi aXQgbXVzdCBiZQpzZXQgZm9yIGFsbCAnRW5hYmxlJyBzdWJzdGF0ZXMsIGluY2x1ZGluZyBVMCxV MSxVMixVMyAoc3VzcGVuZGVkKSwgUmVzdW1lLAphbmQgUkV4aXQgc3RhdGVzLgoKU2lnbmVkLW9m Zi1ieTogTWF0aGlhcyBOeW1hbiA8bWF0aGlhcy5ueW1hbkBsaW51eC5pbnRlbC5jb20+Ci0tLQog ZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jIHwgMTg4ICsrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTA0IGluc2VydGlvbnMoKyks IDg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIu YyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCBkODZkMWQ1Li5jNzYwMTc1IDEw MDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2Iv aG9zdC94aGNpLWh1Yi5jCkBAIC03OTUsNiArNzk1LDEwMCBAQCBzdGF0aWMgdm9pZCB4aGNpX2Rl bF9jb21wX21vZF90aW1lcihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUzMiBzdGF0dXMsCiAJfQog fQogCitzdGF0aWMgaW50IHhoY2lfaGFuZGxlX3VzYjJfcG9ydF9saW5rX3Jlc3VtZShzdHJ1Y3Qg eGhjaV9wb3J0ICpwb3J0LAorCQkJCQkgICAgIHUzMiAqc3RhdHVzLCB1MzIgcG9ydHNjLAorCQkJ CQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHhoY2lfYnVzX3N0YXRlICpi dXNfc3RhdGU7CisJc3RydWN0IHhoY2lfaGNkCSp4aGNpOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7 CisJaW50IHNsb3RfaWQ7CisJdTMyIHdJbmRleDsKKworCWhjZCA9IHBvcnQtPnJodWItPmhjZDsK KwlidXNfc3RhdGUgPSAmcG9ydC0+cmh1Yi0+YnVzX3N0YXRlOworCXhoY2kgPSBoY2RfdG9feGhj aShoY2QpOworCXdJbmRleCA9IHBvcnQtPmhjZF9wb3J0bnVtOworCisJaWYgKChwb3J0c2MgJiBQ T1JUX1JFU0VUKSB8fCAhKHBvcnRzYyAmIFBPUlRfUEUpKSB7CisJCSpzdGF0dXMgPSAweGZmZmZm ZmZmOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogZGlkIHBvcnQgZXZlbnQgaGFuZGxlciBh bHJlYWR5IHN0YXJ0IHJlc3VtZSB0aW1pbmc/ICovCisJaWYgKCFidXNfc3RhdGUtPnJlc3VtZV9k b25lW3dJbmRleF0pIHsKKwkJLyogSWYgbm90LCBtYXliZSB3ZSBhcmUgaW4gYSBob3N0IGluaXRh dGVkIHJlc3VtZT8gKi8KKwkJaWYgKHRlc3RfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmVzdW1p bmdfcG9ydHMpKSB7CisJCQkvKiBIb3N0IGluaXRhdGVkIHJlc3VtZSBkb2Vzbid0IHRpbWUgdGhl IHJlc3VtZQorCQkJICogc2lnbmFsbGluZyB1c2luZyByZXN1bWVfZG9uZVtdLgorCQkJICogSXQg bWFudWFsbHkgc2V0cyBSRVNVTUUgc3RhdGUsIHNsZWVwcyAyMG1zCisJCQkgKiBhbmQgc2V0cyBV MCBzdGF0ZS4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUKKwkJCSAqIGNoYW5nZWQsIGJ1dCBub3Qg cmlnaHQgbm93LgorCQkJICovCisJCX0gZWxzZSB7CisJCQkvKiBwb3J0IHJlc3VtZSB3YXMgZGlz Y292ZXJlZCBub3cgYW5kIGhlcmUsCisJCQkgKiBzdGFydCByZXN1bWUgdGltaW5nCisJCQkgKi8K KwkJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKworCQkJCW1zZWNzX3RvX2ppZmZp ZXMoVVNCX1JFU1VNRV9USU1FT1VUKTsKKworCQkJc2V0X2JpdCh3SW5kZXgsICZidXNfc3RhdGUt PnJlc3VtaW5nX3BvcnRzKTsKKwkJCWJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0luZGV4XSA9IHRp bWVvdXQ7CisJCQltb2RfdGltZXIoJmhjZC0+cmhfdGltZXIsIHRpbWVvdXQpOworCQkJdXNiX2hj ZF9zdGFydF9wb3J0X3Jlc3VtZSgmaGNkLT5zZWxmLCB3SW5kZXgpOworCQl9CisJLyogSGFzIHJl c3VtZSBiZWVuIHNpZ25hbGxlZCBmb3IgVVNCX1JFU1VNRV9USU1FIHlldD8gKi8KKwl9IGVsc2Ug aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhd KSkgeworCQlpbnQgdGltZV9sZWZ0OworCisJCXhoY2lfZGJnKHhoY2ksICJSZXN1bWUgVVNCMiBw b3J0ICVkXG4iLCB3SW5kZXggKyAxKTsKKwkJYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhd ID0gMDsKKwkJY2xlYXJfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmVzdW1pbmdfcG9ydHMpOwor CisJCXNldF9iaXQod0luZGV4LCAmYnVzX3N0YXRlLT5yZXhpdF9wb3J0cyk7CisKKwkJeGhjaV90 ZXN0X2FuZF9jbGVhcl9iaXQoeGhjaSwgcG9ydCwgUE9SVF9QTEMpOworCQl4aGNpX3NldF9saW5r X3N0YXRlKHhoY2ksIHBvcnQsIFhERVZfVTApOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJdGltZV9sZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KAorCQkJJmJ1c19zdGF0ZS0+cmV4aXRfZG9uZVt3SW5kZXhdLAorCQkJbXNlY3NfdG9f amlmZmllcyhYSENJX01BWF9SRVhJVF9USU1FT1VUX01TKSk7CisJCXNwaW5fbG9ja19pcnFzYXZl KCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHRpbWVfbGVmdCkgeworCQkJc2xvdF9pZCA9 IHhoY2lfZmluZF9zbG90X2lkX2J5X3BvcnQoaGNkLCB4aGNpLAorCQkJCQkJCSAgICB3SW5kZXgg KyAxKTsKKwkJCWlmICghc2xvdF9pZCkgeworCQkJCXhoY2lfZGJnKHhoY2ksICJzbG90X2lkIGlz IHplcm9cbiIpOworCQkJCSpzdGF0dXMgPSAweGZmZmZmZmZmOworCQkJCXJldHVybiAtRU5PREVW OworCQkJfQorCQkJeGhjaV9yaW5nX2RldmljZSh4aGNpLCBzbG90X2lkKTsKKwkJfSBlbHNlIHsK KwkJCWludCBwb3J0X3N0YXR1cyA9IHJlYWRsKHBvcnQtPmFkZHIpOworCisJCQl4aGNpX3dhcm4o eGhjaSwgIlBvcnQgcmVzdW1lICVpIG1zZWMgdGltZWQgb3V0LCBwb3J0c2MgPSAweCV4XG4iLAor CQkJCSAgWEhDSV9NQVhfUkVYSVRfVElNRU9VVF9NUywKKwkJCQkgIHBvcnRfc3RhdHVzKTsKKwkJ CSpzdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9TVVNQRU5EOworCQkJY2xlYXJfYml0KHdJbmRleCwg JmJ1c19zdGF0ZS0+cmV4aXRfcG9ydHMpOworCQl9CisKKwkJdXNiX2hjZF9lbmRfcG9ydF9yZXN1 bWUoJmhjZC0+c2VsZiwgd0luZGV4KTsKKwkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAx IDw8IHdJbmRleDsKKwkJYnVzX3N0YXRlLT5zdXNwZW5kZWRfcG9ydHMgJj0gfigxIDw8IHdJbmRl eCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIHJlc3VtZSBoYXMgYmVlbiBzaWduYWxpbmcg Zm9yIGxlc3MgdGhhbgorCQkgKiBVU0JfUkVTVU1FX1RJTUUuIFJlcG9ydCB0aGUgcG9ydCBzdGF0 dXMgYXMgU1VTUEVORCwKKwkJICogbGV0IHRoZSB1c2Jjb3JlIGNoZWNrIHBvcnQgc3RhdHVzIGFn YWluIGFuZCBjbGVhcgorCQkgKiByZXN1bWUgc2lnbmFsaW5nIGxhdGVyLgorCQkgKi8KKwkJKnN0 YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0 aWMgdTMyIHhoY2lfZ2V0X2V4dF9wb3J0X3N0YXR1cyh1MzIgcmF3X3BvcnRfc3RhdHVzLCB1MzIg cG9ydF9saSkKIHsKIAl1MzIgZXh0X3N0YXQgPSAwOwpAQCAtODUzLDExICs5NDcsMTIgQEAgc3Rh dGljIHZvaWQgeGhjaV9nZXRfdXNiM19wb3J0X3N0YXR1cyhzdHJ1Y3QgeGhjaV9wb3J0ICpwb3J0 LCB1MzIgKnN0YXR1cywKIH0KIAogc3RhdGljIHZvaWQgeGhjaV9nZXRfdXNiMl9wb3J0X3N0YXR1 cyhzdHJ1Y3QgeGhjaV9wb3J0ICpwb3J0LCB1MzIgKnN0YXR1cywKLQkJCQkgICAgICB1MzIgcG9y dHNjKQorCQkJCSAgICAgIHUzMiBwb3J0c2MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3Ry dWN0IHhoY2lfYnVzX3N0YXRlICpidXNfc3RhdGU7CiAJdTMyIGxpbmtfc3RhdGU7CiAJdTMyIHBv cnRudW07CisJaW50IHJldDsKIAogCWJ1c19zdGF0ZSA9ICZwb3J0LT5yaHViLT5idXNfc3RhdGU7 CiAJbGlua19zdGF0ZSA9IHBvcnRzYyAmIFBPUlRfUExTX01BU0s7CkBAIC04ODAsNiArOTc1LDEy IEBAIHN0YXRpYyB2b2lkIHhoY2lfZ2V0X3VzYjJfcG9ydF9zdGF0dXMoc3RydWN0IHhoY2lfcG9y dCAqcG9ydCwgdTMyICpzdGF0dXMsCiAJCQkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAx IDw8IHBvcnRudW07CiAJCQl9CiAJCX0KKwkJaWYgKGxpbmtfc3RhdGUgPT0gWERFVl9SRVNVTUUp IHsKKwkJCXJldCA9IHhoY2lfaGFuZGxlX3VzYjJfcG9ydF9saW5rX3Jlc3VtZShwb3J0LCBzdGF0 dXMsCisJCQkJCQkJCXBvcnRzYywgZmxhZ3MpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm47CisJ CX0KIAl9CiB9CiAKQEAgLTkwMCw5ICsxMDAxLDcgQEAgc3RhdGljIHUzMiB4aGNpX2dldF9wb3J0 X3N0YXR1cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLAogCV9fcmVsZWFzZXMoJnhoY2ktPmxvY2spCiAJ X19hY3F1aXJlcygmeGhjaS0+bG9jaykKIHsKLQlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2Rf dG9feGhjaShoY2QpOwogCXUzMiBzdGF0dXMgPSAwOwotCWludCBzbG90X2lkOwogCXN0cnVjdCB4 aGNpX2h1YiAqcmh1YjsKIAlzdHJ1Y3QgeGhjaV9wb3J0ICpwb3J0OwogCkBAIC05MzUsODcgKzEw MzQsOCBAQCBzdGF0aWMgdTMyIHhoY2lfZ2V0X3BvcnRfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpo Y2QsCiAJaWYgKGhjZC0+c3BlZWQgPj0gSENEX1VTQjMpCiAJCXhoY2lfZ2V0X3VzYjNfcG9ydF9z dGF0dXMocG9ydCwgJnN0YXR1cywgcmF3X3BvcnRfc3RhdHVzKTsKIAllbHNlCi0JCXhoY2lfZ2V0 X3VzYjJfcG9ydF9zdGF0dXMocG9ydCwgJnN0YXR1cywgcmF3X3BvcnRfc3RhdHVzKTsKLQotCWlm ICgocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9SRVNVTUUgJiYKLQkJ IURFVl9TVVBFUlNQRUVEX0FOWShyYXdfcG9ydF9zdGF0dXMpICYmIGhjZC0+c3BlZWQgPCBIQ0Rf VVNCMykgewotCQlpZiAoKHJhd19wb3J0X3N0YXR1cyAmIFBPUlRfUkVTRVQpIHx8Ci0JCQkJIShy YXdfcG9ydF9zdGF0dXMgJiBQT1JUX1BFKSkKLQkJCXJldHVybiAweGZmZmZmZmZmOwotCQkvKiBk aWQgcG9ydCBldmVudCBoYW5kbGVyIGFscmVhZHkgc3RhcnQgcmVzdW1lIHRpbWluZz8gKi8KLQkJ aWYgKCFidXNfc3RhdGUtPnJlc3VtZV9kb25lW3dJbmRleF0pIHsKLQkJCS8qIElmIG5vdCwgbWF5 YmUgd2UgYXJlIGluIGEgaG9zdCBpbml0YXRlZCByZXN1bWU/ICovCi0JCQlpZiAodGVzdF9iaXQo d0luZGV4LCAmYnVzX3N0YXRlLT5yZXN1bWluZ19wb3J0cykpIHsKLQkJCQkvKiBIb3N0IGluaXRh dGVkIHJlc3VtZSBkb2Vzbid0IHRpbWUgdGhlIHJlc3VtZQotCQkJCSAqIHNpZ25hbGxpbmcgdXNp bmcgcmVzdW1lX2RvbmVbXS4KLQkJCQkgKiBJdCBtYW51YWxseSBzZXRzIFJFU1VNRSBzdGF0ZSwg c2xlZXBzIDIwbXMKLQkJCQkgKiBhbmQgc2V0cyBVMCBzdGF0ZS4gVGhpcyBzaG91bGQgcHJvYmFi bHkgYmUKLQkJCQkgKiBjaGFuZ2VkLCBidXQgbm90IHJpZ2h0IG5vdy4KLQkJCQkgKi8KLQkJCX0g ZWxzZSB7Ci0JCQkJLyogcG9ydCByZXN1bWUgd2FzIGRpc2NvdmVyZWQgbm93IGFuZCBoZXJlLAot CQkJCSAqIHN0YXJ0IHJlc3VtZSB0aW1pbmcKLQkJCQkgKi8KLQkJCQl1bnNpZ25lZCBsb25nIHRp bWVvdXQgPSBqaWZmaWVzICsKLQkJCQkJbXNlY3NfdG9famlmZmllcyhVU0JfUkVTVU1FX1RJTUVP VVQpOwotCi0JCQkJc2V0X2JpdCh3SW5kZXgsICZidXNfc3RhdGUtPnJlc3VtaW5nX3BvcnRzKTsK LQkJCQlidXNfc3RhdGUtPnJlc3VtZV9kb25lW3dJbmRleF0gPSB0aW1lb3V0OwotCQkJCW1vZF90 aW1lcigmaGNkLT5yaF90aW1lciwgdGltZW91dCk7Ci0JCQkJdXNiX2hjZF9zdGFydF9wb3J0X3Jl c3VtZSgmaGNkLT5zZWxmLCB3SW5kZXgpOwotCQkJfQotCQkvKiBIYXMgcmVzdW1lIGJlZW4gc2ln bmFsbGVkIGZvciBVU0JfUkVTVU1FX1RJTUUgeWV0PyAqLwotCQl9IGVsc2UgaWYgKHRpbWVfYWZ0 ZXJfZXEoamlmZmllcywKLQkJCQkJIGJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0luZGV4XSkpIHsK LQkJCWludCB0aW1lX2xlZnQ7Ci0KLQkJCXhoY2lfZGJnKHhoY2ksICJSZXN1bWUgVVNCMiBwb3J0 ICVkXG4iLAotCQkJCQl3SW5kZXggKyAxKTsKLQkJCWJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0lu ZGV4XSA9IDA7Ci0JCQljbGVhcl9iaXQod0luZGV4LCAmYnVzX3N0YXRlLT5yZXN1bWluZ19wb3J0 cyk7Ci0KLQkJCXNldF9iaXQod0luZGV4LCAmYnVzX3N0YXRlLT5yZXhpdF9wb3J0cyk7Ci0KLQkJ CXhoY2lfdGVzdF9hbmRfY2xlYXJfYml0KHhoY2ksIHBvcnQsIFBPUlRfUExDKTsKLQkJCXhoY2lf c2V0X2xpbmtfc3RhdGUoeGhjaSwgcG9ydCwgWERFVl9VMCk7Ci0KLQkJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQkJCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2Nv bXBsZXRpb25fdGltZW91dCgKLQkJCQkJJmJ1c19zdGF0ZS0+cmV4aXRfZG9uZVt3SW5kZXhdLAot CQkJCQltc2Vjc190b19qaWZmaWVzKAotCQkJCQkJWEhDSV9NQVhfUkVYSVRfVElNRU9VVF9NUykp OwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKLQotCQkJaWYgKHRp bWVfbGVmdCkgewotCQkJCXNsb3RfaWQgPSB4aGNpX2ZpbmRfc2xvdF9pZF9ieV9wb3J0KGhjZCwK LQkJCQkJCXhoY2ksIHdJbmRleCArIDEpOwotCQkJCWlmICghc2xvdF9pZCkgewotCQkJCQl4aGNp X2RiZyh4aGNpLCAic2xvdF9pZCBpcyB6ZXJvXG4iKTsKLQkJCQkJcmV0dXJuIDB4ZmZmZmZmZmY7 Ci0JCQkJfQotCQkJCXhoY2lfcmluZ19kZXZpY2UoeGhjaSwgc2xvdF9pZCk7Ci0JCQl9IGVsc2Ug ewotCQkJCWludCBwb3J0X3N0YXR1cyA9IHJlYWRsKHBvcnQtPmFkZHIpOwotCQkJCXhoY2lfd2Fy bih4aGNpLCAiUG9ydCByZXN1bWUgdG9vayBsb25nZXIgdGhhbiAlaSBtc2VjLCBwb3J0IHN0YXR1 cyA9IDB4JXhcbiIsCi0JCQkJCQlYSENJX01BWF9SRVhJVF9USU1FT1VUX01TLAotCQkJCQkJcG9y dF9zdGF0dXMpOwotCQkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7Ci0JCQkJY2xl YXJfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmV4aXRfcG9ydHMpOwotCQkJfQotCi0JCQl1c2Jf aGNkX2VuZF9wb3J0X3Jlc3VtZSgmaGNkLT5zZWxmLCB3SW5kZXgpOwotCQkJYnVzX3N0YXRlLT5w b3J0X2Nfc3VzcGVuZCB8PSAxIDw8IHdJbmRleDsKLQkJCWJ1c19zdGF0ZS0+c3VzcGVuZGVkX3Bv cnRzICY9IH4oMSA8PCB3SW5kZXgpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFRoZSByZXN1 bWUgaGFzIGJlZW4gc2lnbmFsaW5nIGZvciBsZXNzIHRoYW4KLQkJCSAqIFVTQl9SRVNVTUVfVElN RS4gUmVwb3J0IHRoZSBwb3J0IHN0YXR1cyBhcyBTVVNQRU5ELAotCQkJICogbGV0IHRoZSB1c2Jj b3JlIGNoZWNrIHBvcnQgc3RhdHVzIGFnYWluIGFuZCBjbGVhcgotCQkJICogcmVzdW1lIHNpZ25h bGluZyBsYXRlci4KLQkJCSAqLwotCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfU1VTUEVORDsK LQkJfQotCX0KKwkJeGhjaV9nZXRfdXNiMl9wb3J0X3N0YXR1cyhwb3J0LCAmc3RhdHVzLCByYXdf cG9ydF9zdGF0dXMsCisJCQkJCSAgZmxhZ3MpOwogCS8qCiAJICogQ2xlYXIgc3RhbGUgdXNiMiBy ZXN1bWUgc2lnbmFsbGluZyB2YXJpYWJsZXMgaW4gY2FzZSBwb3J0IGNoYW5nZWQKIAkgKiBzdGF0 ZSBkdXJpbmcgcmVzdW1lIHNpZ25hbGxpbmcuIEZvciBleGFtcGxlIG9uIGVycm9yCg==