From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30319 invoked by alias); 17 Apr 2012 07:26:21 -0000 Received: (qmail 30289 invoked by uid 22791); 17 Apr 2012 07:26:18 -0000 X-SWARE-Spam-Status: No, hits=-4.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qc0-f169.google.com (HELO mail-qc0-f169.google.com) (209.85.216.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 17 Apr 2012 07:25:45 +0000 Received: by qcsd16 with SMTP id d16so4195681qcs.0 for ; Tue, 17 Apr 2012 00:25:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-system-of-record:x-gm-message-state; bh=et03F08pYKwMOeFlD8xsp0VBtA4autlGYjSXY3Sg9Qw=; b=BAbNEZYR73ncQwTykHQB0bsVuO+P7HNjSugQ1f2AFC45SbnIXyNV33Wwiutvn+cGL9 W/FafNt9HRBedWiKX6w0MnKU+edAGLY8cDyVT5l/ifL2MlRJnBhjp44fZxJcFOPQNLUZ GPZxwMyQI0JNOX27rlka8E46mbmMAX8Qx/KXYyDYtvudgUg5v2v4SNghVV4ri+AHWFFX 0wSx73+9bB0YpRT3ve/59hoU4ZII9Dmjl2WEVZhn2Kwh6LxepX5pQfzgWHm5CINXG/Ja xyl2waMYoM2Hag0Ax/veE224KV+qa8MPkDXzwl9Yv6ZZ+7M9Q2q+T4EzvyXZ9Yf3IIc0 luPQ== Received: by 10.224.175.83 with SMTP id w19mr10275004qaz.76.1334647543956; Tue, 17 Apr 2012 00:25:43 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.175.83 with SMTP id w19mr10274988qaz.76.1334647543745; Tue, 17 Apr 2012 00:25:43 -0700 (PDT) Received: by 10.224.35.2 with HTTP; Tue, 17 Apr 2012 00:25:43 -0700 (PDT) Date: Tue, 17 Apr 2012 08:39:00 -0000 Message-ID: Subject: [RFC - Python scripting] New methods Symtab.global_block and Symtab.static_block (docs included) From: Siva Chandra To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf303b3c0fbece3904bddad8d7 X-System-Of-Record: true X-Gm-Message-State: ALoCoQnFpV6cI9SI4k1myqDgb2lez1BVtkovE6+baRdmi6537mYit2mcsS0qcQAe9LObcZ3TiHyRiESepp+lroVTGbdIllYJeGeKd1aVQ2Y4DFGxlHl2t6pk1H5brP5xXroCTCo0XniWKUOjyvDojdozN4cHltgaew== X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-04/txt/msg00451.txt.bz2 --20cf303b3c0fbece3904bddad8d7 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1236 The attached patch is a result of discussions here: http://sourceware.org/ml/gdb-patches/2012-04/msg00226.html and here: http://sourceware.org/ml/gdb-patches/2012-04/msg00302.html Code: 2012-04-17 Siva Chandra Reddy Add two new methods global_block and static_block to gdb.Symtab objects. * NEWS (Python scripting): Add entry about the new methods. * python/py-symtab.c (stpy_global_block): New function which implements the gdb.Symtab.global_block() method. (stpy_static_block): New function which implements the gdb.Symtab.static_block() method. (symtab_object_methods): Add entries for the two new methods. Testsuite: 2012-04-17 Siva Chandra Reddy * py-symbol.exp: Add tests to test the new methods gdb.Symtab.global_block() and gdb.Symtab.static_block(). * py-symbol.c: Add new struct to help test gdb.Symtab.static_block(). Docs: 2012-04-17 Siva Chandra Reddy * gdb.texinfo (Symbol Tables In Python): Add documentation about the new methods global_block and static_block on gdb.Symtab objects. Thanks, Siva Chandra --20cf303b3c0fbece3904bddad8d7 Content-Type: text/plain; charset=US-ASCII; name="symtab_blocks_patch.txt" Content-Disposition: attachment; filename="symtab_blocks_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h14mmcwr0 Content-length: 8789 SW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjUwNwpkaWZmIC11IC1wIC1yMS41MDcgTkVXUwotLS0gTkVXUwkxMSBBcHIg MjAxMiAwNTo1MDo0MCAtMDAwMAkxLjUwNworKysgTkVXUwkxNyBBcHIgMjAx MiAwNjowMToyNyAtMDAwMApAQCAtMzIsNiArMzIsMTAgQEAKICAgKiogQSBu ZXcgbWV0aG9kICdyZWZlcmVuY2VkX3ZhbHVlJyBvbiBnZGIuVmFsdWUgb2Jq ZWN0cyB3aGljaCBjYW4KICAgICAgZGVyZWZlcmVuY2UgcG9pbnRlciBhcyB3 ZWxsIGFzIEMrKyByZWZlcmVuY2UgdmFsdWVzLgogCisgICoqIE5ldyBtZXRo b2RzICdnbG9iYWxfYmxvY2snIGFuZCAnc3RhdGljX2Jsb2NrJyBvbiBnZGIu U3ltdGFiIG9iamVjdHMKKyAgICAgd2hpY2ggcmV0dXJuIHRoZSBnbG9iYWwg YW5kIHN0YXRpYyBibG9ja3MgKGFzIGdkYi5CbG9jayBvYmplY3RzKSwKKyAg ICAgb2YgdGhlIHVuZGVybHlpbmcgc3ltYm9sIHRhYmxlLCByZXNwZWN0aXZl bHkuCisKICogR0RCc2VydmVyIG5vdyBzdXBwb3J0cyBzdGRpbyBjb25uZWN0 aW9ucy4KICAgRS5nLiAoZ2RiKSB0YXJnZXQgcmVtb3RlIHwgc3NoIG15aG9z dCBnZGJzZXJ2ZXIgLSBoZWxsbwogCkluZGV4OiBkb2MvZ2RiLnRleGluZm8K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu OTQxCmRpZmYgLXUgLXAgLXIxLjk0MSBnZGIudGV4aW5mbwotLS0gZG9jL2dk Yi50ZXhpbmZvCTE0IEFwciAyMDEyIDEyOjE4OjQxIC0wMDAwCTEuOTQxCisr KyBkb2MvZ2RiLnRleGluZm8JMTcgQXByIDIwMTIgMDY6MDE6MzMgLTAwMDAK QEAgLTI0NTQwLDYgKzI0NTQwLDE4IEBAIGlmIGl0IGlzIGludmFsaWQgYXQg dGhlIHRpbWUgdGhlIG1ldGhvZCAKIEBkZWZ1biBTeW10YWIuZnVsbG5hbWUg KCkKIFJldHVybiB0aGUgc3ltYm9sIHRhYmxlJ3Mgc291cmNlIGFic29sdXRl IGZpbGUgbmFtZS4KIEBlbmQgZGVmdW4KKworQGRlZnVuIFN5bXRhYi5nbG9i YWxfYmxvY2sgKCkKK1JldHVybiB0aGUgZ2xvYmFsIGJsb2NrIG9mIHRoZSB1 bmRlcmx5aW5nIHN5bWJvbCB0YWJsZS4gIE5vdGUgdGhhdCwKK3Rob3VnaCBo aWdobHkgdW5saWtlbHksIHRoZSByZXR1cm5lZCBAY29kZXtnZGIuQmxvY2t9 IG9iamVjdHMgYXJlIG5vdAorZ3VhcmFudGVlZCB0byBiZSBpZGVudGljYWwg YWNyb3NzIGRpZmZlcmVudCBAdmFsdWV7R0RCTn0gcmVsZWFzZXMuCitAZW5k IGRlZnVuCisKK0BkZWZ1biBTeW10YWIuc3RhdGljX2Jsb2NrICgpCitSZXR1 cm4gdGhlIHN0YXRpYyBibG9jayBvZiB0aGUgdW5kZXJseWluZyBzeW1ib2wg dGFibGUuICBOb3RlIHRoYXQsCit0aG91Z2ggaGlnaGx5IHVubGlrZWx5LCB0 aGUgcmV0dXJuZWQgQGNvZGV7Z2RiLkJsb2NrfSBvYmplY3RzIGFyZSBub3QK K2d1YXJhbnRlZWQgdG8gYmUgaWRlbnRpY2FsIGFjcm9zcyBkaWZmZXJlbnQg QHZhbHVle0dEQk59IHJlbGVhc2VzLgorQGVuZCBkZWZ1bgogQGVuZCB0YWJs ZQogCiBAbm9kZSBCcmVha3BvaW50cyBJbiBQeXRob24KSW5kZXg6IHB5dGhv bi9weS1zeW10YWIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL3B5dGhvbi9weS1zeW10YWIuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjggcHktc3ltdGFi LmMKLS0tIHB5dGhvbi9weS1zeW10YWIuYwk0IEphbiAyMDEyIDA4OjE3OjI1 IC0wMDAwCTEuOAorKysgcHl0aG9uL3B5LXN5bXRhYi5jCTE3IEFwciAyMDEy IDA2OjAxOjMzIC0wMDAwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAi c291cmNlLmgiCiAjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCiAjaW5j bHVkZSAib2JqZmlsZXMuaCIKKyNpbmNsdWRlICJibG9jay5oIgogCiB0eXBl ZGVmIHN0cnVjdCBzdHB5X3N5bXRhYl9vYmplY3QgewogICBQeU9iamVjdF9I RUFECkBAIC0xNTMsNiArMTU0LDM0IEBAIHN0cHlfaXNfdmFsaWQgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAKICAgUHlfUkVUVVJOX1RSVUU7CiB9CiAK Ky8qIFJldHVybiB0aGUgR0xPQkFMX0JMT0NLIG9mIHRoZSB1bmRlcmx5aW5n IHN5bXRhYi4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHB5X2dsb2Jh bF9ibG9jayAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorewor ICBzdHJ1Y3Qgc3ltdGFiICpzeW10YWIgPSBOVUxMOworICBzdHJ1Y3QgYmxv Y2sgKmJsb2NrID0gTlVMTDsKKworICBTVFBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIHN5bXRhYik7CisKKyAgYmxvY2sgPSBzeW10YWItPmJsb2NrdmVjdG9y LT5ibG9ja1tHTE9CQUxfQkxPQ0tdOworICByZXR1cm4gYmxvY2tfdG9fYmxv Y2tfb2JqZWN0IChibG9jaywgc3ltdGFiLT5vYmpmaWxlKTsKK30KKworLyog UmV0dXJuIHRoZSBTVEFUSUNfQkxPQ0sgb2YgdGhlIHVuZGVybHlpbmcgc3lt dGFiLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cHlfc3RhdGljX2Js b2NrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIHN0 cnVjdCBzeW10YWIgKnN5bXRhYiA9IE5VTEw7CisgIHN0cnVjdCBibG9jayAq YmxvY2sgPSBOVUxMOworCisgIFNUUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg c3ltdGFiKTsKKworICBibG9jayA9IHN5bXRhYi0+YmxvY2t2ZWN0b3ItPmJs b2NrW1NUQVRJQ19CTE9DS107CisgIHJldHVybiBibG9ja190b19ibG9ja19v YmplY3QgKGJsb2NrLCBzeW10YWItPm9iamZpbGUpOworfQorCiBzdGF0aWMg UHlPYmplY3QgKgogc2FscHlfc3RyIChQeU9iamVjdCAqc2VsZikKIHsKQEAg LTQ3Nyw2ICs1MDYsMTIgQEAgUmV0dXJuIHRydWUgaWYgdGhpcyBzeW1ib2wg dGFibGUgaXMgdmFsaQogICB7ICJmdWxsbmFtZSIsIHN0cHlfZnVsbG5hbWUs IE1FVEhfTk9BUkdTLAogICAgICJmdWxsbmFtZSAoKSAtPiBTdHJpbmcuXG5c CiBSZXR1cm4gdGhlIHN5bXRhYidzIGZ1bGwgc291cmNlIGZpbGVuYW1lLiIg fSwKKyAgeyAiZ2xvYmFsX2Jsb2NrIiwgc3RweV9nbG9iYWxfYmxvY2ssIE1F VEhfTk9BUkdTLAorICAgICJnbG9iYWxfYmxvY2sgKCkgLT4gZ2RiLkJsb2Nr LlxuXAorUmV0dXJuIHRoZSBnbG9iYWwgYmxvY2sgb2YgdGhlIHN5bWJvbCB0 YWJsZS4iIH0sCisgIHsgInN0YXRpY19ibG9jayIsIHN0cHlfc3RhdGljX2Js b2NrLCBNRVRIX05PQVJHUywKKyAgICAic3RhdGljX2Jsb2NrICgpIC0+IGdk Yi5CbG9jay5cblwKK1JldHVybiB0aGUgc3RhdGljIGJsb2NrIG9mIHRoZSBz eW1ib2wgdGFibGUuIiB9LAogICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCiB9 OwogCkluZGV4OiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1zeW1ib2wuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXN5bWJvbC5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBweS1zeW1ib2wu YwotLS0gdGVzdHN1aXRlL2dkYi5weXRob24vcHktc3ltYm9sLmMJNyBGZWIg MjAxMiAxOTo0NzoxNiAtMDAwMAkxLjUKKysrIHRlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LXN5bWJvbC5jCTE3IEFwciAyMDEyIDA2OjAxOjM0IC0wMDAwCkBA IC00NCw2ICs0NCwxMSBAQCBpbnQgZnVuYyAoaW50IGFyZykKICAgcmV0dXJu IGFyZzsgLyogQmxvY2sgYnJlYWsgaGVyZS4gICovCiB9CiAKK3N0cnVjdCBz aW1wbGVfc3RydWN0Cit7CisgIGludCBhOworfTsKKwogaW50IG1haW4gKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAjaWZkZWYgX19jcGx1c3BsdXMK QEAgLTUxLDYgKzU2LDcgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAjZW5kaWYKICAgaW50IGEgPSAwOwogICBpbnQgcmVzdWx0Owor ICBzdHJ1Y3Qgc2ltcGxlX3N0cnVjdCBzcyA9IHsgMTAgfTsKICAgZW51bSB0 YWcge29uZSwgdHdvLCB0aHJlZX07CiAgIGVudW0gdGFnIHQgPSBvbmU7CiAK SW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXN5bXRhYi5leHAKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1zeW10YWIuZXhwLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBweS1zeW10YWIu ZXhwCi0tLSB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1zeW10YWIuZXhwCTcg RmViIDIwMTIgMTk6NDI6MjcgLTAwMDAJMS44CisrKyB0ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1zeW10YWIuZXhwCTE3IEFwciAyMDEyIDA2OjAxOjM0IC0w MDAwCkBAIC00OSw2ICs0OSwxMSBAQCBnZGJfY29udGludWVfdG9fYnJlYWtw b2ludCAiQmxvY2sgYnJlYWsgCiBnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJw eXRob24gZnJhbWUgPSBnZGIuc2VsZWN0ZWRfZnJhbWUoKSIgIkdldCBGcmFt ZSIgMAogZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIHNhbCA9IGZy YW1lLmZpbmRfc2FsKCkiICJHZXQgYmxvY2siIDAKIGdkYl9weV90ZXN0X3Np bGVudF9jbWQgInB5dGhvbiBzeW10YWIgPSBzYWwuc3ltdGFiIiAiR2V0IGJs b2NrIiAwCitnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRob24gZ2xvYmFs X2Jsb2NrID0gc3ltdGFiLmdsb2JhbF9ibG9jaygpIiAiR2V0IGdsb2JhbCBi bG9jayIgMAorZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIHN0YXRp Y19ibG9jayA9IHN5bXRhYi5zdGF0aWNfYmxvY2soKSIgIkdldCBzdGF0aWMg YmxvY2siIDAKK2dkYl9weV90ZXN0X3NpbGVudF9jbWQgInB5dGhvbiBnbG9i YWxfc3ltYm9scyA9IFxbXF07IHN0YXRpY19zeW1ib2xzID0gXFtcXSIgIlNl dCB1cCBzeW1ib2wgbmFtZSBsaXN0cyIgMAorZ2RiX3B5X3Rlc3Rfc2lsZW50 X2NtZCAicHl0aG9uIGZvciBzeW0gaW4gZ2xvYmFsX2Jsb2NrOiBnbG9iYWxf c3ltYm9scy5hcHBlbmQoc3ltLm5hbWUpIiAiR2V0IGdsb2JhbCBzeW1ib2wg bmFtZXMiIDAKK2dkYl9weV90ZXN0X3NpbGVudF9jbWQgInB5dGhvbiBmb3Ig c3ltIGluIHN0YXRpY19ibG9jazogc3RhdGljX3N5bWJvbHMuYXBwZW5kKHN5 bS5uYW1lKSIgIkdldCBzdGF0aWMgc3ltYm9sIG5hbWVzIiAwCiAKICMgVGVz dCBzYWwuCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IHNhbC5zeW10YWIiICIu KmdkYi5weXRob24vcHktc3ltYm9sLmMuKiIgIlRlc3Qgc3ltdGFiIgpAQCAt NjEsNiArNjYsMTIgQEAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBzeW10YWIu ZmlsZW5hbWUiIAogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBzeW10YWIub2Jq ZmlsZSIgIjxnZGIuT2JqZmlsZSBvYmplY3QgYXQgJHtoZXh9PiIgIlRlc3Qg c3ltdGFiLm9iamZpbGUiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IHN5bXRh Yi5mdWxsbmFtZSgpIiAidGVzdHN1aXRlL2dkYi5weXRob24vcHktc3ltYm9s LmMuKiIgIlRlc3Qgc3ltdGFiLmZ1bGxuYW1lIgogZ2RiX3Rlc3QgInB5dGhv biBwcmludCBzeW10YWIuaXNfdmFsaWQoKSIgIlRydWUiICJUZXN0IHN5bXRh Yi5pc192YWxpZCgpIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBcInFxXCIg aW4gZ2xvYmFsX3N5bWJvbHMiICJUcnVlIiAiVGVzdCBxcSBpbiBnbG9iYWwg c3ltYm9scyIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgXCJmdW5jXCIgaW4g Z2xvYmFsX3N5bWJvbHMiICJUcnVlIiAiVGVzdCBmdW5jIGluIGdsb2JhbCBz eW1ib2xzIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBcIm1haW5cIiBpbiBn bG9iYWxfc3ltYm9scyIgIlRydWUiICJUZXN0IG1haW4gaW4gZ2xvYmFsIHN5 bWJvbHMiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IFwiaW50XCIgaW4gc3Rh dGljX3N5bWJvbHMiICJUcnVlIiAiVGVzdCBpbnQgaW4gc3RhdGljIHN5bWJv bHMiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IFwiY2hhclwiIGluIHN0YXRp Y19zeW1ib2xzIiAiVHJ1ZSIgIlRlc3QgY2hhciBpbiBzdGF0aWMgc3ltYm9s cyIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgXCJzaW1wbGVfc3RydWN0XCIg aW4gc3RhdGljX3N5bWJvbHMiICJUcnVlIiAiVGVzdCBzaW1wbGVfc3RydWN0 IGluIHN0YXRpYyBzeW1ib2xzIgogCiAjIFRlc3QgaXNfdmFsaWQgd2hlbiB0 aGUgb2JqZmlsZSBpcyB1bmxvYWRlZC4gIFRoaXMgbXVzdCBiZSB0aGUgbGFz dAogIyB0ZXN0IGFzIGl0IHVubG9hZHMgdGhlIG9iamVjdCBmaWxlIGluIEdE Qi4K --20cf303b3c0fbece3904bddad8d7--