From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============8772297169086142476==" MIME-Version: 1.0 From: Josh Stone To: elfutils-devel@lists.fedorahosted.org Subject: [RFC] fixing addr2line inline info Date: Tue, 18 Nov 2014 18:04:13 -0800 Message-ID: <546BFA9D.60705@redhat.com> --===============8772297169086142476== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, I have a simple patch attached to improve the output addr2line -fi. The problem I had is it failed to identify the parent function name if there was any lexical_block in the scope hierarchy. For example, try the following, compiled as the attached testfile-lex-inlines.bz2: 1 // g++ x.cpp -g -fPIC -olibx.so -shared -O3 -fvisibility=3Dhidden 2 3 void foobar() 4 { 5 __asm__ ( "nop" ::: ); 6 } 7 8 void foo() 9 { 10 { 11 void (*bar) () =3D foobar; 12 bar(); 13 } 14 } $ eu-addr2line -f -i -e testfile-lex-inlines.bz2 0x690 foobar inlined at /tmp/x.cpp:12 in _Z3foov /tmp/x.cpp:9 ?? /tmp/x.cpp:12 With my patch: $ ./src/addr2line -fi -e testfile-lex-inlines.bz2 0x690 foobar inlined at /tmp/x.cpp:12 in _Z3foov /tmp/x.cpp:9 _Z3foov /tmp/x.cpp:12 So the name is resolved, and I'm happier. But, as I went to make this a testcase, I noticed that the ":9" line isn't really correct for "foobar" -- that's the start of "foo". There are two candidate lines for 0x690: [ 33] special opcode 246: address+16 =3D +0x690 <_Z3foov>, line+4 =3D 9 [ 34] special opcode 14: address+0 =3D +0x690 <_Z3foov>, line-4 =3D 5 So what happens AFAICT, the name is found with dwarf_getscopes(), which will find the innermost address match. The line is found with dwfl_module_getsrc, which uses a binary search, making no guarantees if there are multiple matches. The bsearch happened to pick the first one in this case. Perhaps this should choose the last matching address to be approximately innermost? I also noticed that addr2line's print_dwarf_function() doesn't try to read linkage_name, although that wouldn't matter for this foobar inline. It also looks like it's trying to walk up the inline / subprogram stack, but since dwarf_getscopes chases the abstract_origin, it doesn't have any of that. So print_dwarf_function() returns false, and it falls back to dwfl_module_addrname to get the outer name. With dwarf_getscopes_die this would work, including multiple layers of inlines, as it later does for -i. But actually, I think having -i makes this "inlined at ..." message redundant. Binutils addr2line -fi doesn't print anything like this. Should we just kill that part? Patch review and other thoughts appreciated... Josh --===============8772297169086142476== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="addr2line-inline-parent.patch" ZGlmZiAtLWdpdCBhL3NyYy9hZGRyMmxpbmUuYyBiL3NyYy9hZGRyMmxpbmUuYwppbmRleCA1MGZj MmIzOGMzNjcuLmVlYTM5ZGE5N2UyYyAxMDA2NDQKLS0tIGEvc3JjL2FkZHIybGluZS5jCisrKyBi L3NyYy9hZGRyMmxpbmUuYwpAQCAtNjcyLDcgKzY3MiwyMiBAQCBoYW5kbGVfYWRkcmVzcyAoY29u c3QgY2hhciAqc3RyaW5nLCBEd2ZsICpkd2ZsKQogCQkJY29udGludWU7CiAKIAkJICAgICAgaWYg KHNob3dfZnVuY3Rpb25zKQotCQkJcHJpbnRfZGllc3ltICgmc2NvcGVzW2kgKyAxXSk7CisJCQl7 CisJCQkgIC8qIFNlYXJjaCBmb3IgdGhlIHBhcmVudCBpbmxpbmUgb3IgZnVuY3Rpb24uICBJdAor CQkJICAgICBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWJvdmUgdGhpcyBpbmxpbmUgLS0gZS5nLgor CQkJICAgICB0aGVyZSBjb3VsZCBiZSBhIGxleGljYWxfYmxvY2sgaW4gYmV0d2Vlbi4gICovCisJ CQkgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IG5zY29wZXM7IGorKykKKwkJCSAgICB7CisJCQkg ICAgICBEd2FyZl9EaWUgKnBhcmVudCA9ICZzY29wZXNbal07CisJCQkgICAgICBpbnQgdGFnID0g ZHdhcmZfdGFnIChwYXJlbnQpOworCQkJICAgICAgaWYgKHRhZyA9PSBEV19UQUdfaW5saW5lZF9z dWJyb3V0aW5lCisJCQkJICB8fCB0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0pCisJCQkJeworCQkJ CSAgcHJpbnRfZGllc3ltIChwYXJlbnQpOworCQkJCSAgYnJlYWs7CisJCQkJfQorCQkJICAgIH0K KwkJCX0KIAogCQkgICAgICBzcmMgPSBOVUxMOwogCQkgICAgICBsaW5lbm8gPSAwOwo= --===============8772297169086142476== Content-Type: application/x-bzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testfile-lex-inlines.bz2" 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 --===============8772297169086142476== Content-Type: text/plain MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="readelf-w-testfile-lex-inlines.txt" CkNhbGwgZnJhbWUgc2VhcmNoIHRhYmxlIHNlY3Rpb24gWzEzXSAnLmVoX2ZyYW1lX2hkcic6CiB2 ZXJzaW9uOiAgICAgICAgICAxCiBlaF9mcmFtZV9wdHJfZW5jOiAweDFiIChzZGF0YTQgcGNyZWwp CiBmZGVfY291bnRfZW5jOiAgICAweDMgKHVkYXRhNCkKIHRhYmxlX2VuYzogICAgICAgIDB4M2Ig KHNkYXRhNCBkYXRhcmVsKQogZWhfZnJhbWVfcHRyOiAgICAgMHgyNCAob2Zmc2V0OiAweDZjOCkK IGZkZV9jb3VudDogICAgICAgIDMKIFRhYmxlOgogIDB4ZmZmZmZlYzAgKG9mZnNldDogIDB4NTYw KSAtPiAweDQwIGZkZT1bICAgIDE4XQogIDB4ZmZmZmZmZTAgKG9mZnNldDogIDB4NjgwKSAtPiAw eDY4IGZkZT1bICAgIDQwXQogIDB4ZmZmZmZmZjAgKG9mZnNldDogIDB4NjkwKSAtPiAweDgwIGZk ZT1bICAgIDU4XQoKQ2FsbCBmcmFtZSBpbmZvcm1hdGlvbiBzZWN0aW9uIFsxNF0gJy5laF9mcmFt ZScgYXQgb2Zmc2V0IDB4NmM4OgoKIFsgICAgIDBdIENJRSBsZW5ndGg9MjAKICAgQ0lFX2lkOiAg ICAgICAgICAgICAgICAgICAwCiAgIHZlcnNpb246ICAgICAgICAgICAgICAgICAgMQogICBhdWdt ZW50YXRpb246ICAgICAgICAgICAgICJ6UiIKICAgY29kZV9hbGlnbm1lbnRfZmFjdG9yOiAgICAx CiAgIGRhdGFfYWxpZ25tZW50X2ZhY3RvcjogICAgLTgKICAgcmV0dXJuX2FkZHJlc3NfcmVnaXN0 ZXI6ICAxNgogICBBdWdtZW50YXRpb24gZGF0YTogICAgICAgIDB4MWIgKEZERSBhZGRyZXNzIGVu Y29kaW5nOiBzZGF0YTQgcGNyZWwpCgogICBQcm9ncmFtOgogICAgIGRlZl9jZmEgcjcgKHJzcCkg YXQgb2Zmc2V0IDgKICAgICBvZmZzZXQgcjE2IChyaXApIGF0IGNmYS04CiAgICAgbm9wCiAgICAg bm9wCgogWyAgICAxOF0gRkRFIGxlbmd0aD0zNiBjaWU9WyAgICAgMF0KICAgQ0lFX3BvaW50ZXI6 ICAgICAgICAgICAgICAyOAogICBpbml0aWFsX2xvY2F0aW9uOiAgICAgICAgICsweDAwMDAwMDAw MDAwMDA1NjAgKG9mZnNldDogMHg1NjApCiAgIGFkZHJlc3NfcmFuZ2U6ICAgICAgICAgICAgMHgz MCAoZW5kIG9mZnNldDogMHg1OTApCgogICBQcm9ncmFtOgogICAgIGRlZl9jZmFfb2Zmc2V0IDE2 CiAgICAgYWR2YW5jZV9sb2MgNiB0byAweDU2NgogICAgIGRlZl9jZmFfb2Zmc2V0IDI0CiAgICAg YWR2YW5jZV9sb2MgMTAgdG8gMHg1NzAKICAgICBkZWZfY2ZhX2V4cHJlc3Npb24gMTEKICAgICAg ICAgIFsgICAwXSBicmVnNyA4CiAgICAgICAgICBbICAgMl0gYnJlZzE2IDAKICAgICAgICAgIFsg ICA0XSBsaXQxNQogICAgICAgICAgWyAgIDVdIGFuZAogICAgICAgICAgWyAgIDZdIGxpdDExCiAg ICAgICAgICBbICAgN10gZ2UKICAgICAgICAgIFsgICA4XSBsaXQzCiAgICAgICAgICBbICAgOV0g c2hsCiAgICAgICAgICBbICAxMF0gcGx1cwogICAgIG5vcAogICAgIG5vcAogICAgIG5vcAogICAg IG5vcAoKIFsgICAgNDBdIEZERSBsZW5ndGg9MjAgY2llPVsgICAgIDBdCiAgIENJRV9wb2ludGVy OiAgICAgICAgICAgICAgNjgKICAgaW5pdGlhbF9sb2NhdGlvbjogICAgICAgICArMHgwMDAwMDAw MDAwMDAwNjgwIDxfWjZmb29iYXJ2PiAob2Zmc2V0OiAweDY4MCkKICAgYWRkcmVzc19yYW5nZTog ICAgICAgICAgICAweDIgKGVuZCBvZmZzZXQ6IDB4NjgyKQoKICAgUHJvZ3JhbToKICAgICBub3AK ICAgICBub3AKICAgICBub3AKICAgICBub3AKICAgICBub3AKICAgICBub3AKICAgICBub3AKCiBb ICAgIDU4XSBGREUgbGVuZ3RoPTIwIGNpZT1bICAgICAwXQogICBDSUVfcG9pbnRlcjogICAgICAg ICAgICAgIDkyCiAgIGluaXRpYWxfbG9jYXRpb246ICAgICAgICAgKzB4MDAwMDAwMDAwMDAwMDY5 MCA8X1ozZm9vdj4gKG9mZnNldDogMHg2OTApCiAgIGFkZHJlc3NfcmFuZ2U6ICAgICAgICAgICAg MHgyIChlbmQgb2Zmc2V0OiAweDY5MikKCiAgIFByb2dyYW06CiAgICAgbm9wCiAgICAgbm9wCiAg ICAgbm9wCiAgICAgbm9wCiAgICAgbm9wCiAgICAgbm9wCiAgICAgbm9wCgogWyAgICA3MF0gWmVy byB0ZXJtaW5hdG9yCgpEV0FSRiBzZWN0aW9uIFsyNF0gJy5kZWJ1Z19hcmFuZ2VzJyBhdCBvZmZz ZXQgMHgxMDU0OgoKVGFibGUgYXQgb2Zmc2V0IDA6CgogTGVuZ3RoOiAgICAgICAgICAgIDQ0CiBE V0FSRiB2ZXJzaW9uOiAgICAgIDIKIENVIG9mZnNldDogICAgICAgICAgMAogQWRkcmVzcyBzaXpl OiAgICAgICA4CiBTZWdtZW50IHNpemU6ICAgICAgIDAKCiAgICsweDAwMDAwMDAwMDAwMDA2ODAg PF9aNmZvb2JhcnY+Li4rMHgwMDAwMDAwMDAwMDAwNjkxIDxfWjNmb292KzB4MT4KCkRXQVJGIHNl Y3Rpb24gWzI1XSAnLmRlYnVnX2luZm8nIGF0IG9mZnNldCAweDEwODQ6CiBbT2Zmc2V0XQogQ29t cGlsYXRpb24gdW5pdCBhdCBvZmZzZXQgMDoKIFZlcnNpb246IDQsIEFiYnJldmlhdGlvbiBzZWN0 aW9uIG9mZnNldDogMCwgQWRkcmVzcyBzaXplOiA4LCBPZmZzZXQgc2l6ZTogNAogWyAgICAgYl0g IGNvbXBpbGVfdW5pdAogICAgICAgICAgIHByb2R1Y2VyICAgICAgICAgICAgIChzdHJwKSAiR05V IEMrKyA0LjguMyAyMDE0MDkxMSAoUmVkIEhhdCA0LjguMy03KSAtbXR1bmU9Z2VuZXJpYyAtbWFy Y2g9eDg2LTY0IC1nIC1PMyAtZlBJQyAtZnZpc2liaWxpdHk9aGlkZGVuIgogICAgICAgICAgIGxh bmd1YWdlICAgICAgICAgICAgIChkYXRhMSkgQ19wbHVzX3BsdXMgKDQpCiAgICAgICAgICAgbmFt ZSAgICAgICAgICAgICAgICAgKHN0cnApICJ4LmNwcCIKICAgICAgICAgICBjb21wX2RpciAgICAg ICAgICAgICAoc3RycCkgIi90bXAiCiAgICAgICAgICAgbG93X3BjICAgICAgICAgICAgICAgKGFk ZHIpICsweDAwMDAwMDAwMDAwMDA2ODAgPF9aNmZvb2JhcnY+CiAgICAgICAgICAgaGlnaF9wYyAg ICAgICAgICAgICAgKGRhdGE4KSAxOCAoKzB4MDAwMDAwMDAwMDAwMDY5MikKICAgICAgICAgICBz dG10X2xpc3QgICAgICAgICAgICAoc2VjX29mZnNldCkgMAogWyAgICAyZF0gICAgc3VicHJvZ3Jh bQogICAgICAgICAgICAgZXh0ZXJuYWwgICAgICAgICAgICAgKGZsYWdfcHJlc2VudCkgWWVzCiAg ICAgICAgICAgICBuYW1lICAgICAgICAgICAgICAgICAoc3RycCkgImZvb2JhciIKICAgICAgICAg ICAgIGRlY2xfZmlsZSAgICAgICAgICAgIChkYXRhMSkgMQogICAgICAgICAgICAgZGVjbF9saW5l ICAgICAgICAgICAgKGRhdGExKSAzCiAgICAgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAo ZGF0YTEpIGlubGluZWQgKDEpCiBbICAgIDM1XSAgICBzdWJwcm9ncmFtCiAgICAgICAgICAgICBh YnN0cmFjdF9vcmlnaW4gICAgICAocmVmNCkgWyAgICAyZF0KICAgICAgICAgICAgIGxpbmthZ2Vf bmFtZSAgICAgICAgIChzdHJwKSAiX1o2Zm9vYmFydiIKICAgICAgICAgICAgIGxvd19wYyAgICAg ICAgICAgICAgIChhZGRyKSArMHgwMDAwMDAwMDAwMDAwNjgwIDxfWjZmb29iYXJ2PgogICAgICAg ICAgICAgaGlnaF9wYyAgICAgICAgICAgICAgKGRhdGE4KSAyICgrMHgwMDAwMDAwMDAwMDAwNjgy KQogICAgICAgICAgICAgZnJhbWVfYmFzZSAgICAgICAgICAgKGV4cHJsb2MpIAogICAgICAgICAg ICAgIFsgICAwXSBjYWxsX2ZyYW1lX2NmYQogICAgICAgICAgICAgR05VX2FsbF9jYWxsX3NpdGVz ICAgKGZsYWdfcHJlc2VudCkgWWVzCiBbICAgIDUwXSAgICBzdWJwcm9ncmFtCiAgICAgICAgICAg ICBleHRlcm5hbCAgICAgICAgICAgICAoZmxhZ19wcmVzZW50KSBZZXMKICAgICAgICAgICAgIG5h bWUgICAgICAgICAgICAgICAgIChzdHJpbmcpICJmb28iCiAgICAgICAgICAgICBkZWNsX2ZpbGUg ICAgICAgICAgICAoZGF0YTEpIDEKICAgICAgICAgICAgIGRlY2xfbGluZSAgICAgICAgICAgIChk YXRhMSkgOAogICAgICAgICAgICAgbGlua2FnZV9uYW1lICAgICAgICAgKHN0cnApICJfWjNmb292 IgogICAgICAgICAgICAgbG93X3BjICAgICAgICAgICAgICAgKGFkZHIpICsweDAwMDAwMDAwMDAw MDA2OTAgPF9aM2Zvb3Y+CiAgICAgICAgICAgICBoaWdoX3BjICAgICAgICAgICAgICAoZGF0YTgp IDIgKCsweDAwMDAwMDAwMDAwMDA2OTIpCiAgICAgICAgICAgICBmcmFtZV9iYXNlICAgICAgICAg ICAoZXhwcmxvYykgCiAgICAgICAgICAgICAgWyAgIDBdIGNhbGxfZnJhbWVfY2ZhCiAgICAgICAg ICAgICBHTlVfYWxsX2NhbGxfc2l0ZXMgICAoZmxhZ19wcmVzZW50KSBZZXMKICAgICAgICAgICAg IHNpYmxpbmcgICAgICAgICAgICAgIChyZWY0KSBbICAgIGIxXQogWyAgICA3MV0gICAgICBsZXhp Y2FsX2Jsb2NrCiAgICAgICAgICAgICAgIGxvd19wYyAgICAgICAgICAgICAgIChhZGRyKSArMHgw MDAwMDAwMDAwMDAwNjkwIDxfWjNmb292PgogICAgICAgICAgICAgICBoaWdoX3BjICAgICAgICAg ICAgICAoZGF0YTgpIDIgKCsweDAwMDAwMDAwMDAwMDA2OTIpCiBbICAgIDgyXSAgICAgICAgdmFy aWFibGUKICAgICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgICAgICAoc3RyaW5nKSAiYmFy IgogICAgICAgICAgICAgICAgIGRlY2xfZmlsZSAgICAgICAgICAgIChkYXRhMSkgMQogICAgICAg ICAgICAgICAgIGRlY2xfbGluZSAgICAgICAgICAgIChkYXRhMSkgMTEKICAgICAgICAgICAgICAg ICB0eXBlICAgICAgICAgICAgICAgICAocmVmNCkgWyAgICBiMl0KICAgICAgICAgICAgICAgICBs b2NhdGlvbiAgICAgICAgICAgICAoZXhwcmxvYykgCiAgICAgICAgICAgICAgICAgIFsgICAwXSBh ZGRyICsweDY4MCA8X1o2Zm9vYmFydj4KICAgICAgICAgICAgICAgICAgWyAgIDldIHN0YWNrX3Zh bHVlCiBbICAgIDk4XSAgICAgICAgaW5saW5lZF9zdWJyb3V0aW5lCiAgICAgICAgICAgICAgICAg YWJzdHJhY3Rfb3JpZ2luICAgICAgKHJlZjQpIFsgICAgMmRdCiAgICAgICAgICAgICAgICAgbG93 X3BjICAgICAgICAgICAgICAgKGFkZHIpICsweDAwMDAwMDAwMDAwMDA2OTAgPF9aM2Zvb3Y+CiAg ICAgICAgICAgICAgICAgaGlnaF9wYyAgICAgICAgICAgICAgKGRhdGE4KSAyICgrMHgwMDAwMDAw MDAwMDAwNjkyKQogICAgICAgICAgICAgICAgIGNhbGxfZmlsZSAgICAgICAgICAgIChkYXRhMSkg MQogICAgICAgICAgICAgICAgIGNhbGxfbGluZSAgICAgICAgICAgIChkYXRhMSkgMTIKIFsgICAg YjFdICAgIHN1YnJvdXRpbmVfdHlwZQogWyAgICBiMl0gICAgcG9pbnRlcl90eXBlCiAgICAgICAg ICAgICBieXRlX3NpemUgICAgICAgICAgICAoZGF0YTEpIDgKICAgICAgICAgICAgIHR5cGUgICAg ICAgICAgICAgICAgIChyZWY0KSBbICAgIGIxXQoKRFdBUkYgc2VjdGlvbiBbMjZdICcuZGVidWdf YWJicmV2JyBhdCBvZmZzZXQgMHgxMTNkOgogWyBDb2RlXQoKQWJicmV2aWF0aW9uIHNlY3Rpb24g YXQgb2Zmc2V0IDA6CiBbICAgIDFdIG9mZnNldDogMCwgY2hpbGRyZW46IHllcywgdGFnOiBjb21w aWxlX3VuaXQKICAgICAgICAgIGF0dHI6IHByb2R1Y2VyLCBmb3JtOiBzdHJwLCBvZmZzZXQ6IDAK ICAgICAgICAgIGF0dHI6IGxhbmd1YWdlLCBmb3JtOiBkYXRhMSwgb2Zmc2V0OiAweDIKICAgICAg ICAgIGF0dHI6IG5hbWUsIGZvcm06IHN0cnAsIG9mZnNldDogMHg0CiAgICAgICAgICBhdHRyOiBj b21wX2RpciwgZm9ybTogc3RycCwgb2Zmc2V0OiAweDYKICAgICAgICAgIGF0dHI6IGxvd19wYywg Zm9ybTogYWRkciwgb2Zmc2V0OiAweDgKICAgICAgICAgIGF0dHI6IGhpZ2hfcGMsIGZvcm06IGRh dGE4LCBvZmZzZXQ6IDB4YQogICAgICAgICAgYXR0cjogc3RtdF9saXN0LCBmb3JtOiBzZWNfb2Zm c2V0LCBvZmZzZXQ6IDB4YwogWyAgICAyXSBvZmZzZXQ6IDE5LCBjaGlsZHJlbjogbm8sIHRhZzog c3VicHJvZ3JhbQogICAgICAgICAgYXR0cjogZXh0ZXJuYWwsIGZvcm06IGZsYWdfcHJlc2VudCwg b2Zmc2V0OiAweDEzCiAgICAgICAgICBhdHRyOiBuYW1lLCBmb3JtOiBzdHJwLCBvZmZzZXQ6IDB4 MTUKICAgICAgICAgIGF0dHI6IGRlY2xfZmlsZSwgZm9ybTogZGF0YTEsIG9mZnNldDogMHgxNwog ICAgICAgICAgYXR0cjogZGVjbF9saW5lLCBmb3JtOiBkYXRhMSwgb2Zmc2V0OiAweDE5CiAgICAg ICAgICBhdHRyOiBpbmxpbmUsIGZvcm06IGRhdGExLCBvZmZzZXQ6IDB4MWIKIFsgICAgM10gb2Zm c2V0OiAzNCwgY2hpbGRyZW46IG5vLCB0YWc6IHN1YnByb2dyYW0KICAgICAgICAgIGF0dHI6IGFi c3RyYWN0X29yaWdpbiwgZm9ybTogcmVmNCwgb2Zmc2V0OiAweDIyCiAgICAgICAgICBhdHRyOiBs aW5rYWdlX25hbWUsIGZvcm06IHN0cnAsIG9mZnNldDogMHgyNAogICAgICAgICAgYXR0cjogbG93 X3BjLCBmb3JtOiBhZGRyLCBvZmZzZXQ6IDB4MjYKICAgICAgICAgIGF0dHI6IGhpZ2hfcGMsIGZv cm06IGRhdGE4LCBvZmZzZXQ6IDB4MjgKICAgICAgICAgIGF0dHI6IGZyYW1lX2Jhc2UsIGZvcm06 IGV4cHJsb2MsIG9mZnNldDogMHgyYQogICAgICAgICAgYXR0cjogR05VX2FsbF9jYWxsX3NpdGVz LCBmb3JtOiBmbGFnX3ByZXNlbnQsIG9mZnNldDogMHgyYwogWyAgICA0XSBvZmZzZXQ6IDUyLCBj aGlsZHJlbjogeWVzLCB0YWc6IHN1YnByb2dyYW0KICAgICAgICAgIGF0dHI6IGV4dGVybmFsLCBm b3JtOiBmbGFnX3ByZXNlbnQsIG9mZnNldDogMHgzNAogICAgICAgICAgYXR0cjogbmFtZSwgZm9y bTogc3RyaW5nLCBvZmZzZXQ6IDB4MzYKICAgICAgICAgIGF0dHI6IGRlY2xfZmlsZSwgZm9ybTog ZGF0YTEsIG9mZnNldDogMHgzOAogICAgICAgICAgYXR0cjogZGVjbF9saW5lLCBmb3JtOiBkYXRh MSwgb2Zmc2V0OiAweDNhCiAgICAgICAgICBhdHRyOiBsaW5rYWdlX25hbWUsIGZvcm06IHN0cnAs IG9mZnNldDogMHgzYwogICAgICAgICAgYXR0cjogbG93X3BjLCBmb3JtOiBhZGRyLCBvZmZzZXQ6 IDB4M2UKICAgICAgICAgIGF0dHI6IGhpZ2hfcGMsIGZvcm06IGRhdGE4LCBvZmZzZXQ6IDB4NDAK ICAgICAgICAgIGF0dHI6IGZyYW1lX2Jhc2UsIGZvcm06IGV4cHJsb2MsIG9mZnNldDogMHg0Mgog ICAgICAgICAgYXR0cjogR05VX2FsbF9jYWxsX3NpdGVzLCBmb3JtOiBmbGFnX3ByZXNlbnQsIG9m ZnNldDogMHg0NAogICAgICAgICAgYXR0cjogc2libGluZywgZm9ybTogcmVmNCwgb2Zmc2V0OiAw eDQ3CiBbICAgIDVdIG9mZnNldDogNzgsIGNoaWxkcmVuOiB5ZXMsIHRhZzogbGV4aWNhbF9ibG9j awogICAgICAgICAgYXR0cjogbG93X3BjLCBmb3JtOiBhZGRyLCBvZmZzZXQ6IDB4NGUKICAgICAg ICAgIGF0dHI6IGhpZ2hfcGMsIGZvcm06IGRhdGE4LCBvZmZzZXQ6IDB4NTAKIFsgICAgNl0gb2Zm c2V0OiA4NywgY2hpbGRyZW46IG5vLCB0YWc6IHZhcmlhYmxlCiAgICAgICAgICBhdHRyOiBuYW1l LCBmb3JtOiBzdHJpbmcsIG9mZnNldDogMHg1NwogICAgICAgICAgYXR0cjogZGVjbF9maWxlLCBm b3JtOiBkYXRhMSwgb2Zmc2V0OiAweDU5CiAgICAgICAgICBhdHRyOiBkZWNsX2xpbmUsIGZvcm06 IGRhdGExLCBvZmZzZXQ6IDB4NWIKICAgICAgICAgIGF0dHI6IHR5cGUsIGZvcm06IHJlZjQsIG9m ZnNldDogMHg1ZAogICAgICAgICAgYXR0cjogbG9jYXRpb24sIGZvcm06IGV4cHJsb2MsIG9mZnNl dDogMHg1ZgogWyAgICA3XSBvZmZzZXQ6IDEwMiwgY2hpbGRyZW46IG5vLCB0YWc6IGlubGluZWRf c3Vicm91dGluZQogICAgICAgICAgYXR0cjogYWJzdHJhY3Rfb3JpZ2luLCBmb3JtOiByZWY0LCBv ZmZzZXQ6IDB4NjYKICAgICAgICAgIGF0dHI6IGxvd19wYywgZm9ybTogYWRkciwgb2Zmc2V0OiAw eDY4CiAgICAgICAgICBhdHRyOiBoaWdoX3BjLCBmb3JtOiBkYXRhOCwgb2Zmc2V0OiAweDZhCiAg ICAgICAgICBhdHRyOiBjYWxsX2ZpbGUsIGZvcm06IGRhdGExLCBvZmZzZXQ6IDB4NmMKICAgICAg ICAgIGF0dHI6IGNhbGxfbGluZSwgZm9ybTogZGF0YTEsIG9mZnNldDogMHg2ZQogWyAgICA4XSBv ZmZzZXQ6IDExNywgY2hpbGRyZW46IG5vLCB0YWc6IHN1YnJvdXRpbmVfdHlwZQogWyAgICA5XSBv ZmZzZXQ6IDEyMiwgY2hpbGRyZW46IG5vLCB0YWc6IHBvaW50ZXJfdHlwZQogICAgICAgICAgYXR0 cjogYnl0ZV9zaXplLCBmb3JtOiBkYXRhMSwgb2Zmc2V0OiAweDdhCiAgICAgICAgICBhdHRyOiB0 eXBlLCBmb3JtOiByZWY0LCBvZmZzZXQ6IDB4N2MKCkRXQVJGIHNlY3Rpb24gWzI3XSAnLmRlYnVn X2xpbmUnIGF0IG9mZnNldCAweDExYzE6CgpUYWJsZSBhdCBvZmZzZXQgMDoKCiBMZW5ndGg6ICAg ICAgICAgICAgICAgICAgICAgNTQKIERXQVJGIHZlcnNpb246ICAgICAgICAgICAgICAyCiBQcm9s b2d1ZSBsZW5ndGg6ICAgICAgICAgICAgMjgKIE1pbmltdW0gaW5zdHJ1Y3Rpb24gbGVuZ3RoOiAx CiBNYXhpbXVtIG9wZXJhdGlvbnMgcGVyIGluc3RydWN0aW9uOiAxCiBJbml0aWFsIHZhbHVlIGlm ICdpc19zdG10JzogMQogTGluZSBiYXNlOiAgICAgICAgICAgICAgICAgIC01CiBMaW5lIHJhbmdl OiAgICAgICAgICAgICAgICAgMTQKIE9wY29kZSBiYXNlOiAgICAgICAgICAgICAgICAxMwoKT3Bj b2RlczoKICBbIDFdICAwIGFyZ3VtZW50cwogIFsgMl0gIDEgYXJndW1lbnQKICBbIDNdICAxIGFy Z3VtZW50CiAgWyA0XSAgMSBhcmd1bWVudAogIFsgNV0gIDEgYXJndW1lbnQKICBbIDZdICAwIGFy Z3VtZW50cwogIFsgN10gIDAgYXJndW1lbnRzCiAgWyA4XSAgMCBhcmd1bWVudHMKICBbIDldICAx IGFyZ3VtZW50CiAgWzEwXSAgMCBhcmd1bWVudHMKICBbMTFdICAwIGFyZ3VtZW50cwogIFsxMl0g IDEgYXJndW1lbnQKCkRpcmVjdG9yeSB0YWJsZToKCkZpbGUgbmFtZSB0YWJsZToKIEVudHJ5IERp ciAgIFRpbWUgICAgICBTaXplICAgICAgTmFtZQogMSAgICAgMCAgICAgMCAgICAgICAgIDAgICAg ICAgICB4LmNwcAoKTGluZSBudW1iZXIgc3RhdGVtZW50czoKIFsgICAgMjZdIGV4dGVuZGVkIG9w Y29kZSAyOiAgc2V0IGFkZHJlc3MgdG8gKzB4NjgwIDxfWjZmb29iYXJ2PgogWyAgICAzMV0gc3Bl Y2lhbCBvcGNvZGUgMjE6IGFkZHJlc3MrMCA9ICsweDY4MCA8X1o2Zm9vYmFydj4sIGxpbmUrMyA9 IDQKIFsgICAgMzJdIHNwZWNpYWwgb3Bjb2RlIDE5OiBhZGRyZXNzKzAgPSArMHg2ODAgPF9aNmZv b2JhcnY+LCBsaW5lKzEgPSA1CiBbICAgIDMzXSBzcGVjaWFsIG9wY29kZSAyNDY6IGFkZHJlc3Mr MTYgPSArMHg2OTAgPF9aM2Zvb3Y+LCBsaW5lKzQgPSA5CiBbICAgIDM0XSBzcGVjaWFsIG9wY29k ZSAxNDogYWRkcmVzcyswID0gKzB4NjkwIDxfWjNmb292PiwgbGluZS00ID0gNQogWyAgICAzNV0g YWR2YW5jZSBhZGRyZXNzIGJ5IDIgdG8gKzB4NjkyCiBbICAgIDM3XSBleHRlbmRlZCBvcGNvZGUg MTogIGVuZCBvZiBzZXF1ZW5jZQoKRFdBUkYgc2VjdGlvbiBbMjhdICcuZGVidWdfc3RyJyBhdCBv ZmZzZXQgMHgxMWZiOgogT2Zmc2V0ICBTdHJpbmcKIFsgICAwXSAgImZvb2JhciIKIFsgICA3XSAg IkdOVSBDKysgNC44LjMgMjAxNDA5MTEgKFJlZCBIYXQgNC44LjMtNykgLW10dW5lPWdlbmVyaWMg LW1hcmNoPXg4Ni02NCAtZyAtTzMgLWZQSUMgLWZ2aXNpYmlsaXR5PWhpZGRlbiIKIFsgIDZlXSAg Ii90bXAiCiBbICA3M10gICJfWjZmb29iYXJ2IgogWyAgN2VdICAiX1ozZm9vdiIKIFsgIDg2XSAg InguY3BwIgo= --===============8772297169086142476==--