Index: externals/Harpy/Tools/sign.eagle ================================================================== --- externals/Harpy/Tools/sign.eagle +++ externals/Harpy/Tools/sign.eagle @@ -16,14 +16,14 @@ proc usage { error } { if {[string length $error] > 0} then {puts stdout $error} puts stdout "usage:\ -[file tail [info nameofexecutable]]\ +[file tail [getShellExecutableName]]\ [file tail [info script]] \[vendor\] \[embed\]\ \[duration\] \[entityType\] \[encoding\] \[publicKeyFile\]\ -\[privateKeyFile\]" +\[privateKeyFile\] \[importFirst\]" # # NOTE: Indicate to the caller, if any, that we have failed. # exit 1 @@ -152,11 +152,11 @@ "removed embedded certificate from file \"" $fileName \"] } } } -if {[llength $argv] >= 1 && [llength $argv] <= 8} then { +if {[llength $argv] >= 1 && [llength $argv] <= 9} then { # # NOTE: This tool requires Eagle. # package require Eagle @@ -319,10 +319,19 @@ # directory (which may not actually exist). # set publicKeyFile EagleEnterprisePluginRootPublic.snk } + # + # NOTE: Do we want to import the existing certificate first? + # + if {[llength $argv] >= 9} then { + set importFirst [lindex $argv 8] + } else { + set importFirst false; # TODO: Good default? + } + # # NOTE: If the configuration file exists, load it now. # set configFileName [file join $path sign.settings.eagle] if {[file exists $configFileName]} then {source $configFileName} @@ -408,11 +417,12 @@ # setting the Id as it should already be set correctly. # if {[certificate sign -encoding $encoding -settimestamp \ -setkey $certificate $privateKey] ne "SignedOk"} then { error [appendArgs \ - "failed to create signature for " $fileType " \"" $fileName \"] + "failed to create updated signature for " $fileType \ + " \"" $fileName \"] } # # NOTE: Attempt to re-verify the license certificate file. # @@ -441,12 +451,16 @@ set certificateFile [appendArgs $fileName .harpy] # # NOTE: Create an empty certificate object. # - set certificate [object create -alias \ - Licensing.Components.Public.Certificate] + if {$importFirst} then { + set certificate [certificate import -alias $certificateFile] + } else { + set certificate [object create -alias \ + Licensing.Components.Public.Certificate] + } # # HOOK: Post-certificate object creation (create). # catch {certificate_hook phase1} @@ -492,16 +506,26 @@ # # NOTE: Attempt to sign the embedded file certificate and place # the Id, timestamp, public key token, and signature bytes # into the certificate we created above. # - if {[certificate sign -encoding $encoding -setid -settimestamp \ - -setkey -hashflags {+Basic Embedded} $certificate \ - $privateKey] ne "SignedOk"} then { - error [appendArgs \ - "failed to create embedded signature for " $fileType " \"" \ - $fileName \"] + if {$importFirst} then { + if {[certificate sign -encoding $encoding \ + -setkey -hashflags {+Basic Embedded} $certificate \ + $privateKey] ne "SignedOk"} then { + error [appendArgs \ + "failed to create updated embedded signature for " \ + $fileType " \"" $fileName \"] + } + } else { + if {[certificate sign -encoding $encoding -setid -settimestamp \ + -setkey -hashflags {+Basic Embedded} $certificate \ + $privateKey] ne "SignedOk"} then { + error [appendArgs \ + "failed to create embedded signature for " $fileType \ + " \"" $fileName \"] + } } # # NOTE: Sanity check that the embedded file certificate we just # created validates properly. @@ -508,12 +532,12 @@ # if {[certificate verify -encoding $encoding \ -hashflags {+Basic Embedded} $certificate \ $publicKey] ne "VerifiedOk"} then { error [appendArgs \ - "failed to verify embedded signature for " $fileType " \"" \ - $fileName \"] + "failed to verify embedded signature for " $fileType \ + " \"" $fileName \"] } } else { # # HOOK: Post-certificate property setup (non-embedded). # @@ -522,24 +546,37 @@ # # NOTE: Attempt to sign the data file and place the Id, timestamp, # public key token, and signature bytes into the blank # certificate we created above. # - if {[certificate signfile -encoding $encoding -setid -settimestamp \ - -setkey $certificate $privateKey $fileName] ne "SignedOk"} then { - error [appendArgs \ - "failed to create signature for " $fileType " \"" $fileName \"] + if {$importFirst} then { + if {[certificate signfile -encoding $encoding \ + -setkey $certificate $privateKey \ + $fileName] ne "SignedOk"} then { + error [appendArgs \ + "failed to create updated signature for " $fileType \ + " \"" $fileName \"] + } + } else { + if {[certificate signfile -encoding $encoding -setid \ + -settimestamp -setkey $certificate $privateKey \ + $fileName] ne "SignedOk"} then { + error [appendArgs \ + "failed to create signature for " $fileType \ + " \"" $fileName \"] + } } # # NOTE: Sanity check that the data file certificate we just # created validates properly. # if {[certificate verifyfile -encoding $encoding \ $certificate $publicKey $fileName] ne "VerifiedOk"} then { error [appendArgs \ - "failed to verify signature for " $fileType " \"" $fileName \"] + "failed to verify signature for " $fileType \ + " \"" $fileName \"] } } } # @@ -604,14 +641,21 @@ writeCertificateFile $certificateFile $data # # NOTE: Show that we signed it. # - puts stdout [appendArgs \ - "signed " $fileType " \"" $fileName "\" (as \"" $entityType \ - "\") using encoding \"" $encoding "\" with key " [keypair token \ - $privateKeyFile]] + if {$importFirst} then { + puts stdout [appendArgs \ + "re-signed " $fileType " \"" $fileName "\" (as \"" $entityType \ + "\") using encoding \"" $encoding "\" with key " [keypair token \ + $privateKeyFile]] + } else { + puts stdout [appendArgs \ + "signed " $fileType " \"" $fileName "\" (as \"" $entityType \ + "\") using encoding \"" $encoding "\" with key " [keypair token \ + $privateKeyFile]] + } # # NOTE: Do we need to embed the certificate at the end of the script # file? # @@ -663,15 +707,16 @@ # # NOTE: Play nice and cleanup all the variables we created during the # whole the signing process. # unset -nocomplain fileName vendor embed duration entityType encoding \ - privateKeyFile publicKeyFile configFileName embedSpacing embedPrefix \ - embedSuffix publicKey privateKey shouldEmbed fileType certificate \ - certificateFile data xmlNs xmlNsXsi xmlNsXsd spaces lines line + privateKeyFile publicKeyFile importFirst configFileName embedSpacing \ + embedPrefix embedSuffix publicKey privateKey shouldEmbed fileType \ + certificate certificateFile data xmlNs xmlNsXsi xmlNsXsd spaces \ + lines line if {[info exists path_set]} then { unset -nocomplain path path_set } } else { usage "" } Index: externals/Harpy/Tools/sign.eagle.asc ================================================================== --- externals/Harpy/Tools/sign.eagle.asc +++ externals/Harpy/Tools/sign.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJd5YqhAAoJEFAslq9JXcLZkMAQAJMlJS7h8MmRVvVagbGxiX15 -tBd5El5wbDefsqU2rhHzl01i6UBN2rE813Qz5iWaPOa83WaXYMU9ZFBaAynBu9mt -jeEp5LgIB5yU4smQihyQQ/7O4zuUrWT3dLCnQpFjyAQ+274VcHwOl1y/i2M5Yr/b -xIg0NDlXCcgaCtOy7XcucguKNDKGexVWhI15p3j8A8Rz41oh764hQpXzyGNXvqHt -s3ZIqgG6HuZZ3LPNV1Dsi+ZjbtLaEFzWBbJfm444V73saUHqVgRXeGpHpmjNgkak -6r4a4sFBmvP8uLqem0fyQRivugIFukypT9SZNKsTmEZxRXGXhkdXRUTzuSqWp2/E -RIoyjTPYyVc5uc1hDPtPaUeR3XjhdQt9wMkyOgKCNdakrHxokdWz/owJz19ifxXo -0YdPe+nSJHvOaifGzK8dlG6B41kUaPT8OyZm1eI4CRIIehxbyFaFA+tMv1I6cv6z -9iaXhGjJfIL1TKQeGYaRobXn8t8H4n+JUGwvXvkMm2WP2jP0KDj4tj7e8oIZe/Ml -87XERrP2QFQFFvg6iBH7ESlw3VcSX+nFO5xArrazBi4iq2nhkF50fU/DOyzpHDxM -n0EucXE7fnU2pD8XZ7THRSDceFiSVcENb9U0HiZImUu1c+Wpk5qvInjaj8b2O3ld -FRJLBLS4qe8bYWFOTpx6 -=LYOk +iQIcBAABCAAGBQJfq3ikAAoJEFAslq9JXcLZehoQAMNid73RvDNwSXkwS7xlOyzs +guTzPhoqOdbaVcQmMrDnpxnVOPF1yL4tAghjPhuGG+IRN3sCFfic+BzuP2qQT7Du +ejMLjSjoz60/potmVwBru8Iv5QyoyD/BrL2aF3mJnRBUTffv0dcu7xSwQuOLBw6z +2XMnKOKovvx7z9Z8H1MV/Fr3iQIsJaN8JM1MTL7D75MQ7BTFLz2EM6K4dE7iidO8 +PzHuyayNbWo3IDRqaVSSp/TFECUbqSqPMe7yhpvnh11i2te4mcMbswuqKWDPLD0S +Kb2wIptV+apOLWNVeNdrbyA2qC0hM40CGzTvzgxjSXFEM8VgMrcBJCyELTn0n3yw +XGkz5nAdlWdvl0qB2Cih/wNKmMYosFxB1Xqd0IC+EmPBhfGwvWTv8gflfEI9vk1K +nEHnfNB6pRZZfE7cqi1ydOMooVNCyeY5o784VwcCujz+/lIyFxaub/H2FtO7H5XU +aYiPPdo2YD4sOfSVyq74J/j8YEtnZgHmz5XKn9dhKr7Vj+x52wuskli91Yy6X9Ig +fx/ekYT/CUS06+y9fTZ1rTwfx//Emsx/znZopzz1pnRud7M26U3+kQzUeCtaQIZ4 +vkR/qQhaXfY93J0TEGUbAzlmZZmq/ilkGm1N4rKs5lRulJQEnzfyxQRJyEqUEDxQ +OCAjCnrB+4jZbdz35y5Z +=VGbj -----END PGP SIGNATURE----- Index: externals/Harpy/Tools/sign.eagle.harpy ================================================================== --- externals/Harpy/Tools/sign.eagle.harpy +++ externals/Harpy/Tools/sign.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - da97b56f-97d9-499e-b895-6e069ffbed53 + aeb64257-f1ab-4ff0-8c27-534ea397c772 SHA512 Script - 2019-12-02T22:04:17.6528054Z + 2020-10-18T03:10:28.0680987Z -1.00:00:00 0x9559f6017247e3e2 - lqN//aRBH4p0IJM36T4uF2pObzOjjkHUidGL2uuagW/znWb5XumoBV3TOTn5Oa2/pZx70WI+yUK7 - vyfO+JYGXZsPeA8Au+iAH+egwWhlLeSIkw6G1gSuWxaQvjmOg/cRSGvex18GFkjhTD7jmdOlaFeg - qOXXqN13TtVcsjSdhOSvbztxTz0iQ9albgeWRFVXnThTnrJULps/e4AdVgLZvu27JVpMa5AWFhqm - 8bN2iESS665DqWZr1SsERPe/Og+cQw5pPn5rIMfQw6ebtm0pqhT6spxWd4sl40dDy+ILOZlsRofd - 5TKZM1OdbWOELphj+bcBHtJsykq2rGCjIS6mDLY5NvctEVQHPvH7BDGq9WOMXswfic2T3xbJQIrp - lQh35Rhu5mu//m7SxXlXE7lyQkHOH3/OzyFwZ0wfU45VA/OuR3igI0CW0kgZB7UwXfry9c0tT2t3 - 3TViKsSQW0GZ5FqKZxTGlQW84IKTfZWXRoq9aEHwecKV7wlxxUx5l8atIJcEKGA0t9WjV4WLHZe0 - m1dRaUCAZDZsNAqnop3Cvq/RKwUbbDOPLTL0UTusjwSiUHTP7rJm1ef3B+rWzoKYglALA/5lplAf - h1pBS6yzm4yW5slS5mYHhBQOPAswa1ulYve6HO7QWuTxBEOjq4o0DLZ6dvLEuWDEmDd4oOyjOL6U - NOi4/zWgCcmVR1bVK2JU3+QhFQb+zRHyYZz+tQ32scgPQP8HTw2px877bGF/liCjt1EQJX3k7L6r - MY8uRQcQULQ3C1jarrB9eEjnOcB6cgUZCILfoFB3lJfsyq9S9zPG90476NkBi4BGc+bTPXx/8tgm - vsxVTNbTFzwyvGkdBM3qYxnFRDr+3cJDHU+2yQwGouXBQmEWpCxZHhUQqg1qK5ExFL4PSGfgkyvZ - IdQwX0OJVENBuuLynCNdFjld4zmAc+rARtsDjvMZnL04KdN5gFt7K5mxNSrUV+8fo2tbNi4gQNXj - rUqtgyku80/wfjeJHIZR7kbosuIlO84UK22sRFnTepqJxTVbagn/lyloKVrUV7AMhLildEeoY0Jb - VWDkZ4BEhrTkKIDL4dkAiwoH7564uqFhhrXrOxDVJQ4BcSCq3isdUsLgrzWdWLBxDK1YmbPvxqsg - U1xx/PzboIRssSiuSBuEhjv4XeAwY+C8ECUhdR/bvHYaurApAO7vJptj7S7nwntFrCMHqzRbqx+O - CjSiowlbQbS03AoPhtYMyuJCD4JE7LDzD0+32SXbTwBUc8yHn0i6H0xcgbv0myVuRC0SjbIsPZ94 - tRkrslTRPUY5BA5ocFUdfKAs4zbksepQDXSAf/3N5OC1No/3HpJksoTxa6LyGE6ILWsEsf5dZBk9 - ShrD+t6pSG5rkC+MMhEnDypXOm86+sn8PHShsNRZI1LjSzx0k9ijM1Vbf7FFmB+HrTpr+FDdfngX - 4WTsoDbSF+Uf1F4zAfM33XZT+Ka6AfR2FzBbYWLXY0Pq44+3/I0ezE2CifsnYM+8PCAXISLmExmd - O6+9P9gcnmFboH2gXsU5jdY2BrIN/+MZqZO/CmLiexgVnAR+kcukrGZQ2WCXLOhM3twmXIOHAAAA - +d2oscGCqmuUsbVtgp6wSEvq88hLlqSs13o7j9l/4hAAmOBVmY67xGAhu+91Sk8nl7WFILyUrNzB - IhITq7rlGVMKTGnHMfHfk+IootxCDVeTT7k51QNAb93ZIsQl8302MD+QjkY61N69MWaFYR0RFSoH - HHc1rpj9h9WlmRFUR877csOZpnATeF+g53J+3PURSQ/I7M7pn4kcv0YT4Xjh3BgwiqsaWRJKawIV - +Es/i0LvWMXzRMGQUw/7PbYsEi3p7RHKCxyYmfOIaCMxLU7nj65AXWI+rnW2sjWGkcyuvu05ZApa - pGg1CSk/AJR3g6aR0vGOhMqdOirsLuIp1QYegwK3ftuwvDQLJrSHelzGTnJQVwvVRHPCtzmADBaT - vNbecFY/PDQGG2Wn+Qb1J0CD2ukIy0g69uTmwccbGrlAOOkJEf2VEnBDvUHxSTvLBP7KlBcMxK8A - PFCGotd/HoV9rTH905I/hHXUG4ewWpZ6hDEh2eY+F4kUp7Fv7Ju+I9hMTeSsTbv0ry+EEKnxPsyr - 4rDXG82pYTgQTihDCkVjOdAAUnuFgH6Tli9JsOghQeAaw8FJ29hplHa31ZxgYdSs7DK3I0++Qhl3 - N2qan920ZKaB2zs6LewDORR/jbNxPaAOt1OSFn+AOBlIHEVbaBdhyKgfnclpNiPxaX2fiSkDOtY4 - T0RnOq18RJe8h77rPg9wuA5EnaEFeLUlET1XCZGGZ1V67b7p2m7ouH5CCvJA6RcAfE9JmngAt50a - LUc0gHFEGJqfwn1xPH7xPC91YPxnCuemGmM5v7NeYO4huVBuD92P8YswPAr6hkU9KLRR+9g5bE5L - /MckATSuTamc81qzQiDqbpENIw9PwcifpMNMxshl1a0xbtTCdkCAQKwQgYort8Cix53fApoSQz2d - ABx6iRYJox7zjvvV2mCH/Rxv2nZpsFj03Etqz/po/EYGjK3q8374RcRt/BtAw1QrW+xIzqG7EcBm - moUbQme+3r7K5Y2Aw49WNvv0aD95VqAbgPrtCgN++ng80Cl038WwNbpdsYpTjaAauLenaGZ4IHuP - +SVncks7pYbz+uRM6I74xmsPvOJLd5jxQGxxSg2zGvo4s1ta12bxMiJUDm5zDMYh7agGb0A= + JBi+MRby4DJP/AB6SMFSDjzalhBnFantl+XyAWa2wvVAMs8V73ea/ky8BVAxYKLBJG/qLKxnqS2+ + TZVbML+20o1ndSh6BkCd2T6S+xdurNxpToFrR3JvjCHdKSKzsAFIwXlhjpZOve9mYPLxcS4uuRmZ + pFINRLZ8tF77qd7oItOWyVvaGI7ETYnrukl/ybOBXqeMuD+V4zzijRuUOR5NrcZ8c2QWTmTBRcAG + DFYOafXUvHW0O2/cYZuWa11BMa8Ud56DwkHkWQhy4kKw7fkFqtn8+rhP/o3es5Jxsb6Q9CtmMPL3 + E5QMplds48r27v2lT7e727rdmkn+ezR4f/w9jF5y2YdDWUjvINENHI7GgQV8MRSPnBG7Lnx+lvn2 + K5zu3T3NvjSvAXRzJgSUpnqXzl3d5r8nRoBmZnXgT6yPTzzaRZZknxtUA+2dUFrdK7LD20XVnggk + 5ooGIgSrh55dV1d5VbkVKjcGrkwQMXUXKdbMTftoyfo/6rlFHCGMTvSjfTSBvEe9N7MpRYLIcW+C + Ri7oye6hpkbqLJt2EB8N5BRH4WS+VPHLAJpI1NH76v0aopBg9KyaoZ2Ilwz5u5mktDAsoKIdFHeo + F13Izi+AhWdJaiC8sDMc5jIaEhZiEqpJsOK0sd0al8KJ9pTsna850JE9+Lw/VDEI7ipHyunHhbt7 + UG6uSJ4/gACx5aXCnsMVZh6IILm95NgPGjTJxP/uZvC+TZ3bhRaRYv2VmmLC806ytnhxWhUIJu5x + WyiGEKLypbGKecj5iDXF7MakVX9Jl5pAVDY6LRT+S7hCRM/PyW/7F/C8XcctbGQSQT1q0LDE7ysY + hubj2/gRfzrk02v8oz/8jSbm9/MJMyYhAJHEhNao49ZSyZFNpnfxfW3NzbbPcqO2B6nRw/f753ds + jw09qE6IPo4BOri7VXZzj6QruMQbGYgOXJwy8fzRrgL8kgNaQXZasK24/fJh6MUawHa6M/p5LMbq + vs5ETqDvFS+s8Uqwi2SD6jF8+IpIEyzf3TP1SiB/ybhTyHqEHvULRR6nLg6IghCJEBLW4euv0dah + Zx4kwOfV/kztQc0Lo/nuo+oZQjflv9oAc140uKTv3kTOzg+796TD5HIsjdRMCyuE63z7s8mcHh0e + JkMhTycemlXMSla1sXTWsskzJmUTDFwFWOYlh18KISRe5r6odxsP8bpH/HIk4nD9g8+CfCl2ipN0 + zITig3yM1SW9wQSotsP17wiLDSkPtsmh/8jyZhX2zXtFJz2FCm60x8sKSF0wRrt9VD88Z2NiO6ry + mZHS/e9tqEdPwz9nRxje+ZkpM4iWb2Kw5KvzBcpEMqqdKEhOAYN4qjKksUNrsATXTYhyCMt883hz + Eh9MscoiY3H5mQ+JL8HjhjUMdKY1JuPxXDM8G3ZvCpCk21i7eZ4Bou1OLxubCxPKQxf9PxqUTuKW + 0w4Xk1290NtnsmEGSoQGNl5HRJ0rvxYPNMlS8wzDBaYc1ruGje7dbscgK89Yz4JrE6jdwHP1JmiT + RiLipV8KZwaOR18gtLDgo5x3DtTh280Bgm1uTvixCroNZJEn+KewHZrEwnq3esiVFESK+TAmaSEU + +Xans4lPFyGKxTiXnw27frPvtIdXTDtiBrA0IiUQzxf9O9Xdy18RzN9AEs3aI0qXFkWcRjk56VR4 + BinpZjHCr5q960U+hj7g5/d2Au0tlY5wHiryTZ2nbd5oF9r+bCsj4VVp6/sAN4fliwFaFcvyIGM7 + PUNp8m0DeM3rpkeAeIWvKdw7VVBsas/ZxicuSS/Z1qRAnsGSlZegOP/L3ozBs0qEZUml+u4QoTku + DLMd0WbYFcMVG64EtGjVTrpofBqjHz60H2YE+iTAfOyS+EW3hGTBcouKckfTiQsuQOdkA09aMOWs + xT/yY2w042044ELZhhWqvS80BNsHiGAarurn4PGU9ErnduAI99jUf1Qab0d8rCscHkW81RKdipU7 + 5EW09P8RfRk4udlOCIQ1Kd6U6s2bq+thpnoN2/BkYl4mFD5vG/hLekRtXZbuNB7MxR4172U7i6m6 + ybg6tWkN+SbASFsBVf1L+cJQahHdHstICeAzAxesUGxh6EB5g9R3wyH+kZ7NnzNQuatIo1Z/Ot+T + 9YC+DB638g9DhupVFqFJxXo1LpNxDObVkaD/naZP/Jv2A1IUwdFMiSMBpQpJcw0Q4By07sgH58Y8 + wOwuG+uSddc86lcJ8YfP90ZEKmJ0xBbN1n3N8uKBg88B8Ay1TjfHO3HOTO/wNckSC3cpTTtKaZ01 + YWhsBLYGkyP2/KNH5aHGPTaxLRM/VwoIzOprFNkB4qBL6arnxX1dKM3ZCIn4garbkyiw29u+FOdn + 9zwm5boFEum8yoeUbpAaswP39mMQw+zhKq4UO57MOPHegxOnhcfArL30sB9png7jr/VUEgi21gLc + 69RdSzmVafgaIhHN5o6U8FxA4YGFBPhGhssnJSiFDgul1OEQ2Rr8NBQ25yYvEk/jKzYLGtQi/+o4 + 7Eh69Jrc6WJP0xMLTsBhPKBpXzvgRh62hYjSKwBPXElfoiv+Nz9R8y4zgV1msrV29x4B0m7HEBAR + J3C34AepRwEA1/7INbYvVNXvqtkMJUoJCasm2l/twQFBEy1lVwoRDgJghRWIwAa4zD36yGFlb7vE + yV9lTwylEqdkoLfTlCN9hRr1+r5XBOKXzDe9Sb+WHvKzjHcjVe1dMvNH7ig3pWjUpmAQoag= Index: externals/Harpy/Tools/sign.eagle.harpy.asc ================================================================== --- externals/Harpy/Tools/sign.eagle.harpy.asc +++ externals/Harpy/Tools/sign.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJd5YqjAAoJEFAslq9JXcLZq10QAJFOR2JBHWoLgziqNYMGqfsx -j0ta+DpygCbkA6W+RK/DXWDF7sasTIcFtT2yYaWY0RxhpHGqCctxf1cutKtkAa7k -bP7Ty325ct9P8NeMyVoB720hGSBOPqSXTi59WjtS0Bl4Hh9YudalGxAvmX8WFxvr -Dsc/xJfGBiQyeGj/3Z1RPbIyuSF0dCa8v5EU+Hz9XGHw+8ABCoNXVyBoVJEwQzBH -+YfkahmTOrhgqSgYXY3yeOpeDnAw8gkGfoD0Ta9hF1thlXUP2MQEjS076oWa39i8 -ooOLsrJQ8Z3pfSDauww7u/xksYJtpv7AOUkjc4lYY9B1IkbrR/rTKZ+Ab+Sxo+r2 -kdMrLRFuebduJanZhv2osW52EFvUla9b1Q3NBrR0kd2O4D6/hbX/YRWHXznh7EZn -DOfRSFXOGYUliZFkpf1JJ2q4oD3Di8hGIMhTz0vtlXeAFqwUNDIOyRga6NKJKt7h -DJf/4Jo9I3GhTuNMZZAEFSTz6n4PWqwqCM1DTQfSv+eG93Kj1ajtaJJHAe6jjJ7n -JTrf54Wo/MIXzL1Y95j8cWxj0bQf3ubhprkvwhzNG6vukcPDrb81EFuwX7b0+wN3 -Ye2KAUADrBZSmhF9WUasknobefHfJh6CpgHe/aCK0lktyJJGHJNktKnPZj93qeaf -EgBMv2kM9vmQBF3A8lOl -=J8kL +iQIcBAABCAAGBQJfq3imAAoJEFAslq9JXcLZaDYP/idzjwF5o7eRkQG8yq59UTvJ +sIH4a2PGXipPV6b/KFia5askSfe4UR3Azt49T363ZIj0mdzcxpIbRhBpkAysbX7k +7DE3mhic5zDhycX3TalCOyw+V53L9XEvAfP9XIU0Bb1h3YlFx3pgzQfTqcEyp/ya +S/4BSDnKT7GGSY3RLghwmgCnuweOUCyWXkScEFRnAIhv/OxozF8vn5RGHeo7rch3 +Tq65zFVnN85YoaA75L9f8j3bXxpcka2L7zZkY6fIuPUl8O/vxlQ678BR5hZHYKrv +9PmmR/+Z0tm051fdTX+JE4jv+dWKaT2DNkxOLjT9FBDBnu/nsKDAOZIcB4gTUvmT +vuv2HvnHb37vmlKdez6lcYEZfZle0/K1lqKpA7+idZXty+C5lCFPnEZQ5wA1ZAaE +t5LtUu7lOjW4XItmQcu2JVCVeHnjDTGd1zEuVZ7EgeApOTEM7qhcbh2tqi0x4tPy +Ydyv/Seh+FdsFZUdrBEDxAp634qdnVCQ4NCNmJjt+nfO4PWR/Jt/c+mjSQ04xxAK +AdYekH3fAv5q0myBPst0NC6j3rR4UzztWo4Ak9bZ9fglZ9R9zHNuf8o6tDF45BTc +ll3xVj0oGSd6EZqturRrXBUL7OSbouiWG3Szr0DN8Bgw/kxut1CeOIo5VnRyGyNU +1aX+Fvc5HMIrj6byxCTl +=+JDp -----END PGP SIGNATURE-----