From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: [PATCH RFC 11/20] acpi/hvmloader: Translate all addresses when assigning addresses in ACPI tables Date: Tue, 5 Apr 2016 21:25:40 -0400 Message-ID: <1459905949-10358-12-git-send-email-boris.ostrovsky@oracle.com> References: <1459905949-10358-1-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1459905949-10358-1-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Keir Fraser , Stefano Stabellini , Andrew Cooper , Ian Jackson , Jan Beulich , Wei Liu , Boris Ostrovsky , roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org Tm9uLWh2bWxvYWRlciB1c2VycyBtYXkgYmUgYnVpbGRpbmcgdGFibGVzIGluIHZpcnR1YWwgYWRk cmVzcyBzcGFjZQphbmQgdGhlcmVmb3JlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdmFsdWVz IHRoYXQgZW5kIHVwIGluIHRhYmxlcwphcmUgcGh5c2ljYWwgYWRkcmVzc2VzLgoKU2lnbmVkLW9m Zi1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbT4KLS0tCiB0 b29scy9maXJtd2FyZS9odm1sb2FkZXIvYWNwaS9idWlsZC5jIHwgNDcgKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCAy MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9maXJtd2FyZS9odm1sb2FkZXIvYWNw aS9idWlsZC5jIGIvdG9vbHMvZmlybXdhcmUvaHZtbG9hZGVyL2FjcGkvYnVpbGQuYwppbmRleCA5 OTFhNzNmLi45NDFkZDBiIDEwMDY0NAotLS0gYS90b29scy9maXJtd2FyZS9odm1sb2FkZXIvYWNw aS9idWlsZC5jCisrKyBiL3Rvb2xzL2Zpcm13YXJlL2h2bWxvYWRlci9hY3BpL2J1aWxkLmMKQEAg LTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgc3RydWN0IGFjcGlfMjBfbWFkdCAqY29uc3RydWN0X21h ZHQoc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpCiAgICAgZWxzZQogICAgICAgICBsYXBpYyA9 IChzdHJ1Y3QgYWNwaV8yMF9tYWR0X2xhcGljICopKG1hZHQgKyAxKTsKIAotICAgIGNvbmZpZy0+ YWNwaV9pbmZvLm1hZHRfbGFwaWMwX2FkZHIgPSAodWludDMyX3QpbGFwaWM7CisgICAgY29uZmln LT5hY3BpX2luZm8ubWFkdF9sYXBpYzBfYWRkciA9IHZpcnRfdG9fcGh5cyhsYXBpYyk7CiAgICAg Zm9yICggaSA9IDA7IGkgPCBucl9wcm9jZXNzb3Jfb2JqZWN0czsgaSsrICkKICAgICB7CiAgICAg ICAgIG1lbXNldChsYXBpYywgMCwgc2l6ZW9mKCpsYXBpYykpOwpAQCAtMTQ0LDcgKzE0NCw4IEBA IHN0YXRpYyBzdHJ1Y3QgYWNwaV8yMF9tYWR0ICpjb25zdHJ1Y3RfbWFkdChzdHJ1Y3QgYWNwaV9j b25maWcgKmNvbmZpZykKICAgICBtYWR0LT5oZWFkZXIubGVuZ3RoID0gKHVuc2lnbmVkIGNoYXIg KilsYXBpYyAtICh1bnNpZ25lZCBjaGFyICopbWFkdDsKICAgICBzZXRfY2hlY2tzdW0obWFkdCwg b2Zmc2V0b2Yoc3RydWN0IGFjcGlfaGVhZGVyLCBjaGVja3N1bSksCiAgICAgICAgICAgICAgICAg IG1hZHQtPmhlYWRlci5sZW5ndGgpOwotICAgIGNvbmZpZy0+YWNwaV9pbmZvLm1hZHRfY3N1bV9h ZGRyID0gKHVpbnQzMl90KSZtYWR0LT5oZWFkZXIuY2hlY2tzdW07CisgICAgY29uZmlnLT5hY3Bp X2luZm8ubWFkdF9jc3VtX2FkZHIgPQorICAgICAgICB2aXJ0X3RvX3BoeXMoJm1hZHQtPmhlYWRl ci5jaGVja3N1bSk7CiAKICAgICByZXR1cm4gbWFkdDsKIH0KQEAgLTMwNyw3ICszMDgsNyBAQCBz dGF0aWMgaW50IGNvbnN0cnVjdF9wYXNzdGhyb3VnaF90YWJsZXModW5zaWduZWQgbG9uZyAqdGFi bGVfcHRycywKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtZW1jcHkoYnVmZmVyLCBoZWFk ZXIsIGhlYWRlci0+bGVuZ3RoKTsKIAotICAgICAgICB0YWJsZV9wdHJzW25yX3RhYmxlcysrXSA9 ICh1bnNpZ25lZCBsb25nKWJ1ZmZlcjsKKyAgICAgICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10g PSB2aXJ0X3RvX3BoeXMoYnVmZmVyKTsKICAgICAgICAgdG90YWwgKz0gaGVhZGVyLT5sZW5ndGg7 CiAgICAgICAgIGFjcGlfcHRfYWRkciArPSBoZWFkZXItPmxlbmd0aDsKICAgICB9CkBAIC0zMzIs NyArMzMzLDcgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rfc2Vjb25kYXJ5X3RhYmxlcyh1bnNpZ25l ZCBsb25nICp0YWJsZV9wdHJzLAogICAgIHsKICAgICAgICAgbWFkdCA9IGNvbnN0cnVjdF9tYWR0 KGNvbmZpZyk7CiAgICAgICAgIGlmICghbWFkdCkgcmV0dXJuIC0xOwotICAgICAgICB0YWJsZV9w dHJzW25yX3RhYmxlcysrXSA9ICh1bnNpZ25lZCBsb25nKW1hZHQ7CisgICAgICAgIHRhYmxlX3B0 cnNbbnJfdGFibGVzKytdID0gdmlydF90b19waHlzKG1hZHQpOwogICAgIH0KIAogICAgIC8qIEhQ RVQuICovCkBAIC0zNDAsNyArMzQxLDcgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rfc2Vjb25kYXJ5 X3RhYmxlcyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAogICAgIHsKICAgICAgICAgaHBldCA9 IGNvbnN0cnVjdF9ocGV0KCk7CiAgICAgICAgIGlmICghaHBldCkgcmV0dXJuIC0xOwotICAgICAg ICB0YWJsZV9wdHJzW25yX3RhYmxlcysrXSA9ICh1bnNpZ25lZCBsb25nKWhwZXQ7CisgICAgICAg IHRhYmxlX3B0cnNbbnJfdGFibGVzKytdID0gdmlydF90b19waHlzKGhwZXQpOwogICAgIH0KIAog ICAgIC8qIFdBRVQuICovCkBAIC0zNDgsNyArMzQ5LDcgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rf c2Vjb25kYXJ5X3RhYmxlcyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAogICAgIHsKICAgICAg ICAgd2FldCA9IGNvbnN0cnVjdF93YWV0KCk7CiAgICAgICAgIGlmICghd2FldCkgcmV0dXJuIC0x OwotICAgICAgICB0YWJsZV9wdHJzW25yX3RhYmxlcysrXSA9ICh1bnNpZ25lZCBsb25nKXdhZXQ7 CisgICAgICAgIHRhYmxlX3B0cnNbbnJfdGFibGVzKytdID0gdmlydF90b19waHlzKHdhZXQpOwog ICAgIH0KIAogICAgIGlmICggY29uZmlnLT50YWJsZV9mbGFncyAmIEFDUElfQlVJTERfU1NEVF9Q TSApCkBAIC0zNTYsNyArMzU3LDcgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rfc2Vjb25kYXJ5X3Rh Ymxlcyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAogICAgICAgICBzc2R0ID0gbWVtX2FsbG9j KHNpemVvZihzc2R0X3BtKSwgMTYpOwogICAgICAgICBpZiAoIXNzZHQpIHJldHVybiAtMTsKICAg ICAgICAgbWVtY3B5KHNzZHQsIHNzZHRfcG0sIHNpemVvZihzc2R0X3BtKSk7Ci0gICAgICAgIHRh YmxlX3B0cnNbbnJfdGFibGVzKytdID0gKHVuc2lnbmVkIGxvbmcpc3NkdDsKKyAgICAgICAgdGFi bGVfcHRyc1tucl90YWJsZXMrK10gPSB2aXJ0X3RvX3BoeXMoc3NkdCk7CiAgICAgfQogCiAgICAg aWYgKCBjb25maWctPnRhYmxlX2ZsYWdzICYgQUNQSV9CVUlMRF9TU0RUX1MzICkKQEAgLTM2NCw3 ICszNjUsNyBAQCBzdGF0aWMgaW50IGNvbnN0cnVjdF9zZWNvbmRhcnlfdGFibGVzKHVuc2lnbmVk IGxvbmcgKnRhYmxlX3B0cnMsCiAgICAgICAgIHNzZHQgPSBtZW1fYWxsb2Moc2l6ZW9mKHNzZHRf czMpLCAxNik7CiAgICAgICAgIGlmICghc3NkdCkgcmV0dXJuIC0xOwogICAgICAgICBtZW1jcHko c3NkdCwgc3NkdF9zMywgc2l6ZW9mKHNzZHRfczMpKTsKLSAgICAgICAgdGFibGVfcHRyc1tucl90 YWJsZXMrK10gPSAodW5zaWduZWQgbG9uZylzc2R0OworICAgICAgICB0YWJsZV9wdHJzW25yX3Rh YmxlcysrXSA9IHZpcnRfdG9fcGh5cyhzc2R0KTsKICAgICB9IGVsc2UgewogICAgICAgICBwcmlu dGYoIlMzIGRpc2FibGVkXG4iKTsKICAgICB9CkBAIC0zNzQsNyArMzc1LDcgQEAgc3RhdGljIGlu dCBjb25zdHJ1Y3Rfc2Vjb25kYXJ5X3RhYmxlcyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAog ICAgICAgICBzc2R0ID0gbWVtX2FsbG9jKHNpemVvZihzc2R0X3M0KSwgMTYpOwogICAgICAgICBp ZiAoIXNzZHQpIHJldHVybiAtMTsKICAgICAgICAgbWVtY3B5KHNzZHQsIHNzZHRfczQsIHNpemVv Zihzc2R0X3M0KSk7Ci0gICAgICAgIHRhYmxlX3B0cnNbbnJfdGFibGVzKytdID0gKHVuc2lnbmVk IGxvbmcpc3NkdDsKKyAgICAgICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10gPSB2aXJ0X3RvX3Bo eXMoc3NkdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHJpbnRmKCJTNCBkaXNhYmxlZFxuIik7 CiAgICAgfQpAQCAtMzg5LDEyICszOTAsMTIgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rfc2Vjb25k YXJ5X3RhYmxlcyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAogICAgICAgICAgICAgc3NkdCA9 IG1lbV9hbGxvYyhzaXplb2Yoc3NkdF90cG0pLCAxNik7CiAgICAgICAgICAgICBpZiAoIXNzZHQp IHJldHVybiAtMTsKICAgICAgICAgICAgIG1lbWNweShzc2R0LCBzc2R0X3RwbSwgc2l6ZW9mKHNz ZHRfdHBtKSk7Ci0gICAgICAgICAgICB0YWJsZV9wdHJzW25yX3RhYmxlcysrXSA9ICh1bnNpZ25l ZCBsb25nKXNzZHQ7CisgICAgICAgICAgICB0YWJsZV9wdHJzW25yX3RhYmxlcysrXSA9IHZpcnRf dG9fcGh5cyhzc2R0KTsKIAogICAgICAgICAgICAgdGNwYSA9IG1lbV9hbGxvYyhzaXplb2Yoc3Ry dWN0IGFjcGlfMjBfdGNwYSksIDE2KTsKICAgICAgICAgICAgIGlmICghdGNwYSkgcmV0dXJuIC0x OwogICAgICAgICAgICAgbWVtc2V0KHRjcGEsIDAsIHNpemVvZigqdGNwYSkpOwotICAgICAgICAg ICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10gPSAodW5zaWduZWQgbG9uZyl0Y3BhOworICAgICAg ICAgICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10gPSB2aXJ0X3RvX3BoeXModGNwYSk7CiAKICAg ICAgICAgICAgIHRjcGEtPmhlYWRlci5zaWduYXR1cmUgPSBBQ1BJXzJfMF9UQ1BBX1NJR05BVFVS RTsKICAgICAgICAgICAgIHRjcGEtPmhlYWRlci5sZW5ndGggICAgPSBzaXplb2YoKnRjcGEpOwpA QCAtNDIzLDExICs0MjQsMTEgQEAgc3RhdGljIGludCBjb25zdHJ1Y3Rfc2Vjb25kYXJ5X3RhYmxl cyh1bnNpZ25lZCBsb25nICp0YWJsZV9wdHJzLAogICAgICAgICBzdHJ1Y3QgYWNwaV8yMF9zbGl0 ICpzbGl0ID0gY29uc3RydWN0X3NsaXQoY29uZmlnKTsKIAogICAgICAgICBpZiAoIHNyYXQgKQot ICAgICAgICAgICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10gPSAodW5zaWduZWQgbG9uZylzcmF0 OworICAgICAgICAgICAgdGFibGVfcHRyc1tucl90YWJsZXMrK10gPSB2aXJ0X3RvX3BoeXMoc3Jh dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGJ1aWxkIFNS QVQsIHNraXBwaW5nLi4uXG4iKTsKICAgICAgICAgaWYgKCBzbGl0ICkKLSAgICAgICAgICAgIHRh YmxlX3B0cnNbbnJfdGFibGVzKytdID0gKHVuc2lnbmVkIGxvbmcpc2xpdDsKKyAgICAgICAgICAg IHRhYmxlX3B0cnNbbnJfdGFibGVzKytdID0gdmlydF90b19waHlzKHNsaXQpOwogICAgICAgICBl bHNlCiAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBidWlsZCBTTElULCBza2lwcGluZy4u LlxuIik7CiAgICAgfQpAQCAtNTI0LDggKzUyNSw4IEBAIHZvaWQgYWNwaV9idWlsZF90YWJsZXMo c3RydWN0IGFjcGlfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBwaHlzaWNhbCkKICAgICBt ZW1jcHkoZmFkdF8xMCwgJkZhZHQsIHNpemVvZihzdHJ1Y3QgYWNwaV8xMF9mYWR0KSk7CiAgICAg ZmFkdF8xMC0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV8xMF9mYWR0KTsKICAg ICBmYWR0XzEwLT5oZWFkZXIucmV2aXNpb24gPSBBQ1BJXzFfMF9GQURUX1JFVklTSU9OOwotICAg IGZhZHRfMTAtPmRzZHQgICAgICAgICAgPSAodW5zaWduZWQgbG9uZylkc2R0OwotICAgIGZhZHRf MTAtPmZpcm13YXJlX2N0cmwgPSAodW5zaWduZWQgbG9uZylmYWNzOworICAgIGZhZHRfMTAtPmRz ZHQgICAgICAgICAgPSB2aXJ0X3RvX3BoeXMoZHNkdCk7CisgICAgZmFkdF8xMC0+ZmlybXdhcmVf Y3RybCA9IHZpcnRfdG9fcGh5cyhmYWNzKTsKICAgICBzZXRfY2hlY2tzdW0oZmFkdF8xMCwKICAg ICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfaGVhZGVyLCBjaGVja3N1bSksCiAg ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV8xMF9mYWR0KSk7CkBAIC01MzMsMTAg KzUzNCwxMCBAQCB2b2lkIGFjcGlfYnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2NvbmZpZyAqY29u ZmlnLCB1bnNpZ25lZCBpbnQgcGh5c2ljYWwpCiAgICAgZmFkdCA9IG1lbV9hbGxvYyhzaXplb2Yo c3RydWN0IGFjcGlfMjBfZmFkdCksIDE2KTsKICAgICBpZiAoIWZhZHQpIGdvdG8gb29tOwogICAg IG1lbWNweShmYWR0LCAmRmFkdCwgc2l6ZW9mKHN0cnVjdCBhY3BpXzIwX2ZhZHQpKTsKLSAgICBm YWR0LT5kc2R0ICAgPSAodW5zaWduZWQgbG9uZylkc2R0OwotICAgIGZhZHQtPnhfZHNkdCA9ICh1 bnNpZ25lZCBsb25nKWRzZHQ7Ci0gICAgZmFkdC0+ZmlybXdhcmVfY3RybCAgID0gKHVuc2lnbmVk IGxvbmcpZmFjczsKLSAgICBmYWR0LT54X2Zpcm13YXJlX2N0cmwgPSAodW5zaWduZWQgbG9uZylm YWNzOworICAgIGZhZHQtPmRzZHQgICA9IHZpcnRfdG9fcGh5cyhkc2R0KTsKKyAgICBmYWR0LT54 X2RzZHQgPSB2aXJ0X3RvX3BoeXMoZHNkdCk7CisgICAgZmFkdC0+ZmlybXdhcmVfY3RybCAgID0g dmlydF90b19waHlzKGZhY3MpOworICAgIGZhZHQtPnhfZmlybXdhcmVfY3RybCA9IHZpcnRfdG9f cGh5cyhmYWNzKTsKICAgICBzZXRfY2hlY2tzdW0oZmFkdCwKICAgICAgICAgICAgICAgICAgb2Zm c2V0b2Yoc3RydWN0IGFjcGlfaGVhZGVyLCBjaGVja3N1bSksCiAgICAgICAgICAgICAgICAgIHNp emVvZihzdHJ1Y3QgYWNwaV8yMF9mYWR0KSk7CkBAIC01NTAsNyArNTUxLDcgQEAgdm9pZCBhY3Bp X2J1aWxkX3RhYmxlcyhzdHJ1Y3QgYWNwaV9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IHBo eXNpY2FsKQogICAgICAgICAgICAgICAgICAgICAgMTYpOwogICAgIGlmICgheHNkdCkgZ290byBv b207CiAgICAgbWVtY3B5KHhzZHQsICZYc2R0LCBzaXplb2Yoc3RydWN0IGFjcGlfaGVhZGVyKSk7 Ci0gICAgeHNkdC0+ZW50cnlbMF0gPSAodW5zaWduZWQgbG9uZylmYWR0OworICAgIHhzZHQtPmVu dHJ5WzBdID0gdmlydF90b19waHlzKGZhZHQpOwogICAgIGZvciAoIGkgPSAwOyBzZWNvbmRhcnlf dGFibGVzW2ldOyBpKysgKQogICAgICAgICB4c2R0LT5lbnRyeVtpKzFdID0gc2Vjb25kYXJ5X3Rh Ymxlc1tpXTsKICAgICB4c2R0LT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX2hl YWRlcikgKyAoaSsxKSpzaXplb2YodWludDY0X3QpOwpAQCAtNTYzLDcgKzU2NCw3IEBAIHZvaWQg YWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGlu dCBwaHlzaWNhbCkKICAgICAgICAgICAgICAgICAgICAgIDE2KTsKICAgICBpZiAoIXJzZHQpIGdv dG8gb29tOwogICAgIG1lbWNweShyc2R0LCAmUnNkdCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2hlYWRl cikpOwotICAgIHJzZHQtPmVudHJ5WzBdID0gKHVuc2lnbmVkIGxvbmcpZmFkdF8xMDsKKyAgICBy c2R0LT5lbnRyeVswXSA9IHZpcnRfdG9fcGh5cyhmYWR0XzEwKTsKICAgICBmb3IgKCBpID0gMDsg c2Vjb25kYXJ5X3RhYmxlc1tpXTsgaSsrICkKICAgICAgICAgcnNkdC0+ZW50cnlbaSsxXSA9IHNl Y29uZGFyeV90YWJsZXNbaV07CiAgICAgcnNkdC0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZihzdHJ1 Y3QgYWNwaV9oZWFkZXIpICsgKGkrMSkqc2l6ZW9mKHVpbnQzMl90KTsKQEAgLTU3Nyw4ICs1Nzgs OCBAQCB2b2lkIGFjcGlfYnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnLCB1 bnNpZ25lZCBpbnQgcGh5c2ljYWwpCiAgICAgcnNkcCA9IChzdHJ1Y3QgYWNwaV8yMF9yc2RwICop cGh5c2ljYWw7CiAKICAgICBtZW1jcHkocnNkcCwgJlJzZHAsIHNpemVvZihzdHJ1Y3QgYWNwaV8y MF9yc2RwKSk7Ci0gICAgcnNkcC0+cnNkdF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcnNkdDsK LSAgICByc2RwLT54c2R0X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl4c2R0OworICAgIHJzZHAt PnJzZHRfYWRkcmVzcyA9IHZpcnRfdG9fcGh5cyhyc2R0KTsKKyAgICByc2RwLT54c2R0X2FkZHJl c3MgPSB2aXJ0X3RvX3BoeXMoeHNkdCk7CiAgICAgc2V0X2NoZWNrc3VtKHJzZHAsCiAgICAgICAg ICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBhY3BpXzEwX3JzZHAsIGNoZWNrc3VtKSwKICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpXzEwX3JzZHApKTsKLS0gCjIuNC4zCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK