From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail143.messagelabs.com (mail143.messagelabs.com [216.82.254.35]) by kanga.kvack.org (Postfix) with SMTP id 8CC076B004D for ; Fri, 3 Apr 2009 04:25:59 -0400 (EDT) Received: from m6.gw.fujitsu.co.jp ([10.0.50.76]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n338QL6o002737 for (envelope-from kamezawa.hiroyu@jp.fujitsu.com); Fri, 3 Apr 2009 17:26:21 +0900 Received: from smail (m6 [127.0.0.1]) by outgoing.m6.gw.fujitsu.co.jp (Postfix) with ESMTP id DB16D45DE51 for ; Fri, 3 Apr 2009 17:26:20 +0900 (JST) Received: from s6.gw.fujitsu.co.jp (s6.gw.fujitsu.co.jp [10.0.50.96]) by m6.gw.fujitsu.co.jp (Postfix) with ESMTP id B1A5E45DE4F for ; Fri, 3 Apr 2009 17:26:20 +0900 (JST) Received: from s6.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s6.gw.fujitsu.co.jp (Postfix) with ESMTP id 9C9E31DB8040 for ; Fri, 3 Apr 2009 17:26:20 +0900 (JST) Received: from m105.s.css.fujitsu.com (m105.s.css.fujitsu.com [10.249.87.105]) by s6.gw.fujitsu.co.jp (Postfix) with ESMTP id 422AF1DB8043 for ; Fri, 3 Apr 2009 17:26:20 +0900 (JST) Date: Fri, 3 Apr 2009 17:24:53 +0900 From: KAMEZAWA Hiroyuki Subject: [RFC][PATCH ex/9] for debug Message-Id: <20090403172453.3a229bb7.kamezawa.hiroyu@jp.fujitsu.com> In-Reply-To: <20090403170835.a2d6cbc3.kamezawa.hiroyu@jp.fujitsu.com> References: <20090403170835.a2d6cbc3.kamezawa.hiroyu@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd" Sender: owner-linux-mm@kvack.org To: KAMEZAWA Hiroyuki Cc: "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" List-ID: This is a multi-part message in MIME format. --Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit This mail attaches a patch and scirpt for debug. soft_limit_show_prio.patch is for showing priority in memory.stat file. I wonder I should add this to patch series or now... cgroup.rb and ctop.rb is my personal ruby script, an utility to manage cgroup. I sometimes use this. place both files to the same directory and run ctop.rb #ruby ctop.rb help will show this is for what. Thanks, -Kame --Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd Content-Type: application/octet-stream; name="soft_limit_show_prio.patch" Content-Disposition: attachment; filename="soft_limit_show_prio.patch" Content-Transfer-Encoding: base64 RnJvbTogS0FNRVpBV0EgSGlyb3l1a2kgPGthbWV6YXdhLmhpcm95dUBqcC5mdWppdHN1LmNvbT4K ClNob3cgaW50ZXJuYWwgY29udHJvbCBpbmZvcm1hdGlvbiBvZiBzb2Z0IGxpbWl0IHdoZW4gREVC VUdfVk0gaXMgb24uCgpTaWduZWQtb2ZmLWJ5OiBLQU1FWkFXQSBIaXJveXVraSA8a2FtZXphd2Eu aGlyb3l1QGpwLmZ1aml0c3UuY29tPgotLS0KIG1tL21lbWNvbnRyb2wuYyB8ICAgIDEgKwogMSBm aWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCgpJbmRleDogc29mdGxpbWl0LXRlc3QyL21tL21l bWNvbnRyb2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzb2Z0bGltaXQtdGVzdDIub3JpZy9tbS9tZW1jb250 cm9sLmMKKysrIHNvZnRsaW1pdC10ZXN0Mi9tbS9tZW1jb250cm9sLmMKQEAgLTI2MTcsNiArMjYx Nyw3IEBAIHN0YXRpYyBpbnQgbWVtX2NvbnRyb2xfc3RhdF9zaG93KHN0cnVjdCAKICNpZmRlZiBD T05GSUdfREVCVUdfVk0KIAljYi0+ZmlsbChjYiwgImluYWN0aXZlX3JhdGlvIiwKIAkJCWNhbGNf aW5hY3RpdmVfcmF0aW8obWVtX2NvbnQsIE5VTEwsIE5VTEwpKTsKKwljYi0+ZmlsbChjYiwgInNv ZnRfbGltaXRfcHJpbyIsIG1lbV9jb250LT5zb2Z0X2xpbWl0X3ByaW9yaXR5KTsKIAogCXsKIAkJ aW50IG5pZCwgemlkOwo= --Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd Content-Type: application/octet-stream; name="cgroup.rb" Content-Disposition: attachment; filename="cgroup.rb" Content-Transfer-Encoding: base64 CnJlcXVpcmUgJ2ZpbmQnCgokc3Vic3lzX2FycmF5ID0gQXJyYXkubmV3CiRhbGxzdWJzeXMgPSBI YXNoLm5ldwokYWxsbW91bnRzID0gSGFzaC5uZXcKCmNsYXNzIFN1Yl9zeXN0ZW0KICBkZWYgaW5p dGlhbGl6ZShuYW1lLCBtb3VudCwgb3B0aW9uKQogICAgQG5hbWUgPSBuYW1lCiAgICBAbW91bnQ9 IG1vdW50CiAgICBAaGllcmFyY2h5ID0gQXJyYXkubmV3CiAgICBpZiAob3B0aW9uID1+IC8uKm5v cHJlZml4LiovKSB0aGVuCiAgICAgIEBwcmVmaXggPSIiCiAgICBlbHNlCiAgICAgIEBwcmVmaXgg PSBuYW1lICsiLiIKICAgIGVuZAogICBAb3B0aW9uID0gb3B0aW9uCiAgIEB3cml0YWJsZV9maWxl cyA9IEFycmF5Lm5ldwogIGVuZAoKICBkZWYgbW91bnRfcG9pbnQKICAgIEBtb3VudAogIGVuZAoK ICBkZWYgdHlwZQogICAgQG5hbWUKICBlbmQKCiAgZGVmIG15ZmlsZShuYW1lLCBhdHRyKQogICAg bmFtZSArICIvIiArIEBwcmVmaXggKyBhdHRyCiAgZW5kCgogIGRlZiBvcHRpb24KICAgIEBvcHRp b24KICBlbmQKICAjCiAgIyB3YWxrIGRpcmVjdHJveSB0cmVlIGFuZCBhZGQgQ2dyb3VwcyB0byBo YXNoLgogICMKICBkZWYgcmVsb2FkCiAgICBAaGllcmFyY2h5LmNsZWFyCiAgICBsZW4gPSBAbW91 bnQuc2l6ZQogICAgRmluZC5maW5kKEBtb3VudCkgZG8gfGZpbGV8CiAgICAgIGlmIEZpbGUuZGly ZWN0b3J5PyhmaWxlKSB0aGVuCglAaGllcmFyY2h5LnB1c2goZmlsZSk7CiAgICAgIGVuZAogICAg ZW5kCiAgZW5kCgogIGRlZiBlYWNoX2Nncm91cCgmYmxvY2spCiAgICBAaGllcmFyY2h5LmVhY2go JmJsb2NrKQogIGVuZAoKICBkZWYgZW50KGlkKQogICAgaWYgKGlkIDwgMCkgdGhlbiByZXR1cm4g bmlsCiAgICBlbmQKICAgIHJldHVybiBAaGllcmFyY2h5LmF0KGlkKQogIGVuZAoKICBkZWYgc2l6 ZQogICAgQGhpZXJhcmNoeS5zaXplCiAgZW5kCgogIGRlZiBzdGF0IChuYW1lKQogICAgW1siTm90 IGltcGxlbWVudGVkIiwgIiJdXQogIGVuZAoKICBkZWYgZWFjaF93cml0YWJsZV9maWxlcyhuYW1l KQogICAgQHdyaXRhYmxlX2ZpbGVzLmVhY2gge3x4fCB5aWVsZCBteWZpbGUobmFtZSx4KX0KICBl bmQKCiAgZGVmIHRhc2tzKG5hbWUpCiAgICBsaXN0PUFycmF5Lm5ldwogICAgYmVnaW4KICAgICAg RmlsZS5vcGVuKG5hbWUrIi90YXNrcyIsICJyIikgZG8gfGZpbGV8CiAgICAgICAgZmlsZS5lYWNo X2xpbmUgZG8gfHh8CiAgICAgICAgeC5jaG9tcCEKICAgICAgICBsaXN0LnB1c2goeCkKICAgICAg ICBlbmQKICAgICAgZW5kCiAgICByZXNjdWUKICAgICAgcmV0dXJuIG5pbAogICAgZW5kCiAgICBy ZXR1cm4gbGlzdAogIGVuZAplbmQKCmRlZiByZWFkX29uZWxpbmVfZmlsZShmaWxlbmFtZSkKICB2 YWw9bmlsCiAgYmVnaW4KICAgIGYgPSBGaWxlLm9wZW4oZmlsZW5hbWUsICJyIikKICAgIGxpbmUg PSBmLnJlYWRsaW5lCiAgICB2YWwgPSBsaW5lLnRvX2kKICByZXNjdWUKICAgIHRocm93IDpyZWFk ZmFpbHVyZSxmYWxzZQogIGVuc3VyZQogICAgZi5jbG9zZSBpZiBmICE9IG5pbAogIGVuZAogIHJl dHVybiB2YWwKZW5kCgojCiNmb3IgQ1BVIHN1YnN5c3RlbQojCmNsYXNzIENwdV9TdWJzeXMgPCBT dWJfc3lzdGVtCiAgZGVmIGluaXRpYWxpemUobW91bnQsIG9wdGlvbikKICAgIHN1cGVyKCJjcHUi LCBtb3VudCwgb3B0aW9uKQogICAgQHdyaXRhYmxlX2ZpbGVzICs9IFsic2hhcmVzIl0KICBlbmQK CiAgZGVmIHJlYWRfc2hhcmUgKG5hbWUpCiAgICByZXQgPSBuaWwKICAgIGNhdGNoIDpyZWFkZmFp bHVyZSBkbwogICAgICB2YWwgPSByZWFkX29uZWxpbmVfZmlsZShteWZpbGUobmFtZSwic2hhcmVz IikpCiAgICAgIHJldHVybiBbdmFsLnRvX3MsIHZhbC50b19zKyIgKDEwMCUpIl0gaWYgKG5hbWUg PT0gQG1vdW50KQogICAgICBhbGw9MAoKICAgICAgZGlybmFtZSA9IEZpbGUuZGlybmFtZShuYW1l KQogICAgICBEaXIuZm9yZWFjaChkaXJuYW1lKSBkbyB8eHwKICAgICAgICBuZXh0IGlmICgoeCA9 PSAiLiIpIHx8ICh4ID09ICIuLiIpKQogICAgICAgIHggPSAiI3tkaXJuYW1lfS8je3h9IgogICAg ICAgIG5leHQgdW5sZXNzIEZpbGUuZGlyZWN0b3J5Pyh4KQogICAgICAgIG5leHQgdW5sZXNzIEZp bGUuZXhpc3Q/KG15ZmlsZShuYW1lLCJzaGFyZXMiKSkKICAgICAgICBnb3QgPSByZWFkX29uZWxp bmVfZmlsZShteWZpbGUobmFtZSwic2hhcmVzIikpCiAgICAgICAgYWxsKz1nb3QKICAgICAgZW5k CiAgICAgIHNoYXJlPXNwcmludGYoIiVkICglLjFmJSUpIiwgYWxsLCB2YWwqMTAwLjAvYWxsKQog ICAgICByZXQgPSBbdmFsLnRvX3MsIHNoYXJlXQogICAgZW5kCiAgICByZXR1cm4gcmV0CiAgZW5k CgogIGRlZiBzdGF0KG5hbWUpCiAgICBsZXZlbD0wCiAgICBkYXRhID0gQXJyYXkubmV3CiAgICBw b3MgPSBAbW91bnQKICAgIG5hbWVfYXJyYXkgPSBBcnJheS5uZXcKICAgIGxvb3AgZG8KICAgICAg bmFtZV9hcnJheS5wdXNoKG5hbWUpCiAgICAgIGJyZWFrIGlmIG5hbWUgPT0gQG1vdW50CiAgICAg IG5hbWUgPSBGaWxlLmRpcm5hbWUobmFtZSkKICAgIGVuZAogICAgbmFtZV9hcnJheS5yZXZlcnNl IQogICAgbmFtZV9hcnJheS5lYWNoIGRvIHx4fAogICAgICB2YWwgPSByZWFkX3NoYXJlKHgpCiAg ICAgIGlmIHZhbCA9PSBuaWwgdGhlbgogICAgICAgIGRhdGEgPSBuaWwKICAgICAgICBicmVhawog ICAgICBlbmQKICAgICAgc3RyID0gc3ByaW50ZigiJTVzIC8gJXMiLCB2YWxbMF0sIHZhbFsxXSkK ICAgICAgZGF0YS5wdXNoKFt4LCBzdHJdKQogICAgZW5kCiAgICByZXR1cm4gZGF0YSBpZiAoZGF0 YSAhPSBuaWwgJiYgZGF0YS5zaXplID4gMCkKICAgIHJldHVybiBuaWwKICBlbmQKZW5kCgojCiNm b3IgQ1BVYWNjdCBzdWJzeXN0ZW0KIwpjbGFzcyBDcHVhY2N0X1N1YnN5cyA8IFN1Yl9zeXN0ZW0K ICBkZWYgaW5pdGlhbGl6ZShtb3VudCwgb3B0aW9uKQogICAgc3VwZXIoImNwdWFjY3QiLCBtb3Vu dCwgb3B0aW9uKQogIGVuZAogIGRlZiBzdGF0KG5hbWUpCiAgICBkYXRhID0gQXJyYXkubmV3CiAg ICBjYXRjaCA6cmVhZF9mYWlsdXJlIGRvCiAgICAgIHZhbCA9IHJlYWRfb25lbGluZV9maWxlKG15 ZmlsZShuYW1lLCAidXNhZ2UiKSkKICAgICAgZGF0YS5wdXNoKFsiQWxsIiwgdmFsLnRvX3NdKQog ICAgICBiZWdpbgogICAgICAgIGYgPSBGaWxlLm9wZW4obXlmaWxlKG5hbWUsInVzYWdlX3BlcmNw dSIpLCAiciIpCiAgICAgICAgaWQ9MAogICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lCiAgICAgICAg d2hpbGUgKGxpbmUgPX4vXGQrLykgZG8KICAgICAgICAgIGxpbmUgPSQnCiAgICAgICAgICBkYXRh LnB1c2goWyJjcHUiK2lkLnRvX3MsICQmXSkKICAgICAgICAgIGlkICs9IDEKICAgICAgICBlbmQg CiAgICAgIHJlc2N1ZQogICAgICAgIGRhdGEuY2xlYXIKICAgICAgZW5zdXJlCiAgICAgICAgZi5j bG9zZSBpZiBmICE9IG5pbAogICAgICBlbmQKICAgIHJldHVybiBkYXRhIGlmIGRhdGEuc2l6ZSA+ IDAKICAgIHJldHVybiBuaWwKICAgIGVuZAogIGVuZAplbmQKCiMKIyBGb3IgY3B1c2V0CiMKY2xh c3MgQ3B1c2V0X1N1YnN5cyA8IFN1Yl9zeXN0ZW0KICBkZWYgaW5pdGlhbGl6ZShtb3VudCwgb3B0 aW9uKQogICAgc3VwZXIoImNwdXNldCIsIG1vdW50LCBvcHRpb24pCiAgICBAZWxlbWVudHMgPVsi Y3B1X2V4Y2x1c2l2ZSIsImNwdXMiLCJtZW1zIiwgIm1lbV9leGNsdXNpdmUiLCJtZW1faGFyZHdh bGwiLAogICAgICAgICAgICAgICAgIm1lbW9yeV9taWdyYXRlIiwgIm1lbW9yeV9wcmVzc3VyZSIs ICJtZW1vcnlfcHJlc3N1cmVfZW5hYmxlZCIsCiAgICAgICAgICAgICAgICAibWVtb3J5X3NwcmVh ZF9wYWdlIiwibWVtb3J5X3NwcmVhZF9zbGFiIiwKICAgICAgICAgICAgICAgICJzY2hlZF9sb2Fk X2JhbGFuY2UiLCJzY2hlZF9yZWxheF9kb21haW5fbGV2ZWwiXQogICAgQHdyaXRhYmxlX2ZpbGVz ICs9IEBlbGVtZW50cwogIGVuZAogIGRlZiBzdGF0KG5hbWUpCiAgICBkYXRhID0gQXJyYXkubmV3 CiAgICBmb3IgeCBpbiBAZWxlbWVudHMKICAgICAgYmVnaW4KICAgICAgICBmaWxlbmFtZSA9IG15 ZmlsZShuYW1lLCB4KQogICAgICAgIG5leHQgdW5sZXNzIChGaWxlLmZpbGU/KGZpbGVuYW1lKSkK ICAgICAgICBGaWxlLm9wZW4oZmlsZW5hbWUsICJyIikgZG8gfCBmaWxlIHwKICAgICAgICAgIHN0 ciA9IGZpbGUucmVhZGxpbmUKICAgICAgICAgIHN0ci5jaG9tcCEKICAgICAgICAgIGNhc2UgeAog ICAgICAgICAgd2hlbiAiY3B1cyIsICJtZW1zIgogICAgICAgICAgICBzdHIgPSAiZW1wdHkiIGlm IChzdHIgPT0gIiIpCiAgICAgICAgICBlbmQKICAgICAgICAgIGRhdGEucHVzaChbeCxzdHJdKQog ICAgICAgIGVuZAogICAgICByZXNjdWUKICAgICAgICAjZGF0YSA9IG5pbAogICAgICAgIGJyZWFr CiAgICAgIGVuZAogICAgZW5kCiAgICByZXR1cm4gZGF0YQogIGVuZAplbmQKIwojZm9yIE1lbW9y eSBTdWJzeXMKIwpkZWYgY29udmVydF9ieXRlcyhieXRlcywgcHJlY2lzZSkKICBjYXNlCiAgd2hl biAocHJlY2lzZSA9PSAwKSAmJiAoYnl0ZXMgPiA2NCAqIDEwMjQqMTAyNCoxMDI0KjEwMjQpCiAg ICBzcHJpbnRmKCJVbmxpbWl0ZWQiKQogIHdoZW4gKHByZWNpc2UgPT0gMCkgJiYgKGJ5dGVzID4g MTAyNCoxMDI0KjEwMjQqMTAyNCkKICAgIHNwcmludGYoIiVkVCIsYnl0ZXMvMTAyNC8xMDI0LzEw MjQvMTAyNCkKICB3aGVuIChwcmVjaXNlID09IDApICYmIChieXRlcyA+IDEwMjQqMTAyNCoxMDI0 KQogICAgc3ByaW50ZigiJWRHIiwgYnl0ZXMvMTAyNC8xMDI0LzEwMjQpCiAgd2hlbiAoYnl0ZXMg PiAxMDI0KjEwMjQpCiAgICBzcHJpbnRmKCIlZE0iLCBieXRlcy8xMDI0LzEwMjQpCiAgd2hlbiAo Ynl0ZXMgPiAxMDI0KQogICAgc3ByaW50ZigiJWRrIiwgYnl0ZXMvMTAyNCkKICBlbHNlCiAgICBz cHJpbnRmKCIlZCIsIGJ5dGVzKQogIGVuZAplbmQKCiMKI2ZvciBNZW1vcnkgU3Vic3lzdGVtCiMK Y2xhc3MgTWVtb3J5X1N1YnN5cyA8IFN1Yl9zeXN0ZW0KICBkZWYgaW5pdGlhbGl6ZShtb3VudCwg b3B0aW9uKQogICAgc3VwZXIoIm1lbW9yeSIsIG1vdW50LCBvcHRpb24pCiAgICBpZiAoRmlsZS5l eGlzdD8oIiN7bW91bnR9L21lbW9yeS5tZW1zdy51c2FnZV9pbl9ieXRlcyIpKSB0aGVuCiAgICAg IEBtZW1zdz10cnVlCiAgICBlbHNlCiAgICAgIEBtZW1zdz1mYWxzZQogICAgZW5kCiAgICBAd3Jp dGFibGVfZmlsZXMgKz0gWyJsaW1pdF9pbl9ieXRlcyIsICJ1c2VfaGllcmFyY2h5Iiwic3dhcHBp bmVzcyIsICJzb2Z0X2xpbWl0X2luX2J5dGVzIl0KICAgIGlmIChAbWVtc3cpIHRoZW4KICAgICAg QHdyaXRhYmxlX2ZpbGVzICs9IFsibWVtc3cubGltaXRfaW5fYnl0ZXMiXQogICAgZW5kCiAgZW5k CiAgIwogICMgRmluZCBhIHJvb3QgZGlyZWN0cm95IG9mIGhpZXJhcmNoeS4KICAjCiAgZGVmIGZp bmRfaGllcmFyY2h5X3Jvb3QobmFtZSkKICAgIGN1cj1bbmFtZSwgRmlsZS5kaXJuYW1lKG5hbWUp XQogICAgcmV0PUBtb3VudAogICAgd2hpbGUgKGN1clswXSAhPSBAbW91bnQpCiAgICAgIHJldD0i aG9nZSIKICAgICAgdW5kZXIgPSByZWFkX29uZWxpbmVfZmlsZSgiI3tjdXJbMV19L21lbW9yeS51 c2VfaGllcmFyY2h5IikKICAgICAgaWYgKHVuZGVyID09IDApIHRoZW4KICAgICAgICByZXR1cm4g Y3VyWzBdCiAgICAgIGVuZAogICAgICBjdXJbMF0gPSBjdXJbMV0KICAgICAgY3VyWzFdID0gRmls ZS5kaXJuYW1lKGN1clsxXSkKICAgIGVuZAogICAgcmV0dXJuIHJldAogIGVuZAogICMKICAjIEdl bmVyYXRlIGFuIGFycmF5IGZvciByZXBvcmludGcgc3RhdHVzCiAgIwogIGRlZiBzdGF0KG5hbWUp CiAgICBkYXRhID0gQXJyYXkubmV3CgogICAgc3VjY2VzcyA9IGNhdGNoKDpyZWFkZmFpbHVyZSkg ZG8KICAgICAgdW5kZXIgPXJlYWRfb25lbGluZV9maWxlKG15ZmlsZShuYW1lLCJ1c2VfaGllcmFy Y2h5IikpCiAgICAgIGlmICh1bmRlciA9PSAxKSB0aGVuCiAgICAgICAgc3RyPWZpbmRfaGllcmFy Y2h5X3Jvb3QobmFtZSkKICAgICAgICBpZiAoc3RyICE9IG5hbWUpIHRoZW4KICAgICAgICAgIHN0 cj0idW5kZXIgI3tzdHJ9IgogICAgICAgICAgdW5kZXI9MgogICAgICAgIGVsc2UKICAgICAgICAg IHN0cj0iaGllcmFyY2h5IFJPT1QiCiAgICAgICAgZW5kCiAgICAgIGVsc2UgI05vdCB1bmRlciBo aWVyYXJjaHkKICAgICAgICBzdHI9IiIKICAgICAgZW5kCiAgICAgIGVudCA9IFsiTWVtb3J5IFN1 YnN5cyIsIHN0cl0KICAgICAgZGF0YS5wdXNoKGVudCkKICAgICAgCiAgICAgICMgTGltaXQgYW5k IFVzYWdlCiAgICAgIHg9QXJyYXkubmV3CiAgICAgIHgucHVzaCgiVXNhZ2UvTGltaXQiKQoKICAg ICAgYnl0ZXMgPSByZWFkX29uZWxpbmVfZmlsZShteWZpbGUobmFtZSwidXNhZ2VfaW5fYnl0ZXMi KSkKICAgICAgdXNhZ2UgPSBjb252ZXJ0X2J5dGVzKGJ5dGVzLCAxKQoKICAgICAgaWYgKEBtZW1z dykgdGhlbgogICAgICAgIGJ5dGVzID0gcmVhZF9vbmVsaW5lX2ZpbGUobXlmaWxlKG5hbWUsIm1l bXN3LnVzYWdlX2luX2J5dGVzIikpCiAgICAgICAgdXNhZ2UyID0gY29udmVydF9ieXRlcyhieXRl cywgMSkKICAgICAgICB1c2FnZSA9ICIje3VzYWdlfSAoI3t1c2FnZTJ9KSIKICAgICAgZW5kCiAg ICAgIGJ5dGVzID0gcmVhZF9vbmVsaW5lX2ZpbGUobXlmaWxlKG5hbWUsImxpbWl0X2luX2J5dGVz IikpCiAgICAgIGxpbWl0ID0gY29udmVydF9ieXRlcyhieXRlcywgMCkKICAgICAgdXNhZ2UgPSAi I3t1c2FnZX0gLyAje2xpbWl0fSIKICAgICAgaWYgKEBtZW1zdykgdGhlbgogICAgICAgIGJ5dGVz ID0gcmVhZF9vbmVsaW5lX2ZpbGUobXlmaWxlKG5hbWUsIm1lbXN3LmxpbWl0X2luX2J5dGVzIikp CiAgICAgICAgbGltaXQyID0gY29udmVydF9ieXRlcyhieXRlcywgMCkKICAgICAgICB1c2FnZSA9 ICIje3VzYWdlfSAoI3tsaW1pdDJ9KSIKICAgICAgZW5kCiAgICAgIHgucHVzaCh1c2FnZSkKCiAg ICAgIGRhdGEucHVzaCh4KQoKICAgICAgIyBNQVggVVNBR0UKICAgICAgeCA9IEFycmF5Lm5ldwog ICAgICB4LnB1c2goIk1heCBVc2FnZSIpCiAgICAgIGJ5dGVzID0gcmVhZF9vbmVsaW5lX2ZpbGUo bXlmaWxlKG5hbWUsICJtYXhfdXNhZ2VfaW5fYnl0ZXMiKSkKICAgICAgdXNhZ2UgPSBjb252ZXJ0 X2J5dGVzKGJ5dGVzLCAxKQogICAgICBpZiAoQG1lbXN3KSB0aGVuCiAgICAgICAgYnl0ZXMgPSBy ZWFkX29uZWxpbmVfZmlsZShteWZpbGUobmFtZSwibWVtc3cubWF4X3VzYWdlX2luX2J5dGVzIikp CiAgICAgICAgdXNhZ2UyID0gY29udmVydF9ieXRlcyhieXRlcywgMSkKICAgICAgICB1c2FnZSA9 ICIje3VzYWdlfSAoI3t1c2FnZTJ9KSIKICAgICAgZW5kCiAgICAgIHgucHVzaCh1c2FnZSkKICAg ICAgZGF0YS5wdXNoKHgpCgogICAgICAjIHNvZnQgbGltaXQKICAgICAgeCA9IEFycmF5Lm5ldwog ICAgICB4LnB1c2goIlNvZnQgbGltaXQiKQogICAgICBieXRlcyA9IHJlYWRfb25lbGluZV9maWxl KG15ZmlsZShuYW1lLCAic29mdF9saW1pdF9pbl9ieXRlcyIpKQogICAgICB1c2FnZSA9IGNvbnZl cnRfYnl0ZXMoYnl0ZXMsIDEpCiAgICAgIHgucHVzaCh1c2FnZSkKICAgICAgZGF0YS5wdXNoKHgp CgogICAgICAjIGZhaWxjbnQKICAgICAgeCA9IEFycmF5Lm5ldwogICAgICB4LnB1c2goIkZhaWwg Q291bnQiKQogICAgICBjbnQgPSByZWFkX29uZWxpbmVfZmlsZShteWZpbGUobmFtZSwiZmFpbGNu dCIpKQogICAgICBmYWlsY250ID0gY250LnRvX3MKICAgICAgaWYgKEBtZW1zdykgdGhlbgogICAg ICAgIGNudCA9IHJlYWRfb25lbGluZV9maWxlKG15ZmlsZShuYW1lLCAibWVtc3cuZmFpbGNudCIp KQogICAgICAgIGZhaWxjbnQ9IiN7ZmFpbGNudH0gKCN7Y250LnRvX3N9KSIKICAgICAgZW5kCiAg ICAgIHgucHVzaChmYWlsY250KQogICAgICBkYXRhLnB1c2goeCkKCiAgICAgIGJlZ2luCiAgICAg ICAgZiA9IEZpbGUub3BlbihteWZpbGUobmFtZSwic3RhdCIpLCAiciIpCiAgICAgICAgZm9yIHgg aW4gWyJDYWNoZSIsIlJzcyIsIlBhZ2VpbiIsIlBhZ2VvdXQiLG5pbCwgbmlsLCBuaWwsIG5pbCwg bmlsLAogICAgICAgICAgICAgICAgICAiSGllcmFyY2h5TGltaXQiLCJTdWJ0cmVlQ2FjaGUiLCJT dWJ0cmVlUnNzIiwgbmlsLCBuaWwsCgkJICBuaWwsIG5pbCwgbmlsLCBuaWwsIG5pbCwgbmlsLCAi c29mdF9saW1pdF9wcmlvIl0KICAgICAgICAgIGxpbmUgPWYucmVhZGxpbmUKICAgICAgICAgIG5l eHQgaWYgeCA9PSBuaWwKICAgICAgICAgIGxpbmUgPX4gL15cUytccysoLispLwogICAgICAgICAg dmFsPSQxCiAgICAgICAgICBjYXNlIHgKICAgICAgICAgIHdoZW4gIkNhY2hlIiwiUnNzIiwiU3Vi dHJlZUNhY2hlIiwiU3VidHJlZVJzcyIKICAgICAgICAgICAgYnl0ZXMgPSBjb252ZXJ0X2J5dGVz KHZhbC50b19pLCAxKQogICAgICAgICAgICBkYXRhLnB1c2goW3gsIGJ5dGVzXSkKICAgICAgICAg IHdoZW4gIlBhZ2VpbiIsIlBhZ2VvdXQiCiAgICAgICAgICAgIGRhdGEucHVzaChbeCwgdmFsXSkK CSAgd2hlbiAic29mdF9saW1pdF9wcmlvIgoJICAgIGRhdGEucHVzaChbeCwgdmFsXSkKICAgICAg ICAgIHdoZW4gIkhpZXJhcmNoeUxpbWl0IgogICAgICAgICAgICBtZW1saW1pdCA9IGNvbnZlcnRf Ynl0ZXModmFsLnRvX2ksIDApCiAgICAgICAgICAgIGlmIChAbWVtc3cpIHRoZW4KICAgICAgICAg ICAgICBsaW5lID1mLnJlYWRsaW5lCiAgICAgICAgICAgICAgbGluZSA9fiAvXlxTK1xzKyguKykv CiAgICAgICAgICAgICAgbWVtc3dsaW1pdCA9IGNvbnZlcnRfYnl0ZXModmFsLnRvX2ksIDApCiAg ICAgICAgICAgICAgbWVtbGltaXQgKz0gIiAoIiArIG1lbXN3bGltaXQgKyAiKSIKICAgICAgICAg ICAgZW5kCiAgICAgICAgICAgIGRhdGEucHVzaChbeCwgbWVtbGltaXRdKQogICAgICAgICAgZW5k CiAgICAgICAgZW5kCiAgICAgIGVuc3VyZQogICAgICAgIGYuY2xvc2UgaWYgZiAhPSBuaWwKICAg ICAgZW5kCiAgICB0cnVlCiAgICBlbmQKICAgIHJldHVybiBkYXRhIGlmIHN1Y2Nlc3M9PXRydWUK ICAgIHJldHVybiBuaWwKICBlbmQKZW5kCgojCiMgUmVhZCAvcHJvYy9tb3VudHMgYW5kIHBhcnNl IGVhY2ggbGluZXMuCiMgV2hlbiBjZ3JvdXAgbW91bnQgcG9pbnQgaXMgZm91bmQsIGVhY2ggc3Vi c3lzdGVtJ3MgY2dyb3VwcyBhcmUgYWRkZWQKIyB0byBzdWJzeXN0ZW0ncyBIYXNoLgojCgpkZWYg cmVnaXN0ZXJfc3Vic3lzKG5hbWUsIG1vdW50LCBvcHRpb24pCiAgaWYgJGFsbHN1YnN5c1tuYW1l XSA9PSBuaWwgdGhlbgogICAgc3Vic3lzID0gbmlsCiAgICBjYXNlIG5hbWUKICAgIHdoZW4gImNw dSIgdGhlbiBzdWJzeXMgPSBDcHVfU3Vic3lzLm5ldyhtb3VudCwgb3B0aW9uKQogICAgd2hlbiAi Y3B1YWNjdCIgdGhlbiBzdWJzeXMgPSBDcHVhY2N0X1N1YnN5cy5uZXcobW91bnQsIG9wdGlvbikK ICAgIHdoZW4gIm1lbW9yeSIgdGhlbiAgc3Vic3lzID0gTWVtb3J5X1N1YnN5cy5uZXcobW91bnQs IG9wdGlvbikKICAgIHdoZW4gImNwdXNldCIgdGhlbiAgc3Vic3lzID0gQ3B1c2V0X1N1YnN5cy5u ZXcobW91bnQsIG9wdGlvbikKICAgIGVuZAogICAgaWYgc3Vic3lzICE9IG5pbCB0aGVuCiAgICAg ICRzdWJzeXNfYXJyYXkucHVzaChuYW1lKQogICAgICAkYWxsc3Vic3lzW25hbWVdID0gc3Vic3lz CiAgICBlbmQKICBlbmQKZW5kCgojCiMgUmVhZCAvcHJvYy9tb3VudHMgYW5kIHByZXBhcmUgc3Vi c3lzIGFycmF5CiMKZGVmIHBhcnNlX21vdW50KGxpbmUpCiAgcGFyc2VkID0gbGluZS5zcGxpdCgv XHMrLykKICBpZiBwYXJzZWRbMl0gPT0gImNncm91cCIgdGhlbgogICAgbW91bnQ9cGFyc2VkWzFd CiAgICBvcHRzPXBhcnNlZFszXS5zcGxpdCgvXCwvKQogICAgb3B0cy5lYWNoIGRvIHxuYW1lfAog ICAgICBjYXNlIG5hbWUKICAgICAgd2hlbiAicnciIHRoZW4gbmV4dAogICAgICBlbHNlCiAgICAg ICAgcmVnaXN0ZXJfc3Vic3lzKG5hbWUsIG1vdW50LCBwYXJzZWRbM10pCiAgICAgICAgJGFsbG1v dW50c1ttb3VudF09bmFtZQogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKCgpkZWYgcmVhZF9t b3VudAogIEZpbGUub3BlbigiL3Byb2MvbW91bnRzIiwgInIiKSBkbyB8ZmlsZXwKICAgIGZpbGUu ZWFjaF9saW5lIHt8bGluZXwgcGFyc2VfbW91bnQobGluZSkgfQogIGVuZAogICRzdWJzeXNfYXJy YXkuc29ydCEKZW5kCgojCiMgUmVhZCBhbGwgL3Byb2MvbW91bnRzIGFuZCBzY2FuIGRpcmVjdG9y eSB1bmRlciBtb3VudCBwb2ludC4KIwpkZWYgcmVmcmVzaF9hbGwKICAgJGFsbG1vdW50cy5jbGVh cgogICAkc3Vic3lzX2FycmF5LmNsZWFyCiAgICRhbGxzdWJzeXMuY2xlYXIKICAgcmVhZF9tb3Vu dAplbmQKCmRlZiBjaGVja19hbmRfcmVmcmVzaF9tb3VudF9pbmZvCiAgCiAgbXlzdWJzeXM9QXJy YXkubmV3CiAgRmlsZS5vcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpIGRvIHxmaWxlfAogICAgZmls ZS5lYWNoX2xpbmUgZG8gfGxpbmV8CiAgICAgIHBhcnNlZCA9IGxpbmUuc3BsaXQoL1xzKy8pCiAg ICAgIGlmIChwYXJzZWRbMl0gPT0gImNncm91cCIpICB0aGVuCiAgICAgICAgbXlzdWJzeXMucHVz aChwYXJzZWRbMV0pCiAgICAgIGVuZAogICAgZW5kCiAgZW5kCgogIGlmIChteXN1YnN5cy5zaXpl ICE9ICRhbGxtb3VudHMuc2l6ZSkgdGhlbgogICAgcmVmcmVzaF9hbGwKICAgIHJldHVybiB0cnVl IAogIGVuZAogIAogIG15c3Vic3lzLmVhY2ggZG8gfHh8CiAgICBpZiAoJGFsbG1vdW50c1t4XSA9 PSBuaWwpIHRoZW4KICAgICAgcmVmcmVzaF9hbGwKICAgICAgcmV0dXJuIHRydWUKICAgIGVuZAog IGVuZAogIHJldHVybiBmYWxzZQplbmQKCg== --Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd Content-Type: application/octet-stream; name="ctop.rb" Content-Disposition: attachment; filename="ctop.rb" Content-Transfer-Encoding: base64 IwojIGN0b3AucmIgCiMgd3JpdHRlbiBieSBLQU1FWkFXQSBIaXJveXVraSA8a2FtZXphd2EuaGly b3l1QGpwLmZ1aml0c3UuY29tPgojIENvcHlyaWdodCAyMDA5IEZ1aml0c3UgTGltaXRlZAojCiMg Q2hhbmdlbG9nOgojCiMgdjAwMwojICAgLSBmaXhlZCBidWcgaW4gcm1kaXIvbWtkaXIKIyAgIC0g Y2hhbmdlZCBjb21tYW5kLW1vZGUgaW50ZXJmYWNlCiMgICAtIGFkZGVkIGNvbW1lbnRzIGFuZCBt YWRlIGNvZGVzIGNsZWFuCiMgCiMgdjAwMiAoMjAwOS8wMi8yNSkKIyAgIC0gZml4ZWQgbGVhayBv ZiBmaWxlIGRlc2NyaXB0b3IKIyAgIC0gbW91bnQvdW1vdW50IDwtPiByZWxvYWQgZGF0YSBwcm9i bGVtIGlzIGZpeGVkLgojICAgLSAibW91bnQgdHdpY2UiIHByb2JsZW0gaXMgZml4ZWQuCiMgICAt IHJlbW92ZWQgUiBrZXkgZm9yIHJlbG9hZCBhbGwuIGl0J3Mgbm93IGF1dG9tYXRpYwojICAgLSBo YW5kbGUgIm5vcHJlZml4IiBtb3VudCBvcHRpb24KIyAgIC0gc2hvdyBtb3VudCBvcHRpb24gaW4g aGVscCB3aW5kb3cKIyAgIC0gYWRkIGNwdXNldCBzdXBwb3J0CiMgICAtIGFkZCBjb21tYW5kLW1v ZGUKIwojIHYwMDEgKDIwMDkvMDIvMDQpCiMgICAtIGZpcnN0IHZlcnNpb24gcmVsZWFzZWQKIyAg IC0gY3B1LCBjcHVhY2N0LCBtZW1vcnkgc3Vic3lzIGlzIHN1cHBvcnRlZAojICAga25vd24gYnVn cyAtPiBub3ByZWZpeCwgdW1vdW50LCBtb3VudCB0d2ljZQojCnJlcXVpcmUgJ2Nncm91cC5yYicK cmVxdWlyZSAnY3Vyc2VzJwpyZXF1aXJlICdldGMnCnJlcXVpcmUgJ3RpbWVvdXQnCnJlcXVpcmUg J3NpbmdsZXRvbicKCkRJUldJTl9MSU5FUz03CkRJUldJTl9GSUVMRFM9IERJUldJTl9MSU5FUyAt IDIKVVBLRVk9MjU2CkRPV05LRVk9MjU3ClJJR0hUS0VZPTI1OApMRUZUS0VZPTI1OQoKI21vZGUK U0hPV01PVU5UPTAKU0hPV1RBU0tTPTEKU0hPV1NVQlNZUz0yCgojZm9yICdwcycKUElEPTAKU1RB VEU9MQpQUElEPTIKVUlEPTMKQ09NTUFORD00ClBHSUQ9NQoKI2ZvciBwcm9jZXNzIHN0YXR1cyBm aWx0ZXIKUlVOTklORz0wCgojCiMgSGVscGVyIGZ1bmN0aW9uIGZvciBjdXJzZXMKIwoKZGVmIGhp dF9hbnlfa2V5KHN0ciwgd2luZG93KQogIHdpbmRvdy5hZGRzdHIoc3RyKSBpZiBzdHIgIT0gbmls CiAgd2luZG93LmFkZHN0cigiXG5bSGl0IEFueSBLZXldIikKICB3aW5kb3cuZ2V0Y2gKZW5kCgpk ZWYgd2luZG93X3ByaW50Zih3aW5kb3csIGZvcm1hdCwgKmFyZykKICBzdHIgPSBzcHJpbnRmKGZv cm1hdCwgKmFyZykKICB3aW5kb3cuYWRkc3RyKHN0cikKZW5kCiMKIyBDdXJzb3IgaG9sZHMgY3Vy cmVudCBzdGF0dXMgb2Ygc3Vic3lzJ3Mgd2luZG93LgojIAojCmNsYXNzIEN1cnNvcgogIGRlZiBp bml0aWFsaXplKG5hbWUpCiAgICBAc3Vic3lzbmFtZT1uYW1lICAgICAgICAgICAgIyBuYW1lIG9m IHN1YnN5cwogICAgQGN1cnNvcj0wICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBkaXJlY3Ry b3kgcG9zaXRpb24KICAgIEBtb2RlPVNIT1dUQVNLUyAgICAgICAgICAgICAjIGN1cnJlbnQgbW9k ZSAocHMtbW9kZS9zdGF0LW1vZGUpCiAgICBAaW5mb19zdGFydGxpbmU9MCAgICAgICAgICAgIyB1 c2VkIGZvciBzY3JvbGwgaW4gaW5mb3dpbgogICAgQGluZm9fZW5kbGluZT0wICAgICAgICAgICAg ICMgdXNlZCBmb3Igc2NvcmxsIGluIGluZm93aW4KICAgIEBzaG93X29ubHlfcnVubmluZyA9IDAg ICAgICAjIGEgZmlsdGVyIGZvciBwcy1tb2RlCiAgICBAdXNlcl9uYW1lX2ZpbHRlcj1uaWwgICAg ICAgIyBhIGZpbHRlciBmb3IgcHMtbW9kZQogICAgQGNvbW1hbmRfbmFtZV9maWx0ZXI9bmlsICAg ICMgYSBmaWx0ZXIgZm9yIHBzLW1vZGUKICBlbmQKCiAgZGVmIHBvcwogICAgQGN1cnNvcgogIGVu ZAoKICBkZWYgbW9kZQogICAgQG1vZGUKICBlbmQKCiAgZGVmIGNoYW5nZV9tb2RlICMgc3dpdGNo IG1vZGUgcHMtbW9kZSA8LT4gc3RhdC1tb2RlCiAgICBjYXNlIEBtb2RlCiAgICB3aGVuIFNIT1dU QVNLUyB0aGVuIEBtb2RlPVNIT1dTVUJTWVMKICAgIHdoZW4gU0hPV1NVQlNZUyB0aGVuIEBtb2Rl PVNIT1dUQVNLUwogICAgZW5kCiAgZW5kCiAgIwogICMgRmlsdGVyIGZvciBQUy1NT0RFCiAgIwog IGRlZiBwcm9jZXNzX3N0YXR1c19maWx0ZXIoc3RhdCkKICAgIHJldHVybiB0cnVlIGlmIChAc2hv d19vbmx5X3J1bm5pbmcgPT0gMCkKICAgIHJldHVybiB0cnVlIGlmIChzdGF0ID09IlIiKQogICAg cmV0dXJuIGZhbHNlCiAgZW5kCgogIGRlZiB1c2VyX25hbWVfZmlsdGVyKHN0cikKICAgIHJldHVy biB0cnVlIGlmIChAdXNlcl9uYW1lX2ZpbHRlciA9PSBuaWwpCiAgICByZXR1cm4gdHJ1ZSBpZiAo QHVzZXJfbmFtZV9maWx0ZXIgPT0gc3RyKQogICAgcmV0dXJuIGZhbHNlCiAgZW5kCgogIGRlZiBj b21tYW5kX25hbWVfZmlsdGVyKHN0cikKICAgIHJldHVybiB0cnVlIGlmIChAY29tbWFuZF9uYW1l X2ZpbHRlciA9PSBuaWwpCiAgICByZXR1cm4gdHJ1ZSBpZiAoc3RyID1+IC8je0Bjb21tYW5kX25h bWVfZmlsdGVyfS8pCiAgICByZXR1cm4gZmFsc2UKICBlbmQKCiAgZGVmIHRvZ2dsZV9zaG93X29u bHlfcnVubmluZwogICAgaWYgKEBzaG93X29ubHlfcnVubmluZyA9PSAwKSB0aGVuCiAgICAgIEBz aG93X29ubHlfcnVubmluZyA9IDEgIyBzaG93IG9ubHkgcnVubmluZyBwcm9jZXNzIGluIHBzLW1v ZGUKICAgIGVsc2UKICAgICAgQHNob3dfb25seV9ydW5uaW5nID0gMCAjIHNob3cgYWxsIHByb2Nl c3NlcwogICAgZW5kCiAgZW5kCgogIGRlZiBzZXRfdXNlcl9uYW1lX2ZpbHRlcihzdHIpCiAgICBz dHIgPSBuaWwgaWYgKHN0ciA9PSAiIikKICAgIEB1c2VyX25hbWVfZmlsdGVyPXN0cgogIGVuZAoK ICBkZWYgc2V0X2NvbW1hbmRfbmFtZV9maWx0ZXIoc3RyKQogICAgc3RyPW5pbCBpZiAoc3RyID09 ICIiKQogICAgQGNvbW1hbmRfbmFtZV9maWx0ZXI9c3RyCiAgZW5kCgogICMKICAjIFNjcm9sbCBt YW5hZ2VtZW50IGZvciBpbmZvd2luIAogICMKICBkZWYgaW5mb19zdGFydGxpbmUKICAgIEBpbmZv X3N0YXJ0bGluZQogIGVuZAoKICBkZWYgc2V0X2luZm9lbmRsaW5lKG51bSkKICAgIEBpbmZvX2Vu ZGxpbmU9bnVtCiAgZW5kCgogIGRlZiBzZXRfaW5mb2xpbmUobnVtKQogICAgaWYgKChudW0gPCAw KSB8fCAobnVtID49IEBpbmZvX2VuZGxpbmUpKSB0aGVuCiAgICAgIEBpbmZvX3N0YXJ0bGluZT0w CiAgICBlbHNlCiAgICAgIEBpbmZvX3N0YXJ0bGluZT1udW0KICAgIGVuZAogIGVuZAoKICAjCiAg IyBjaGRpcigpIGZvciBzdWJzeXMuCiAgIwogIGRlZiBtb3ZlKGRpcmVjdGlvbikKICAgIHN1YnN5 cyA9JGFsbHN1YnN5c1tAc3Vic3lzbmFtZV0KICAgIGlmIChzdWJzeXMgPT0gbmlsKSB0aGVuIHJl dHVybgogICAgZW5kCiAgICBpZiAoZGlyZWN0aW9uID09IC0xKSB0aGVuCiAgICAgIEBjdXJzb3Ig LT0gMSBpZiBAY3Vyc29yID4gMAogICAgZWxzaWYgKGRpcmVjdGlvbiA9PSAxKQogICAgICBAY3Vy c29yICs9IDEgaWYgQGN1cnNvciA8IHN1YnN5cy5zaXplLTEKICAgIGVuZAogIGVuZAplbmQKCiMK IyBDdXJyZW50IGlzIGEgc2luZ2xldG9uIGhvbGRzIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgcHJv Z3JhbS4KIwpjbGFzcyBDdXJyZW50CiAgaW5jbHVkZSBTaW5nbGV0b24KICBkZWYgaW5pdGlhbGl6 ZQogICAgQGluZGV4PS0xICAgICNjdXJyZW50IHN1c2JzeXMgaW5kZXggaW4gJHN1YnN5c19hcnJh eVtdCiAgICBAbmFtZT1uaWwgICAgI2N1cnJlbnQgbmFtZSBvZiBzdWJzeXMKICAgIEBjdXJzb3I9 bmlsICAjcmVmZXJlbmNlIHRvIGN1cnJlbnQgQ3Vyc29yIAogICAgQHN1YnN5cz1uaWwgICNyZWZl cmVuY2UgdG8gY3VycmVudCBTdWJzeXMgCiAgICBAc3Vic3lzX2N1cnNvciA9IEhhc2gubmV3CiAg ZW5kCgogIGRlZiBzZXQoeCkKICAgIEBpbmRleD14CiAgICBpZiAoeCA9PSAtMSkgdGhlbgogICAg ICBAaW5kZXgsIEBuYW1lLCBAY3Vyc29yLCBAc3Vic3lzID0gLTEsICJoZWxwIiwgbmlsLCBuaWwK ICAgIGVsc2UKICAgICAgQG5hbWUgPSAkc3Vic3lzX2FycmF5W3hdCiAgICAgIEBzdWJzeXMgPSAk YWxsc3Vic3lzW0BuYW1lXQogICAgICBpZiAoQHN1YnN5c19jdXJzb3JbQG5hbWVdID09IG5pbCkg dGhlbgogICAgICAgIEBzdWJzeXNfY3Vyc29yW0BuYW1lXSA9IEN1cnNvci5uZXcoQG5hbWUpCiAg ICAgIGVuZAogICAgICBAY3Vyc29yID0gQHN1YnN5c19jdXJzb3JbQG5hbWVdCiAgICBlbmQKICBl bmQKCiAgI2NoYW5nZSBzdWJzeXMgdmlldwogIGRlZiBtb3ZlIChkaXIpCiAgICBjYXNlIGRpcgog ICAgd2hlbiAibGVmdCIKICAgICAgQGluZGV4IC09IDEgaWYgKEBpbmRleCA+IC0xKQogICAgd2hl biAicmlnaHQiCiAgICAgIEBpbmRleCArPSAxIGlmIChAaW5kZXggPCAkc3Vic3lzX2FycmF5LnNp emUgLSAxKQogICAgZW5kCiAgICBzZXQoQGluZGV4KQogIGVuZAoKICAjY2hhbmdlIGRpcmVjdHJv eSB2aWV3IG9mIGN1cnJlbnQgY3Vyc29yCiAgZGVmIGNoZGlyKGRpcmVjdGlvbikKICAgIGlmIChA Y3Vyc29yICE9IG5pbCkgdGhlbgogICAgICBAY3Vyc29yLm1vdmUoZGlyZWN0aW9uKSAgCiAgICBl bmQKICBlbmQKICAjc3dpdGNoIGN1cnJlbnQgbW9kZSBvZiBjdXJzb3IKICBkZWYgY2hhbmdlX21v ZGUKICAgIGlmIChAY3Vyc29yICE9IG5pbCkgdGhlbgogICAgICBAY3Vyc29yLmNoYW5nZV9tb2Rl CiAgICBlbmQKICBlbmQKCiAgZGVmIG5hbWUKICAgIEBuYW1lCiAgZW5kCgogIGRlZiBjdXJzb3IK ICAgIEBjdXJzb3IKICBlbmQKCiAgZGVmIHN1YnN5cwogICAgQHN1YnN5cwogIGVuZAplbmQKCiRj dXIgPSBDdXJyZW50Lmluc3RhbmNlCgojCiMgU2hvdyBkaXJlY3Rvcnkgd2luZG93CiMKCmRlZiBk ZXRlY3RfZGlybGlzdF9wb3NpdGlvbihzdWJzeXNuYW1lLCBzdWJzeXMpCiAgcG9zID0gMAogIHNp emU9c3Vic3lzLnNpemUKICBjdXJzb3IgPSAkY3VyLmN1cnNvcgogIHJldHVybiBbMCwgMCwgMF0g aWYgY3Vyc29yID09IG5pbAoKICBwb3MgPSBjdXJzb3IucG9zCiAgaWYgKChzaXplIDwgNCkgfHwg KHBvcyA8PSAyKSkgdGhlbiAKICAgICAgaGVhZD0wCiAgICAgIHRhaWw9NAogIGVsc2lmIChwb3Mg PCBzaXplIC0gMikgdGhlbgogICAgICBoZWFkPXBvcy0xCiAgICAgIHRhaWw9cG9zKzIKICBlbHNl CiAgICAgIGhlYWQgPSBzaXplIC0gNAogICAgICB0YWlsID0gc2l6ZSAtIDEKICBlbmQKICByZXR1 cm4gW3BvcywgaGVhZCwgdGFpbF0KZW5kCgpkZWYgZ2V0X293bmVyX25hbWUobmFtZSkKICBiZWdp bgogICAgc3RhdCA9IEZpbGUuc3RhdChuYW1lKQogIHJlc2N1ZQogICAgcmV0dXJuICIiCiAgZW5k CiAgYmVnaW4KICAgIGluZm8gPSBFdGM6OmdldHB3dWlkKHN0YXQudWlkKQogICAgdW5hbWUgPSBp bmZvLm5hbWUKICByZXNjdWUKICAgICRiYXJ3aW4uYWRkc3RyKCQhKQogICAgdW5hbWUgPSBzdGF0 LnVpZC50b19zCiAgZW5kCgogIGJlZ2luCiAgICBpbmZvID0gRXRjOjpnZXRncmdpZChzdGF0Lmdp ZCkKICAgIGduYW1lID0gaW5mby5uYW1lCiAgcmVzY3VlCiAgICBnbmFtZSA9IHN0YXQuZ2lkLnRv X3MKICBlbmQKICBzcHJpbnRmKCJcdC1cdCglcy8lcykiLCB1bmFtZSwgZ25hbWUpCmVuZAoKZGVm IGRyYXdfZGlybGlzdChkaXJ3aW4sIHN1YnN5cykKCiAgbm93LCBoZWFkLCB0YWlsID0gZGV0ZWN0 X2Rpcmxpc3RfcG9zaXRpb24oJGN1ci5uYW1lLCBzdWJzeXMpCgogIGxpbmVzPTEKICBpPWhlYWQK ICB3aGlsZSBpIDw9IHRhaWwKICAgIG5hbWUgPSBzdWJzeXMuZW50KGkpCiAgICBpZiAobmFtZSA9 PSBuaWwpIHRoZW4gYnJlYWsKICAgIGVuZAoKICAgIGRpcndpbi5zZXRwb3MobGluZXMsIDMpCiAg ICBkaXJ3aW4uc3RhbmRvdXQgaWYgKGkgPT0gbm93KQogICAgZGlyd2luLmFkZHN0cihuYW1lICsg Z2V0X293bmVyX25hbWUobmFtZSkpCiAgICBkaXJ3aW4uc3RhbmRlbmQgaWYgKGkgPT0gbm93KQog ICAgbGluZXMrPTEKICAgIGkgKz0gMQogIGVuZAplbmQKCiMKIyBGaWxsIGRpcndpbiBjb250ZW50 cy4KIwpkZWYgZHJhd19kaXJ3aW4oZGlyd2luKQogIGRpcndpbi5jbGVhcgogIGRpcndpbi5ib3go P3wsPy0sPyopCiAgZGlyd2luLnNldHBvcygwLCAxKQoKICAjc2hvdyBhbGwgc3Vic3lzcyBpbiBo ZWFkCiAgLTEudXB0bygkc3Vic3lzX2FycmF5LnNpemUpIGRvIHx4fAogICAgZGlyd2luLmFkZHN0 cigiLSIpCiAgICBpZiAoeCA9PSAtMSkgdGhlbgogICAgICBzdHI9ImhlbHAiCiAgICBlbHNlCiAg ICAgIHN0cj1zcHJpbnRmKCIlcyIsJHN1YnN5c19hcnJheVt4XSkKICAgIGVuZAogICAgYnJlYWsg aWYgKHN0ciA9PSBuaWwpCgogICAgZGlyd2luLnN0YW5kb3V0IGlmIChzdHIgPT0gJGN1ci5uYW1l KQogICAgZGlyd2luLmFkZHN0cihzdHIpCiAgICBkaXJ3aW4uc3RhbmRlbmQgaWYgKHN0ciA9PSAk Y3VyLm5hbWUpCiAgZW5kCgogICNzaG93IGN1cnJlbnQgdGltZQogIGRpcndpbi5zZXRwb3MoNixk aXJ3aW4ubWF4eC0zMikKICBkaXJ3aW4uYWRkc3RyKCJbI3tUaW1lLm5vdy5hc2N0aW1lfV0iKQog ICMKICAjIFNob3cgZGlyZWN0b3J5IGxpc3QKICAjCiAgaWYgJGN1ci5zdWJzeXMgIT0gbmlsIHRo ZW4KICAgICNSZWxvYWQgaW5mb3JtYXRpb24gCiAgICAkY3VyLnN1YnN5cy5yZWxvYWQKICAgIGRy YXdfZGlybGlzdChkaXJ3aW4sICRjdXIuc3Vic3lzKQogIGVuZAplbmQKCiMKIwojIGZvciBpbmZv d2luCiMKCiMKIyBDb250ZW50cyBvZiBpbmZvd2luIHdpbGwgYmUgcGFzc2VkIGJ5IGRhdGFbXQoj IFRoaXMgZnVuY3Rpb24gc2hvd3MgY29udGVudHMgYmFzZWQgb24gY3VycmVudCBzY3JvbGwgaW5m cm9tYXRpb24uCiMgZm9yIGNvbnZlcnRpbmcgY29udGVudHMgb2YgYXJyYXkgdG8gc3RyaW5nLCBj b2RlIGJsb2NrIGlzIGNhbGxlZCBieSB5aWVsZAojCmRlZiBkcmF3X2luZm93aW5fbGltaXRlZChp bmZvd2luLCBjdXJzb3IsIGRhdGEpCiAgIwogICMgR2VuZXJhdGUgSGVhZGVyCiAgIwogIHN0ciA9 IHlpZWxkIG5pbCAjIHdyaXRlIGEgaGVhZGVyIGlmIG5lY2Vzc2FyeQogIGlmIChzdHIgIT0gbmls KSB0aGVuCiAgICBkcmF3PTEKICAgIGluZm93aW4uc2V0cG9zKDAsMikKICAgIGluZm93aW4uYWRk c3RyKHN0cikKICBlbHNlCiAgICBkcmF3PTAKICBlbmQKICAjCiAgIyBwcmludCBhIGxpbmUgd2hp Y2kgaXMgaW4gdGhlIHdpbmRvdwogICMKICBzdGFydGxpbmUgPSBjdXJzb3IuaW5mb19zdGFydGxp bmUKICBlbmRsaW5lID0gY3Vyc29yLmluZm9fc3RhcnRsaW5lICsgaW5mb3dpbi5tYXh5LTIKICBz dGFydGxpbmUudXB0byhlbmRsaW5lKSBkbyB8bGluZW51bWJlcnwKICAgIHggPSBkYXRhLmF0KGxp bmVudW1iZXIpCiAgICByZXR1cm4gaWYgKHggPT0gbmlsKSAjbm8gbW9yZSBkYXRhCiAgICBzdHIg PSB5aWVsZCh4KQogICAgaW5mb3dpbi5zZXRwb3MoZHJhdywgMikKICAgIGluZm93aW4uYWRkc3Ry KHN0cikKICAgIGRyYXcgPSAxK2luZm93aW4uY3VyeQogICAgYnJlYWsgaWYgKGRyYXcgPT0gaW5m b3dpbi5tYXh5KQogIGVuZAoKICBjdXJzb3Iuc2V0X2luZm9lbmRsaW5lKGRhdGEuc2l6ZSkgIApl bmQKCiMKIwojIFNob3cgaGVscCBhbmQgY3VycmVudCBtb3VudCBpbmZvcm1hdGlvbiBpbiBoZWxw IHdpbmRvdwojCmRlZiBzaG93X21vdW50X2luZm8oaW5mb3dpbikKICBpZiAoJGFsbHN1YnN5cy5l bXB0eT8pIHRoZW4KICAgICRiYXJ3aW4uYWRkc3RyKCJjZ3JvdXBzIGFyZSBub3QgbW91bnRlZFxu IikKICBlbmQKICAkYWxsc3Vic3lzLmVhY2ggZG8gfG5hbWUsIHN1YnN5c3wKICAgIHdpbmRvd19w cmludGYoaW5mb3dpbiwgIiUxMnNcdCVzXHQjJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg bmFtZSwgc3Vic3lzLm1vdW50X3BvaW50LCBzdWJzeXMub3B0aW9uKQogIGVuZAogICMkYmFyd2lu LmFkZHN0cigibW91bnRlZCBzdWJzeXN0ZW1zIikKICAjCiAgIyBIZWxwCiAgIwogIGluZm93aW4u YWRkc3RyKCJDb21tYW5kXG4iKQogIGluZm93aW4uYWRkc3RyKCJbTEVGVCwgUklHSFRdXHQgbW92 ZSBzdWJzeXN0ZW1zXG4iKQogIGluZm93aW4uYWRkc3RyKCJbVVAsIERPV05dXHQgbW92ZSBkaXJl Y3RvcnlcbiIpCiAgaW5mb3dpbi5hZGRzdHIoIltuLCBiXVx0XHQgc2NvcmxsIGluZm9ybWF0aW9u IHdpbmRvd1xuIikKICBpbmZvd2luLmFkZHN0cigiW3NdXHRcdCBzd2l0Y2ggc2hvd24gaW5mb3Jt YXRpb24gKHBzLW1vZGUvc3RhdC1tb2RlKVxuIikKICBpbmZvd2luLmFkZHN0cigiW3JdXHRcdCBz ZXQgcmVmcmVzaCByYXRlXG4iKQogIGluZm93aW4uYWRkc3RyKCJbY11cdFx0IEVudGVyIGNvbW1h bmQtbW9kZVxuIikKCiAgaW5mb3dpbi5hZGRzdHIoInBzIG1vZGUgb3B0aW9uXG4iKQogIGluZm93 aW4uYWRkc3RyKCJbdF1cdFx0IChwcy1tb2RlKXRvZ2dsZSBzaG93IG9ubHkgcnVubmluZyBwcm9j ZXNzXG4iKQogIGluZm93aW4uYWRkc3RyKCJbdV1cdFx0IChwcy1tb2RlKXNldC91bnNldCB1c2Vy IG5hbWUgZmlsdGVyXG4iKQogIGluZm93aW4uYWRkc3RyKCJbZl1cdFx0IChwcy1tb2RlKXNldC91 bnNldCBjb21tYW5kIG5hbWUgZmlsdGVyIikKCmVuZAoKIwojIFJlYWQgL3Byb2MvPHBpZD4vc3Rh dHVzIGZpbGUgYW5kIGZpbGwgZGF0YVtdIGFycmF5LCByZXR1cm4gaXQKIwoKZGVmIHBhcnNlX3Bp ZF9zdGF0dXMoZiwgZXMpCiAgaW5wdXQgPSBmLnJlYWRsaW5lCiAgaW5wdXQgPX4gZXMKICByZXR1 cm4gJDEKZW5kCgojCiMgZGF0YVtdID1bUElELCBTdGF0ZSwgUFBJRCwgVUlELCBDT01NQU5ELCBQ R0lEXQojCmRlZiBwYXJzZV9wcm9jZXNzKHBpZCkKICAjCiAgIyBTdGF0dXMKICAjCiAgZGF0YSA9 IEFycmF5Lm5ldwogIHN0YXQgPSBuaWwKCiAgc3RhdCA9IGNhdGNoKDpiYWRfdGFza19zdGF0dXMp IGRvCiAgICBkYXRhW1BJRF09cGlkLnRvX2kKICAgIGJlZ2luCiAgICAgIGYgPSBGaWxlLm9wZW4o Ii9wcm9jLyN7cGlkfS9zdGF0dXMiLCAiciIpCgogICAgICAjTmFtZQogICAgICBkYXRhW0NPTU1B TkRdID0gcGFyc2VfcGlkX3N0YXR1cyhmLC9eTmFtZTpccysoLispLykKICAgICAgdW5sZXNzIChG aWxlLmV4aXN0PygiL3Byb2MvI3twaWR9L2V4ZSIpKSB0aGVuCiAgICAgICAgZGF0YVtDT01NQU5E XSA9ICJbIiArIGRhdGFbQ09NTUFORF0gKyAiXSIKICAgICAgZW5kCiAgICAgICNTdGF0ZQogICAg ICBkYXRhW1NUQVRFXSA9IHBhcnNlX3BpZF9zdGF0dXMoZiwgL15TdGF0ZTpccysoW0EtWl0pLisv KQogICAgICAjIFRHSUQ6IElzIHRocmVhZCBncm91byBsZWFkZXIgPwogICAgICBpZiAocGFyc2Vf cGlkX3N0YXR1cyhmLCAvXlRnaWQ6XHMrKC4rKS8pICE9IHBpZCkgdGhlbgogICAgICAgIHRocm93 IDpiYWRfdGFza19zdGF0dXMsIGZhbHNlCiAgICAgIGVuZAogICAgICAjc2tpcCBQSUQKICAgICAg aW5wdXQgPSBmLnJlYWRsaW5lCiAgICAgICNQUElECiAgICAgIGRhdGFbUFBJRF09IHBhcnNlX3Bp ZF9zdGF0dXMoZiwvXlBQaWQ6XHMrKC4rKS8pCiAgICAgIHBwaWQ9ZGF0YVtQUElEXQogICAgICAj VHJhY2VyUElECiAgICAgIGlucHV0ID0gZi5yZWFkbGluZSAKICAgICAgI1VJRAogICAgICB1aWQg PSBwYXJzZV9waWRfc3RhdHVzKGYsL15VaWQ6XHMrKFswLTldKykuKy8pCiAgICAgIGJlZ2luIAog ICAgICAgIGluZm89RXRjOjpnZXRwd3VpZCh1aWQudG9faSkKICAgICAgICBkYXRhW1VJRF09aW5m by5uYW1lCiAgICAgIHJlc2N1ZSAKICAgICAgICBkYXRhW1VJRF09dWlkCiAgICAgIGVuZAogICAg cmVzY3VlCiAgICAgIHRocm93IDpiYWRfdGFza19zdGF0dXMsIGZhbHNlIAogICAgZW5zdXJlCiAg ICAgIGYuY2xvc2UgdW5sZXNzIGYubmlsPwogICAgZW5kCiAgZW5kCiAgcmV0dXJuIGRhdGEgdW5s ZXNzIHN0YXQubmlsPwogIHJldHVybiBuaWwKZW5kCgojCiMgUFMtTU9ERQojIENhdCAidGFza3Mi IGZpbGUgYW5kIHZpc2l0IGFsbCAvcHJvYy88cGlkPi9zdGF0dXMgZmlsZQojIEFsbCBpbmZvcm1h dGlvbiB3aWxsIGJlIHB1c2hlZCBpbnRvICJwcyIgYXJyYXkKIwpkZWYgc2hvd190YXNrcyhzdWJz eXMsIGN1cnNvciwgaW5mb3dpbikKICAjIEdldCBOYW1lIG9mIEN1cnJlbnQgQ2dyb3VwIGFuZCBy ZWFkIHRhc2sgZmlsZQogIHBzID0gQXJyYXkubmV3ICAKICBjYXRjaCA6cXVpdCBkbwogICAgZ3Jv dXAgPSBzdWJzeXMuZW50KGN1cnNvci5wb3MpCiAgICB0aHJvdyA6cXVpdCwibm9ncm91cCIgaWYg Z3JvdXA9PW5pbAogICAgdGFza3MgPSBzdWJzeXMudGFza3MoZ3JvdXApCiAgICB0aHJvdyA6cXVp dCwibm9ncm91cCIgaWYgdGFza3M9PW5pbAogICAgIAogICAgdGFza3MuZWFjaCBkbyB8eHwKICAg ICAgZGF0YSA9IHBhcnNlX3Byb2Nlc3MoeCkKICAgICAgbmV4dCBpZiAoZGF0YSA9PSBuaWwpCiAg ICAgIG5leHQgdW5sZXNzIChjdXJzb3IucHJvY2Vzc19zdGF0dXNfZmlsdGVyKGRhdGFbU1RBVEVd KSkKICAgICAgbmV4dCB1bmxlc3MgKGN1cnNvci5jb21tYW5kX25hbWVfZmlsdGVyKGRhdGFbQ09N TUFORF0pKQogICAgICBwcy5wdXNoKGRhdGEpIGlmIChjdXJzb3IudXNlcl9uYW1lX2ZpbHRlcihk YXRhW1VJRF0pKQogICAgZW5kCiAgICAjCiAgICAjIFNvcnQgcHMncyByZXN1bHQsICJSIiBmaXJz dC4KICAgICMKICAgIHBzLnNvcnQhIGRvIHx4ICwgeXwKICAgICAgaWYgKHhbU1RBVEVdID09ICJS IiAmJiB5W1NUQVRFXSAhPSAiUiIpIHRoZW4KICAgICAgICAtMQogICAgICBlbHNpZiAoeFtTVEFU RV0gIT0gIlIiICYmIHlbU1RBVEVdID09ICJSIikgdGhlbgogICAgICAgIDEKICAgICAgZWxzZQog ICAgICAgIDAKICAgICAgZW5kCiAgICBlbmQKICBlbmQKICAKICByZXR1cm4gaWYgKHBzLnNpemUg PT0gMCkKCiAgZHJhd19pbmZvd2luX2xpbWl0ZWQoaW5mb3dpbiwgY3Vyc29yLCBwcylkbyB8eHwK ICAgIGlmICh4ID09IG5pbCkgdGhlbgogICAgICBzcHJpbnRmKCIlNnMgJTZzICU4cyAlNXMgJTE2 cyIsICJQSUQiLCJQUElEIiwiVVNFUiIsIlNUQVRFIiwgIkNPTU1BTkQiKQogICAgZWxzZQogICAg ICBzcHJpbnRmKCIlNmQgJTZkICU4cyAlNXMgJTE2cyIsCiAgICAgICAgICAgICAgeFtQSURdLCB4 W1BQSURdLCB4W1VJRF0sIHhbU1RBVEVdLCB4W0NPTU1BTkRdKQogICAgZW5kCiAgZW5kCgogIHVu bGVzcyAoJGN1ci5jdXJzb3IucHJvY2Vzc19zdGF0dXNfZmlsdGVyKCJTIikpIHRoZW4KICAgICRi YXJ3aW4uYWRkc3RyKCJbcl0iKQogIGVuZAogIHVubGVzcyAoJGN1ci5jdXJzb3IudXNlcl9uYW1l X2ZpbHRlcigiYmFkbmFtZW1hbmRhYiIpKSB0aGVuCiAgICAkYmFyd2luLmFkZHN0cigiW3VdIikK ICBlbmQKICB1bmxlc3MgKCRjdXIuY3Vyc29yLmNvbW1hbmRfbmFtZV9maWx0ZXIoImJhZG5hbWVt YW5kYWIiKSkgdGhlbgogICAgJGJhcndpbi5hZGRzdHIoIltjXSIpCiAgZW5kCmVuZAoKZGVmIHNo b3dfc3Vic3lzX3N0YXQoc3Vic3lzLCBjdXJzb3IsIGluZm93aW4pCiAgZ3JvdXAgPSBzdWJzeXMu ZW50KGN1cnNvci5wb3MpCiAgcmV0dXJuIGlmIGdyb3VwID09IG5pbAogIGRhdGEgPSBzdWJzeXMu c3RhdChncm91cCkKICByZXR1cm4gaWYgZGF0YSA9PSBuaWwKICBkcmF3X2luZm93aW5fbGltaXRl ZChpbmZvd2luLCBjdXJzb3IsIGRhdGEpIGRvIHx4fAogICAgbmV4dCBpZiB4ID09IG5pbAogICAg aWYgKHhbMF0uc2l6ZSA+IDI0KSB0aGVuCiAgICAgIGxlbiA9IHhbMF0uc2l6ZSAtIDI0CiAgICAg IHhbMF0uc2xpY2UhKDAuLmxlbikKICAgIGVuZAogICAgc3ByaW50ZigiJTI0c1x0JXMiLCB4WzBd LCB4WzFdKQogIGVuZAplbmQKCgojCiMgW25dLFtiXSAgTW92ZSBjdXJzb3IncyBjdXJyZW50IHBv c2l0aW9uIGluIGluZm93aW4KIwpkZWYgc2V0X3Njcm9sbChpbmZvd2luLCBkaXJlY3Rpb24pCiAg Y3Vyc29yID0gJGN1ci5jdXJzb3IKICByZXR1cm4gaWYgKGN1cnNvciA9PSBuaWwpCgogIGlmIChk aXJlY3Rpb24gPT0gMSkgdGhlbiAKICAgIGN1cmxpbmU9Y3Vyc29yLmluZm9fc3RhcnRsaW5lCiAg ICBjdXJzb3Iuc2V0X2luZm9saW5lKGN1cmxpbmUraW5mb3dpbi5tYXh5KQogIGVsc2UKICAgIGN1 cmxpbmU9Y3Vyc29yLmluZm9fc3RhcnRsaW5lCiAgICBjdXJzb3Iuc2V0X2luZm9saW5lKGN1cmxp bmUtaW5mb3dpbi5tYXh5KQogIGVuZAplbmQKCiMKIyBbdF0gU2V0L1Vuc2V0IFNob3ctUnVubmlu Zy1Pbmx5IGZpbHRlcgojCmRlZiB0b2dnbGVfcnVubmluZ19maWx0ZXIKICBpZiAoJGN1ci5jdXJz b3IgIT0gbmlsKSB0aGVuCiAgICAkY3VyLmN1cnNvci50b2dnbGVfc2hvd19vbmx5X3J1bm5pbmcK ICBlbmQKZW5kCgoKIwojIEZpbHRlcnMgZm9yIHBzLW1vZGUKIwoKIwojIFt1XSBGaWx0ZXIgYnkg VUlECiMKZGVmIHVzZXJfbmFtZV9maWx0ZXIoaW5mb3dpbikKICBpbmZvd2luLmNsZWFyCiAgd2lu ZG93X3ByaW50ZihpbmZvd2luLCAidXNlciBuYW1lIGZpbHRlcjoiKQogIHN0cj1pbmZvd2luLmdl dHN0cgogIGN1cnNvcj0gJGN1ci5jdXJzb3IKICBjdXJzb3Iuc2V0X3VzZXJfbmFtZV9maWx0ZXIo c3RyKSBpZiAoY3Vyc29yICE9IG5pbCkKZW5kCgojCiMgW2ZdIEZpbHRlciBieSBuYW1lIG9mIGNv bW1hbmQKIwpkZWYgY29tbWFuZF9uYW1lX2ZpbHRlcihpbmZvd2luKQogIGluZm93aW4uY2xlYXIK ICB3aW5kb3dfcHJpbnRmKGluZm93aW4sICJjb21tYW5kIG5hbWUgZmlsdGVyOiIpCiAgc3RyPWlu Zm93aW4uZ2V0c3RyCiAgY3Vyc29yID0kY3VyLmN1cnNvcgogIGN1cnNvci5zZXRfY29tbWFuZF9u YW1lX2ZpbHRlcihzdHIpIGlmIChjdXJzb3IgIT0gbmlsKQplbmQKCiMKIyBbcl0gc2V0IHJlZnJl c2ggdGltZQojCmRlZiBzZXRfcmVmcmVzaF90aW1lKHRpbWUsIGluZm93aW4pCiAgaW5mb3dpbi5j bGVhcgogIHdpbmRvd19wcmludGYoaW5mb3dpbiwgInNldCByZWZyZXNoIHRpbWUobm93ICVkcyki LHRpbWUpCiAgc3RyPWluZm93aW4uZ2V0c3RyCiAgcmV0dXJuIHRpbWUgaWYgKHN0ci50b19pID09 IDApCiAgcmV0dXJuIHN0ci50b19pCmVuZAoKIwojIFtjXSBCZWxvdyBhcmUgc3ViIHJvdXRpbmVz IGZvciBjb21tYW5kLW1vZGUuCiMKCmRlZiBzbWFydF9wcmludChzdHIsIHdpbmRvdykKICBpZiAo d2luZG93Lm1heHggLSB3aW5kb3cuY3VyeCA8IHN0ci5zaXplLTIpIHRoZW4KICAgIHdpbmRvdy5h ZGRzdHIoIlxuIitzdHIpCiAgZWxzZQogICAgd2luZG93LmFkZHN0cihzdHIpCiAgZW5kCmVuZAoK ZGVmIHNob3dfd3JpdGFibGVfZmlsZXMoc3Vic3lzLCBjdXJzb3IsIGluZm93aW4pCiAgZ3JvdXAg PSBzdWJzeXMuZW50KGN1cnNvci5wb3MpCiAgcmV0dXJuIG5pbCBpZiBncm91cCA9PSBuaWwKICBl bnQ9MQogIGRhdGEgPSBBcnJheS5uZXcKICBzdWJzeXMuZWFjaF93cml0YWJsZV9maWxlcyhncm91 cCkgZG8gfHh8CiAgICBzdHIgPSBzcHJpbnRmKCIlMmQ6ICVzICIsIGVudCwgRmlsZS5iYXNlbmFt ZSh4KSkKICAgIGVudD1lbnQrMQogICAgc21hcnRfcHJpbnQoc3RyLCBpbmZvd2luKQogICAgZGF0 YS5wdXNoKHgpCiAgZW5kCiAgaW5mb3dpbi5yZWZyZXNoCiAgcmV0dXJuIGRhdGEKZW5kCgojCiMg U2NhbiBkaXJlY3Ryb3kgYW5kIGNoYW5nZSBvd25lci9ncm91cCBvZiBhbGwgcmVndWxhciBmaWxl cwojIGFuZCBjdXJyZW50IGRpcmVjdG9yeS4KIwpkZWYgY2hvd25fYWxsX2ZpbGVzKHVpZCwgZ2lk LCBncm91cCwgaW5mb3dpbikKICAjIGNoYW5nZSBvd25lci9ncm91cCBvZiBjdXJyZW50IGRpcgog IGJlZ2luCiAgICBGaWxlLmNob3duKHVpZCwgZ2lkLCBncm91cCkKICByZXNjdWUKICAgIGhpdF9h bnlfa2V5KCJFcnJvcjoiKyQhLCBpbmZvd2luKQogICAgcmV0dXJuCiAgZW5kCiAgIyBjaGFuZ2Ug b3duZXIvZ3JvdXAgb2YgcmVndWxhciBmaWxlcwogIERpci5mb3JlYWNoKGdyb3VwKSBkbyB8eHwK ICAgIG5hbWUgPSBncm91cCsiLyIreAogICAgbmV4dCBpZiBGaWxlLmRpcmVjdG9yeT8obmFtZSkK ICAgIGJlZ2luCiAgICAgIEZpbGUuY2hvd24obmlsLCBnaWQsIG5hbWUpCiAgICByZXNjdWUKICAg ICAgaGl0X2FueV9rZXkoIkVycm9yOiIrJCEsIGluZm93aW4pCiAgICAgIGJyZWFrCiAgICBlbmQK ICBlbmQKZW5kCgojCiMgQ2hlY2sgIi8iIGlzIGluY2x1ZGVkIG9yIG5vdCBhdCBta2Rpci9ybWRp cgojCmRlZiBjaGVja19ta3JtZGlyX3N0cmluZyhzdHIsIGluZm93aW4pCiAgaWYgKHN0ciA9fiAv XC8vKSB0aGVuCiAgICBpbmZvd2luLmFkZHN0cigiZG9uJ3QgaW5jbHVkZSAvXG4iKQogICAgcmV0 dXJuIGZhbHNlCiAgZWxzaWYgKHN0ciA9PSAiLiIpIHRoZW4KICAgIGluZm93aW4uYWRkc3RyKCJj YW4ndCByZW1vdmUgY3VycmVudFxuIikKICBlbmQKICByZXR1cm4gdHJ1ZQplbmQKCiMKIyBHZXQg c3RyaW5nIGFuZCByZXR1bnMgdWlkIG9yIGdpZCBhcyBpbnRlZ2VyCiMKZGVmIHBhcnNlX2lkKHdp bmRvdywgdWlkLCBzdHIpCiAgaWYgKHN0ciA9fiAvXEQvKSB0aGVuCiAgICBiZWdpbgogICAgICBp ZiAodWlkID09IDEpIHRoZW4KICAgICAgICBpbmZvID0gRXRjOjpnZXRwd25hbShzdHIpCiAgICAg ICAgaWQgPSBpbmZvLnVpZAogICAgICBlbHNlCiAgICAgICAgaW5mbyA9IEV0Yzo6Z2V0Z3JuYW0o c3RyKQogICAgICAgIGlkID0gaW5mby5naWQKICAgICAgZW5kCiAgICByZXNjdWUKICAgICAgaGl0 X2FueV9rZXkoIkVycm9yOiIrJCEsIHdpbmRvdykKICAgICAgaWQ9bmlsCiAgICBlbmQKICBlbHNl CiAgICBpZCA9IHN0ci50b19pCiAgZW5kCiAgcmV0dXJuIGlkCmVuZAoKIwojCiMgQ29tbWFuZCBt b2RlIGludGVyZmFjZQojCiMKZGVmIGNvbW1hbmRfbW9kZShpbmZvd2luKQogIHJldHVybiBpZiAo JGN1ci5zdWJzeXMgPT0gbmlsKQogIGluZm93aW4uY2xlYXIKICAkYmFyd2luLmNsZWFyCiAgJGJh cndpbi5hZGRzdHIoIltjb21tYW5kLW1vZGVdIikKICAkYmFyd2luLnJlZnJlc2gKICAjCiAgIyBT dWJzeXMgc3BlY2lhbCBmaWxlcyBhcmUgaW4gbnVtYmVyCiAgIwogIGluZm93aW4uYWRkc3RyKCI9 PT09c3Vic3lzIGNvbW1hbmQ9PT09XG4iKQogIGRhdGEgPSBzaG93X3dyaXRhYmxlX2ZpbGVzKCRj dXIuc3Vic3lzLCAkY3VyLmN1cnNvciwgaW5mb3dpbikKICBpZiBkYXRhPT1uaWwgdGhlbgogICAg aW5mb3dpbi5hZGRzdHIoIm5vIHN1YnN5cyBjb21tYW5kIikKICBlbmQKICAjCiAgIyBDZ3JvdXAg Z2VuZXJpYyBvcHMgYXJlIGluIGFscGhhYmV0IAogICMKICBpbmZvd2luLmFkZHN0cigiXG49PT09 Y2dyb3VwIGNvbW1hbmQ9PT09XG4iKQogIHNtYXJ0X3ByaW50KCJbQV0gYXR0YWNoIHRhc2soUElE KSIsIGluZm93aW4pCiAgc21hcnRfcHJpbnQoIiBbTV0gbWtkaXIiLCBpbmZvd2luKQogIHNtYXJ0 X3ByaW50KCIgW1JdIHJtZGlyIixpbmZvd2luKQogIHNtYXJ0X3ByaW50KCIgW09dIGNob3duKE9X TkVSKSIsIGluZm93aW4pCiAgc21hcnRfcHJpbnQoIiBbR10gY2hvd24oR0lEKSIsIGluZm93aW4p CiAgaW5mb3dpbi5hZGRzdHIoIlxuXG5Nb2RpZnkgd2hpY2ggPyBbYW5kIEhpdCByZXR1cm5dOiIp CgogICNsaW5lIHRvIHNob3cgcHJvbXB0CiAgZW5kbGluZSA9IGluZm93aW4uY3VyeSsxCiAgI3dh aXQgZm9yIHRoZSBudW1iZXJzIG9yIEFPR01SCiAgc3RyPWluZm93aW4uZ2V0c3RyCiAgI3Rhcmdl dCBkaXJlY3RvcnkgaXMgdGhpcy4KICBncm91cCA9ICRjdXIuc3Vic3lzLmVudCgkY3VyLmN1cnNv ci5wb3MpCgogIGNhc2Ugc3RyLnRvX2kgIyBpZiBzdHIgaXMgbm90IG51bWJlciwgcmV0dXJucyAw LgogICMgU3Vic3lzdGVtIGNvbW1hbmRzCiAgd2hlbiAxLi45OQogICAgaWYgKGRhdGEgIT0gbmls KSB0aGVuCiAgICAgIG5hbWUgPSBkYXRhLmF0KHN0ci50b19pIC0gMSkKICAgICAgI2dldCBpbnB1 dAogICAgICBpbmZvd2luLnNldHBvcyhlbmRsaW5lLCAwKQogICAgICB3aW5kb3dfcHJpbnRmKGlu Zm93aW4sICIjZWNobyB0byA+JXM6IiwgRmlsZS5iYXNlbmFtZShuYW1lKSkKICAgICAgc3RyID0g aW5mb3dpbi5nZXRzdHIKICAgICAgI3dyaXRlCiAgICAgIGJlZ2luCiAgICAgICAgZiA9IEZpbGUu b3BlbihuYW1lLCAidyIpIHt8ZnwgZi53cml0ZShzdHIpIH0KICAgICAgcmVzY3VlCiAgICAgICAg aGl0X2FueV9rZXkoIkVycm9yOiIrJCEsIGluZm93aW4pCiAgICAgIGVuZAogICAgZW5kCiAgIyBD Z3JvdXAgY29tbWFuZHMgKHN0ci50b19pIHJldHVybnMgMCkKICB3aGVuIDAKICAgIGNhc2Ugc3Ry CiAgICB3aGVuICJhIiwiQSIgI0F0dGFjaAogICAgICB3aW5kb3dfcHJpbnRmKGluZm93aW4sICJB dHRhY2ggdGFzayB0byAlczoiLCBncm91cCkKICAgICAgc3RyID0gaW5mb3dpbi5nZXRzdHIKICAg ICAgYmVnaW4gCiAgICAgICAgRmlsZS5vcGVuKGdyb3VwICsgIi90YXNrcyIsICJ3Iikge3xmfCBm LndyaXRlKHN0cikgfQogICAgICByZXNjdWUKICAgICAgICBoaXRfYW55X2tleSgiRXJyb3I6Iisk ISwgaW5mb3dpbikKICAgICAgZW5kCgogICAgd2hlbiAibyIsIk8iICNjaG93biAoT1dORVIpCiAg ICAgIGluZm93aW4uYWRkc3RyKCJjaGFuZ2Ugb3duZXIgaWQgb2YgYWxsIGZpbGVzIHRvOiIpCiAg ICAgIGlkID0gcGFyc2VfaWQoaW5mb3dpbiwgMSwgaW5mb3dpbi5nZXRzdHIpCiAgICAgIGNob3du X2FsbF9maWxlcyhpZCwgLTEsIGdyb3VwLCBpbmZvd2luKSBpZiBpZCAhPSBuaWwKCiAgICB3aGVu ICJnIiwiRyIgI2Nob3duIChHUk9VUCkKICAgICAgaW5mb3dpbi5hZGRzdHIoImNoYW5nZSBncm91 cCBpZCBvZiBhbGwgZmlsZXMgdG86IikKICAgICAgaWQgPSBwYXJzZV9pZChpbmZvd2luLCAwLCBp bmZvd2luLmdldHN0cikKICAgICAgY2hvd25fYWxsX2ZpbGVzKC0xLCBpZCwgZ3JvdXAsIGluZm93 aW4pIGlmIGlkICE9IG5pbAoKICAgIHdoZW4gIm0iLCJNIiAjbWtkaXIKICAgICAgaW5mb3dpbi5h ZGRzdHIoIm1rZGlyIC0uZW50ZXIgbmFtZToiKQogICAgICBzdHIgPSBpbmZvd2luLmdldHN0cgog ICAgICBpZiAoY2hlY2tfbWtybWRpcl9zdHJpbmcoc3RyLCBpbmZvd2luKSkgdGhlbgogICAgICAg IGJlZ2luCiAgICAgICAgICBpZiAoRGlyLm1rZGlyKGdyb3VwKyIvIitzdHIpICE9IDApIHRoZW4K ICAgICAgICAgICAgaGl0X2FueV9rZXkoIkVycm9yOiIrJCEsIGluZm93aW4pCgkgZW5kCiAgICAg ICAgcmVzY3VlCiAgICAgICAgICBoaXRfYW55X2tleSgiRXJyb3I6IiskISwgaW5mb3dpbikKICAg ICAgICBlbmQKICAgICAgZWxzZQogICAgICAgIGhpdF9hbnlfa2V5KG5pbCwgaW5mb3dpbikKICAg ICAgZW5kCgogICAgd2hlbiAiciIsIlIiICNybWRpcgogICAgICBpbmZvd2luLmFkZHN0cigicm1k aXIgLS5lbnRlciBuYW1lOiIpCiAgICAgIHN0ciA9IGluZm93aW4uZ2V0c3RyCiAgICAgIGlmIChj aGVja19ta3JtZGlyX3N0cmluZyhzdHIsIGluZm93aW4pKSB0aGVuCiAgICAgICAgYmVnaW4KICAg ICAgICAgIGlmIChEaXIucm1kaXIoZ3JvdXArIi8iK3N0cikgIT0gMCkgdGhlbgogICAgICAgICAg ICBoaXRfYW55X2tleSgiRXJyb3I6IiskISwgaW5mb3dpbikKICAgICAgICAgIGVuZAogICAgICAg IHJlc2N1ZQogICAgICAgICAgaGl0X2FueV9rZXkoIkVycm9yOiIrJCEsIGluZm93aW4pCiAgICAg ICAgZW5kCiAgICAgIGVsc2UKICAgICAgICBoaXRfYW55X2tleShuaWwsIGluZm93aW4pCiAgICAg IGVuZAogICAgZW5kCiAgZW5kCiAgJGJhcndpbi5jbGVhcgplbmQKCiMKIyBNYWluIGRyYXcgcm91 dGluZQojCmRlZiBkcmF3X2luZm93aW4oaW5mb3dpbikKICBpbmZvd2luLmNsZWFyCiAgY3Vyc29y ID0gJGN1ci5jdXJzb3IKICBpZiBjdXJzb3IgPT0gbmlsIHRoZW4KICAgIG1vZGUgPSBTSE9XTU9V TlQKICBlbHNlCiAgICBtb2RlID0gY3Vyc29yLm1vZGUKICBlbmQKICAjCiAgIyBJZiBubyBzdWJz eXMgaXMgc3BlY2lmaWVkLCBqdXN0IHNob3cgbW91bnQgaW5mb3JtYXRpb24uCiAgIwoKICBjYXNl IG1vZGUKICB3aGVuIFNIT1dNT1VOVAogICAgc2hvd19tb3VudF9pbmZvKGluZm93aW4pCiAgd2hl biBTSE9XVEFTS1MKICAgICRiYXJ3aW4uYWRkc3RyKCJbcHMtbW9kZV0iKQogICAgc2hvd190YXNr cygkY3VyLnN1YnN5cywgY3Vyc29yLCBpbmZvd2luKQogIHdoZW4gU0hPV1NVQlNZUwogICAgJGJh cndpbi5hZGRzdHIoIltzdGF0LW1vZGVdIikKICAgIHNob3dfc3Vic3lzX3N0YXQoJGN1ci5zdWJz eXMsIGN1cnNvciwgaW5mb3dpbikKICBlbmQKZW5kCgojCiMgTWFpbiBsb29wCiMKIwojIEZvciBz dGRzY3JlZW4KIwojIENoZWNrIC9wcm9jL21vdW50cyBhbmQgcmVhZCBhbGwgc3Vic3lzLgojCnJl ZnJlc2hfYWxsCgojCiMgTWFpbiBsb29wLiBjcmVhdGUgd2luZG93cyBhbmQgd2FpdCBmb3IgaW5w dXRzCiMKQ3Vyc2VzOjppbml0X3NjcmVlbgpiZWdpbgogICRsaW5lcz1DdXJzZXM6OmxpbmVzCiAg JGNvbHM9Q3Vyc2VzOjpjb2xzCiAgb2ZmPTAKICAjCiAgIyBDcmVhdGUgd2luZG93CiAgIwogIGRp cndpbiA9IEN1cnNlczo6c3Rkc2NyLnN1YndpbihESVJXSU5fTElORVMsICRjb2xzLCBvZmYsIDAp CiAgI2ZvciBtaXNjIGluZm8KICBvZmYrPURJUldJTl9MSU5FUwogICRiYXJ3aW4gPSBDdXJzZXM6 OnN0ZHNjci5zdWJ3aW4oMSwgJGNvbHMsIG9mZiwgMCk7CiAgJGJhcndpbi5zdGFuZG91dAogIG9m Zis9MQogIGluZm93aW4gPSBDdXJzZXM6OnN0ZHNjci5zdWJ3aW4oJGxpbmVzLW9mZiwgJGNvbHMs IG9mZiwgMCkKICBtb2RlPVNIT1dUQVNLUyAgCiAgcXVpdD0wCiAgcmVmcmVzaF90aW1lPTE1CiAg CiAgd2hpbGUgcXVpdCA9PSAwIAogICAgIyRiYXJ3aW4uY2xlYXIKCiAgICAjJGJhcndpbi5hZGRz dHIoIkluZm86IikKICAgIGRyYXdfZGlyd2luKGRpcndpbikKICAgIGRyYXdfaW5mb3dpbihpbmZv d2luKQogICAgZGlyd2luLnJlZnJlc2gKICAgIGluZm93aW4ucmVmcmVzaAogICAgJGJhcndpbi5y ZWZyZXNoCiAgICAjCiAgICAjIGhhbmRsZSBpbnB1dC4KICAgICMgCiAgICAkYmFyd2luLmNsZWFy CiAgICBDdXJzZXM6OnNldHBvcygwLDApCiAgICBjaD0wCiAgICBDdXJzZXM6Om5vZWNobwogICAg YmVnaW4KICAgICAgVGltZW91dDo6dGltZW91dChyZWZyZXNoX3RpbWUpIGRvCiAgICAgICAgY2g9 Q3Vyc2VzOjpnZXRjaAogICAgICBlbmQKICAgIHJlc2N1ZSBUaW1lb3V0OjpFcnJvcgogICAgICAj JGJhcndpbi5hZGRzdHIoInRpbWVvdXQiKQogICAgZW5kCiAgICBDdXJzZXM6OmVjaG8KICAgICNj aGVjayBlc3BhY2Ugc2VxdWVuY2UKICAgIGlmIGNoID09IDI3IHRoZW4KICAgICAgY2ggPSBDdXJz ZXM6OmdldGNoCiAgICAgIGlmIGNoID09IDkxIHRoZW4KICAgICAgICBjaCA9IEN1cnNlczo6Z2V0 Y2gKICAgICAgICBjYXNlIGNoCiAgICAgICAgICB3aGVuIDY1IHRoZW4gY2ggPSBVUEtFWQogICAg ICAgICAgd2hlbiA2NiB0aGVuIGNoID0gRE9XTktFWQogICAgICAgICAgd2hlbiA2NyB0aGVuIGNo ID0gUklHSFRLRVkKICAgICAgICAgIHdoZW4gNjggdGhlbiBjaCA9IExFRlRLRVkKICAgICAgICBl bmQKICAgICAgZW5kCiAgICBlbmQKICAgICMKICAgICMKICAgICMKICAgIGlmIChjaGVja19hbmRf cmVmcmVzaF9tb3VudF9pbmZvKSB0aGVuCiAgICAgICRjdXIuc2V0KC0xKQogICAgZW5kCiAgIAog ICAgIyRiYXJ3aW4uYWRkc3RyKFRpbWUubm93LmFzY3RpbWUpCiAgICBjYXNlIGNoCiAgICAgIHdo ZW4gP3EKICAgICAgICBxdWl0PTEKICAgICAgICBicmVhawogICAgICB3aGVuIExFRlRLRVkgdGhl biAkY3VyLm1vdmUoImxlZnQiKQogICAgICB3aGVuIFJJR0hUS0VZIHRoZW4gJGN1ci5tb3ZlKCJy aWdodCIpCiAgICAgIHdoZW4gVVBLRVkgdGhlbiAkY3VyLmNoZGlyKC0xKQogICAgICB3aGVuIERP V05LRVkgdGhlbiAkY3VyLmNoZGlyKDEpCiAgICAgIHdoZW4gP3MgdGhlbiAkY3VyLmNoYW5nZV9t b2RlCiAgICAgIHdoZW4gP24gdGhlbiBzZXRfc2Nyb2xsKGluZm93aW4sIDEpCiAgICAgIHdoZW4g P2IgdGhlbiBzZXRfc2Nyb2xsKGluZm93aW4sIC0xKQogICAgICB3aGVuID90IHRoZW4gdG9nZ2xl X3J1bm5pbmdfZmlsdGVyCiAgICAgIHdoZW4gP3UgdGhlbiB1c2VyX25hbWVfZmlsdGVyKGluZm93 aW4pCiAgICAgIHdoZW4gP2YgdGhlbiBjb21tYW5kX25hbWVfZmlsdGVyKGluZm93aW4pCiAgICAg IHdoZW4gP2MgdGhlbiBjb21tYW5kX21vZGUoaW5mb3dpbikKICAgICAgd2hlbiA/ciB0aGVuIHJl ZnJlc2hfdGltZT1zZXRfcmVmcmVzaF90aW1lKHJlZnJlc2hfdGltZSwgaW5mb3dpbikKICAgIGVu ZAogIGVuZAplbnN1cmUKICBDdXJzZXM6OmNsb3NlX3NjcmVlbgplbmQK --Multipart=_Fri__3_Apr_2009_17_24_53_+0900_NDLvmcSHk.tojAYd-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org