From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2347 invoked by alias); 2 Apr 2012 06:17:51 -0000 Received: (qmail 2337 invoked by uid 22791); 2 Apr 2012 06:17:48 -0000 X-SWARE-Spam-Status: No, hits=-4.0 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,TW_JF,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qc0-f182.google.com (HELO mail-qc0-f182.google.com) (209.85.216.182) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 02 Apr 2012 06:17:33 +0000 Received: by qcsg15 with SMTP id g15so1664392qcs.13 for ; Sun, 01 Apr 2012 23:17:33 -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=cQcszwfVSUE1UsUkJu4AkhPA3SZKnvlAz94Chlur0IE=; b=b4jykQl23dhXLFiG+A+R+4wizduc8mgY45ME2FJRfIiIVFpcVJiOcGx4UoYpXCnLa8 08nyHaI2zBuN8HYiGqGhdZiDgVd/2S8S8ZQlfS7K8OajX9Ff49budCRDRXCcc5gYyveY xpsnihE/4TOhKoj3wd5svILKtYOdYlQiLPAHUlb6acZXDg1ecrit+DiGSEStC5uAykn3 TtimRsM5GTnNJ/08HC9dd01Ce3ZdJaGYHCkWlW7Ct746oJr4a0Y+sonMJaiVNbf4Ubnd AGn0j4aysx8w3p3T32KAmNUai31Db+tTRN7uJQ2Qxpu/0iU3TjIUmoCBwCBN/YM+72qa /FDg== Received: by 10.224.213.7 with SMTP id gu7mr9568056qab.25.1333347452936; Sun, 01 Apr 2012 23:17:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.213.7 with SMTP id gu7mr9567999qab.25.1333347451728; Sun, 01 Apr 2012 23:17:31 -0700 (PDT) Received: by 10.224.188.140 with HTTP; Sun, 1 Apr 2012 23:17:31 -0700 (PDT) Date: Mon, 02 Apr 2012 06:17:00 -0000 Message-ID: Subject: [RFC - Python Scripting] New method Objfile.symtabs () - docs included From: Siva Chandra To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf300fb10938f52f04bcac259a X-System-Of-Record: true X-Gm-Message-State: ALoCoQmZ/19zdCUXslB/WTEUwEWyld8ZU+2GrcecG7Htwkix9DGmpcUDrchVbd5vSGcLtFbOdmTAmlBaNSsIjvkDYFip4zCGJ07GU/FM+pjjQwtGpYFt5H15SSNxF9DGLEqT39/HWgjBmLg2z+GIQS4XVl1jfSaRBg== 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/msg00007.txt.bz2 --20cf300fb10938f52f04bcac259a Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1552 Hi all, Attached is a patch which adds a new method Objfile.symtabs to gdb.Objfile. This new method returns a list of gdb.Symtab objects associated with the underlying object file. Code ChangeLog: 2012-04-02 Siva Chandra Reddy Python Scripting: New method Objfile.symtabs which returns the list of obj.Symtab objects associated with the underlying objfile. * NEWS: Add entery under 'Python scripting' about the new Objfile.symtabs method. * python/py-objfile.c (stpy_iterator_object): New iterator object type to iterate over a list of obj.Symtab objects. (stpy_node): New struct to aid the iterator. (stpy_iterator_free_symtab_list, new_stpy_iterator, objfpy_symtabs, stpy_iterator_dealloc, stpy_iterator_iter, stpy_iterator_iternext): New functions which manage the new iterator object type. (objfpy_dealloc, objfpy_new, objfile_to_objfile_object, gdbpy_initialize_objfile): Add initializations and reference management for the new iterator object and type. Docs ChangeLog: 2012-04-02 Siva Chandra Reddy * gdb.texinfo (Python API/Objfiles In Python): Add description about the new method Objfile.symtabs on gdb.Objfile objects. Testsuite ChangeLog: 2012-04-02 Siva Chandra Reddy * gdb.python/py-objfile.exp: Add tests to test the method Objfile.symtabs. * gdb.python/py-objfile1.c: New file to help test the new method Objfile.symtabs. * gdb.python/py-objfile2.c: Likewise * gdb.python/py-objfile3.c: Likewise Thanks, Siva Chandra --20cf300fb10938f52f04bcac259a Content-Type: text/plain; charset=US-ASCII; name="objfile_symtabs_patch_v1.txt" Content-Disposition: attachment; filename="objfile_symtabs_patch_v1.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h0j4g1750 Content-length: 22253 SW5kZXg6IHB5dGhvbi9weS1vYmpmaWxlLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9weXRob24vcHktb2Jq ZmlsZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLWMgLXAg LXIxLjExIHB5LW9iamZpbGUuYwoqKiogcHl0aG9uL3B5LW9iamZpbGUuYwk0 IEphbiAyMDEyIDA4OjE3OjI1IC0wMDAwCTEuMTEKLS0tIHB5dGhvbi9weS1v YmpmaWxlLmMJMiBBcHIgMjAxMiAwNjowOToxNyAtMDAwMAoqKioqKioqKioq KioqKioKKioqIDIyLDI3ICoqKioKLS0tIDIyLDI4IC0tLS0KICAjaW5jbHVk ZSAiY2hhcnNldC5oIgogICNpbmNsdWRlICJvYmpmaWxlcy5oIgogICNpbmNs dWRlICJsYW5ndWFnZS5oIgorICNpbmNsdWRlICJwc3ltcHJpdi5oIgogIAog IHR5cGVkZWYgc3RydWN0CiAgewoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QKKioqIDMyLDQ1ICoqKioKLS0tIDMzLDE3MiAtLS0tCiAgCiAgICAv KiBUaGUgcHJldHR5LXByaW50ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLwog ICAgUHlPYmplY3QgKnByaW50ZXJzOworIAorICAgLyogVGhlIGl0ZXJhdG9y IG9iamVjdCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2Ygc3ltdGFicyBh c3NvY2lhdGVkCisgICAgICB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG9iamZp bGUuICAqLworICAgUHlPYmplY3QgKnN5bXRhYl9pdGVyYXRvcjsKICB9IG9i amZpbGVfb2JqZWN0OwogIAorIHR5cGVkZWYgc3RydWN0IHN0cHlfbm9kZV9p CisgeworICAgUHlPYmplY3QgKnN5bXRhYl9vYmplY3Q7CisgICBzdHJ1Y3Qg c3RweV9ub2RlX2kgKm5leHQ7CisgfSBzdHB5X25vZGU7CisgCisgLyogVGhl IGl0ZXJhdG9yIG9iamVjdCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2Yg c3ltdGFicyBhc3NvY2lhdGVkCisgICAgd2l0aCBhbiBPYmpmaWxlLiAgKi8K KyAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgIFB5T2JqZWN0X0hFQUQKKyAK KyAgIHN0cHlfbm9kZSAqc3ltdGFiX2xpc3Q7CisgICBzdHB5X25vZGUgKmN1 cnJlbnRfbm9kZTsKKyB9IHN0cHlfaXRlcmF0b3Jfb2JqZWN0OworIAogIHN0 YXRpYyBQeVR5cGVPYmplY3Qgb2JqZmlsZV9vYmplY3RfdHlwZTsKKyBzdGF0 aWMgUHlUeXBlT2JqZWN0IHN0cHlfaXRlcmF0b3Jfb2JqZWN0X3R5cGU7CiAg CiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvYmpmaWxlX2RhdGEgKm9iamZweV9v YmpmaWxlX2RhdGFfa2V5OwogIAogIAwKICAKKyAvKiBGcmVlIHRoZSBzeW10 YWIgbGlzdCBpbiBJVEVSX09CSkVDVC4gIERlY3JlbWVudCB0aGUgcmVmZXJl bmNlcyB0bworICAgIHRoZSBpbmRpdmlkdWFsIFN5bXRhYiBvYmplY3RzIGlu IHRoZSBsaXN0LiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIHN0cHlfaXRlcmF0 b3JfZnJlZV9zeW10YWJfbGlzdCAoc3RweV9pdGVyYXRvcl9vYmplY3QgKml0 ZXJfb2JqZWN0KQorIHsKKyAgIHN0cHlfbm9kZSAqbm9kZTsKKyAKKyAgIGlm ICghIGl0ZXJfb2JqZWN0IHx8ICEgaXRlcl9vYmplY3QtPnN5bXRhYl9saXN0 KQorICAgICByZXR1cm47CisgCisgICBub2RlID0gaXRlcl9vYmplY3QtPnN5 bXRhYl9saXN0OworICAgd2hpbGUgKG5vZGUpCisgICAgIHsKKyAgICAgICBz dHB5X25vZGUgKnRlbXAgPSBub2RlOworIAorICAgICAgIFB5X1hERUNSRUYg KG5vZGUtPnN5bXRhYl9vYmplY3QpOworICAgICAgIG5vZGUgPSBub2RlLT5u ZXh0OworIAorICAgICAgIHhmcmVlICh0ZW1wKTsKKyAgICAgfQorIAorICAg aXRlcl9vYmplY3QtPnN5bXRhYl9saXN0ID0gTlVMTDsKKyAgIGl0ZXJfb2Jq ZWN0LT5jdXJyZW50X25vZGUgPSBOVUxMOyAKKyB9CisgCisgLyogUmV0dXJu IGEgbmV3IHN0cHlfaXRlcmF0b3Jfb2JqZWN0IGdpdmVuIGFuIE9CSkZJTEUu ICBUaGUgY2FsbGVyIGhvbGRzCisgICAgdGhlIHJlZmVyZW5jZSB0byB0aGUg bmV3IG9iamVjdC4gICovCisgCisgc3RhdGljIHN0cHlfaXRlcmF0b3Jfb2Jq ZWN0ICoKKyBuZXdfc3RweV9pdGVyYXRvciAoc3RydWN0IG9iamZpbGUgKm9i amZpbGUpCisgeworICAgc3RweV9pdGVyYXRvcl9vYmplY3QgKml0ZXJfb2Jq ZWN0OworICAgc3RydWN0IHN5bXRhYiAqc3ltdGFiOworICAgc3RydWN0IHBh cnRpYWxfc3ltdGFiICpwc3ltdGFiOworICAgc3RweV9ub2RlICpsYXN0X25v ZGUgPSBOVUxMOworICAgaW50IGZpcnN0ID0gMTsKKyAgIGludCBpbnZhbGlk ID0gMDsKKyAKKyAgIGl0ZXJfb2JqZWN0ID0gUHlPYmplY3RfTmV3IChzdHB5 X2l0ZXJhdG9yX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc3RweV9pdGVyYXRvcl9vYmplY3RfdHlwZSk7CisgCisgICBpZiAo ISBpdGVyX29iamVjdCkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisgICBpdGVy X29iamVjdC0+c3ltdGFiX2xpc3QgPSBOVUxMOworICAgaWYgKCEgb2JqZmls ZSkKKyAgICAgeworICAgICAgIC8qIElmIHRoZSBvYmpmaWxlIGlzIE5VTEws IHJldHVybiBhbiBpdGVyIHdpdGggbm8gZWxlbWVudHMuICAqLworICAgICAg IGl0ZXJfb2JqZWN0LT5jdXJyZW50X25vZGUgPSBOVUxMOworICAgICAgIHJl dHVybiBpdGVyX29iamVjdDsKKyAgICAgfQorIAorICAgLyogSWYgdGhlIHN5 bXRhYnMgYXJlIG5vdCB5ZXQgcmVhZCwgdGhlbiByZWFkIHRoZW0uICAqLwor ICAgQUxMX09CSkZJTEVfUFNZTVRBQlMgKG9iamZpbGUsIHBzeW10YWIpCisg ICAgIHsKKyAgICAgICBpZiAocHN5bXRhYi0+cmVhZGluKQorICAgICAgICAg Y29udGludWU7CisgCisgICAgICAgaWYgKHBzeW10YWItPnJlYWRfc3ltdGFi KQorICAgICAgICAgcHN5bXRhYi0+cmVhZF9zeW10YWIgKHBzeW10YWIpOwor ICAgICB9CisgCisgICBBTExfT0JKRklMRV9TWU1UQUJTIChvYmpmaWxlLCBz eW10YWIpCisgICAgIHsKKyAgICAgICBQeU9iamVjdCAqc3ltdGFiX29iamVj dDsKKyAKKyAgICAgICBzeW10YWJfb2JqZWN0ID0gc3ltdGFiX3RvX3N5bXRh Yl9vYmplY3QgKHN5bXRhYik7CisgICAgICAgaWYgKHN5bXRhYl9vYmplY3Qp CisgICAgICAgICB7CisgICAgICAgICAgIHN0cHlfbm9kZSAqbmV3X25vZGU7 CisgCisgICAgICAgICAgIG5ld19ub2RlID0gKHN0cHlfbm9kZSAqKSB4bWFs bG9jIChzaXplb2YgKHN0cHlfbm9kZSkpOworICAgICAgICAgICBuZXdfbm9k ZS0+c3ltdGFiX29iamVjdCA9IHN5bXRhYl9vYmplY3Q7CisgICAgICAgICAg IG5ld19ub2RlLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgICAgaWYgKGZpcnN0 KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGl0ZXJfb2JqZWN0 LT5zeW10YWJfbGlzdCA9IG5ld19ub2RlOworICAgICAgICAgICAgICAgZmly c3QgPSAwOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGxhc3Rfbm9kZS0+bmV4dCA9 IG5ld19ub2RlOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgbGFz dF9ub2RlID0gbmV3X25vZGU7CisgICAgICAgICB9CisgICAgICAgZWxzZQor ICAgICAgICAgeworICAgICAgICAgICAvKiBHaXZlIHVwIGlmIGl0IGlzIG5v dCBwb3NzaWJsZSB0byBnZXQgdGhlIHN5bXRhYl9vYmplY3QKKyAgICAgICAg ICAgICAgZm9yIGEgc3ltdGFiLiAgKi8KKyAgICAgICAgICAgaW52YWxpZCA9 IDE7CisgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9Cisg CisgICBpdGVyX29iamVjdC0+Y3VycmVudF9ub2RlID0gaXRlcl9vYmplY3Qt PnN5bXRhYl9saXN0OworIAorICAgaWYgKGludmFsaWQpCisgICAgIHN0cHlf aXRlcmF0b3JfZnJlZV9zeW10YWJfbGlzdCAoaXRlcl9vYmplY3QpOworIAor ICAgcmV0dXJuIGl0ZXJfb2JqZWN0OworIH0KKyAKICAvKiBBbiBPYmpmaWxl IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBvYmpmaWxlJ3MgZmlsZSBuYW1l LCBvciBOb25lLiAgKi8KICBzdGF0aWMgUHlPYmplY3QgKgogIG9iamZweV9n ZXRfZmlsZW5hbWUgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoq KioqKioqKioqKioqKiogb2JqZnB5X2RlYWxsb2MgKFB5T2JqZWN0ICpvKQoq KiogNTgsNjMgKioqKgotLS0gMTg1LDE5MSAtLS0tCiAgICBvYmpmaWxlX29i amVjdCAqc2VsZiA9IChvYmpmaWxlX29iamVjdCAqKSBvOwogIAogICAgUHlf WERFQ1JFRiAoc2VsZi0+cHJpbnRlcnMpOworICAgUHlfWERFQ1JFRiAoc2Vs Zi0+c3ltdGFiX2l0ZXJhdG9yKTsKICAgIHNlbGYtPm9iX3R5cGUtPnRwX2Zy ZWUgKChQeU9iamVjdCAqKSBzZWxmKTsKICB9CiAgCioqKioqKioqKioqKioq KiBvYmpmcHlfbmV3IChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0Cioq KiA2OSw3NCAqKioqCi0tLSAxOTcsMjAzIC0tLS0KICAgIGlmIChzZWxmKQog ICAgICB7CiAgICAgICAgc2VsZi0+b2JqZmlsZSA9IE5VTEw7CisgICAgICAg c2VsZi0+c3ltdGFiX2l0ZXJhdG9yID0gTlVMTDsKICAKICAgICAgICBzZWxm LT5wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOwogICAgICAgIGlmICghc2Vs Zi0+cHJpbnRlcnMpCioqKioqKioqKioqKioqKiBvYmpmcHlfc2V0X3ByaW50 ZXJzIChQeU9iamVjdCAqbywgUHlPYmplCioqKiAxMTgsMTIzICoqKioKLS0t IDI0NywyODEgLS0tLQogICAgcmV0dXJuIDA7CiAgfQogIAorIC8qIFJldHVy biBhIHNlcXVlbmNlIG9mIHN5bXRhYiBvYmplY3RzIGFzc29jaWF0ZWQgd2l0 aCB0aGUgY29ycmVzcG9uZGluZworICAgIG9iamZpbGUuICBFYWNoIGVsZW1l bnQgaW4gdGhlIHNlcXVlbmNlIGlzIGEgZ2RiLlN5bXRhYiBvYmplY3QuICAq LworIAorIHN0YXRpYyBQeU9iamVjdCAqCisgb2JqZnB5X3N5bXRhYnMgKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyB7CisgICBvYmpmaWxl X29iamVjdCAqb2JqID0gKG9iamZpbGVfb2JqZWN0ICopIHNlbGY7CisgICBz dHB5X2l0ZXJhdG9yX29iamVjdCAqaXRlcjsKKyAKKyAgIGlmICghIG9iai0+ b2JqZmlsZSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisgICBpZiAob2JqLT5z eW10YWJfaXRlcmF0b3IpCisgICAgIHsKKyAgICAgICBpdGVyID0gKHN0cHlf aXRlcmF0b3Jfb2JqZWN0ICopIG9iai0+c3ltdGFiX2l0ZXJhdG9yOworICAg ICAgIGl0ZXItPmN1cnJlbnRfbm9kZSA9IGl0ZXItPnN5bXRhYl9saXN0Owor ICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICBpdGVyID0gbmV3X3N0 cHlfaXRlcmF0b3IgKG9iai0+b2JqZmlsZSk7CisgICAgICAgaWYgKCEgaXRl cikKKyAgICAgICAgIHJldHVybiBOVUxMOworIAorICAgICAgIG9iai0+c3lt dGFiX2l0ZXJhdG9yID0gKFB5T2JqZWN0ICopIGl0ZXI7CisgICAgIH0KKyAK KyAgIHJldHVybiBQeVNlcXVlbmNlX0xpc3QgKChQeU9iamVjdCAqKSBpdGVy KTsKKyB9CisgCiAgLyogSW1wbGVtZW50YXRpb24gb2YgZ2RiLk9iamZpbGUu aXNfdmFsaWQgKHNlbGYpIC0+IEJvb2xlYW4uCiAgICAgUmV0dXJucyBUcnVl IGlmIHRoaXMgb2JqZWN0IGZpbGUgc3RpbGwgZXhpc3RzIGluIEdEQi4gICov CiAgCioqKioqKioqKioqKioqKiBvYmpmaWxlX3RvX29iamZpbGVfb2JqZWN0 IChzdHJ1Y3Qgb2JqZmlsCioqKiAxNjQsMTY5ICoqKioKLS0tIDMyMiwzMjgg LS0tLQogICAgICAgIGlmIChvYmplY3QpCiAgCXsKICAJICBvYmplY3QtPm9i amZpbGUgPSBvYmpmaWxlOworICAgICAgICAgICBvYmplY3QtPnN5bXRhYl9p dGVyYXRvciA9IE5VTEw7CiAgCiAgCSAgb2JqZWN0LT5wcmludGVycyA9IFB5 TGlzdF9OZXcgKDApOwogIAkgIGlmICghb2JqZWN0LT5wcmludGVycykKKioq KioqKioqKioqKioqIG9iamZpbGVfdG9fb2JqZmlsZV9vYmplY3QgKHN0cnVj dCBvYmpmaWwKKioqIDE3OSwxODQgKioqKgotLS0gMzM4LDM4MCAtLS0tCiAg ICByZXR1cm4gKFB5T2JqZWN0ICopIG9iamVjdDsKICB9CiAgCisgLyogJ3Rw X2RlYWxsb2MnIGZ1bmN0aW9uIGZvciBzdHB5X2l0ZXJhdG9yX29iamVjdF90 eXBlLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIHN0cHlfaXRlcmF0b3JfZGVh bGxvYyAoUHlPYmplY3QgKm8pCisgeworICAgc3RweV9pdGVyYXRvcl9mcmVl X3N5bXRhYl9saXN0ICgoc3RweV9pdGVyYXRvcl9vYmplY3QgKikgbyk7Cisg fQorIAorIC8qICd0cF9pdGVyJyBmdW5jdGlvbiBmb3Igc3RweV9pdGVyYXRv cl9vYmplY3RfdHlwZS4gICovCisgCisgc3RhdGljIFB5T2JqZWN0ICoKKyBz dHB5X2l0ZXJhdG9yX2l0ZXIgKFB5T2JqZWN0ICpzZWxmKQorIHsKKyAgIFB5 X0lOQ1JFRiAoc2VsZik7CisgICByZXR1cm4gc2VsZjsKKyB9CisgCisgLyog J3RwX2l0ZXJuZXh0JyBmdW5jdGlvbiBmb3Igc3RweV9pdGVyYXRvcl9vYmpl Y3RfdHlwZS4gICovCisgCisgc3RhdGljIFB5T2JqZWN0ICoKKyBzdHB5X2l0 ZXJhdG9yX2l0ZXJuZXh0IChQeU9iamVjdCAqc2VsZikKKyB7CisgICBzdHB5 X2l0ZXJhdG9yX29iamVjdCAqaXRlciA9IChzdHB5X2l0ZXJhdG9yX29iamVj dCAqKSBzZWxmOworICAgc3RweV9ub2RlICpub2RlOworICAgUHlPYmplY3Qg KmVsZW07CisgCisgICBpZiAoISBpdGVyIHx8ICEgaXRlci0+Y3VycmVudF9u b2RlKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIG5vZGUgPSBpdGVyLT5j dXJyZW50X25vZGU7CisgICBpdGVyLT5jdXJyZW50X25vZGUgPSBub2RlLT5u ZXh0OworIAorICAgZWxlbSA9IG5vZGUtPnN5bXRhYl9vYmplY3Q7CisgICBQ eV9JTkNSRUYgKChQeU9iamVjdCAqKSBlbGVtKTsKKyAgIHJldHVybiBlbGVt OworIH0KKyAKICB2b2lkCiAgZ2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxlICh2 b2lkKQogIHsKKioqKioqKioqKioqKioqIGdkYnB5X2luaXRpYWxpemVfb2Jq ZmlsZSAodm9pZCkKKioqIDE4OCwxOTYgKioqKgotLS0gMzg0LDM5OSAtLS0t CiAgICBpZiAoUHlUeXBlX1JlYWR5ICgmb2JqZmlsZV9vYmplY3RfdHlwZSkg PCAwKQogICAgICByZXR1cm47CiAgCisgICBpZiAoUHlUeXBlX1JlYWR5ICgm c3RweV9pdGVyYXRvcl9vYmplY3RfdHlwZSkgPCAwKQorICAgICByZXR1cm47 CisgCiAgICBQeV9JTkNSRUYgKCZvYmpmaWxlX29iamVjdF90eXBlKTsKICAg IFB5TW9kdWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwgIk9iamZpbGUiLAog IAkJICAgICAgKFB5T2JqZWN0ICopICZvYmpmaWxlX29iamVjdF90eXBlKTsK KyAKKyAgIFB5X0lOQ1JFRiAoJnN0cHlfaXRlcmF0b3Jfb2JqZWN0X3R5cGUp OworICAgUHlNb2R1bGVfQWRkT2JqZWN0IChnZGJfbW9kdWxlLCAiU3ltdGFi SXRlcmF0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3Qg KikgJnN0cHlfaXRlcmF0b3Jfb2JqZWN0X3R5cGUpOwogIH0KICAKICAMCioq KioqKioqKioqKioqKiBzdGF0aWMgUHlNZXRob2REZWYgb2JqZmlsZV9vYmpl Y3RfbWV0aG9kCioqKiAyMDAsMjA1ICoqKioKLS0tIDQwMyw0MTIgLS0tLQog ICAgeyAiaXNfdmFsaWQiLCBvYmpmcHlfaXNfdmFsaWQsIE1FVEhfTk9BUkdT LAogICAgICAiaXNfdmFsaWQgKCkgLT4gQm9vbGVhbi5cblwKICBSZXR1cm4g dHJ1ZSBpZiB0aGlzIG9iamVjdCBmaWxlIGlzIHZhbGlkLCBmYWxzZSBpZiBu b3QuIiB9LAorICAgeyAic3ltdGFicyIsIG9iamZweV9zeW10YWJzLCBNRVRI X05PQVJHUywKKyAgICAgInN5bXRhYnMgKCkgLT4gbGlzdC5cblwKKyBSZXR1 cm4gdGhlIGxpc3Qgb2YgZ2RiLlN5bXRhYiBvYmplY3RzIGFzc29jaWF0ZWQg d2l0aCB0aGUgdW5kZXJseWluZ1xuXAorIG9iamVjdCBmaWxlLiJ9LAogIAog ICAgeyBOVUxMIH0KICB9OwoqKioqKioqKioqKioqKiogc3RhdGljIFB5VHlw ZU9iamVjdCBvYmpmaWxlX29iamVjdF90eXBlIAoqKiogMjU1LDI1NyAqKioq Ci0tLSA0NjIsNDk2IC0tLS0KICAgIDAsCQkJCSAgLyogdHBfYWxsb2MgKi8K ICAgIG9iamZweV9uZXcsCQkJICAvKiB0cF9uZXcgKi8KICB9OworIAorIHN0 YXRpYyBQeVR5cGVPYmplY3Qgc3RweV9pdGVyYXRvcl9vYmplY3RfdHlwZSA9 CisgeworICAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQorICAgMCwJCQkJ ICAvKm9iX3NpemUqLworICAgImdkYi5TeW10YWJJdGVyYXRvciIsCQkgIC8q dHBfbmFtZSovCisgICBzaXplb2YgKHN0cHlfaXRlcmF0b3Jfb2JqZWN0KSwg IC8qdHBfYmFzaWNzaXplKi8KKyAgIDAsCQkJCSAgLyp0cF9pdGVtc2l6ZSov CisgICBzdHB5X2l0ZXJhdG9yX2RlYWxsb2MsCSAgLyp0cF9kZWFsbG9jKi8K KyAgIDAsCQkJCSAgLyp0cF9wcmludCovCisgICAwLAkJCQkgIC8qdHBfZ2V0 YXR0ciovCisgICAwLAkJCQkgIC8qdHBfc2V0YXR0ciovCisgICAwLAkJCQkg IC8qdHBfY29tcGFyZSovCisgICAwLAkJCQkgIC8qdHBfcmVwciovCisgICAw LAkJCQkgIC8qdHBfYXNfbnVtYmVyKi8KKyAgIDAsCQkJCSAgLyp0cF9hc19z ZXF1ZW5jZSovCisgICAwLAkJCQkgIC8qdHBfYXNfbWFwcGluZyovCisgICAw LAkJCQkgIC8qdHBfaGFzaCAqLworICAgMCwJCQkJICAvKnRwX2NhbGwqLwor ICAgMCwJCQkJICAvKnRwX3N0ciovCisgICAwLAkJCQkgIC8qdHBfZ2V0YXR0 cm8qLworICAgMCwJCQkJICAvKnRwX3NldGF0dHJvKi8KKyAgIDAsCQkJCSAg Lyp0cF9hc19idWZmZXIqLworICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlf VFBGTEFHU19IQVZFX0lURVIsICAvKnRwX2ZsYWdzKi8KKyAgICJHREIgc3lt dGFiIGl0ZXJhdG9yIG9iamVjdCIsCSAgLyogdHBfZG9jICovCisgICAwLAkJ CQkgIC8qIHRwX3RyYXZlcnNlICovCisgICAwLAkJCQkgIC8qIHRwX2NsZWFy ICovCisgICAwLAkJCQkgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAwLAkJ CQkgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICBzdHB5X2l0ZXJhdG9y X2l0ZXIsCQkgIC8qIHRwX2l0ZXIgKi8KKyAgIHN0cHlfaXRlcmF0b3JfaXRl cm5leHQsCSAgLyogdHBfaXRlcm5leHQgKi8KKyB9OwpJbmRleDogZG9jL2dk Yi50ZXhpbmZvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvZG9jL2dkYi50ZXhpbmZvLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjkzOQpkaWZmIC1jIC1wIC1yMS45MzkgZ2RiLnRleGluZm8K KioqIGRvYy9nZGIudGV4aW5mbwkyOCBNYXIgMjAxMiAyMTozMTo0NiAtMDAw MAkxLjkzOQotLS0gZG9jL2dkYi50ZXhpbmZvCTIgQXByIDIwMTIgMDY6MDk6 MjQgLTAwMDAKKioqKioqKioqKioqKioqIGxvbmdlci4gIEFsbCBvdGhlciBA Y29kZXtnZGIuT2JqZmlsZX0gbWUKKioqIDIzODEyLDIzODE3ICoqKioKLS0t IDIzODEyLDIzODIzIC0tLS0KICBpZiBpdCBpcyBpbnZhbGlkIGF0IHRoZSB0 aW1lIHRoZSBtZXRob2QgaXMgY2FsbGVkLgogIEBlbmQgZGVmdW4KICAKKyBA ZGVmdW4gT2JqZmlsZS5zeW10YWJzICgpCisgUmV0dXJucyB0aGUgbGlzdCBv ZiBAY29kZXtnZGIuU3ltdGFifSBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0 aGUKKyB1bmRlcmx5aW5nIG9iamVjdCBmaWxlIHJlZmVycmVkIGJ5IHRoZSBA Y29kZXtnZGIuT2JqZmlsZX0gb2JqZWN0LgorIEB4cmVme1N5bWJvbCBUYWJs ZXMgSW4gUHl0aG9ufS4KKyBAZW5kIGRlZnVuCisgCiAgQG5vZGUgRnJhbWVz IEluIFB5dGhvbgogIEBzdWJzdWJzZWN0aW9uIEFjY2Vzc2luZyBpbmZlcmlv ciBzdGFjayBmcmFtZXMgZnJvbSBQeXRob24uCiAgCkluZGV4OiB0ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1vYmpmaWxlLmV4cAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LW9iamZpbGUuZXhwLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjMKZGlmZiAtYyAtcCAtcjEuMyBweS1vYmpmaWxlLmV4cAoqKiogdGVz dHN1aXRlL2dkYi5weXRob24vcHktb2JqZmlsZS5leHAJMTYgSmFuIDIwMTIg MTY6MjE6NTIgLTAwMDAJMS4zCi0tLSB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1vYmpmaWxlLmV4cAkyIEFwciAyMDEyIDA2OjA5OjI0IC0wMDAwCioqKioq KioqKioqKioqKgoqKiogMTksMjUgKioqKgogIGxvYWRfbGliIGdkYi1weXRo b24uZXhwCiAgCiAgc2V0IHRlc3RmaWxlICJweS1vYmpmaWxlIgohIHNldCBz cmNmaWxlICR7dGVzdGZpbGV9LmMKICAKICBpZiB7IFtwcmVwYXJlX2Zvcl90 ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9 XSB9IHsKICAgICAgcmV0dXJuIC0xCi0tLSAxOSwyNiAtLS0tCiAgbG9hZF9s aWIgZ2RiLXB5dGhvbi5leHAKICAKICBzZXQgdGVzdGZpbGUgInB5LW9iamZp bGUiCiEgc2V0IHNyY2ZpbGUgIiR7dGVzdGZpbGV9LmMgJHt0ZXN0ZmlsZX0x LmMgJHt0ZXN0ZmlsZX0yLmMgJHt0ZXN0ZmlsZX0zLmMiCiEgc2V0IGZuYW1l cHJlZml4ICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyIKICAKICBpZiB7IFtwcmVw YXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAk e3NyY2ZpbGV9XSB9IHsKICAgICAgcmV0dXJuIC0xCioqKioqKioqKioqKioq KiBnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRob24gc3ltID0gZ2RiCioq KiAzNyw0NyAqKioqCi0tLSAzOCw2NyAtLS0tCiAgICAgICJGaW5kIGEgc3lt Ym9sIGluIG9iamZpbGUiIDEKICBnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJw eXRob24gb2JqZmlsZSA9IHN5bVxbMFxdLnN5bXRhYi5vYmpmaWxlIiBcCiAg ICAgICJHZXQgYmFja2luZyBvYmplY3QgZmlsZSIgMQorIGdkYl9weV90ZXN0 X3NpbGVudF9jbWQgInB5dGhvbiBzeW10YWJzID0gb2JqZmlsZS5zeW10YWJz KCkiIFwKKyAgICAgIkdldCB0aGUgc3ltdGFicyBhc3NvY2lhdGVkIHdpdGgg dGhlIG9iamZpbGUiIDEKKyBnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRo b24gZmlsZW5hbWVzID0gXFsnJHtmbmFtZXByZWZpeH0ke3Rlc3RmaWxlfS5j JywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcke2ZuYW1lcHJlZml4fSR7dGVzdGZpbGV9MS5jJywgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICck e2ZuYW1lcHJlZml4fSR7dGVzdGZpbGV9Mi5jJywgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke2ZuYW1lcHJl Zml4fSR7dGVzdGZpbGV9My5jJ1xdIiBcCisgICAgICJDcmVhdGUgYSBsaXN0 IG9mIHNvdXJjZSBmaWxlIG5hbWVzIiAxCiAgCiAgZ2RiX3Rlc3QgInB5dGhv biBwcmludCBvYmpmaWxlLmZpbGVuYW1lIiAiLipweS1vYmpmaWxlLioiIFwK ICAgICJHZXQgb2JqZmlsZSB2YWxpZGl0eSIKICBnZGJfdGVzdCAicHl0aG9u IHByaW50IG9iamZpbGUuaXNfdmFsaWQoKSIgIlRydWUiIFwKICAgICJHZXQg b2JqZmlsZSB2YWxpZGl0eSIKKyAKKyBnZGJfdGVzdCAicHl0aG9uIHByaW50 IGxlbihzeW10YWJzKSIgIjQiIFwKKyAgICJHZXQgdGhlIG51bWJlciBvZiBz eW10YWJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZmlsZS4iCisgZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBzeW10YWJzXFswXF0uZmlsZW5hbWUgaW4gZmls ZW5hbWVzIiAiVHJ1ZSIgXAorICAgIkNoZWNrIGlmIHN5bXRhYiBmaWxlIGlz IHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgZmlsZW5hbWVzLiIKKyBnZGJfdGVz dCAicHl0aG9uIHByaW50IHN5bXRhYnNcWzFcXS5maWxlbmFtZSBpbiBmaWxl bmFtZXMiICJUcnVlIiBcCisgICAiQ2hlY2sgaWYgc3ltdGFiIGZpbGUgaXMg cHJlc2VudCBpbiB0aGUgbGlzdCBvZiBmaWxlbmFtZXMuIgorIGdkYl90ZXN0 ICJweXRob24gcHJpbnQgc3ltdGFic1xbMlxdLmZpbGVuYW1lIGluIGZpbGVu YW1lcyIgIlRydWUiIFwKKyAgICJDaGVjayBpZiBzeW10YWIgZmlsZSBpcyBw cmVzZW50IGluIHRoZSBsaXN0IG9mIGZpbGVuYW1lcy4iCisgZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBzeW10YWJzXFszXF0uZmlsZW5hbWUgaW4gZmlsZW5h bWVzIiAiVHJ1ZSIgXAorICAgIkNoZWNrIGlmIHN5bXRhYiBmaWxlIGlzIHBy ZXNlbnQgaW4gdGhlIGxpc3Qgb2YgZmlsZW5hbWVzLiIKKyAKICBnZGJfdW5s b2FkCiAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBvYmpmaWxlLmlzX3ZhbGlk KCkiICJGYWxzZSIgXAogICAgIkdldCBvYmpmaWxlIHZhbGlkaXR5IGFmdGVy IHVubG9hZCIKSW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW9iamZp bGUxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1 aXRlL2dkYi5weXRob24vcHktb2JqZmlsZTEuYwpkaWZmIC1OIHRlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LW9iamZpbGUxLmMKKioqIC9kZXYvbnVsbAkxIEph biAxOTcwIDAwOjAwOjAwIC0wMDAwCi0tLSB0ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1vYmpmaWxlMS5jCTIgQXByIDIwMTIgMDY6MDk6MjQgLTAwMDAKKioq KioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEsMjIgLS0tLQorIC8qIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu CisgCisgICAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworIAorIHN0YXRpYyBpbnQKKyBhZGQgKGludCBhLCBpbnQgYikK KyB7CisgICByZXR1cm4gYSArIGI7CisgfQpJbmRleDogdGVzdHN1aXRlL2dk Yi5weXRob24vcHktb2JqZmlsZTIuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1vYmpmaWxlMi5j CmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHktb2JqZmlsZTIuYwoq KiogL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKLS0tIHRl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LW9iamZpbGUyLmMJMiBBcHIgMjAxMiAw NjowOToyNCAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0g MSwyMyAtLS0tCisgLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwg dGhlIEdOVSBkZWJ1Z2dlci4KKyAKKyAgICBDb3B5cmlnaHQgMjAxMiBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKyAgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgc3RhdGljIGludAorIHN1 YiAoaW50IGEsIGludCBiKQorIHsKKyAgIHJldHVybiBhIC0gYjsKKyB9Cisg CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1vYmpmaWxlMy5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LW9iamZpbGUzLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1vYmpmaWxlMy5jCioqKiAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMAotLS0gdGVzdHN1aXRlL2dkYi5weXRob24vcHktb2Jq ZmlsZTMuYwkyIEFwciAyMDEyIDA2OjA5OjI0IC0wMDAwCioqKioqKioqKioq KioqKgoqKiogMCAqKioqCi0tLSAxLDIzIC0tLS0KKyAvKiBUaGlzIHRlc3Rj YXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorIAorICAg IENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisg ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyAgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KyAKKyBzdGF0aWMgaW50CisgbXVsIChpbnQgYSwgaW50IGIpCisgeworICAg cmV0dXJuIGEgKiBiOworIH0KKyAKSW5kZXg6IE5FV1MKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjUwNQpkaWZmIC1jIC1wIC1yMS41MDUg TkVXUwoqKiogTkVXUwkyOCBNYXIgMjAxMiAyMTozMTo1NiAtMDAwMAkxLjUw NQotLS0gTkVXUwkyIEFwciAyMDEyIDA2OjA5OjI0IC0wMDAwCioqKioqKioq KioqKioqKgoqKiogMzIsMzcgKioqKgotLS0gMzIsNDEgLS0tLQogICAgKiog QSBuZXcgbWV0aG9kICdyZWZlcmVuY2VkX3ZhbHVlJyBvbiBnZGIuVmFsdWUg b2JqZWN0cyB3aGljaCBjYW4KICAgICAgIGRlcmVmZXJlbmNlIHBvaW50ZXIg YXMgd2VsbCBhcyBDKysgcmVmZXJlbmNlIHZhbHVlcy4KICAKKyAgICoqIEEg bmV3IG1ldGhvZCAnc3ltdGFicycgb24gZ2RiLk9iamZpbGUgb2JqZWN0cyB3 aGljaCByZXR1cm5zIHRoZQorICAgICAgbGlzdCBvZiBnZGIuU3ltdGFiIG9i amVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIG9iamVjdAor ICAgICAgZmlsZXMuCisgCiAgKiBHREJzZXJ2ZXIgbm93IHN1cHBvcnRzIHN0 ZGlvIGNvbm5lY3Rpb25zLgogICAgRS5nLiAoZ2RiKSB0YXJnZXQgcmVtb3Rl IHwgc3NoIG15aG9zdCBnZGJzZXJ2ZXIgLSBoZWxsbwogIAo= --20cf300fb10938f52f04bcac259a--