From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932558AbZHMUzX (ORCPT ); Thu, 13 Aug 2009 16:55:23 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755844AbZHMUzT (ORCPT ); Thu, 13 Aug 2009 16:55:19 -0400 Received: from mx2.redhat.com ([66.187.237.31]:53160 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751705AbZHMUzQ (ORCPT ); Thu, 13 Aug 2009 16:55:16 -0400 Message-ID: <4A847E30.9050903@redhat.com> Date: Thu, 13 Aug 2009 16:57:20 -0400 From: Masami Hiramatsu User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b3pre) Gecko/20090513 Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2 MIME-Version: 1.0 To: Ingo Molnar , Steven Rostedt , lkml CC: Ananth N Mavinakayanahalli , Avi Kivity , Andi Kleen , Christoph Hellwig , "Frank Ch. Eigler" , Frederic Weisbecker , "H. Peter Anvin" , Jason Baron , Jim Keniston , "K.Prasad" , Lai Jiangshan , Li Zefan , =?UTF-8?B?UHJ6ZW15c8WCYXdQYXdlxYJjenlr?= , Roland McGrath , Sam Ravnborg , Srikar Dronamraju , Tom Zanussi , Vegard Nossum , systemtap , kvm , DLE Subject: [TOOL] kprobestest : Kprobe stress test tool References: <20090813203403.31965.20973.stgit@localhost.localdomain> In-Reply-To: <20090813203403.31965.20973.stgit@localhost.localdomain> Content-Type: multipart/mixed; boundary="------------000702000009000002030102" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------000702000009000002030102 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit This script tests kprobes to probe on all symbols in the kernel and finds symbols which must be blacklisted. Usage ----- kprobestest [-s SYMLIST] [-b BLACKLIST] [-w WHITELIST] Run stress test. If SYMLIST file is specified, use it as an initial symbol list (This is useful for verifying white list after diagnosing all symbols). kprobestest cleanup Cleanup all lists How to Work ----------- This tool list up all symbols in the kernel via /proc/kallsyms, and sorts it into groups (each of them including 64 symbols in default). And then, it tests each group by using kprobe-tracer. If a kernel crash occurred, that group is moved into 'failed' dir. If the group passed the test, this script moves it into 'passed' dir and saves kprobe_profile into 'passed/profiles/'. After testing all groups, all 'failed' groups are merged and sorted into smaller groups (divided by 4, in default). And those are tested again. This loop will be repeated until all group has just 1 symbol. Finally, the script sorts all 'passed' symbols into 'tested', 'untested', and 'missed' based on profiles. Note ---- - This script just gives us some clues to the blacklisted functions. In some cases, a combination of probe points will cause a problem, but each of them doesn't cause the problem alone. Thank you, -- Masami Hiramatsu Software Engineer Hitachi Computer Products (America), Inc. Software Solutions Division e-mail: mhiramat@redhat.com --------------000702000009000002030102 Content-Type: text/plain; name="kprobestest" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kprobestest" IyEvYmluL2Jhc2gKIwojICBrcHJvYmVzdGVzdDogS3Byb2JlcyBzdHJlc3MgdGVzdCB0b29s CiMgIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4K IwojICBVc2FnZToKIyAgICAgJCBrcHJvYmVzdGVzdCBbLXMgU1lNTElTVF0gWy1iIEJMQUNL TElTVF0gWy13IFdISVRFTElTVF0KIyAgICAgICAgUnVuIHN0cmVzcyB0ZXN0LiBJZiBTWU1M SVNUIGZpbGUgaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgCiMgICAgICAgIGFuIGluaXRpYWwg c3ltYm9sIGxpc3QgKFRoaXMgaXMgdXNlZnVsIGZvciB2ZXJpZnlpbmcgd2hpdGUgbGlzdAoj ICAgICAgICBhZnRlciBkaWFnbm9zaW5nIGFsbCBzeW1ib2xzKS4KIwojICAgICAkIGtwcm9i ZXN0ZXN0IGNsZWFudXAKIyAgICAgICAgQ2xlYW51cCBhbGwgbGlzdHMKCiMgQ29uZmlndXJh dGlvbnMgCkRFQlVHRlM9L3N5cy9rZXJuZWwvZGVidWcKSU5JVE5SPTY0CkRJVj00ClNZTUZJ TEU9c3ltcy5saXN0CkZBSUxGSUxFPWJsYWNrLmxpc3QKCmZ1bmN0aW9uIGRvX3Rlc3QgKCkg ewogICMgRG8gc29tZSBiZW5jaG1hcmsKICBmb3IgaSBpbiB7MS4uNH0gOyBkbwogIHNsZWVw IDAuNQogIGVjaG8gLW4gIi4iCiAgZG9uZQp9CgpmdW5jdGlvbiB1c2FnZSAoKSB7CiAgZWNo byAiVXNhZ2U6IGtwcm9iZXN0ZXN0IFtjbGVhbnVwXSBbLXMgU1lNTElTVF0gWy1iIEJMQUNL TElTVF0gWy13IFdISVRFTElTVF0iCiAgZXhpdCAwCn0KCmZ1bmN0aW9uIGNsZWFudXBfdGVz dCAoKSB7CiAgZWNobyAiQ2xlYW51cCBhbGwgZmlsZXMiCiAgcm0gLXJmICRTWU1GSUxFIGZh aWxlZCBwYXNzZWQgdGVzdGluZyB1bnNldAogIGV4aXQgMAp9CgoKIyBQYXJzZSBhcmd1bWVu dHMKV0hJVEVMSVNUPQpCTEFDS0xJU1Q9ClNZTUxJU1Q9Cgp3aGlsZSBbICIkMSIgXTsgZG8K ICBjYXNlICQxIGluCiAgICBjbGVhbnVwKQogICAgICBjbGVhbnVwX3Rlc3QKICAgICAgOzsK ICAgIC1zKQogICAgICBTWU1MSVNUPSQyCiAgICAgIHNoaWZ0IDEKICAgICAgOzsKICAgIC1i KQogICAgICBCTEFDS0xJU1Q9JDIKICAgICAgc2hpZnQgMQogICAgICA7OwogICAgLXcpCiAg ICAgIFdISVRFTElTVD0kMgogICAgICBzaGlmdCAxCiAgICAgIDs7CiAgICAqKQogICAgICB1 c2FnZQogICAgICA7OwogIGVzYWMKICBzaGlmdCAxCmRvbmUKCiMgU2hvdyBjb25maWd1cmF0 aW9ucwplY2hvICJLcHJvYmUgc3RyZXNzIHRlc3Qgc3RhcnRpbmcuIgpbIC1mICIkQkxBQ0tM SVNUIiBdICYmIGVjaG8gIkJsYWNrbGlzdDogJEJMQUNLTElTVCIgfHwgQkxBQ0tMSVNUPSIi ClsgLWYgIiRXSElURUxJU1QiIF0gJiYgZWNobyAiV2hpdGVsaXN0OiAkV0hJVEVMSVNUIiB8 fCBXSElURUxJU1Q9IiIKWyAtZiAiJFNZTUxJU1QiIF0gJiYgZWNobyAiU3ltbGlzdDogJFNZ TUxJU1QiIHx8IFNZTUxJU1Q9IiIKCmZ1bmN0aW9uIG1ha2VfZmlsdGVyICgpIHsKICBsb2Nh bCBFWFA9IiIKICBpZiBbIC16ICIkV0hJVEVMSVNUIiAtYSAteiAiJEJMQUNLTElTVCIgXTsg dGhlbgogICAgZWNobyAicy9eJC8vZyIKICBlbHNlCiAgICBmb3IgaSBpbiBgY2F0ICRXSElU RUxJU1QgJEJMQUNLTElTVGAgO2RvCiAgICAgIFsgLXogIiRFWFAiIF0gJiYgRVhQPSJeJGlc JCIgfHwgRVhQPSIkRVhQXFx8XiRpXCQiCiAgICBkb25lIDsgRVhQPSJzLyRFWFAvL2ciCiAg ICBlY2hvICRFWFAKICBmaQp9CgpmdW5jdGlvbiBsaXN0X2FsbHN5bXMgKCkgewogIGxvY2Fs IHN5bQogIGxvY2FsIG91dD0xCiAgZm9yIHN5bSBpbiBgc29ydCAvcHJvYy9rYWxsc3ltcyB8 IGVncmVwICdbMC05YS1mXSsgW1R0XSBbXltdKiQnIHwgY3V0IC1kXCAgLWYgM2A7ZG8KICAg IFsgJHN5bSAgPSAiX19rcHJvYmVzX3RleHRfc3RhcnQiIF0gJiYgb3V0PTAgJiYgY29udGlu dWUKICAgIFsgJHN5bSAgPSAiX19rcHJvYmVzX3RleHRfZW5kIiBdICYmIG91dD0xICYmIGNv bnRpbnVlCiAgICBbICRzeW0gID0gIl9ldGV4dCIgXSAmJiBicmVhawogICAgWyAkb3V0IC1l cSAxIF0gJiYgZWNobyAkc3ltCiAgZG9uZQp9CgpmdW5jdGlvbiBwcmVwX3Rlc3RpbmcgKCkg ewogIGxvY2FsIGk9MAogIGxvY2FsIG49MAogIGxvY2FsIE5SPSQxCiAgbG9jYWwgZm5hbWU9 CgogIGVjaG8gIkdyb3VwaW5nIHN5bWJvbHM6ICROUiIKCiAgZm5hbWU9YHByaW50ZiAibGlz dC0lMDNkLiVkIiAkaSAkTlJgCiAgY2F0ICRTWU1GSUxFIHwgd2hpbGUgcmVhZCBsbjsgZG8K ICAgIFsgLXogIiRsbiIgXSAmJiBjb250aW51ZQogICAgZWNobyAiJGxuIiA+PiB0ZXN0aW5n LyRmbmFtZQogICAgbj0kKChuKzEpKQogICAgaWYgWyAkbiAtZXEgJE5SIF07IHRoZW4KICAg ICAgbj0wCiAgICAgIGk9JCgoaSsxKSkKICAgICAgZm5hbWU9YHByaW50ZiAibGlzdC0lMDNk LiVkIiAkaSAkTlJgCiAgICBmaQogIGRvbmUKICBzeW5jCn0KCmZ1bmN0aW9uIGluaXRfZmly c3QgKCkgewogIGxvY2FsIEVYUAogIEVYUD1gbWFrZV9maWx0ZXJgCiAgaWYgWyAtZiAiJFNZ TUxJU1QiIF07IHRoZW4KICAgIGNhdCAkU1lNTElTVCB8IHNlZCAkRVhQID4gJFNZTUZJTEUK ICBlbHNlCiAgICBlY2hvIC1uICJHZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZyb20gL3Byb2Mv a2FsbHN5bXMuLi4iCiAgICBsaXN0X2FsbHN5bXMgfCBzZWQgJEVYUCA+ICRTWU1GSUxFCiAg ICBlY2hvICJkb25lLiAiIGB3YyAtbCAkU1lNRklMRSB8IGN1dCAtZjEgLWRcICBgICJzeW1i b2xzIGxpc3RlZC4iCiAgZmkKICBta2RpciAtcCB0ZXN0aW5nIGZhaWxlZCB1bnNldCBwYXNz ZWQgcGFzc2VkL3Byb2ZpbGVzCiAgcHJlcF90ZXN0aW5nICRJTklUTlIKfQoKZnVuY3Rpb24g Z2V0X21heF9uciAoKSB7CiAgd2MgLWwgZmFpbGVkL2xpc3QtKiB1bnNldC9saXN0LSogMj4v ZGV2L251bGwgfFwKICBhd2sgJy9eICpbMC05XSsgLipsaXN0LiokL3sgaWYgKG5yIDwgJDEp IG5yPSQxIH0gQkVHSU4geyBucj0wIH0gRU5EIHsgcHJpbnQgbnJ9Jwp9CgpmdW5jdGlvbiBp bml0X25leHQgKCkgewogIGxvY2FsIE5SCiAgTlI9YGdldF9tYXhfbnJgCiAgWyAkTlIgLWVx IDAgXSAmJiByZXR1cm4gMQogIFsgJE5SIC1lcSAxIF0gJiYgcmV0dXJuIDIKICBbICROUiAt bGUgJERJViBdICYmIE5SPTEgfHwgTlI9YGV4cHIgJE5SIC8gJERJVmAKCiAgY2F0IGZhaWxl ZC8qIHVuc2V0LyogPiAkU1lNRklMRQogIHJtIGZhaWxlZC8qIHVuc2V0LyoKCiAgcHJlcF90 ZXN0aW5nICROUgogIHJldHVybiAwCn0KCgojIEluaXRpYWxpemUgc3ltYm9scwppZiBbICEg LWQgdGVzdGluZyBdOyB0aGVuCiAgaW5pdF9maXJzdAplbGlmIFsgLXogImBscyB0ZXN0aW5n L2AiIF07IHRoZW4KICBpbml0X25leHQKZmkKCmZ1bmN0aW9uIHNldF9wcm9iZXMgKCkgewog IGxvY2FsIHMKICBmb3IgcyBpbiBgY2F0ICQxYDsgZG8KICAgIGVjaG8gInA6JHMiICRzID4+ ICRERUJVR0ZTL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogICAgWyAkPyAtbmUgMCBdICYmIHJl dHVybiAtMQogIGRvbmUKICByZXR1cm4gMAp9CgpmdW5jdGlvbiBjbGVhcl9wcm9iZXMgKCkg ewogIGVjaG8gPiAkREVCVUdGUy90cmFjaW5nL2twcm9iZV9ldmVudHMKfQoKZnVuY3Rpb24g c2F2ZV9wcm9maWxlICgpIHsKICBjYXQgJERFQlVHRlMvdHJhY2luZy9rcHJvYmVfcHJvZmls ZSA+IHBhc3NlZC9wcm9maWxlcy8kMS5wcm9mCn0KCmNsZWFyX3Byb2JlcwoKZWNobyAiU3Rh cnRpbmcgdGVzdHMuLiIKClJFVD0wCgojIE1haW4gbG9vcAp3aGlsZSBbICRSRVQgLWVxIDAg XTsgZG8KCiAgZm9yIGxpc3QgaW4gYGNkIHRlc3RpbmcvOyBsc2A7IGRvCiAgICBlY2hvIC1u ICRsaXN0CiAgICAjIFRlbXBvcmFyeSBtb3ZpbmcgbGlzdCBpbnRvIGZhaWxlZC4KICAgIG12 IHRlc3RpbmcvJGxpc3QgZmFpbGVkLwogICAgc3luYztzeW5jCiAgICBlY2hvIC1uICJzeW5j Li4iCiAgICBzZXRfcHJvYmVzIGZhaWxlZC8kbGlzdAogICAgaWYgWyAkPyAtbmUgMCBdOyB0 aGVuCiAgICAgIGNsZWFyX3Byb2JlcwogICAgICBzeW5jO3N5bmMKICAgICAgZWNobyAiY2Fu IG5vdCBzZXQiCiAgICAgIG12IGZhaWxlZC8kbGlzdCB1bnNldC8KICAgICAgc3luYztzeW5j CiAgICBlbHNlCiAgICAgIGRvX3Rlc3QKICAgICAgc2F2ZV9wcm9maWxlICRsaXN0CiAgICAg IGNsZWFyX3Byb2JlcwogICAgICBzeW5jO3N5bmMKICAgICAgZWNobyAiZG9uZSIKICAgICAg bXYgZmFpbGVkLyRsaXN0IHBhc3NlZC8KICAgICAgc3luYztzeW5jCiAgICBmaQogIGRvbmUK CiAgaW5pdF9uZXh0CiAgUkVUPSQ/CmRvbmUKCmlmIFsgJFJFVCAtZXEgMSBdO3RoZW4KICAj IE5vIGZhaWxlZCBzeW1ib2xzCiAgZWNobyAibm8gZmFpbGVkIHN5bWJvbHMgZm91bmQuIgpl bHNlCiAgZWNobyAiZm91bmQgZmFpbGVkIHN5bWJvbHM6IgogIGNhdCBmYWlsZWQvKiB8IHRl ZSAkRkFJTEZJTEUKICBybSBmYWlsZWQvKgpmaQoKZnVuY3Rpb24gcHJvZmlsZV9zeW1ib2xz ICgpIHsKICBsb2NhbCBzIGggbQogIHJtIC1mIHRlc3RlZC5saXN0IG1pc3NlZC5saXN0IHVu dGVzdGVkLmxpc3QKICBjYXQgcGFzc2VkL3Byb2ZpbGVzLyoucHJvZiB8IHdoaWxlIHJlYWQg cyBoIG0gO2RvCiAgICBpZiBbICRoIC1uZSAwIF07IHRoZW4gCiAgICAgIGVjaG8gJHMgPj4g dGVzdGVkLmxpc3QKICAgIGVsaWYgWyAkbSAtbmUgMCBdOyB0aGVuCiAgICAgIGVjaG8gJHMg Pj4gbWlzc2VkLmxpc3QKICAgIGVsc2UKICAgICAgZWNobyAkcyA+PiB1bnRlc3RlZC5saXN0 CiAgICBmaQogIGRvbmUKfQoKZWNobyAtbiAiUHJvZmlsaW5nIHN5bWJvbHMuLi4iCnByb2Zp bGVfc3ltYm9scwplY2hvIGRvbmUKZWNobyB0ZXN0ZWQ6IGB3YyAtbCB0ZXN0ZWQubGlzdCB8 IGN1dCAtZFwgIC1mMWAgc3ltYm9scwplY2hvIG1pc3NlZDogYHdjIC1sIG1pc3NlZC5saXN0 IHwgY3V0IC1kXCAgLWYxYCBzeW1ib2xzCmVjaG8gdW50ZXN0ZWQ6IGB3YyAtbCB1bnRlc3Rl ZC5saXN0IHwgY3V0IC1kXCAgLWYxYCBzeW1ib2xzCg== --------------000702000009000002030102-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Masami Hiramatsu Subject: [TOOL] kprobestest : Kprobe stress test tool Date: Thu, 13 Aug 2009 16:57:20 -0400 Message-ID: <4A847E30.9050903@redhat.com> References: <20090813203403.31965.20973.stgit@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000702000009000002030102" Cc: Ananth N Mavinakayanahalli , Avi Kivity , Andi Kleen , Christoph Hellwig , "Frank Ch. Eigler" , Frederic Weisbecker , "H. Peter Anvin" , Jason Baron , Jim Keniston , "K.Prasad" , Lai Jiangshan , Li Zefan , =?UTF-8?B?UHJ6ZW15c8WCYXdQYXdlxYJjenlr?= , Roland McGrath , Sam Ravnborg , Srikar Dronamraju , Tom Zanussi , Vegard Nossum , systemtap , kvm , DLE To: Ingo Molnar , Steven Rostedt , lkml Return-path: In-Reply-To: <20090813203403.31965.20973.stgit@localhost.localdomain> List-Unsubscribe: List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org List-Id: kvm.vger.kernel.org This is a multi-part message in MIME format. --------------000702000009000002030102 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit This script tests kprobes to probe on all symbols in the kernel and finds symbols which must be blacklisted. Usage ----- kprobestest [-s SYMLIST] [-b BLACKLIST] [-w WHITELIST] Run stress test. If SYMLIST file is specified, use it as an initial symbol list (This is useful for verifying white list after diagnosing all symbols). kprobestest cleanup Cleanup all lists How to Work ----------- This tool list up all symbols in the kernel via /proc/kallsyms, and sorts it into groups (each of them including 64 symbols in default). And then, it tests each group by using kprobe-tracer. If a kernel crash occurred, that group is moved into 'failed' dir. If the group passed the test, this script moves it into 'passed' dir and saves kprobe_profile into 'passed/profiles/'. After testing all groups, all 'failed' groups are merged and sorted into smaller groups (divided by 4, in default). And those are tested again. This loop will be repeated until all group has just 1 symbol. Finally, the script sorts all 'passed' symbols into 'tested', 'untested', and 'missed' based on profiles. Note ---- - This script just gives us some clues to the blacklisted functions. In some cases, a combination of probe points will cause a problem, but each of them doesn't cause the problem alone. Thank you, -- Masami Hiramatsu Software Engineer Hitachi Computer Products (America), Inc. Software Solutions Division e-mail: mhiramat@redhat.com --------------000702000009000002030102 Content-Type: text/plain; name="kprobestest" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kprobestest" IyEvYmluL2Jhc2gKIwojICBrcHJvYmVzdGVzdDogS3Byb2JlcyBzdHJlc3Mg dGVzdCB0b29sCiMgIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhp cmFtYXRAcmVkaGF0LmNvbT4KIwojICBVc2FnZToKIyAgICAgJCBrcHJvYmVz dGVzdCBbLXMgU1lNTElTVF0gWy1iIEJMQUNLTElTVF0gWy13IFdISVRFTElT VF0KIyAgICAgICAgUnVuIHN0cmVzcyB0ZXN0LiBJZiBTWU1MSVNUIGZpbGUg aXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgCiMgICAgICAgIGFuIGluaXRpYWwg c3ltYm9sIGxpc3QgKFRoaXMgaXMgdXNlZnVsIGZvciB2ZXJpZnlpbmcgd2hp dGUgbGlzdAojICAgICAgICBhZnRlciBkaWFnbm9zaW5nIGFsbCBzeW1ib2xz KS4KIwojICAgICAkIGtwcm9iZXN0ZXN0IGNsZWFudXAKIyAgICAgICAgQ2xl YW51cCBhbGwgbGlzdHMKCiMgQ29uZmlndXJhdGlvbnMgCkRFQlVHRlM9L3N5 cy9rZXJuZWwvZGVidWcKSU5JVE5SPTY0CkRJVj00ClNZTUZJTEU9c3ltcy5s aXN0CkZBSUxGSUxFPWJsYWNrLmxpc3QKCmZ1bmN0aW9uIGRvX3Rlc3QgKCkg ewogICMgRG8gc29tZSBiZW5jaG1hcmsKICBmb3IgaSBpbiB7MS4uNH0gOyBk bwogIHNsZWVwIDAuNQogIGVjaG8gLW4gIi4iCiAgZG9uZQp9CgpmdW5jdGlv biB1c2FnZSAoKSB7CiAgZWNobyAiVXNhZ2U6IGtwcm9iZXN0ZXN0IFtjbGVh bnVwXSBbLXMgU1lNTElTVF0gWy1iIEJMQUNLTElTVF0gWy13IFdISVRFTElT VF0iCiAgZXhpdCAwCn0KCmZ1bmN0aW9uIGNsZWFudXBfdGVzdCAoKSB7CiAg ZWNobyAiQ2xlYW51cCBhbGwgZmlsZXMiCiAgcm0gLXJmICRTWU1GSUxFIGZh aWxlZCBwYXNzZWQgdGVzdGluZyB1bnNldAogIGV4aXQgMAp9CgoKIyBQYXJz ZSBhcmd1bWVudHMKV0hJVEVMSVNUPQpCTEFDS0xJU1Q9ClNZTUxJU1Q9Cgp3 aGlsZSBbICIkMSIgXTsgZG8KICBjYXNlICQxIGluCiAgICBjbGVhbnVwKQog ICAgICBjbGVhbnVwX3Rlc3QKICAgICAgOzsKICAgIC1zKQogICAgICBTWU1M SVNUPSQyCiAgICAgIHNoaWZ0IDEKICAgICAgOzsKICAgIC1iKQogICAgICBC TEFDS0xJU1Q9JDIKICAgICAgc2hpZnQgMQogICAgICA7OwogICAgLXcpCiAg ICAgIFdISVRFTElTVD0kMgogICAgICBzaGlmdCAxCiAgICAgIDs7CiAgICAq KQogICAgICB1c2FnZQogICAgICA7OwogIGVzYWMKICBzaGlmdCAxCmRvbmUK CiMgU2hvdyBjb25maWd1cmF0aW9ucwplY2hvICJLcHJvYmUgc3RyZXNzIHRl c3Qgc3RhcnRpbmcuIgpbIC1mICIkQkxBQ0tMSVNUIiBdICYmIGVjaG8gIkJs YWNrbGlzdDogJEJMQUNLTElTVCIgfHwgQkxBQ0tMSVNUPSIiClsgLWYgIiRX SElURUxJU1QiIF0gJiYgZWNobyAiV2hpdGVsaXN0OiAkV0hJVEVMSVNUIiB8 fCBXSElURUxJU1Q9IiIKWyAtZiAiJFNZTUxJU1QiIF0gJiYgZWNobyAiU3lt bGlzdDogJFNZTUxJU1QiIHx8IFNZTUxJU1Q9IiIKCmZ1bmN0aW9uIG1ha2Vf ZmlsdGVyICgpIHsKICBsb2NhbCBFWFA9IiIKICBpZiBbIC16ICIkV0hJVEVM SVNUIiAtYSAteiAiJEJMQUNLTElTVCIgXTsgdGhlbgogICAgZWNobyAicy9e JC8vZyIKICBlbHNlCiAgICBmb3IgaSBpbiBgY2F0ICRXSElURUxJU1QgJEJM QUNLTElTVGAgO2RvCiAgICAgIFsgLXogIiRFWFAiIF0gJiYgRVhQPSJeJGlc JCIgfHwgRVhQPSIkRVhQXFx8XiRpXCQiCiAgICBkb25lIDsgRVhQPSJzLyRF WFAvL2ciCiAgICBlY2hvICRFWFAKICBmaQp9CgpmdW5jdGlvbiBsaXN0X2Fs bHN5bXMgKCkgewogIGxvY2FsIHN5bQogIGxvY2FsIG91dD0xCiAgZm9yIHN5 bSBpbiBgc29ydCAvcHJvYy9rYWxsc3ltcyB8IGVncmVwICdbMC05YS1mXSsg W1R0XSBbXltdKiQnIHwgY3V0IC1kXCAgLWYgM2A7ZG8KICAgIFsgJHN5bSAg PSAiX19rcHJvYmVzX3RleHRfc3RhcnQiIF0gJiYgb3V0PTAgJiYgY29udGlu dWUKICAgIFsgJHN5bSAgPSAiX19rcHJvYmVzX3RleHRfZW5kIiBdICYmIG91 dD0xICYmIGNvbnRpbnVlCiAgICBbICRzeW0gID0gIl9ldGV4dCIgXSAmJiBi cmVhawogICAgWyAkb3V0IC1lcSAxIF0gJiYgZWNobyAkc3ltCiAgZG9uZQp9 CgpmdW5jdGlvbiBwcmVwX3Rlc3RpbmcgKCkgewogIGxvY2FsIGk9MAogIGxv Y2FsIG49MAogIGxvY2FsIE5SPSQxCiAgbG9jYWwgZm5hbWU9CgogIGVjaG8g Ikdyb3VwaW5nIHN5bWJvbHM6ICROUiIKCiAgZm5hbWU9YHByaW50ZiAibGlz dC0lMDNkLiVkIiAkaSAkTlJgCiAgY2F0ICRTWU1GSUxFIHwgd2hpbGUgcmVh ZCBsbjsgZG8KICAgIFsgLXogIiRsbiIgXSAmJiBjb250aW51ZQogICAgZWNo byAiJGxuIiA+PiB0ZXN0aW5nLyRmbmFtZQogICAgbj0kKChuKzEpKQogICAg aWYgWyAkbiAtZXEgJE5SIF07IHRoZW4KICAgICAgbj0wCiAgICAgIGk9JCgo aSsxKSkKICAgICAgZm5hbWU9YHByaW50ZiAibGlzdC0lMDNkLiVkIiAkaSAk TlJgCiAgICBmaQogIGRvbmUKICBzeW5jCn0KCmZ1bmN0aW9uIGluaXRfZmly c3QgKCkgewogIGxvY2FsIEVYUAogIEVYUD1gbWFrZV9maWx0ZXJgCiAgaWYg WyAtZiAiJFNZTUxJU1QiIF07IHRoZW4KICAgIGNhdCAkU1lNTElTVCB8IHNl ZCAkRVhQID4gJFNZTUZJTEUKICBlbHNlCiAgICBlY2hvIC1uICJHZW5lcmF0 aW5nIHN5bWJvbCBsaXN0IGZyb20gL3Byb2Mva2FsbHN5bXMuLi4iCiAgICBs aXN0X2FsbHN5bXMgfCBzZWQgJEVYUCA+ICRTWU1GSUxFCiAgICBlY2hvICJk b25lLiAiIGB3YyAtbCAkU1lNRklMRSB8IGN1dCAtZjEgLWRcICBgICJzeW1i b2xzIGxpc3RlZC4iCiAgZmkKICBta2RpciAtcCB0ZXN0aW5nIGZhaWxlZCB1 bnNldCBwYXNzZWQgcGFzc2VkL3Byb2ZpbGVzCiAgcHJlcF90ZXN0aW5nICRJ TklUTlIKfQoKZnVuY3Rpb24gZ2V0X21heF9uciAoKSB7CiAgd2MgLWwgZmFp bGVkL2xpc3QtKiB1bnNldC9saXN0LSogMj4vZGV2L251bGwgfFwKICBhd2sg Jy9eICpbMC05XSsgLipsaXN0LiokL3sgaWYgKG5yIDwgJDEpIG5yPSQxIH0g QkVHSU4geyBucj0wIH0gRU5EIHsgcHJpbnQgbnJ9Jwp9CgpmdW5jdGlvbiBp bml0X25leHQgKCkgewogIGxvY2FsIE5SCiAgTlI9YGdldF9tYXhfbnJgCiAg WyAkTlIgLWVxIDAgXSAmJiByZXR1cm4gMQogIFsgJE5SIC1lcSAxIF0gJiYg cmV0dXJuIDIKICBbICROUiAtbGUgJERJViBdICYmIE5SPTEgfHwgTlI9YGV4 cHIgJE5SIC8gJERJVmAKCiAgY2F0IGZhaWxlZC8qIHVuc2V0LyogPiAkU1lN RklMRQogIHJtIGZhaWxlZC8qIHVuc2V0LyoKCiAgcHJlcF90ZXN0aW5nICRO UgogIHJldHVybiAwCn0KCgojIEluaXRpYWxpemUgc3ltYm9scwppZiBbICEg LWQgdGVzdGluZyBdOyB0aGVuCiAgaW5pdF9maXJzdAplbGlmIFsgLXogImBs cyB0ZXN0aW5nL2AiIF07IHRoZW4KICBpbml0X25leHQKZmkKCmZ1bmN0aW9u IHNldF9wcm9iZXMgKCkgewogIGxvY2FsIHMKICBmb3IgcyBpbiBgY2F0ICQx YDsgZG8KICAgIGVjaG8gInA6JHMiICRzID4+ICRERUJVR0ZTL3RyYWNpbmcv a3Byb2JlX2V2ZW50cwogICAgWyAkPyAtbmUgMCBdICYmIHJldHVybiAtMQog IGRvbmUKICByZXR1cm4gMAp9CgpmdW5jdGlvbiBjbGVhcl9wcm9iZXMgKCkg ewogIGVjaG8gPiAkREVCVUdGUy90cmFjaW5nL2twcm9iZV9ldmVudHMKfQoK ZnVuY3Rpb24gc2F2ZV9wcm9maWxlICgpIHsKICBjYXQgJERFQlVHRlMvdHJh Y2luZy9rcHJvYmVfcHJvZmlsZSA+IHBhc3NlZC9wcm9maWxlcy8kMS5wcm9m Cn0KCmNsZWFyX3Byb2JlcwoKZWNobyAiU3RhcnRpbmcgdGVzdHMuLiIKClJF VD0wCgojIE1haW4gbG9vcAp3aGlsZSBbICRSRVQgLWVxIDAgXTsgZG8KCiAg Zm9yIGxpc3QgaW4gYGNkIHRlc3RpbmcvOyBsc2A7IGRvCiAgICBlY2hvIC1u ICRsaXN0CiAgICAjIFRlbXBvcmFyeSBtb3ZpbmcgbGlzdCBpbnRvIGZhaWxl ZC4KICAgIG12IHRlc3RpbmcvJGxpc3QgZmFpbGVkLwogICAgc3luYztzeW5j CiAgICBlY2hvIC1uICJzeW5jLi4iCiAgICBzZXRfcHJvYmVzIGZhaWxlZC8k bGlzdAogICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAgICAgIGNsZWFyX3By b2JlcwogICAgICBzeW5jO3N5bmMKICAgICAgZWNobyAiY2FuIG5vdCBzZXQi CiAgICAgIG12IGZhaWxlZC8kbGlzdCB1bnNldC8KICAgICAgc3luYztzeW5j CiAgICBlbHNlCiAgICAgIGRvX3Rlc3QKICAgICAgc2F2ZV9wcm9maWxlICRs aXN0CiAgICAgIGNsZWFyX3Byb2JlcwogICAgICBzeW5jO3N5bmMKICAgICAg ZWNobyAiZG9uZSIKICAgICAgbXYgZmFpbGVkLyRsaXN0IHBhc3NlZC8KICAg ICAgc3luYztzeW5jCiAgICBmaQogIGRvbmUKCiAgaW5pdF9uZXh0CiAgUkVU PSQ/CmRvbmUKCmlmIFsgJFJFVCAtZXEgMSBdO3RoZW4KICAjIE5vIGZhaWxl ZCBzeW1ib2xzCiAgZWNobyAibm8gZmFpbGVkIHN5bWJvbHMgZm91bmQuIgpl bHNlCiAgZWNobyAiZm91bmQgZmFpbGVkIHN5bWJvbHM6IgogIGNhdCBmYWls ZWQvKiB8IHRlZSAkRkFJTEZJTEUKICBybSBmYWlsZWQvKgpmaQoKZnVuY3Rp b24gcHJvZmlsZV9zeW1ib2xzICgpIHsKICBsb2NhbCBzIGggbQogIHJtIC1m IHRlc3RlZC5saXN0IG1pc3NlZC5saXN0IHVudGVzdGVkLmxpc3QKICBjYXQg cGFzc2VkL3Byb2ZpbGVzLyoucHJvZiB8IHdoaWxlIHJlYWQgcyBoIG0gO2Rv CiAgICBpZiBbICRoIC1uZSAwIF07IHRoZW4gCiAgICAgIGVjaG8gJHMgPj4g dGVzdGVkLmxpc3QKICAgIGVsaWYgWyAkbSAtbmUgMCBdOyB0aGVuCiAgICAg IGVjaG8gJHMgPj4gbWlzc2VkLmxpc3QKICAgIGVsc2UKICAgICAgZWNobyAk cyA+PiB1bnRlc3RlZC5saXN0CiAgICBmaQogIGRvbmUKfQoKZWNobyAtbiAi UHJvZmlsaW5nIHN5bWJvbHMuLi4iCnByb2ZpbGVfc3ltYm9scwplY2hvIGRv bmUKZWNobyB0ZXN0ZWQ6IGB3YyAtbCB0ZXN0ZWQubGlzdCB8IGN1dCAtZFwg IC1mMWAgc3ltYm9scwplY2hvIG1pc3NlZDogYHdjIC1sIG1pc3NlZC5saXN0 IHwgY3V0IC1kXCAgLWYxYCBzeW1ib2xzCmVjaG8gdW50ZXN0ZWQ6IGB3YyAt bCB1bnRlc3RlZC5saXN0IHwgY3V0IC1kXCAgLWYxYCBzeW1ib2xzCg== --------------000702000009000002030102--