From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1RqyNL-0003Am-Bj for mharc-grub-devel@gnu.org; Fri, 27 Jan 2012 21:50:47 -0500 Received: from eggs.gnu.org ([140.186.70.92]:50950) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RqyNH-00039h-P3 for grub-devel@gnu.org; Fri, 27 Jan 2012 21:50:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RqyNG-0003oA-5X for grub-devel@gnu.org; Fri, 27 Jan 2012 21:50:43 -0500 Received: from spam1.wiktel.com ([69.89.207.151]:45700) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RqyNF-0003nx-TX for grub-devel@gnu.org; Fri, 27 Jan 2012 21:50:42 -0500 Received: from [172.16.0.253] (thief-pool2-121-14.mncable.net [24.225.121.14]) (authenticated bits=0) by spam1.wiktel.com (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id q0S2oZfj023711; Fri, 27 Jan 2012 20:50:36 -0600 Subject: Re: [Patch] Robustly search for ZFS labels & uberblocks From: Richard Laager To: Zachary Bedell In-Reply-To: References: <4E838F85.6060001@gmail.com> <1326973014.6387.224.camel@watermelon.coderich.net> <4F1C1ABD.1010303@gmail.com> Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-azAjpNfcS7Z7qqFIBlKS" Date: Fri, 27 Jan 2012 20:50:35 -0600 Message-ID: <1327719035.9477.68.camel@watermelon.coderich.net> Mime-Version: 1.0 X-Mailer: Evolution 2.32.2 X-bounce-key: wiktel.com-1; rlaager@wiktel.com; 1327719036; 00d0lYQ1/9HskGCgE12yjZ3BCcI; X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 69.89.207.151 Cc: grub-devel@gnu.org X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Jan 2012 02:50:45 -0000 --=-azAjpNfcS7Z7qqFIBlKS Content-Type: multipart/mixed; boundary="=-+ZlRM2fkOBIDAAc5Uhg1" --=-+ZlRM2fkOBIDAAc5Uhg1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2012-01-27 at 14:04 -0500, Zachary Bedell wrote: > I've had to forward port the other changes necessary to support build on = Linux. Attached is the work I've done on this front. This includes the "allow spaces in zpools" patch I previously submitted to grub-devel. And, the changes in 10_linux.in are from dajhorn's Ubuntu packages. I have not yet made anything boot on RAIDZ. I don't know if that's caused by this patch. If the changes to getroot.c are accepted upstream, I'd recommend moving find_device_from_pool() higher up in that file, rather than using the prototype, but the prototype keeps the patch smaller for now. --=20 Richard --=-+ZlRM2fkOBIDAAc5Uhg1 Content-Disposition: attachment; filename="zfs-on-linux.patch" Content-Type: text/x-patch; name="zfs-on-linux.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 SW5kZXg6IGdydWIvdXRpbC9ncnViLmQvMTBfbGludXguaW4NCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBncnVi Lm9yaWcvdXRpbC9ncnViLmQvMTBfbGludXguaW4JMjAxMi0wMS0yNCAyMzo0NDoxMC41MzA1OTEw MDAgLTA2MDANCisrKyBncnViL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCTIwMTItMDEtMjQgMjM6 NDQ6MTAuNzA2OTI4MDAwIC0wNjAwDQpAQCAtNTYsOCArNTYsMTAgQEANCiAgIExJTlVYX1JPT1Rf REVWSUNFPVVVSUQ9JHtHUlVCX0RFVklDRV9VVUlEfQ0KIGZpDQogDQotaWYgWyAieGAke2dydWJf cHJvYmV9IC0tZGV2aWNlICR7R1JVQl9ERVZJQ0V9IC0tdGFyZ2V0PWZzIDI+L2Rldi9udWxsIHx8 IHRydWVgIiA9IHhidHJmcyBdIFwNCi0gICAgfHwgWyAieGBzdGF0IC1mIC0tcHJpbnRmPSVUIC9g IiA9IHhidHJmcyBdOyB0aGVuDQorTElOVVhfUk9PVF9GUz1gJHtncnViX3Byb2JlfSAtLWRldmlj ZSAke0dSVUJfREVWSUNFfSAtLXRhcmdldD1mcyAyPi9kZXYvbnVsbCB8fCB0cnVlYA0KK0xJTlVY X1JPT1RfU1RBVD1gc3RhdCAtZiAtLXByaW50Zj0lVCAvIHx8IHRydWVgDQorDQoraWYgWyAieCR7 TElOVVhfUk9PVF9GU30iID0geGJ0cmZzIC1vICJ4JHtMSU5VWF9ST09UX1NUQVR9IiA9IHhidHJm cyBdOyB0aGVuDQogICByb290c3Vidm9sPSJgbWFrZV9zeXN0ZW1fcGF0aF9yZWxhdGl2ZV90b19p dHNfcm9vdCAvYCINCiAgIHJvb3RzdWJ2b2w9IiR7cm9vdHN1YnZvbCMvfSINCiAgIGlmIFsgIngk e3Jvb3RzdWJ2b2x9IiAhPSB4IF07IHRoZW4NCkBAIC03Niw2ICs3OCwxMCBAQA0KICAgICBHUlVC X0NNRExJTkVfRVhUUkE9IiRHUlVCX0NNRExJTkVfRVhUUkEgY3Jhc2hrZXJuZWw9Mzg0TS0yRzo2 NE0sMkctOjEyOE0iDQogZmkNCiANCitpZiBbICJ4JHtMSU5VWF9ST09UX0ZTfSIgPSB4emZzIF07 IHRoZW4NCisgIEdSVUJfQ01ETElORV9MSU5VWD0iYm9vdD16ZnMgXCRib290ZnMgJHtHUlVCX0NN RExJTkVfTElOVVh9Ig0KK2ZpDQorDQogbGludXhfZW50cnkgKCkNCiB7DQogICBvcz0iJDEiDQpA QCAtMTE0LDYgKzEyMCwxMiBAQA0KICAgICBmaQ0KICAgICBwcmludGYgJyVzXG4nICIke3ByZXBh cmVfYm9vdF9jYWNoZX0iDQogICBmaQ0KKyAgaWYgWyAieCR7TElOVVhfUk9PVF9GU30iID0geHpm cyBdOyB0aGVuDQorICAgIGNhdCA8PCBFT0YNCisJaW5zbW9kIHpmc2luZm8NCisJemZzLWJvb3Rm cyAoXCRyb290KSBib290ZnMNCitFT0YNCisgIGZpDQogICBpZiBbICJ4JDUiICE9ICJ4cXVpZXQi IF07IHRoZW4NCiAgICAgbWVzc2FnZT0iJChnZXR0ZXh0X3ByaW50ZiAiTG9hZGluZyBMaW51eCAl cyAuLi4iICR7dmVyc2lvbn0pIg0KICAgICBjYXQgPDwgRU9GDQpJbmRleDogZ3J1Yi91dGlsL2dl dHJvb3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdydWIub3JpZy91dGlsL2dldHJvb3QuYwkyMDEyLTAx LTI0IDIzOjQ0OjA0LjEwNTc3MjAwMCAtMDYwMA0KKysrIGdydWIvdXRpbC9nZXRyb290LmMJMjAx Mi0wMS0yNyAyMDo0ODo1MC44NzUwMDYwMDAgLTA2MDANCkBAIC01Miw2ICs1Miw4IEBADQogI2Vu ZGlmDQogDQogI2lmZGVmIF9fbGludXhfXw0KKyMgaW5jbHVkZSA8c3RkaW8uaD4NCisjIGluY2x1 ZGUgPG1udGVudC5oPg0KICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogIyBpbmNsdWRlIDxzeXMv d2FpdC5oPg0KICNlbmRpZg0KQEAgLTExNSw2ICsxMTcsOCBAQA0KICAgcmV0dXJuIHBhdGg7DQog fQ0KIA0KK3N0YXRpYyBjaGFyICpmaW5kX2RldmljZV9mcm9tX3Bvb2wgKGNvbnN0IGNoYXIgKnBv b2xuYW1lKTsNCisNCiAjaWZkZWYgX19saW51eF9fDQogDQogI2RlZmluZSBFU0NBUEVEX1BBVEhf TUFYICg0ICogUEFUSF9NQVgpDQpAQCAtMjYzLDcgKzI2NywzMiBAQA0KICAgICAgIGlmICghKmVu dHJpZXNbaV0uZGV2aWNlKQ0KIAljb250aW51ZTsNCiANCi0gICAgICByZXQgPSBzdHJkdXAgKGVu dHJpZXNbaV0uZGV2aWNlKTsNCisgICAgICBpZiAoc3RyY21wIChlbnRyaWVzW2ldLmZzdHlwZSwg InpmcyIpID09IDApDQorCXsNCisJICBjaGFyICpwb29sbmFtZSA9IGVudHJpZXNbaV0uZGV2aWNl Ow0KKwkgIGNoYXIgKnBvb2xuYW1lX2kgPSBwb29sbmFtZTsNCisJICBjaGFyICpwb29sbmFtZV9q ID0gcG9vbG5hbWU7DQorCSAgLyogUmVwbGFjZSBcMDQwIHdpdGggYSBzcGFjZS4gIEN1dCBhdCB0 aGUgZmlyc3Qgc2xhc2guICovDQorCSAgd2hpbGUgKCpwb29sbmFtZV9qKQ0KKwkgICAgew0KKwkg ICAgICBpZiAoKnBvb2xuYW1lX2ogPT0gJy8nKQ0KKwkJYnJlYWs7DQorCSAgICAgIGlmIChzdHJu Y21wIChwb29sbmFtZV9qLCAiXFwwNDAiLCA0KSA9PSAwKQ0KKwkJew0KKwkJICAqcG9vbG5hbWVf aSA9ICcgJzsNCisJCSAgcG9vbG5hbWVfaSsrOw0KKwkJICBwb29sbmFtZV9qICs9IDQ7DQorCQkg IGNvbnRpbnVlOw0KKwkJfQ0KKwkgICAgICAqcG9vbG5hbWVfaSA9ICpwb29sbmFtZV9qOw0KKwkg ICAgICBwb29sbmFtZV9pKys7DQorCSAgICAgIHBvb2xuYW1lX2orKzsNCisJICAgIH0NCisJICAq cG9vbG5hbWVfaSA9ICdcMCc7DQorCSAgcmV0ID0gZmluZF9kZXZpY2VfZnJvbV9wb29sIChwb29s bmFtZSk7DQorCX0NCisgICAgICBlbHNlDQorCXJldCA9IHN0cmR1cCAoZW50cmllc1tpXS5kZXZp Y2UpOw0KICAgICAgIGlmIChyZWxyb290KQ0KIAkqcmVscm9vdCA9IHN0cmR1cCAoZW50cmllc1tp XS5lbmNfcm9vdCk7DQogICAgICAgYnJlYWs7DQpAQCAtMjgwLDEzICszMDksMjUgQEANCiBzdGF0 aWMgY2hhciAqDQogZmluZF9yb290X2RldmljZV9mcm9tX2xpYnpmcyAoY29uc3QgY2hhciAqZGly KQ0KIHsNCi0gIGNoYXIgKmRldmljZSA9IE5VTEw7DQorICBjaGFyICpkZXZpY2U7DQogICBjaGFy ICpwb29sbmFtZTsNCiAgIGNoYXIgKnBvb2xmczsNCiANCiAgIGdydWJfZmluZF96cG9vbF9mcm9t X2RpciAoZGlyLCAmcG9vbG5hbWUsICZwb29sZnMpOw0KICAgaWYgKCEgcG9vbG5hbWUpDQogICAg IHJldHVybiBOVUxMOw0KKyAgaWYgKHBvb2xmcykNCisgICAgZnJlZSAocG9vbGZzKTsNCisNCisg IGRldmljZSA9IGZpbmRfZGV2aWNlX2Zyb21fcG9vbChwb29sbmFtZSk7DQorICBmcmVlKHBvb2xu YW1lKTsNCisgIHJldHVybiBkZXZpY2U7DQorfQ0KKw0KK3N0YXRpYyBjaGFyICoNCitmaW5kX2Rl dmljZV9mcm9tX3Bvb2wgKGNvbnN0IGNoYXIgKnBvb2xuYW1lKQ0KK3sNCisgIGNoYXIgKmRldmlj ZSA9IE5VTEw7DQogDQogI2lmIGRlZmluZWQoSEFWRV9MSUJaRlMpICYmIGRlZmluZWQoSEFWRV9M SUJOVlBBSVIpDQogICB7DQpAQCAtMzU3LDcgKzM5OCw3IEBADQogICAgIGNoYXIgY2tzdW1bMjU3 XSwgbm90ZXNbMjU3XTsNCiAgICAgdW5zaWduZWQgaW50IGR1bW15Ow0KIA0KLSAgICBjbWQgPSB4 YXNwcmludGYgKCJ6cG9vbCBzdGF0dXMgJXMiLCBwb29sbmFtZSk7DQorICAgIGNtZCA9IHhhc3By aW50ZiAoInpwb29sIHN0YXR1cyBcIiVzXCIiLCBwb29sbmFtZSk7DQogICAgIGZwID0gcG9wZW4g KGNtZCwgInIiKTsNCiAgICAgZnJlZSAoY21kKTsNCiANCkBAIC0zODIsNyArNDIzLDEwIEBADQog CQlzdCsrOw0KIAkgICAgICBicmVhazsNCiAJICAgIGNhc2UgMToNCi0JICAgICAgaWYgKCFzdHJj bXAgKG5hbWUsIHBvb2xuYW1lKSkNCisJICAgICAgLyogVXNlIHN0cm5jbXAoKSBiZWNhdXNlIHBv b2xuYW1lIGNhbiB0ZWNobmljYWxseSBoYXZlIHRyYWlsaW5nDQorCSAgICAgICAgIHNwYWNlcywg d2hpY2ggdGhlIHNzY2FuZigpIGFib3ZlIHdpbGwgbm90IGNhdGNoLiAgU2luY2Ugd2UndmUNCisJ ICAgICAgICAgYXNrZWQgYWJvdXQgdGhpcyBwb29sIHNwZWNpZmljYWxseSwgdGhpcyBzaG91bGQg YmUgc2FmZS4gKi8NCisJICAgICAgaWYgKCFzdHJuY21wIChuYW1lLCBwb29sbmFtZSwgc3RybGVu KG5hbWUpKSkNCiAJCXN0Kys7DQogCSAgICAgIGJyZWFrOw0KIAkgICAgY2FzZSAyOg0KQEAgLTM5 NSwxNyArNDM5LDcxIEBADQogCQ0KIAlmcmVlIChsaW5lKTsNCiAgICAgICB9DQorDQorI2lmZGVm IF9fbGludXhfXw0KKyAgICAvKiBUaGUgbmFtZSByZXR1cm5lZCBieSB6cG9vbCBpc24ndCBuZWNl c3NhcmlseSBkaXJlY3RseSB1bmRlciAvZGV2LiAqLw0KKyAgICB7DQorICAgICAgY29uc3QgY2hh ciAqZGlza19uYW1pbmdfc2NoZW1lc1tdID0gew0KKwkiL2Rldi9kaXNrL2J5LWlkLyVzIiwNCisJ Ii9kZXYvZGlzay9ieS1wYXRoLyVzIiwNCisJIi9kZXYvZGlzay9ieS11dWlkLyVzIiwNCisJIi9k ZXYvZGlzay9ieS1wYXJ0dXVpZC8lcyIsDQorCSIvZGV2L2Rpc2svYnktbGFiZWwvJXMiLA0KKwki L2Rldi9kaXNrL2J5LXBhcnRsYWJlbC8lcyIsDQorCSIvZGV2LyVzIiwNCisJTlVMTA0KKyAgICAg IH07DQorICAgICAgY29uc3QgY2hhciAqKmRpc2tfbmFtaW5nX3NjaGVtZSA9IGRpc2tfbmFtaW5n X3NjaGVtZXM7DQorDQorICAgICAgZm9yICg7ICpkaXNrX25hbWluZ19zY2hlbWUgOyBkaXNrX25h bWluZ19zY2hlbWUrKykNCisJew0KKwkgIHN0cnVjdCBzdGF0IHNiOw0KKwkgIGRldmljZSA9IHhh c3ByaW50ZiAoKmRpc2tfbmFtaW5nX3NjaGVtZSwgbmFtZSk7DQorCSAgaWYgKHN0YXQgKGRldmlj ZSwgJnNiKSA9PSAwKQ0KKwkgICAgew0KKwkgICAgICBjaGFyICpyZWFsX2RldmljZTsNCisJICAg ICAgY29uc3QgY2hhciAqYzsNCisJICAgICAgY2hhciAqZmlyc3RfcGFydGl0aW9uOw0KKw0KKwkg ICAgICAvKiBSZXNvbHZlIHRoZSBzeW1saW5rIHRvIHNvbWV0aGluZyBsaWtlIC9kZXYvc2RhLiAq Lw0KKwkgICAgICByZWFsX2RldmljZSA9IHJlYWxwYXRoIChkZXZpY2UsIE5VTEwpOw0KKwkgICAg ICBmcmVlIChkZXZpY2UpOw0KKw0KKwkgICAgICAvKiBJdCBlbmRzIGluIGEgbnVtYmVyOyBhc3N1 bWUgaXQncyBhIHBhcnRpdGlvbiBhbmQgc3RvcC4gKi8NCisJICAgICAgZm9yIChjID0gcmVhbF9k ZXZpY2UgOyAqKGMrMSkgOyBjKyspOw0KKwkgICAgICBpZiAoKmMgPj0gJzAnICYmICpjIDw9ICc5 JykNCisJCXsNCisJCSAgZGV2aWNlID0gcmVhbF9kZXZpY2U7DQorCQkgIGJyZWFrOw0KKwkJfQ0K Kw0KKwkgICAgICAvKiBPdGhlcndpc2UsIGl0IG1pZ2h0IGJlIGEgcGFydGl0aW9uZWQgd2hvbGVk aXNrIHZkZXYuICovDQorCSAgICAgIGZpcnN0X3BhcnRpdGlvbiA9IHhhc3ByaW50ZiAoIiVzMSIs IHJlYWxfZGV2aWNlKTsNCisJICAgICAgaWYgKHN0YXQgKGZpcnN0X3BhcnRpdGlvbiwgJnNiKSA9 PSAwKQ0KKwkJew0KKwkJICBmcmVlIChyZWFsX2RldmljZSk7DQorCQkgIGRldmljZSA9IGZpcnN0 X3BhcnRpdGlvbjsNCisJCSAgYnJlYWs7DQorCQl9DQorDQorCSAgICAgIC8qIFRoZSBkZXZpY2Ug aXMgbm90IHBhcnRpdGlvbmVkLiAqLw0KKwkgICAgICBmcmVlIChkZXZpY2UpOw0KKwkgICAgICBk ZXZpY2UgPSByZWFsX2RldmljZTsNCisJICAgICAgYnJlYWs7DQorCSAgICB9DQorCSAgZnJlZSAo ZGV2aWNlKTsNCisJICBkZXZpY2UgPSBOVUxMOw0KKwl9DQorICAgIH0NCisjZWxzZQ0KICAgICBk ZXZpY2UgPSB4YXNwcmludGYgKCIvZGV2LyVzIiwgbmFtZSk7DQorI2VuZGlmIC8qICFfX2xpbnV4 X18gKi8NCiANCiAgZmFpbDoNCiAgICAgcGNsb3NlIChmcCk7DQogICB9DQogI2VuZGlmDQogDQot ICBmcmVlIChwb29sbmFtZSk7DQotICBpZiAocG9vbGZzKQ0KLSAgICBmcmVlIChwb29sZnMpOw0K LQ0KICAgcmV0dXJuIGRldmljZTsNCiB9DQogDQpAQCAtNzA4LDEwICs4MDYsMTAgQEANCiAjaWZk ZWYgX19saW51eF9fDQogICBpZiAoIW9zX2RldikNCiAgICAgb3NfZGV2ID0gZ3J1Yl9maW5kX3Jv b3RfZGV2aWNlX2Zyb21fbW91bnRpbmZvIChkaXIsIE5VTEwpOw0KLSNlbmRpZiAvKiBfX2xpbnV4 X18gKi8NCi0NCisjZWxzZQ0KICAgaWYgKCFvc19kZXYpDQogICAgIG9zX2RldiA9IGZpbmRfcm9v dF9kZXZpY2VfZnJvbV9saWJ6ZnMgKGRpcik7DQorI2VuZGlmIC8qICFfX2xpbnV4X18gKi8NCiAN CiAgIGlmIChvc19kZXYpDQogICAgIHsNCkBAIC0xNDg0LDYgKzE1ODIsMzcgQEANCiAJICAgIGJy ZWFrOw0KIAkgIH0NCiAgICAgICB9DQorDQorICAgIGZjbG9zZSAobW50dGFiKTsNCisgIH0NCisj ZWxpZiBkZWZpbmVkKF9fbGludXhfXykNCisgIHsNCisgICAgc3RydWN0IHN0YXQgc3Q7DQorICAg IHN0cnVjdCBtbnRlbnQgKm1udDsNCisgICAgRklMRSAqbW50dGFiOw0KKw0KKyAgICBpZiAoc3Rh dCAoZGlyLCAmc3QpICE9IDApDQorICAgICAgcmV0dXJuOw0KKw0KKyAgICBtbnR0YWIgPSBmb3Bl biAoIi9wcm9jL21vdW50cyIsICJyIik7DQorICAgIGlmICghIG1udHRhYikNCisgICAgICBtbnR0 YWIgPSBmb3BlbiAoIi9ldGMvbXRhYiIsICJyIik7DQorICAgIGlmICghIG1udHRhYikNCisgICAg ICByZXR1cm47DQorDQorICAgIHdoaWxlICgobW50ID0gZ2V0bW50ZW50IChtbnR0YWIpKSAhPSBO VUxMKQ0KKyAgICAgIHsNCisJc3RydWN0IHN0YXQgbW50X3N0Ow0KKwlpZiAoc3RyY21wIChtbnQt Pm1udF90eXBlLCAiemZzIikgIT0gMCkNCisJICBjb250aW51ZTsNCisJaWYgKHN0YXQgKG1udC0+ bW50X2RpciwgJm1udF9zdCkgIT0gMCkNCisJICBjb250aW51ZTsNCisJaWYgKG1udF9zdC5zdF9k ZXYgPT0gc3Quc3RfZGV2KQ0KKwkgIHsNCisJICAgICpwb29sbmFtZSA9IHhzdHJkdXAgKG1udC0+ bW50X2ZzbmFtZSk7DQorCSAgICBicmVhazsNCisJICB9DQorICAgICAgfQ0KIA0KICAgICBmY2xv c2UgKG1udHRhYik7DQogICB9DQo= --=-+ZlRM2fkOBIDAAc5Uhg1-- --=-azAjpNfcS7Z7qqFIBlKS Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iEYEABECAAYFAk8jYmwACgkQbfU6uV4fG863dACgxYuxQMics5FPjYpxcgJgVpws mv4AoKxKGKG5bG0gVNOolFdcieXM2FT2 =2DxA -----END PGP SIGNATURE----- --=-azAjpNfcS7Z7qqFIBlKS--