Index: client/1.0/neutral/pkgd.eagle ================================================================== --- client/1.0/neutral/pkgd.eagle +++ client/1.0/neutral/pkgd.eagle @@ -26,17 +26,17 @@ # argument is non-zero, any existing values will be overwritten and # set back to their default values. # proc setupDownloadServerVars { force } { # - # NOTE: The URN, relative to the base URI, where the Package Signing Key + # NOTE: The URN, relative to the base URI, where the Package Signing Keys # may be downloaded. # - variable openPgpKeyUrn; # DEFAULT: pkg_key + variable openPgpKeyUrn; # DEFAULT: pkg_keys if {$force || ![info exists openPgpKeyUrn]} then { - set openPgpKeyUrn pkg_key + set openPgpKeyUrn pkg_keys } # # NOTE: The URN, relative to the base URI, where a login request may # be sent. @@ -111,11 +111,11 @@ if {$force || ![info exists baseUri]} then { set baseUri https://urn.to/r } # - # NOTE: The URI where the Package Signing Key may be downloaded. This + # NOTE: The URI where the Package Signing Keys may be downloaded. This # should return a payload containing the OpenPGP key data. # variable openPgpKeyUri; # DEFAULT: ${baseUri}/${openPgpKeyUrn} if {$force || ![info exists openPgpKeyUri]} then { @@ -270,14 +270,11 @@ proc useServerId { {serverId ""} } { variable downloadUrn variable loginUrn variable logoutUrn - if {[string length $serverId] > 0 && \ - ![regexp -nocase -- {^[A-Z][0-9A-Z]*$} $serverId]} then { - error "server Id must be alphanumeric and start with a letter" - } + verifyServerId $serverId if {[string length $serverId] > 0} then { # # NOTE: Set the URN variables to values that should cause the # specified server Id to be used (assume the server Id @@ -301,14 +298,11 @@ # # proc useVersionId { {versionId ""} } { variable branchName - if {[string length $versionId] > 0 && \ - ![regexp -nocase -- {^[0-9A-F]*$} $versionId]} then { - error "version Id must be hexadecimal" - } + verifyVersionId $versionId if {[string length $versionId] > 0} then { # # NOTE: Set the variables to values that should cause the specified # version Id to be used (assume the version Id itself is valid @@ -468,19 +462,19 @@ return "" } # - # NOTE: This procedure attempts to download the Package Signing Key from + # NOTE: This procedure attempts to download the Package Signing Keys from # the remote server and save it to a local file. This procedure may # raise script errors. The fileName argument is the name of the file # where the downloaded data should be written. This procedure is only # intended to be used from the "pkgr_setup.eagle" tool script and may # go away in later versions of this package. # # - proc downloadAndSaveOpenPgpKeyFile { fileName } { + proc downloadAndSaveOpenPgpKeysFile { fileName } { variable baseUri variable openPgpKeyUri variable openPgpKeyUrn # @@ -726,10 +720,11 @@ # is either "eagle" or "client". The varName argument is the name # of a scalar variable in the context of the immediate caller that # will receive a boolean value indicating if the specified language # is actually a reference to the package downloader client itself. # + # proc verifyLanguageAndVersion { language version varName } { if {[string length $varName] > 0} then { upvar 1 $varName isClient } @@ -795,10 +790,36 @@ } } return "" } + + # + # NOTE: This procedure verifies that the specified value is indeed a valid + # server identifier. The serverId argument is the value to verify. + # This procedure may raise script errors. + # + # + proc verifyServerId { serverId } { + if {[string length $serverId] > 0 && \ + ![regexp -nocase -- {^[A-Z][0-9A-Z]*$} $serverId]} then { + error "server Id must be alphanumeric and start with a letter" + } + } + + # + # NOTE: This procedure verifies that the specified value is indeed a valid + # version identifier. The versionId argument is the value to verify. + # This procedure may raise script errors. + # + # + proc verifyVersionId { versionId } { + if {[string length $versionId] > 0 && \ + ![regexp -nocase -- {^[0-9A-F]*$} $versionId]} then { + error "version Id must be hexadecimal" + } + } # # NOTE: This procedure verifies the platform specified by the caller. The # platform argument must be an empty string -OR- one of the literal # strings "neutral", "win32-arm", "win32-x86", "win64-arm64", Index: client/1.0/neutral/pkgd.eagle.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.asc +++ client/1.0/neutral/pkgd.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYKp17AAoJEFAslq9JXcLZafMQAJorN+Jl3+Ah4o3BwYoqujuL -YcWc+0n5teE9wA4cWcr9/xsyOQnoRK91I2GDjuYRCB1ej+wYZET1ZKoxEh8MlW9O -Q/R7H7EGSY7Lk17T9VsiXNVKY71vOOQ7cUA5i/jVDux3MjfGU84qWmftKhG9Tnhu -HkatMB0BRj9EPYDaN8aI3NNW1jt9TTltuueRujnuuTtlPKZepgzO2aUxrQ1XUWSD -EMdm9B4+6BqpS3MX8TP6C89+Yi2IrB2o2pLA93I69EYsRenPWqIxtaJZfO21mngR -sA/w1le28eLt3178E/Bh+Kf5Tf/IDvVhEq63mtq9OrTQSFZDvjqoJDUsWEgAhSLy -GYDY72RR09+kuAMaTr7ZV61ojUMLcYar87jTXeZoq5scV6D8BKJlLA0lMo8EyZs2 -lcEUkaJc2lenV90DUQjS5uKFZvH7S2xyyjU29vvYxUy0HAAWLnpnSkamPFOVKzez -uFW0WDGa/nWNsXmQW4XujSVu4t1seUvwe58hLTXD5H1HdX2wNFvfIXJOy0/Q4URe -WooFFnGzqtS41Bwx+bqGne+OCAr4wA6Hmm3RcWubbBILCvTVN1DpCm7e86Up7MR6 -mGdLBFmfQf4tsf2jG6jntmIw/e6OOSvEylMlRxgs4jmRJXyx9Xe8CgTorzBYN51s -Qyb0zUQ5fBfHgGjJa+Ny -=3eS3 +iQIcBAABCAAGBQJYVwQaAAoJEFAslq9JXcLZK+wQAKjgT9tBrs6sBaQ5rRQNLno8 +LOsplou1I0H4thp/4DDUF5JFj+LM8hn9D1cMWE4SZpbuUk9jn817LGMlIYmSAPic +DHA9Wr5BWaR0bOOpf/oajD9XPOSyZvdrH3N6Kvg3JUCThMvdxilnLDytXN1Je6ZM +tmeMOShb4horYPZQTt1X1kU2SBAraB48JPMSfqQo+DeRhtG4vX70u23t4EXcXdda +kFJeaYKogGJb5Kf6pgumE0hXtr/sVHqp0b4wlSTmiB8KZ2xMTkknVZaSd6TvFsWD +jbAAYUMTrUZ7TteYHASVDMX2Ol22z4iPJBB+wA+/CUjrM8GrgP5jv3JCZKQlTX9v +63nFF1Kb897frxJu0xT+immv7R40JO9fGNvEJXk9YlFfpHIpwntys39WKEah2jqj +uNbJhxSZgHGdVxfN7bHimZDs4K2jjiby0PEcwfk0y9tbLMFLS0b9k+8D/ZNp7yVw +b6GA83ARJ7M7iI0gHZRYxn477kEcq4joGWsRQwnLGtvsgUm+pnQP8EwUE/YHHhKB +QHr8NdCYui0c073hrbnJJufy1NA+QtG0KizHyeJrWRhsv0bdakvDxX0u33QYgk9k +4ezdLmKFaUeb50YD293Fy3FWLeWWlUemk9VZxkGsD+oqSqAHNYSR8y1a2VMkUbpX +xHQPZAJrEX6OHrpclGGR +=s04K -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgd.eagle.harpy ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy +++ client/1.0/neutral/pkgd.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 8f2147b5-a488-47ee-a91c-74169b43dc10 + dbc97ff5-c604-478d-97c3-68df449b2d43 SHA512 Script - 2016-11-15T05:29:42.7643484Z + 2016-12-18T21:45:25.7333984Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgd.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy.asc +++ client/1.0/neutral/pkgd.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYKp1+AAoJEFAslq9JXcLZQeUP/1bSzd/kFlm82bMhTNwmqF46 -EYp9BUoU8YWHEGby8j1nfuUKzpxr3gn6b3Bf/pl6O0d4I4WqysSIo3D63O/GgnQv -Q8idoTz5He9S+gTEXVBENwxLgcP/Jq4w5JX7mNWa3hg/qy5iZZtoGH7qZCuykOHT -rSYhdNJRD3b2WgyHFXa4VYy8DrIwvMrjjO1vb38cu9ri2dBJwOJ9jKyRiMycI1Si -PbmheN0lUZK1uo8ISmPUfvP0oYp8fIeYcWFGx32TEY9k04zc6zT37pFiqJLH1MMY -PNII1lnbiDts1jduFC99kBmO73jW40kYrMKAzvWldNXaxoyDNZ4m6p3v+eq+oRU6 -IUTHlKvNr8WQFi9pL19VA3A0sghL2cIk3jUdmWBv79ZYAk8yfRjKZLJPJg7KSLkC -qEdK9CtskyvGuNWHO3xk1dafzRo/DG+smYI893iBUxOHI51TG5W4g9Qoa3a/ACoH -+giIwJU09DXedXvAZ5k/UgJp5mqLJIEEQ5qAFzll4AGQJd92e3uHttL+Q/wZXrOk -IfJsSs4dPFlBm8ki2h6JvlnYfh2F8na5e7Pogt3sGekXw11n5Fx8aVS1BhY/ucmD -TUd+Nwbn0WpAUZ4LQ6rz8LYyVFTaG50YQG+ACLZHt2EmLh3YZTOE+dwIgj4bQw8k -1zjvTjQX6T9tLJ48z5uV -=hOTE +iQIcBAABCAAGBQJYVwQcAAoJEFAslq9JXcLZRLsQAJNwTMFLDt35d8OcqwMrsWcz +BtiqKZLYl8dRdDMZbYUcs4CCfcBjmaxXrkwPWyOzvERQFv7Xk4OJ9PtCGmx2H60z +xvYt+MajdLEdTzFoBzL4/vFxeutVqDrj/ACF7wQH1QLFc7u0mF9aeidGG6pcLJvM +pCfq/FzZ1CRO2frRX6om1DpBJ5fgQ/W13gVZMRnjla8OPrzpZPXYnUjln3/hWQCQ +F6riOKw9o5zPlhxlSLdyb3XbwgHnZnN5b+QYTOzDIgOdnnV7zNTM4Po1/FU8FUKp +S11+mEeY/O+2483LnUftpR6JPUpmwciaY+AAirOeGUyAmtiNTL2h6lZCM9EWlmCs +jf0dcB1levN0/az80Ozn7D5JaKrmye+PdC/n0+ttt6TdXFlSijWZHBffS3r389DY +NulqWsUW6DAftgPKGZ8yVbOamcFrD55AobE05LW2fp76ZEOzvHJkPieFqYx/ExfU +aOVxcz27x4Ho/k/6axo+NW8+uNAycdCRMFVKaURPGDhPw4gpGP7/s6pqje7aRcUl +Llb9MC972WzOwMCalCvaA2GuoAgkpqKJ8tjsg8XDE0d5/Ddz3KcNDIuS+6M+dJTi +bjiFgi+MCGxvgamTdt9hdZ6ACsABDacbYeOGcDb/bpVG6xrhgNg5Lx9VpBeU26Gc +OTXZ5f/51OqMp9IvcNli +=lH1E -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle ================================================================== --- client/1.0/neutral/pkgr.eagle +++ client/1.0/neutral/pkgr.eagle @@ -112,10 +112,11 @@ # # NOTE: This procedure returns a string argument value, which may contain # spaces, for use with the [exec] command. The value argument is # the string value to format as an [exec] argument. # + # proc formatExecArgument { value } { if {[isEagle]} then { return [appendArgs \" $value \"] } else { return $value @@ -352,11 +353,11 @@ } result]} then { error "cannot use OpenPGP: may not be installed and/or configured" } } else { if {[catch { - eval exec [subst $openPgpInstalledCommand] + eval exec $openPgpInstalledCommand } result]} then { error "cannot use OpenPGP: may not be installed and/or configured" } } Index: client/1.0/neutral/pkgr.eagle.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.asc +++ client/1.0/neutral/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVMeqAAoJEFAslq9JXcLZ7TMP/i1uqLXgToUaI4sFV8hoxPWQ -buaSI3nfNLJvv8jVJAfe7VolYJw9v0FHpeDTcVToVUDlcGy8W561stkgYn96f4tZ -C7jLGhqtv5IpESjXDm/1bf8QoJrLShx74W68/o1ae4uhlpPYxZg5vcSYFNS09h+r -BGNNza0rZS/4elml92cbsfc/h3Qn2A9chu34eiF0TC4zhCknrmU4LKD3yhlqpJWT -cDIGyKUecW+mSXJGltmmJL+IgO+tNwA72q91sJ3ZIsaEFdYMENZkwva9l7LxoK3j -tqJqknv6a8H1V9PKN9c+qUROq0c5+biwhgldfg1JTLD5ah1YcrZNB9idUen/ftf+ -QTQnx3nYPLl7fnMiM6S6svWZjSdZ98Fnpu4Jr1F3Im4DSp6wQcILYruGah9ac49Z -XB/yFpiit7ZhoTH1IVNYYQMdqbf/Wb6WBO5q4CxA000C6ANrk2Cm7Xh5wFlTafg3 -VsEzRNhOLfu8dO2CaOzTIfRo4QhwDJl9yDauei4sPo0J2FmbPTyMBnBwz/X14Gcv -st5sFAIsryfSx2c3rDpnj8aFHcQLi0DuB8QCR0p4aSKVb2lenmZfcA85PZYD662v -2x/41sP//rajbEz3YjJlnoK19acDwJSU6uFuvLEqklnd7TDFHl1YtnVVD6wvfSxV -F67DBCIaQLgfEMK45lzv -=waFs +iQIcBAABCAAGBQJYVwQeAAoJEFAslq9JXcLZeqkQAJTeEFiD45QEPzD2PrVAfoVG +EddgG1kirgYvAkLVJrH+gw0ebzCt0CmOnlPutr+saIDNu3IyozC8Hcui37I3FBqc +YwTZzXtoZ9VvRdFTJ118abyv9zQVAgB89WL6xOt6AhnlkNS5FAexi8eKNMppLTg2 +r7XkZlhI+vMKdJSE/UZsTy3PQ301Z31S4IxPDyLA6BfcL1dVuEKpgOosyNXdvtiZ +1In/f3aAze9Ech6gET8g2UAGCYIP/Sjxv87ehvCvwyrKXTPrtvL9PGnRfJUv4EDn +wOiNGS9Ki2vqUkVEay/6IIuRfwAVXw1Ln8RZmFJmp9g3aqqy7Y6NdyX57Jk14OdV +of19ykiFd9ZF/RMBwfP77gvELqeEm3JlB0OBeCgnaWnlQGZcs/jSqqmCQFe/oJ1V +8ySLyWos8IfvM20uK4STuutXF13GIBg4lcW5Er5AqjNIKlsNGfp0kwDAR3McKgcf +x7tVqPvDA8gEftgj/ry9s6cft2352WR3QGbSTUKefOs+utaGZZMMgWt7LsUe54zN +ee4kCeouGXjnu/lTnXazm6BKIgq9CxMYIPU/wP8s/He3sdGOsNVtnR3xb2TLbMLt +fIKPrTpumO8QiMXWFGD7pfdOnCZJ32vmCjKBcxgB/QdQzK35k/3EGgn44+hvX4E1 +OBBi97xC4x4HplQZsjud +=HUUN -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy +++ client/1.0/neutral/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - b26eb0c0-d25c-485f-9228-064fdd1f781a + ae81f124-a07b-4d2b-93fe-7df620076a90 SHA512 Script - 2016-12-17T05:04:57.1298828Z + 2016-12-18T21:45:50.7265625Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy.asc +++ client/1.0/neutral/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVMetAAoJEFAslq9JXcLZE/8QAJY8LtO8YUPPhTY+RPAPw7vZ -R5W/eCOJ1Qy185xjLVYeb6V0ULxEAgY7iNw4mAkF7dZl1oQ56Xhao4L2sH4+nsMx -q/BU0Y/Bk0StpHpRvw10bWl/iVo4W2qK07gXepgL9zpI5pl/lJerSJA3LHd6RD8T -Au/2dw6d/N4ozkc3BTZf4PVZCKfLzVdQ1hEbpDTVlWd0fDS9sEywdML/OKgMzvbG -YfJrTwjF8sf3urJDbBolFxV430mdbIbLPyvkUCCiOjC3oJi0766B2Xsz+95fY16y -fMa8T96R2atRPCOolDN5jdIvCkP3VRKlts6OoNZ7nojiS0SsDsREgt5cEFWieXYg -JFf0Ln5wqjAWxRLl/MlZw2qoN4VQKD9OyS/m/lncNQ4udP4/AIeuQIIeJ0e/pjuQ -7jiYm9ZCyBcFT7ncU1gZjp9zQar4hWY1oF79RfiwAhno8Rz1CwAFNGKaJ7nenx+7 -/orx8qcDMFZnPh0fsLQJ2f+Z7TTFmLDuYvA8tDHZRWF4RO//+HYec2KZYIay1ZHI -6RiaNzwjNKI2RF9yJUS+6tGhhu1ck2MR5IXuQ9QFLXqke15qwkpMdKUTxu8N2K/L -FToN9rn9WfC6O1TeUGZkYr7q9hgZ7hBCn0iiLikrgafxuSVQ5eQCRyLD+04vn3nX -cXMvYolWIL6QiREGHpsW -=zSis +iQIcBAABCAAGBQJYVwQgAAoJEFAslq9JXcLZbsgQALatwV8267QDzHrDHW+18vu1 +gcmYc2ufKElQ/TC3eO+tClrLq57lSs7Q96ervPsK/zhpqFaGs6iNQjOk+zxguP2N +TNAmTiH7mTEnodg+8EAgxzpc/Oysgd/PFjeXduK+cyjCwqxTtkv3WDYyT+HtAEYQ +KK4JMM2eMTYb015CCceRj9stkd74aexQcKK7QzXOf7PmxxqRhyxw+ukP/XNkrIGA +iq7jSAV6ml8Z+ASkGIm4l4cMQ3yQMABB8xgda2svhvvmrAmPm0pEutserZFA9k9s +QF1QdEgzMb8STmj3zFiFBRUX/J9HRBaf7F9Bbn8WJzqjia1rzrpb6D6XNZBGt0ww +Qm6X0Zh6qL89Wlz6oQimg6kXOMpd84IN3f7mECGBY+Av+/byeZXzDBfeqJ+a54F/ +mev4tWdQtfnro0BGN5z/3nz13LVCgt9mp8o/UKn92FUL4738jIUAIpXAstMIihJZ +uMzr4fF+9kSgweWuD25folUy5mFxE2ZJJES/dVFuxY6hFv8RRqrLHppGOVw9EQoi +baJNWQhyFxBYCxj58cAPdmOp2Vk2teU/ePu94nwAauPto+2scAsYOwQDFL6I+V/G +TzOoq2Cc4JrhV6PS5e21Vj3fJms51rF6ZfFXrntxWHhU3wyyRrTqSH5AR2HIynbc +8H/k8gJ8I+WOp0v8UarK +=kXjW -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_setup.eagle ================================================================== --- client/1.0/neutral/pkgr_setup.eagle +++ client/1.0/neutral/pkgr_setup.eagle @@ -86,13 +86,13 @@ # requirements of this tool. # if {![info exists ::argv] || [llength $::argv] == 0} then { set localFileName [file join \ [::PackageRepository::getFileTempDirectory] [appendArgs \ - pkg_key_ [::PackageRepository::getUniqueSuffix] .asc]] + pkg_keys_ [::PackageRepository::getUniqueSuffix] .asc]] - ::PackageDownloader::downloadAndSaveOpenPgpKeyFile \ + ::PackageDownloader::downloadAndSaveOpenPgpKeysFile \ $localFileName ::PackageRepository::probeForOpenPgpInstallation ::PackageRepository::openPgpMustBeInstalled Index: client/1.0/neutral/pkgr_setup.eagle.asc ================================================================== --- client/1.0/neutral/pkgr_setup.eagle.asc +++ client/1.0/neutral/pkgr_setup.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVMvkAAoJEFAslq9JXcLZBTYQAMbgrFtbS2DDkME29HTfR1ub -QK4NdfPVkmtG24ZbjFpilyYj7C9wh1zu3u+FmS4ObgEPdeEXXCn0tYq6cbdEiyBa -pwDdiCrbag6rBnXut+ewK3gKptrU4FeUBvn/mGSeGZplJ5koZRUqVX1E7KGnMJc+ -lP3yfvunI3DdTWV+xchwxN5QfBFWAw0wz0BpX7mfnaaX3DvKhoqjS/jOYkDpjnZh -Fw7edBFFQNS6RnRGm3AuVzr6FyE4PRocSFig0n7iKkPfOwa16hRVpVsSYWGMVRAD -hB/qIJX219TnNo+Fupu/E/rE3d0E+i5fgqCH/T83EEflvz7CUtwUWbbJmAckwHhf -b4toGNIeC6JNcHiGdFnINvkcuTVf4jPQItvmVQ/HzYX85H152JGWK5ZrE7gb437a -3wYli/eE78qYDTqfsP8G2tTlUH9dCZGDjimEgLeI+HNxQPK0r4qecTr/HuWOopW6 -bGb+RasUcagGfqv5BqbGIuDsCaCDTBnA6X/0OxoZ6HVOPbJ/jzpv0+DJcXY92VCe -DYjIcqE/iSF5QTb/2+qFdx1KJSlBw96Hffy5VNkfZ4v9xgDV1jq8KbxRsa0O26EZ -EbLXgu4Vh3vaso4KJql7Qc2dnd113VjpZzIeYYkk/KFZzz1mYrW0z+cS6HsayBv7 -ZVvYBoy/FnkORVY2cJtk -=By2Y +iQIcBAABCAAGBQJYVwQkAAoJEFAslq9JXcLZ8FkQALcWLME/4yLQKjbqozOotXnK +lgdORXYhBtJbLWHOrOsJiq1FGnv9pb6Ay7Lfalyi8k4X8H3Dmc6UYDRu0XMZlzLc +DiU2QPTGN7RycmYCiLtC4oXu3xKEa1WPmvg5qwHzVDA0CmeMmSFe15PaYqV1W5e1 +qWiyqKgchhJhIyKgnQPCZTK6vkYnGkUc5fpIzgoZUw5O3H6yTmPmnTk3Rtc48GQy +WrYG4v/0Mgu598pjIBgJwvXUpzlWnQ948S069WoHLlpqkafBaElSnBdUOJqC3sWA +1wVAmnKZ56QhSbQhkOdpluJL7lAI2mrcjmSb2OvRFgmEupWI8VJjN0sjIT3PqsUt +Q+EhHaNNlegt7MDLFWuzeKtN/EUNaDCaB5DkfXPTP9Jks9TFFCgN3l0MEFNN+AdH +kLl27v+zL9vtDmzaobr7X2NSqB6g9pZzBgibjYKAru0gbG8bmoC/0KvFOqwScNab +EwPOcMpCpbRrfmRLQ5xUyr0+MDMhzNes2Cqy/ijDv6IfmSNDqd9Zb5mdf8ukSFo0 +P38ZA4xdXG1vODg2keG7tAT2IsfDsd+/0YsRrLJ2x+2TKTAPN9ih+DobwzZgNiPI +Vb2Lyndlwj7eooU4ttR1sdF4x5WIa9NjtXeJHU2lSsPZIZg70C8kp5w0SsxU64Pd +Y/s5DZ892OPwlqOkL3Mt +=xkCM -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_setup.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr_setup.eagle.harpy +++ client/1.0/neutral/pkgr_setup.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 06ca970a-0ab3-40d1-b1ea-31f8b59438fa + d43ae28c-48b4-4102-82c9-b56ff36bcb3e SHA512 Script - 2016-12-17T05:23:19.9599609Z + 2016-12-18T21:46:15.3085937Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr_setup.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr_setup.eagle.harpy.asc +++ client/1.0/neutral/pkgr_setup.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVMvmAAoJEFAslq9JXcLZB4UP/jleaXUYBIjifW+6xg6YgoeW -Z5vHUPm7JSGXwXsSJo6dXkaaz02N1eqP2vtn1bNXbYIKf62o+SRXeu41ftOLGR9H -/Ate4RPgryM5S12LyZjb/B8P3uuTFQ+ld/54SnJ+O6RvStWWKD9qOLIZrnixRhKk -JPJwFBrFfdWY9LvrKeS+uZwWbuw9TQhAehnvULeYN9R0KBpdWHVqv2dZK9Pjiy6d -mUujtl+eK0zsb5NuqYT2x56KxzKIUmJmqXtKVkK/9VIZhYZD9NKIA67Fmcacgs9Y -VMS8yYGrDO/yS62A77Nh6GaMn1DtvMebS2ovbAiQCGZUUzw46ZdzBoDtxxNh8ZLb -m1KQLGoDHu5RdRm4k7LI8vs5EL/NJAJRpG2TaDjBXlpMfTVcI+PkrOSQolBx8f9U -eeOV30CcLQX3s7HZ4Mh+MVZfsNWGSytsuxPoOWqnTDdcws4TIdRRZC6mIFIHzJEZ -iQ0Iqspvs8ViycCkPwuVc5nuES3vqB/8thEveKu2YCQBdSqAA3GE8JWN6X8YizMC -7V5MuNRySmEGhRwM5J/bMeXasZVDQp2EGT3VQUmR5W0sAbDdVEETfdI1HEMXQbWA -QC5VRCxUoljFqfTV1bu5R2/jZf5xXrfXcWUi2CSWM2gHonypJgdrPzvXLxOtKCTN -2sP22uyHVr00CaWek92p -=uqMI +iQIcBAABCAAGBQJYVwQmAAoJEFAslq9JXcLZktMP/36AvVKxP3B43/8+QiF0vH0N +Y7Gdf7Wde99fML+4uyYm6FXBqXqukfZt/37q0M6Zlr+wWDOZAZLKsD0iI6daMMGv +3GKwTTnS4RNKF1do/ZMQxIrMK6ejFHlDRDo5IDohQ/v3/a1tUfuWIuGQ7O9Uel3A +h/Qia0OKAqXiRBZutY0g/ejLpqemV2yntDRR2IObKkXoKHCLykeFyvLvwsIbTwqU +UZrirgdZGIVT0snHpoMdUNd3UV8qz+XTUekiRd+So6gLVtNfT1bddfVr6+fIILUr +Zq/iKpZS0v1zPfmgGdhs1wgKFUa+H5P2pCN6S5x6ZiXT44g7nTTVb7pSJf64smYU +7egl51qhqeuyj6aZliN/HlphD364SqZoCECY9Ki4HO/hjbiyZu+wk4TJZu2W7cN0 +cLtC1SVk6i9bM0yU2Ainzvkhtc6KefK9Kk093F4WVpcjC7QFxMEfXT77ssp5uSSv +17BrN/AJpQUnd9tZXDRzq4kWIho4k258CNgg+s0rqE8121NS8saR1fyxR14YApgA +Bub9fSZgfssHFj5TNQ8L/YjTq9ctAL/2tlmLw5XrOdKJFH9X0iX0w3yTexLMyJ7p +dOtReMaIu0HPaXrOxwtlNs4VHHyOoEEdQQPvyPCOo6He+YBeNXi7SMqGzPvQqYAr +clq/FpD41noImaC230Bc +=Z6jS -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_upload.eagle ================================================================== --- client/1.0/neutral/pkgr_upload.eagle +++ client/1.0/neutral/pkgr_upload.eagle @@ -35,10 +35,375 @@ \[fileName1\] ... \[fileNameN\]" exit 1 } + # + # NOTE: This procedure sets up the default values for all configuration + # parameters used by the package uploader client. The script + # argument is the fully qualified path and file name for the script + # being evaluated. + # + proc setupUploadVars { script } { + # + # NOTE: What is the fully qualified path to the directory containing the + # checkout for the package client? + # + variable checkoutDirectory + + if {![info exists checkoutDirectory]} then { + set checkoutDirectory [file dirname $script] + } + + # + # NOTE: The command to use when attempting to stage package files using + # Fossil. + # + variable fossilAddCommand; # DEFAULT fossil add {${fileName}} + + if {![info exists fossilAddCommand]} then { + set fossilAddCommand {fossil add {${fileName}}} + } + + # + # NOTE: The command to use when attempting to commit package files using + # Fossil. + # + variable fossilCommitCommand; # DEFAULT fossil commit ... + + if {![info exists fossilCommitCommand]} then { + set fossilCommitCommand {fossil commit -m {${comment}}\ + --branch {${branch}} --user anonymous --chdir \ + {${checkoutDirectory}} --no-prompt} + } + + # + # NOTE: The regular expression pattern used when attempting to verify + # that Fossil committed a set of files. + # + variable fossilCommitPattern; # DEFAULT: {^New_Version: ([0-9a-f]{40})$} + + if {![info exists fossilCommitPattern]} then { + set fossilCommitPattern {^New_Version: ([0-9a-f]{40})$} + } + } + + # + # NOTE: This procedure returns a string value, formatted for use within a + # script block being processed by the [string map] command. The + # value argument is the string value to format. No return value is + # reserved to indicate an error. This procedure may not raise any + # script errors. + # + proc formatStringMapValue { value } { + if {[string length $value] == 0} then { + return \"\" + } + + set list [list $value] + + if {$value eq $list} then { + return $value + } else { + return $list + } + } + + # + # NOTE: This procedure counts the common path components for two paths. The + # count is returned, zero if there are no common path components. The + # path1 and path2 arguments are the paths to compare. This procedure + # may not raise script errors. + # + proc countCommonPathParts { path1 path2 } { + set parts1 [file split $path1] + set length1 [llength $parts1] + + set parts2 [file split $path2] + set length2 [llength $parts2] + + set length [expr {min($length1, $length2)}] + + for {set index 0} {$index < $length} {incr index} { + set part1 [lindex $parts1 $index] + set part2 [lindex $parts2 $index] + + if {$part1 ne $part2} then { + return $index + } + } + + return $length + } + + # + # NOTE: This procedure processes a list of (fully?) qualified file names and + # tries to determine their common containing directory, if any. The + # fileNames argument is the list of (fully?) qualified file names to + # process. This procedure may not raise script errors. If there is + # no common containing directory, an empty string is returned. + # + proc getCommonContainingDirectory { fileNames } { + set length [llength $fileNames] + + if {$length == 0} then { + return "" + } + + set oldFileName [lindex $fileNames 0] + + if {$length == 1} then { + return [file dirname $oldFileName] + } + + set minimumCount 0 + + for {set index 1} {$index < $length} {incr index} { + set newFileName [lindex $fileNames $index] + set newCount [countCommonPathParts $oldFileName $newFileName] + + if {$newCount == 0} then { + return "" + } + + if {$minimumCount == 0 || $newCount < $minimumCount} then { + set oldFileName $newFileName + set minimumCount $newCount + } + } + + if {$minimumCount == 0} then { + return "" + } + + incr minimumCount -1 + + return [eval file join [lrange [file split $oldFileName] 0 $minimumCount]] + } + + # + # NOTE: This procedure attempts to process a list of (fully?) qualified file + # names and return the corresponding list of relative file names. The + # fileNames argument is the list of (fully?) qualified file names to + # process. The maximumLevels argument is the maximum path depth that + # is allowed for all file names. This procedure may raise script + # errors. + # + proc getRelativeFileNames { fileNames maximumLevels } { + set directory [getCommonContainingDirectory $fileNames] + set directoryParts [file split $directory] + set fileNameIndex [expr {[llength $directoryParts] - 1}] + + if {$fileNameIndex < 0} then { + error [appendArgs \ + "invalid containing directory \"" $directory \ + "\": cannot go up one level"] + } + + set relativeFileNames [list] + + foreach fileName $fileNames { + set fileNameParts [lrange \ + [file split $fileName] $fileNameIndex end] + + if {$maximumLevels > 0 && \ + [llength $fileNameParts] > $maximumLevels} then { + error [appendArgs \ + "depth for file name \"" $fileName \ + "\" exceeds maximum (" $maximumLevels )] + } + + set relativeFileName [eval file join $fileNameParts] + + if {[string length $relativeFileName] == 0 || \ + [file pathtype $relativeFileName] ne "relative"} then { + error [appendArgs \ + "bad file name \"" $relativeFileName "\", not relative"] + } + + lappend relativeFileNames $relativeFileName + } + + return $relativeFileNames + } + + # + # NOTE: This procedure attempts to create a script chunk that appends the + # specified list of file names to a list variable. The fileNames + # argument is the list of (fully?) qualified file names to append to + # the list variable. The maximumLevels argument is the maximum path + # depth that is allowed for all file names. This procedure may raise + # script errors. + # + proc getScriptChunkForFileNames { fileNames maximumLevels } { + set result "" + set relativeFileNames [getRelativeFileNames $fileNames $maximumLevels] + + foreach relativeFileName $relativeFileNames { + if {[string length $result] > 0} then { + append result \n + } + + append result { lappend fileNames [file join } + append result [file split $relativeFileName] + append result \] + } + + return $result + } + + # + # NOTE: This procedure creates and returns a script block designed for use + # with the package repository server in order to download and provide + # a package consisting of a set of files. The serverId argument is + # the identifier for the specific server to use, if any. The + # versionId argument is the identifier for the specific version to use, + # if any. The language argument must be the literal string "eagle" or + # the literal string "tcl". The version argument must be one of the + # literal strings "8.4", "8.5", or "8.6" when the language is "tcl" + # -OR- the literal string "1.0" when the language is "eagle". The + # platform argument must be an empty string -OR- one of the literal + # strings "neutral", "win32-arm", "win32-x86", "win64-arm64", + # "win64-ia64", or "win64-x64". The fileNames argument is the list of + # (fully?) qualified file names to be downloaded when the associated + # package is being provided. The options argument is reserved for + # future use, it should be an empty list. + # + # + proc createRepositoryScript { + serverId versionId language version platform fileNames options } { + ::PackageDownloader::verifyServerId $serverId + ::PackageDownloader::verifyVersionId $versionId + ::PackageDownloader::verifyLanguageAndVersion $language $version isClient + + set prologue "" + + if {[string length $serverId] > 0} then { + append prologue " ::PackageDownloader::useServerId " $serverId \n + } + + if {[string length $versionId] > 0} then { + append prologue " ::PackageDownloader::useVersionId " $versionId \n + } + + append prologue " " + + return [string trim [string map [list \r\n \n \ + %language% [formatStringMapValue $language] \ + %version% [formatStringMapValue $version] \ + %platform% [formatStringMapValue $platform] \ + %prologue% $prologue %ns% ::PackageDownloader \ + %backslash% \\ %fileNames% \ + [getScriptChunkForFileNames $fileNames 2]] { +apply [list [list] { + package require Eagle.Package.Downloader + +%prologue%%ns%::resetCookieAndLoginSimple + + set fileNames [list] + +%fileNames% + + set options [list %backslash% + -persistent false -usePgp true -useAutoPath true] + + %ns%::downloadFiles %language% %version% %platform% $fileNames $options + %ns%::logoutAndResetCookie +}] + }]] + } + + # + # NOTE: This procedure attempts to stage the specified package files using + # Fossil. The fileNames argument is a list of (fully?) qualified + # local file names to stage. + # + # + proc stagePackageFiles { language version platform fileNames } { + variable checkoutDirectory + variable fossilAddCommand + + set relativeFileNames [getRelativeFileNames $fileNames] + set savedPwd [pwd]; cd $checkoutDirectory + + foreach fileName $fileNames relativeFileName $relativeFileNames { + file mkdir [file join \ + $language $version $platform [file dirname $relativeFileName]] + + file copy $fileName $relativeFileName + set fileName $relativeFileName + + if {[isEagle]} then { + set fileName [::PackageRepository::formatExecArgument $fileName] + + if {[catch { + eval exec -success Success [subst $fossilAddCommand] + } error]} then { + cd $savedPwd + + error [appendArgs \ + "failed to stage file \"" $fileName "\": " $error] + } + } else { + if {[catch { + eval exec [subst $fossilAddCommand] + } error]} then { + cd $savedPwd + + error [appendArgs \ + "failed to stage file \"" $fileName "\": " $error] + } + } + } + + cd $savedPwd + } + + # + # NOTE: This procedure attempts to commit the staged package files to the + # remote package file repository using Fossil. The varName argument + # is the name of a scalar variable in the context of the immediate + # caller that will receive the resulting Fossil check-in identifier. + # + # + proc commitPackageFiles { varName } { + variable checkoutDirectory + variable fossilCommitCommand + variable fossilCommitPattern + + set branch ""; # TODO: Figure out a good branch. + set comment ""; # TODO: Figure out a good comment. + + if {[isEagle]} then { + if {[catch { + eval exec -nocarriagereturns -stdout output -stderr error \ + [subst $fossilCommitCommand] + } result] == 0} then { + set result [appendArgs $output $error] + } else { + return false + } + } else { + if {[catch { + eval exec [subst $fossilCommitCommand] + } result]} then { + return false + } + } + + if {[string length $varName] > 0} then { + upvar 1 $varName checkin + } + + if {![info exists result] || \ + ![regexp -line -- $fossilCommitPattern $result dummy checkin]} then { + return false + } + + return true + } + # # NOTE: Figure out the fully qualified path to the current script file. # If necessary, add it to the auto-path for the interpreter. The # necessary supporting packages (i.e. the Package Repository and # other support packages) that are assumed to exist in the same @@ -65,13 +430,39 @@ namespace eval ::PackageRepository { variable verboseUriDownload true } # - # NOTE: Load the Package Repository Client package now. + # NOTE: This package requires both the package repository and downloader + # client packages. + # + package require Eagle.Package.Downloader + + # + # NOTE: This package requires that support for namespaces, which is an + # optional feature of Eagle, must be enabled. + # + if {[isEagle] && ![namespace enable]} then { + error "namespaces must be enabled for this package" + } + + # + # NOTE: Attempt to read optional settings file now. This may override + # one or more of the variable setup in the next step. + # + ::PackageRepository::maybeReadSettingsFile [info script] + + # + # NOTE: Setup the variables, within this namespace, used by this script. + # + setupUploadVars [info script] + + # + # NOTE: Provide the package to the interpreter. # - package require Eagle.Package.Repository + package provide Eagle.Package.Uploader \ + [expr {[isEagle] ? [info engine PatchLevel] : "1.0"}] # # NOTE: Verify that the number of command line arguments meets the basic # requirements of this tool. # Index: client/1.0/neutral/pkgr_upload.eagle.asc ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.asc +++ client/1.0/neutral/pkgr_upload.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVM2HAAoJEFAslq9JXcLZqDQP/0EuHa77yyYqMTY5LnOfFZ0t -vDquGO1Qk4vOw3m3lQKejssZqQLS46qe0+xfdDg81/vIU5w81Z1FI8V51m5EgHd4 -g9O9GOGgLR/ZRaEkEY12nzvyk4kBYQ6OmQshVVD0cSb+72SNh5Olry8DnoG8bRn0 -LGB43ir2+6Mhu02o7WGdI7HlST51/WHMkIkvpbRqxFa8W2E0YahngZJA0icTnpHN -ZY+iosWtPk9gigW0GWAjJLQBbwVYjnfd0hX5W5AcQ6ZU/6m1vBNGJTMk8+cuFnPr -TvzohUMJdO38ITtFr/s/pIq7ELyP25ayTMDdWKARKHKRoLQAXuWvwmXNXrF71VSE -fBPQrY47AGE4PBpG+yVqlv1hqDu+sPhRzNl2XcXTRVOZ1mRhQnfc2ebQkSKETU+O -vzspwLmFrOJ8gsYTidSgw8WCXaywjssISNtSm0AcklwjgOeO2e6Vc1erY1h9HctS -kTB63CuH5V4OuxBUkjFXqmhBuqYUZG+W6Soha99hIw9Jj8j12yfOF97N7ldm7XVO -NoQweZJXYrV4At9ZiXXhMsZ8RgolQtms29kFXeZ879rq4P8QlCmIN+NDJZHbI2k8 -TyVayOg1Q8LcLIi51o/kQ7ldzSd/xZf6kJzPZdUDpKqJBZHUH0aF8C1f/VhebacI -c+gJibewxrSrqMjIE6B+ -=MPwB +iQIcBAABCAAGBQJYVwQtAAoJEFAslq9JXcLZnJwQALBsQx/cyFnhirxuzPy2FRKV +PzEcn31GlctKucSzMEM6OPebLica8JpZ8F2G+EEaks4LAYEfS3L7nXsSzO5K1FkB +o6UCvho/IHvbP8Qealte7xydpAH9voxLuoZgoQvtIl4pnNy2zv+YYXX4vwiKdvkl +PttvyIlVZNhNUIKEivizmkZkN9Oj+uPqawn3FFSuUqg45jEB+h2Wc6mi0T6Hr85B +kCc56a+/w6IvMQXP/cIlY6/0Ki4ExSE4MYxJ/YuvdEDXokcTSgvuMXdhter1U8TG +X4cVHatGfjNvHPt7cjax+mRvi/md7f9xKOeI/mjDIdfqMzAMhXrP78lEO+uHqxgx +p1ugiPJYmljjiWzu/qX/onqkL95CfGIZlY4GNyd4E8nUwY/VWW0yXQwrcJdY/oic +ehfVJuenaeUUfXVDNux8meT/FnngGLoEQK9SM6HYKDlc1IUS6Oj0d68pd2hQNItC +CdJ+co8dPL1fhxGTcQUEkgTUNAbq3PmMG8J+NQQmz7MPSD/2c4d1EN5A1ZlK/l90 +GZT79FrCJholqkCcy7cJxBSRSuaw2MIc1Gsxipv74/936OSJbuG7l5fmzgcR6Ek1 +DlckRcQXsHoB5XjfjxXV/MEQpvaUvkCuSvK/yvwxtUcjAr8ve2axMhdrB/pPdlt3 +wVmzw6hrTus7pNmJsCdv +=Hylz -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_upload.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.harpy +++ client/1.0/neutral/pkgr_upload.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 410ca3b4-8e95-44e4-a931-03b0cc7e1281 + 8a427ea5-5e28-484c-8fc6-75d2516fe10b SHA512 Script - 2016-12-17T05:30:22.5644531Z + 2016-12-18T21:46:38.2734375Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr_upload.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.harpy.asc +++ client/1.0/neutral/pkgr_upload.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVM2KAAoJEFAslq9JXcLZiNsQAJqKASG3YGn6w7BJRAonKw0y -jmxVC9wCeFwarD46I0E93XQmNNA6mkonRwT5CvDuUd4G+sH7i5fyM2BIVy0XFO26 -OutiouvupFBiQU2ObsZbGYKrsfN/EpA2/axWAldg4WYDH7dC+3pNd95yp61dDfBg -bJ6sidNHnUokLzJQ5PaFSYrgaf9/toEZZfOeCmF+4r0frIf4anERuwA4R+RmeeX4 -3ZZbnbb2GwNortF/DEy5DyRO/sz7eyBIBACdp/IacSvHy0UIFD8vIIA71DFrYiMg -pmf0JyFjwXFF98VLwmatpb3OvtuwEoN+0vaCZ/BRAY4FpTykDUuvKGAYn26k0lVU -xaKtt9jDBii1VnO3ZgoBjnAYu4dfd35F+EOi7P5uT6SsPS+GjfbZrQrimyDO++Cd -8rGGw3FEKFVaV40mrT1dlIdpo64fsQmLTwYc+SM/fiQbtbKZb9y+Rqo0UO9cuWCP -l+dZyw8vRRelRxpsZNYuImLk27HRrBr38JelANfFuO7Lm4WiC6DdzEiL3Sf9BtEN -xkapDjBz7VhUJ97m0KoC+ODemckv3tlZD+9deowRdYmdjGKtn8GqbNhNfoF0vUGN -g4zj+UvQ1NblfPLVBEF4WcZFiHqAuRTw/WDBraZXhwbMi51JjVWfOo2WK13tODl8 -KGic5Aea3InSHNGZU4rj -=MPMG +iQIcBAABCAAGBQJYVwQvAAoJEFAslq9JXcLZe+oP/Rp4FbANSsPE8W02UsaCmK9c +DQm7+Gx0I8CpgCi/BXW99yotqJu4ymJ3XcrUkovJ5OtwqmyOUg4s5Q91K4lohSTk +Oqf5b+Vn7qQkzkf7ZH9H6DgBI1jRQfpHmpHxLMbQzKD3Empdq0YQgEjDtE1V2FId +QTjidrwJQm44SS1TsLUBWUp6l1tbqR2dAz5wfw8vTwUWVFepxywK0E/xPISRVXNX +1O9HBIZ0xuQoJhNo/1ARKXAa0nDybC4oH/PhuwsaTUsJER83GuEzs52/ProejlGm +gRstZmtzGd4eOabGzlnQGFI4ql/FLDvCKIwO0qRKx2z4YJYl1EgrCSCeaGf25upb +kSMEKByPZUBFiLhh6HgzTswyZk32hcc5O66rrQe/qnA4PBhputXeaPB7UIDAmJlB +z7UigHmnvIKVX3ZS+gzr0FncBLn1BrTMaBlOM403wXexKTG6p2EXOR4EWnLzYytK +K9pm0x1HPd3sYKjUWZrNlHzR2pAeAFSVpYSdP/FkIn6kqSepLuxen1JX5EXp0z4Z +bNqQMVFFQ3fVdF0u91LefMuPrZ1fE1qp6cFJ+MTXlMUxQiPj7VVkRyqJi7dve0ka +x/GIBn/8QhDsf/I9p+ZwhtLn/hxjlo/X0EX5Pb5D+7aEzqkQbKJ+aSCS5QkCEtVX +DpCHEnVVybZlM0TSvV6m +=y+0H -----END PGP SIGNATURE-----