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,11 +462,11 @@ 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. @@ -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 +iQIcBAABCAAGBQJYVwVLAAoJEFAslq9JXcLZV4UQAKmMmmr7Dt82toNUwCUjo16M +TvqBNC/u4smP6/SRqcJv/vVWwZ6f4t+DBLDKkW6CcWkkZo9/eG4UTNwugWaGxyzv +5M2IG4BYkNAjadXkYyyr778A5MM3rOoCv5Y3M9AQKGgVFBcxZolAmu6ZCKqFdQpZ +BXRI6n6wPFuzPUtG2KVEP4T95Fw+XHZ0w++JMnM+s8a3eOtDTKkrzJhvFl0wQNcS +xbqQKe6yRriWixH7n5E0ZYqNXpK+/eZWFtJKcTGlN/9qJHGdP20rH+e6Deaur0pT +bZ1NEdINdWgFUTJq+trNhD8RGjNKWfxyli8XZkL3DaYHzRm/bwMvsj1b4+2xj4qp +Y3mBngA6aUXQ4BFdkFc/jCDZfORKe+hfUR+OLRwu62f+ACzVH/tzB0ppUYDsFagM +F/rcy4/Gdoe61IQPHTYgT8YWN7WBdmHfoM+8/vhAZe1rc7cBEr0d2qFHMaPAuop+ +ajqV0EOa9hKy7Yv2VIhuEYb724XuT87UHnRMaX/550x+FyAI/1zhhw0E6Uib5vk6 +dFtj8uSJasyxMH5Q4uvzMJsAEmHE68IWv8uImsyWIpOd994gN6DCl486/2/D5bWe +QSrej7PStnTClMIjqtqtsOw7Gr7Kl0uwIHubj1fmhJu0Jq7AsKznD432aZnP1MCG +cR1Wr4EgYSr79vX9Cd6s +=Lcfm -----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 + 041a78ad-def2-468e-93e5-a4187d69b9fc SHA512 Script - 2016-11-15T05:29:42.7643484Z + 2016-12-18T21:52:29.3681640Z -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 +iQIcBAABCAAGBQJYVwVMAAoJEFAslq9JXcLZAmcQAL6t6rLSpsVOv9oxVowgdcj2 +vMiYFiyXbvzqrZhUlfBsalSyrJe1wBHug9C7oZo081v6zvi5WnA5d1CQ8ukRfTyj +i9Ip15U/QsCvPu9sFclhkfUdncJL59rcLSfMxEBpDJsrfIlcFPhK1BtwvmhGtMAm +7kHPYEeqqOj8GQtXUmLoftb1gpqV9c9e3cXd9hwKxFDma/RE/02wv7t83Sd5Jik/ +4weq2o541CqXyl0Y5z2HYuwDlNOzEw6kG3NRyoU1MwvfgBW9WOyZd4hhRERcMb3g +71ljRtwfq0sbJv6cGMaJIRziewPHCIW8bGjOAnmGqEqag0yh6YNCm7uf7QodF+bo +G/u4MulM0FI0SvTshLCtbsyE/bA3HC9kRpOL6kVLcCw5V42SjlkAzyS5iZMXfxLG +E/icZXXQRNrhTyfILXAbVQqD2X1knw60QaXHpS5YRNd+9PgUPZIf4k2dykvQdtlX +OfFCbXHgxM9kX59DgzBFJF0yIGC9GEHGaglOxlOm838dpNu0Z0MFgsJcOpz0natZ +Ou1g77F485JhlF0mKOakTr09YDguGIl4KiqiDithalzFhx2K1kaygxIjEyXaiwmp +u/n1QjRDnN6mtgOGqK5X1/VFbvBpTpD61gjUde4FAeD/Qcoqbt0++dLhaUjmnVOs +orCqiEuvvHU2Fko25R/0 +=rePc -----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,11 +86,11 @@ # 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 \ $localFileName ::PackageRepository::probeForOpenPgpInstallation 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 +iQIcBAABCAAGBQJYVwVQAAoJEFAslq9JXcLZjr8QAJuN7+vXwwcoRjxfIy0JeRWn +Iyh9oNw07aFrJKcbXlvoKWe9BnIFpamNkmNsfMp+ai2Rvx4ilRX1uQk4OkbWtQG2 +eowGnGsfxXG0UhAlfZ6R/CBcAmYuf6q7VpJB04VnDv+nlCKtkJ1iibyzNBJBl4Pj +G/t/ij+V4gnQd946H0103tHjHc9ezDXktxyMo/JS5sxkV5y1XYwJ/xqj2nt1hC2z +EDwGcgIx6nkXmj8BN0tV1c6VRsbeL+4id66MY1yv1ySm9gXSVGNVnu1v5l/xo3E4 +d4CzD2rJHuPU9dudLBNqOkPTAFzxcS3PIUZDJJcHfE3H4+jUU4+NFDOb1IZgfClB +l8HZdd09bMoQ3xQwHPKyRn8baEvVGG2uP/gBwAzoo3L7TcvQKTTTGXYNK+3FpDYo +9GZReiMt/CHWDrS8SxPQ6tzaTCHEsn4Zxt/FPN6LYpr6qgrEKb8xabcBlDdz2EWq +qgba4cG4EU+T6nJcpJzLDssyb+Mkekv30r+fT3U+XNfqTXXXkTo+qkzZYJSyIRPF +rb3UBXM6rr5Xoo+u7npu7g4zX0gK5b+Vux8UxxSVNvt4S4QJESyT+LmMRXSBaQx6 +39mdE5mi+U6Ge8quigFuMJSbB/l0y04CdmyFYmBYKaJ6fX98XiDM1TpUDuQ8vQD0 +wO6bmZfAxbB4rtLeOMU3 +=bfmi -----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 + 34291b75-8cb2-435c-a1e6-35f409884f68 SHA512 Script - 2016-12-17T05:23:19.9599609Z + 2016-12-18T21:52:51.8710937Z -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 +iQIcBAABCAAGBQJYVwVRAAoJEFAslq9JXcLZPPsP/2tAc2JDdMYVAVMPMFTOxSdi +h1mpmlnJt9KESfYTW6k5JTSXcwqlRGwqe9kUCFnH7M6h3Gs44xtK9zFHp5IpZYN1 +qxC6fw1Qd4usev7rq2C4n8CddzdSgg3UyT+P7jIsQKKDU639fG4TyPFh2yJdpThK +kPNwXmCDWrygPFAwLRDCk4sPXx9DiaKd7EL6Ce+qlvaOC80oyHi6oRdvkJcIrOjz +IN3klBEpOTAw0A6UTz9HuW7Ooj9lWEB5CdEuBRVI5uX/5C2GIU4yNC7ljZDmB8Z5 +65zKMzLefLOgFaMw77Uw/8ENJTy7Pc3iZvLFlkyKs5dbfZudv7tzesPpMItQj9gX +kkZkA5DORKhXDJHSKgV/QzyFmHxUiWoWwjgSraqvGQIHrzPTZMBl+6f8aGgWQ5Qm +6aIkMtqAjryb6WlQ4j81CMpILw7I1HRM5i26KFbyIGtEeu7XRGGB+Ytm5v3CzIh1 +wpu5ejsAQ9VsEIq7ecwFYnEDSK4FJudzFfo9b51qz0NZ65XdiNTPNrL2Xnwa+Edn +LCv0oB8QO6olHNuWzwZXKX9gFTbanBXX3jTTps2jx/D7COd5AlzC+cmNWWKLdxhd +SdBouaREWajpyjRxQ5dOjf9fCISlIP2XCnzTQfqEZGVQgcAy7tDa7rydF317G+F4 +5rlCwgN/Q4eggSnmCfr8 +=/btw -----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-----