xplanet-1.3.0/0000755000175000017500000000000011731372543010175 500000000000000xplanet-1.3.0/src/0000755000175000017500000000000011731372543010764 500000000000000xplanet-1.3.0/src/sphericalToPixel.h0000644000175000017500000000050110411344513014316 00000000000000#ifndef SPHERICAL_TO_PIXEL_H #define SPHERICAL_TO_PIXEL_H class Planet; class PlanetProperties; class ProjectionBase; class View; extern bool sphericalToPixel(const double lat, const double lon, const double rad, double &X, double &Y, double &Z, Planet *planet, View *view, ProjectionBase *projection); #endif xplanet-1.3.0/src/ssec.cpp0000644000175000017500000001553310411417337012347 00000000000000#include #include #include #include using namespace std; #include "findFile.h" #include "xpUtil.h" #include "libimage/Image.h" /* Convert lon, lat coordinates to screen coordinates for the Mollweide projection. */ static void sphericalToPixel(const int width, const int height, const double lon, const double lat, int &x, int &y) { double theta = lat; double del_theta = 1; while (fabs(del_theta) > 1e-5) { del_theta = -((theta + sin(theta) - M_PI * sin(lat)) / (1 + cos(theta))); theta += del_theta; } theta /= 2; double X = lon / M_PI * cos(theta); double Y = sin(theta); x = (int) ((X + 1) * width/2); y = (int) (height/2 * (1 - Y)); } /* Convert x, y coordinates on the screen to lon, lat for a rectangular projection. */ static void pixelToSpherical(const int width, const int height, const int x, const int y, double &lon, double &lat) { lon = (x + 0.5) * TWO_PI / width - M_PI; lat = M_PI_2 - (y + 0.5) * M_PI / height; } static void equalizeHistogram(unsigned char *&rgb, const int width, const int height) { // create a histogram int *hist = new int[256]; for (int i = 0; i < 256; i++) hist[i] = 0; for (int i = 0; i < 3 * width * height; i += 3) hist[(int) rgb[i]]++; // create an integrated histogram int *ihist = new int[256]; ihist[0] = hist[0]; for (int i = 1; i < 256; i++) ihist[i] = ihist[i-1] + hist[i]; // replace the histogram by an intensity map double denom = static_cast (ihist[255] - ihist[0]); if (denom > 0) { for (int i = 0; i < 256; i++) hist[i] = static_cast (255 * (ihist[i] - ihist[0])/denom); for (int i = 0; i < 3 * width * height; i++) rgb[i] = static_cast (hist[static_cast(rgb[i])]); } delete [] hist; delete [] ihist; } /* This routine reads in a global cloud image downloaded from http://www.ssec.wisc.edu/data/comp/latest_moll.gif and reprojects and resizes the image, gets rid of the ugly pink coastlines, and stretches the contrast. */ static bool convertSsecImage(Image *image, unsigned char *&rgb) { // There's a 20 pixel border on the left & right and a 10 pixel border // on the top and bottom image->Crop(10, 20, image->Width() - 10, image->Height() - 20); const int image_height = image->Height(); const int image_width = image->Width(); // This array will hold the final cloud image rgb = (unsigned char *) malloc(3 * image_width * image_height); if (rgb == NULL) return(false); memset(rgb, 0, 3 * image_width * image_height); // This converts the mollweide projection to rectangular double lon, lat; int ipos = 0; const unsigned char *moll = image->getRGBData(); for (int j = 0; j < image_height; j++) { for (int i = 0; i < image_width; i++) { int ii, jj; pixelToSpherical(image_width, image_height, i, j, lon, lat); sphericalToPixel(image_width, image_height, lon, lat, ii, jj); memcpy(rgb + ipos, moll + 3 * (jj * image_width + ii), 3); ipos += 3; } } int avg; int npoints; int avgwhole = 0; int npointswhole = 0; // Replace pink outlines by the average value in a 10x10 pixel square. for (int j = 0; j < 31; j++) { for (int i = 0; i < 62; i++) { avg = 0; npoints = 0; for (int jj = 0; jj < 10; jj++) { for (int ii = 0; ii < 10; ii++) { ipos = 3*((10 * j + jj) * 620 + 10 * i + ii); if (!(rgb[ipos] == 0xff && rgb[ipos+1] == 0 && rgb[ipos+2] == 0xff)) { npoints++; avg += (int) rgb[ipos]; npointswhole++; avgwhole += (int) rgb[ipos]; } } } if (npoints != 0) avg = (int) (avg / (double) npoints); for (int jj = 0; jj < 10; jj++) { for (int ii = 0; ii < 10; ii++) { ipos = 3*((10 * j + jj) * 620 + 10 * i + ii); if (rgb[ipos] == 0xff && rgb[ipos+1] == 0 && rgb[ipos+2] == 0xff) memset(rgb + ipos, avg, 3); } } } } // Fill in the poles if (npointswhole != 0) avgwhole = (int) (avgwhole / (double) npointswhole); for (int i = 0; i < image_width * image_height; i++) { ipos = 3 * i; if (rgb[ipos] < 0x03) memset(rgb + ipos, avgwhole, 3); } // Smooth out the seam at 180 degrees Longitude double eastVal, westVal; int eastIndex, westIndex; for (int i = 0; i < image_height - 1; i++) { eastIndex = 3 * (i * image_width + 1); westIndex = 3 * ((i + 1) * image_width - 2); eastVal = (double) rgb[eastIndex]; westVal = (double) rgb[westIndex]; memset(rgb + eastIndex - 3, (int) (eastVal + (westVal - eastVal)/3), 3); memset(rgb + westIndex + 3, (int) (westVal + (eastVal - westVal)/3), 3); } equalizeHistogram(rgb, image_width, image_height); return(true); } void loadSSEC(Image *&image, const unsigned char *&rgb, string &imageFile, const int imageWidth, const int imageHeight) { bool foundFile = findFile(imageFile, "images"); if (foundFile) { image = new Image; foundFile = image->Read(imageFile.c_str()); } if (foundFile) { unsigned char *tmpRGB = NULL; if (!convertSsecImage(image, tmpRGB)) { ostringstream errStr; errStr << "Can't read SSEC map file: " << imageFile << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } Image *tmpImage = image; image = new Image(image->Width(), image->Height(), tmpRGB, NULL); delete tmpImage; free(tmpRGB); if ((image->Width() != imageWidth) || (image->Height() != imageHeight)) { ostringstream errStr; errStr << "Resizing SSEC cloud map\n" << "For better performance, all image maps should " << "be the same size as the day map\n"; xpWarn(errStr.str(), __FILE__, __LINE__); image->Resize(imageWidth, imageHeight); } rgb = image->getRGBData(); } else { ostringstream errStr; errStr << "Can't load map file " << imageFile << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } xplanet-1.3.0/src/Options.h0000644000175000017500000003007511716027606012515 00000000000000#ifndef OPTIONS_H #define OPTIONS_H #include #include #include #include "body.h" class PlanetProperties; class Options { public: static Options* getInstance(); Options(); ~Options(); void parseArgs(int argc, char **argv); const std::vector & ArcFiles() const { return(arcFiles_); }; double ArcSpacing() const { return(arcSpacing_); }; int ArcThickness() const { return(arcThickness_); }; const std::string & Background() const { return(background_); }; double BaseMagnitude() const { return(baseMag_); }; bool CenterSelected() const { return(centerSelected_); }; void CenterX(const double x) { centerX_ = x; }; void CenterY(const double y) { centerY_ = y; }; double CenterX() const { return(centerX_); }; double CenterY() const { return(centerY_); }; const std::string & ConfigFile() const { return(configFile_); }; const unsigned char * Color() const { return(color_); }; const std::string & DateFormat() const { return(dateFormat_); }; int DisplayMode() const { return(displayMode_); }; bool DrawLabel() const { return(drawLabel_); }; bool DrawUTCLabel() const { return(drawUTCLabel_); }; const std::string & DynamicOrigin() const { return(dynamicOrigin_); }; double FieldOfView() const { return(fov_); }; void FieldOfView(const double f) { fov_ = f; }; const std::string & Font() const { return(font_); }; int FontSize() const { return(fontSize_); }; bool Fork() const { return(fork_); }; int FOVMode() const { return(fovMode_); }; void FOVMode(const int f) { fovMode_ = f; }; double Glare() const { return(glare_); }; double GRSLon() const { return(grsLon_); }; bool GRSSet() const { return(grsSet_); }; unsigned long Hibernate() const { return(hibernate_); }; unsigned long IdleWait() const { return(idleWait_); }; bool InterpolateOriginFile() const { return(interpolateOriginFile_); }; const std::string & JPLFile() const { return(jplFile_); }; int JPEGQuality() const { return(quality_); }; double JulianDay() const { return(julianDay_); }; body LabelBody() const { return(labelBody_); }; int LabelMask() const { return(labelMask_); }; int LabelX() const { return(labelX_); }; int LabelY() const { return(labelY_); }; const std::string & LabelString() const { return(labelString_); }; double Latitude() const { return(latitude_); }; void Latitude(const double b) { latitude_ = b; }; bool LightTime() const { return(lightTime_); }; double LocalTime() const { return(localTime_); }; void LocalTime(const double l) { localTime_ = l; }; double LogMagnitudeStep() const { return(logMagStep_); }; double Longitude() const { return(longitude_); }; void Longitude(const double l) { longitude_ = l; }; bool MakeCloudMaps() const { return(makeCloudMaps_); }; const std::vector & MarkerFiles() const { return(markerFiles_); }; const std::string & MarkerBounds() const { return(markerBounds_); }; int North() const { return(north_); }; int NumTimes() const { return(numTimes_); }; void NumTimes(const int n) { numTimes_ = n; }; bool OppositeSide() const { return(oppositeSide_); }; int OriginMode() const { return(originMode_); }; body Origin() const { return(origin_); }; void Origin(const body b) { origin_ = b; }; const std::string & OriginFile() const { return(originFile_); }; int OriginID() const { return(originID_); }; const std::string & OutputBase() const { return(outputBase_); }; const std::string & OutputExtension() const { return(outputExt_); }; const std::string & OutputMapRect() const { return(outputMapRect_); }; int OutputStartIndex() const { return(outputStartIndex_); }; bool Pango() const { return(pango_); }; body PathRelativeTo() const { return(pathRelativeTo_); }; int PathRelativeToID() const { return(pathRelativeToID_); }; const std::string & PostCommand() const { return(post_command_); }; const std::string & PrevCommand() const { return(prev_command_); }; body Primary() const { return(primary_); }; void Primary(const body p) { primary_ = p; }; bool PrintEphemeris() const { return(printEphemeris_); }; int Projection() const { return(projection_); }; void Projection(const int p) { projection_ = p; }; int ProjectionMode() const { return(projectionMode_); }; const std::vector & ProjectionParameters() const { return(projectionParameters_); }; void AddProjectionParameter(double p) { projectionParameters_.push_back(p); }; double Radius() const { return(radius_); }; void Radius(const double r) { radius_ = r; }; bool RandomLatLonRot() const { return(random_); }; double Range() const { return(range_); }; void Range(const double r) { range_ = r; }; bool RangeSpecified() const { return(rangeSpecified_); }; const std::string & RayleighFile() const { return(rayleighFile_); }; void Rotate0(const double r) { rotate0_ = r; }; double Rotate() const { return(rotate_); }; void Rotate(const double r) { rotate_ = rotate0_ + r; }; const std::vector & getSearchDir() const { return(searchdir); }; bool SaveDesktopFile() const { return(saveDesktopFile_); }; const std::vector & SpiceEphemeris() const { return(spiceEphemeris_); }; const std::vector & SpiceFiles() const { return(spiceFiles_); }; double StarFreq() const { return(starFreq_); }; const std::string & getStarMap() const { return(star_map); }; double SeparationDist() const { return(separationDist_); }; body SeparationTarget() const { return(separationTarget_); }; double SunLat() const { return(sunLat_); }; void SunLat(const double b) { sunLat_ = b; }; double SunLon() const { return(sunLon_); }; void SunLon(const double l) { sunLon_ = l; }; body Target() const { return(target_); }; void Target(const body b) { target_ = b; }; int TargetID() const { return(targetID_); }; int TargetMode() const { return(targetMode_); }; double getTimeWarp() const { return(timewarp); }; time_t TVSec() const { return(tv_sec); }; bool TransPNG() const { return(transpng_); }; bool Transparency() const { return(transparency_); }; std::string TmpDir() const { return(tmpDir_); }; bool UniversalTime() const { return(universalTime_); }; int Verbosity() const { return(verbosity_); }; bool VirtualRoot() const { return(virtual_root); }; int getWait() const { return(wait); }; int getWindowX() const { return(windowX_); }; int getWindowY() const { return(windowY_); }; const std::string & WindowTitle() const { return(windowTitle_); }; unsigned long XID() const { return(xid_); }; const std::string & XYZFile() const { return(XYZFile_); }; bool GeometrySelected() const { return(geometrySelected_); }; int GeometryMask() const { return(geometryMask_); }; int getWidth() const { return((int) width); }; int getHeight() const { return((int) height); }; void getOrigin(double &X, double &Y, double &Z); void setOrigin(const double X, const double Y, const double Z); void getTarget(double &X, double &Y, double &Z); void setTarget(const double X, const double Y, const double Z); bool UseCurrentTime() const { return(useCurrentTime_); }; void incrementTime(const double sec); void setTime(const double jd); private: static Options *instance_; std::vector arcFiles_; double arcSpacing_; int arcThickness_; std::string background_; double baseMag_; // a star of this magnitude has a pixel // brightness of 1 bool centerSelected_; double centerX_, centerY_; unsigned char color_[3]; std::string configFile_; std::string dateFormat_; int displayMode_; bool drawLabel_; bool drawUTCLabel_; std::string dynamicOrigin_; std::string font_; int fontSize_; bool fork_; double fov_; // field of view int fovMode_; int geometryMask_; bool geometrySelected_; double glare_; double grsLon_; bool grsSet_; unsigned long hibernate_; unsigned long idleWait_; bool interpolateOriginFile_; std::string jplFile_; double julianDay_; int labelMask_; int labelX_; int labelY_; body labelBody_; // print this body's info in the label std::string labelString_; double latitude_; bool lightTime_; double localTime_; double logMagStep_; // log (base 10) of brightness increase for // each step in magnitude (default 0.4) double longitude_; bool makeCloudMaps_; std::string markerBounds_; std::vector markerFiles_; int north_; // BODY, GALACTIC, ORBIT, or TERRESTRIAL int numTimes_; bool oppositeSide_; body origin_; std::string originFile_; int originID_; // for NAIF or NORAD bodies int originMode_; // BODY, LBR, RANDOM, MAJOR, // SYSTEM, ABOVE, BELOW std::string outputBase_; std::string outputExt_; std::string outputMapRect_; int outputStartIndex_; // start numbering output files with this // index double oX_, oY_, oZ_; // heliocentric rectangular coordinates of // the observer bool pango_; body pathRelativeTo_; int pathRelativeToID_; std::string post_command_; // command to run after xplanet renders std::string prev_command_; // command to run before xplanet renders body primary_; bool printEphemeris_; int projection_; // type of map projection int projectionMode_; // type of map projection std::vector projectionParameters_; // extra parameters // used for projection int quality_; // For JPEG images double radius_; // radius of the body, as a fraction of the // height of the display bool random_; bool rangeSpecified_; // if the -range option is used double range_; // distance from the body, in units of its radius std::string rayleighFile_; // used to create Rayleigh scattering lookup tables double rotate_; // rotate0 plus any increments double rotate0_; // rotation angle specified on command line bool saveDesktopFile_; double separationDist_; // separation from the primary target body separationTarget_; // secondary target std::vector spiceEphemeris_; std::vector spiceFiles_; double starFreq_; std::string star_map; double sunLat_, sunLon_; // these aren't options and shouldn't // be here, but it's a convenient way // to put them in the label body target_; int targetID_; // for NAIF or NORAD bodies int targetMode_; // BODY, RANDOM, MAJOR double timewarp; // multiplication factor for the passage of time std::string tmpDir_; bool transparency_; bool transpng_; double tX_, tY_, tZ_; // heliocentric rectangular coordinates of // the target bool universalTime_; bool useCurrentTime_; int verbosity_; bool virtual_root; int wait; // time (in seconds) to wait between updates unsigned int width, height; int windowX_, windowY_; std::string windowTitle_; unsigned long xid_; std::string XYZFile_; // file containing XYZ coordinates of // target, origin, and/or north std::vector searchdir; // check these directories for files time_t tv_sec; // UNIX time (seconds from 00:00:00 UTC on // January 1, 1970) void showHelp(); }; #endif xplanet-1.3.0/src/Makefile.am0000644000175000017500000000314210500402640012721 00000000000000SUBDIRS = libannotate libdisplay libephemeris libimage libmultiple libplanet libprojection libsgp4sdp4 bin_PROGRAMS = xplanet EXTRA_xplanet_SOURCES = ParseGeom.c ParseGeom.h if !HAVE_LIBX11 parsegeom = ParseGeom.c ParseGeom.h endif AM_CPPFLAGS = -DDATADIR=\"$(datadir)@separator@xplanet\" @X_CFLAGS@ @FREETYPE_CFLAGS@ AM_LDFLAGS = @xplanet_LDFLAGS@ xplanet_SOURCES = \ Map.cpp \ Map.h \ Options.cpp \ Options.h \ PlanetProperties.h \ PlanetProperties.cpp \ Ring.cpp \ Ring.h \ Satellite.h \ Satellite.cpp \ Separation.h \ Separation.cpp \ View.cpp \ View.h \ body.h \ buildPlanetMap.h \ buildPlanetMap.cpp \ createMap.h \ createMap.cpp \ drawMultipleBodies.cpp \ drawProjection.cpp \ findBodyXYZ.h \ findBodyXYZ.cpp \ findFile.h \ findFile.cpp \ getopt.c \ getopt.h \ getopt1.c \ keywords.h \ parse.h \ parse.cpp \ parseColor.h \ parseColor.cpp \ printVersion.cpp \ readConfig.cpp \ readOriginFile.h \ readOriginFile.cpp \ satrings.h \ ssec.cpp \ setPositions.h \ setPositions.cpp \ sphericalToPixel.h \ sphericalToPixel.cpp \ xpGetopt.h \ xpUtil.cpp \ xpUtil.h \ xplanet.cpp \ $(parsegeom) xplanet_LDADD = libannotate/libannotate.a \ libdisplay/libdisplay.a \ libdisplay/libtimer.a \ libephemeris/libephemeris.a \ libephemeris/libmoons/libmoons.a \ libimage/libimage.a \ libmultiple/libmultiple.a \ libplanet/libplanet.a \ libprojection/libprojection.a \ libsgp4sdp4/libsgp4sdp4.a \ @GRAPHICS_LIBS@ @CSPICE_LIBS@ @X_LIBS@ \ @XSS_LIBS@ @FREETYPE_LIBS@ @AQUA_LIBS@ \ @LIBICONV@ @LIBCHARSET@ xplanet-1.3.0/src/readOriginFile.h0000644000175000017500000000124210423221014013716 00000000000000#ifndef READ_ORIGIN_FILE_H #define READ_ORIGIN_FILE_H #include #include struct LBRPoint { double time; double radius; double latitude; double longitude; double localTime; }; extern void readOriginFile(std::string filename, std::vector &originMap); extern void readDynamicOrigin(string filename, LBRPoint &originPoint); extern void interpolateOriginFile(const double julianDay, const vector &originVector, double &rad, double &lat, double &lon, double &localTime); #endif xplanet-1.3.0/src/Ring.cpp0000644000175000017500000001673711164146303012316 00000000000000#include #include #include using namespace std; #include "Ring.h" #include "xpUtil.h" #include "libplanet/Planet.h" Ring::Ring(const double inner_radius, const double outer_radius, const double *ring_brightness, const int num_bright, const double *ring_transparency, const int num_trans, const double sunlon, const double sunlat, const double shade, map &planetsFromSunMap, Planet *p) : planet_(p), shade_(shade), sunLat_(sunlat), sunLon_(sunlon) { r_out = outer_radius * 1.01; // fudge to agree better with Cassini dr_b = (outer_radius - inner_radius) / num_bright; dr_t = (outer_radius - inner_radius) / num_trans; const int innerPadding = 100; const int outerPadding = 20; num_b = outerPadding + num_bright + innerPadding; num_t = outerPadding + num_trans + innerPadding; // brightness and transparency arrays are from the outside in radius_b = new double[num_b]; for (int i = 0; i < num_b; i++) radius_b[i] = r_out - i * dr_b; brightness = new double[num_b]; // drop the brightness to 0 at the outer radius for (int i = 0; i < outerPadding; i++) { double weight = ((double) i) / (outerPadding - 1); brightness[i] = weight * ring_brightness[0]; } for (int i = 0; i < num_bright; i++) brightness[i + outerPadding] = ring_brightness[i]; for (int i = 0; i < innerPadding; i++) brightness[outerPadding + num_bright + i] = ring_brightness[num_bright-1]; radius_t = new double[num_t]; for (int i = 0; i < num_t; i++) radius_t[i] = r_out - i * dr_t; transparency = new double[num_t]; // bring the transparency up to 1 at the outer radius for (int i = 0; i < outerPadding; i++) { double weight = ((double) i) / (outerPadding - 1); transparency[i] = (1 - (1 - ring_transparency[0]) * weight); } for (int i = 0; i < num_trans; i++) transparency[i + outerPadding] = ring_transparency[i]; // bring the transparency up to 1 at the inner radius for (int i = 0; i < innerPadding; i++) { double weight = 1 - ((double) i) / (innerPadding - 1); transparency[outerPadding + num_trans + i] = (1 - (1-ring_transparency[num_trans-1]) * weight); } // make the rings darker as we get closer to equinox const double sin_sun_lat_025 = pow(abs(sin(sunLat_)), 0.25); for (int i = 0; i < num_b; i++) brightness[i] *= sin_sun_lat_025; brightness_dark = new double[num_t]; for (int i = 0; i < num_t; i++) brightness_dark[i] = transparency[i] * sin_sun_lat_025; planet_->XYZToPlanetaryXYZ(0, 0, 0, sunX_, sunY_, sunZ_); planetsFromSunMap_.clear(); planetsFromSunMap_.insert(planetsFromSunMap.begin(), planetsFromSunMap.end()); } Ring::~Ring() { delete [] radius_b; delete [] brightness; delete [] radius_t; delete [] transparency; } /* Given a subsolar point and a location on the planet surface, check if the surface location can be in shadow by the rings, and if so, return the ring radius. */ double Ring::getShadowRadius(double lat, double lon) { // If this point is on the same side of the rings as the sun, // there's no shadow. if(sunLat_ * lat >= 0) return(-1); const double rad = planet_->Radius(lat); planet_->PlanetographicToPlanetocentric(lat, lon); const double x = rad * cos(lat) * cos(lon); const double y = rad * cos(lat) * sin(lon); const double z = rad * sin(lat); const double dist = z/sunZ_; const double dx = x - sunX_ * dist; const double dy = y - sunY_ * dist; return(sqrt(dx * dx + dy * dy)); } double Ring::getBrightness(const double lon, const double r) { return(getValue(brightness, num_b, window_b, dr_b, r, lon)); } double Ring::getBrightness(const double lon, const double r, const double t) { double returnval; if (t == 1.0) { returnval = 0; } else { returnval = getValue(brightness_dark, num_t, window_t, dr_t, r, lon); } return(returnval); } double Ring::getTransparency(const double r) { return(getValue(transparency, num_t, window_t, dr_t, r)); } double Ring::getValue(const double *array, const int size, const int window, const double dr, const double r) { int i = static_cast ((r_out - r)/dr); if (i < 0 || i >= size) return(-1.0); int j1 = i - window; int j2 = i + window; if (j1 < 0) j1 = 0; if (j2 >= size) j2 = size - 1; double sum = 0; for (int j = j1; j < j2; j++) sum += array[j]; sum /= (j2 - j1); return(sum); } double Ring::getValue(const double *array, const int size, const int window, const double dr, const double r, const double lon) { int i = static_cast ((r_out - r)/dr); if (i < 0 || i >= size) return(-1.0); int j1 = i - window; int j2 = i + window; if (j1 < 0) j1 = 0; if (j2 >= size) j2 = size - 1; bool shaded[j2-j1]; for (int j = 0; j < j2-j1; j++) shaded[j] = false; const double cosLon = cos(lon); const double sinLon = sin(lon); // planet's distance from the sun double cX, cY, cZ; planet_->getPosition(cX, cY, cZ); double p_dist = sqrt(cX*cX + cY*cY + cZ*cZ); for (map::iterator it0 = planetsFromSunMap_.begin(); it0 != planetsFromSunMap_.end(); it0++) { Planet *p = it0->second; if (p->Index() == planet_->Index()) { // Only check behind the planet for its own shadow if (cos(lon-sunLon_) > -0.45) break; } else if (p->Primary() == planet_->Index()) { // Check that the planet-sun-satellite angle is // smaller than the angular size of the rings seen // from the sun double pX, pY, pZ; p->getPosition(pX, pY, pZ); double sep = abs(acos(ndot(pX, pY, pZ, cX, cY, cZ))); if (sep > r_out * planet_->Radius() / p_dist) continue; } else { // Don't worry about this body shadowing the rings continue; } double r0 = r; for (int j = j1; j < j2; j++) { if (shaded[j-j1]) continue; const double rX = r0 * cosLon; const double rY = -r0 * sinLon; const double rZ = 0; double X, Y, Z; planet_->PlanetaryXYZToXYZ(rX, rY, rZ, X, Y, Z); // convert this point on the rings to this planet's // XYZ coordinate system double thisX, thisY, thisZ; p->XYZToPlanetaryXYZ(X, Y, Z, thisX, thisY, thisZ); if (p->IsInMyShadow(thisX, thisY, thisZ)) shaded[j-j1] = true; r0 += dr; } if (p->Index() == planet_->Index()) break; } double sum = 0; for (int j = j1; j < j2; j++) { if (shaded[j-j1]) sum += (shade_ * array[j]); else sum += array[j]; } sum /= (j2 - j1); return(sum); } // units for dist_per_pixel is planetary radii void Ring::setDistPerPixel(const double dist_per_pixel) { window_b = static_cast (dist_per_pixel / dr_b + 0.5); window_t = static_cast (dist_per_pixel / dr_t + 0.5); window_b = window_b/2 + 1; window_t = window_t/2 + 1; } xplanet-1.3.0/src/setPositions.cpp0000644000175000017500000004500711107137174014115 00000000000000#include #include #include #include using namespace std; #include "buildPlanetMap.h" #include "findBodyXYZ.h" #include "keywords.h" #include "PlanetProperties.h" #include "Options.h" #include "readOriginFile.h" #include "Separation.h" #include "xpUtil.h" #include "libplanet/Planet.h" // if an origin file is being used, set the observer position from it static void setOriginXYZFromFile(const vector &originVector, const vector::iterator &iterOriginVector) { Options *options = Options::getInstance(); // if an origin file is specified, set observer position from it if (!options->OriginFile().empty()) { if (options->InterpolateOriginFile()) { // interpolate positions in the origin file to the // current time double thisRad, thisLat, thisLon, thisLocalTime = -1; interpolateOriginFile(options->JulianDay(), originVector, thisRad, thisLat, thisLon, thisLocalTime); options->Range(thisRad); options->Latitude(thisLat); options->Longitude(thisLon); options->LocalTime(thisLocalTime); } else { // Use the next time in the origin file options->setTime(iterOriginVector->time); // Use the position, if specified, in the origin file if (iterOriginVector->radius > 0) { options->Range(iterOriginVector->radius); options->Latitude(iterOriginVector->latitude); options->Longitude(iterOriginVector->longitude); // Use the local time, if specified, in the origin file if (iterOriginVector->localTime > 0) options->LocalTime(iterOriginVector->localTime); } } } // if -dynamic_origin was specified, set observer position // from it. if (!options->DynamicOrigin().empty()) { LBRPoint originPoint; readDynamicOrigin(options->DynamicOrigin(), originPoint); options->Range(originPoint.radius); options->Latitude(originPoint.latitude); options->Longitude(originPoint.longitude); options->LocalTime(originPoint.localTime); } } // set the position of the target. The coordinates are stored in the // Options class. static void setTargetXYZ(PlanetProperties *planetProperties[]) { Options *options = Options::getInstance(); switch (options->TargetMode()) { case MAJOR: case RANDOM: { bool no_random_target = true; for (int i = 0; i < RANDOM_BODY; i++) { if (planetProperties[i]->RandomTarget()) { no_random_target = false; break; } } if (no_random_target) { ostringstream errMsg; errMsg << "random_target is false for all bodies. " << "Check your config file.\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } bool found_target = false; while (!found_target) { body target = (body) (random() % RANDOM_BODY); options->Target(target); found_target = planetProperties[target]->RandomTarget(); if (found_target && options->TargetMode() == MAJOR) { Planet p(options->JulianDay(), options->Target()); found_target = (p.Primary() == SUN); } } } // fall through case BODY: { Planet t(options->JulianDay(), options->Target()); options->Primary(t.Primary()); } break; case XYZ: if (options->Target() == NORAD) { options->Primary(EARTH); } else { options->Primary(SUN); } break; default: xpExit("Unknown target mode?\n", __FILE__, __LINE__); } double tX, tY, tZ; if (options->Target() == ALONG_PATH) { findBodyVelocity(options->JulianDay(), options->Origin(), options->OriginID(), options->PathRelativeTo(), options->PathRelativeToID(), tX, tY, tZ); tX *= FAR_DISTANCE; tY *= FAR_DISTANCE; tZ *= FAR_DISTANCE; } else { findBodyXYZ(options->JulianDay(), options->Target(), options->TargetID(), tX, tY, tZ); } options->setTarget(tX, tY, tZ); } // set the position of the origin. The coordinates are stored in the // Options class. static void setOriginXYZ(PlanetProperties *planetProperties[]) { double oX, oY, oZ; Options *options = Options::getInstance(); switch (options->OriginMode()) { case LBR: { if (options->RandomLatLonRot()) { double longitude; longitude = random() % 360; longitude *= deg_to_rad; options->Longitude(longitude); // Weight random latitudes towards the equator double latitude; latitude = (random() % 2000)/1000.0 - 1; latitude = asin(latitude); options->Latitude(latitude); double rotate0; rotate0 = random() % 360; rotate0 *= deg_to_rad; options->Rotate0(rotate0); options->Rotate(0); } if (options->Origin() == NAIF || options->Origin() == NORAD) { findBodyXYZ(options->JulianDay(), options->Origin(), options->OriginID(), oX, oY, oZ); } else { // Set the observer's lat & lon. Usually this is in the // frame of the target body, but if the origin file option // is used, the observer is in the origin body's // geographic frame. body referenceBody = options->Target(); if (!options->OriginFile().empty() || !options->DynamicOrigin().empty()) referenceBody = options->Origin(); Planet p(options->JulianDay(), referenceBody); p.calcHeliocentricEquatorial(); if (options->LocalTime() >= 0) { double subSolarLat = 0; double subSolarLon = 0; p.XYZToPlanetographic(0, 0, 0, subSolarLat, subSolarLon); double longitude; longitude = (subSolarLon - M_PI + p.Flipped() * options->LocalTime() * M_PI / 12); options->Longitude(longitude); } p.PlanetographicToXYZ(oX, oY, oZ, options->Latitude(), options->Longitude(), options->Range()); } } break; case MAJOR: case RANDOM: case SYSTEM: { // check to see that at least one body has random_origin=true bool no_random_origin = true; for (int i = 0; i < RANDOM_BODY; i++) { if (i == options->Target()) continue; if (planetProperties[i]->RandomOrigin()) { no_random_origin = false; break; } } if (no_random_origin) { ostringstream errMsg; errMsg << "Target is " << planetProperties[options->Target()]->Name() << ", random_origin is false for all other bodies. " << "Check your config file.\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } bool found_origin = false; while (!found_origin) { options->Origin(static_cast (random() % RANDOM_BODY)); if (options->Verbosity() > 1) { ostringstream msg; msg << "target = " << body_string[options->Target()] << ", origin = " << body_string[options->Origin()] << endl; xpMsg(msg.str(), __FILE__, __LINE__); } if (options->Target() == options->Origin()) continue; if (options->OriginMode() == RANDOM) { found_origin = true; } else { Planet o(options->JulianDay(), options->Origin()); if (options->OriginMode() == MAJOR) { found_origin = (o.Primary() == SUN); } else if (options->OriginMode() == SYSTEM) { // SYSTEM means one of three things: // 1) origin is target's primary // 2) target is origin's primary // 3) target and origin have same primary found_origin = ((options->Origin() == options->Primary() || o.Primary() == options->Target() || options->Primary() == o.Primary())); } } if (found_origin) found_origin = planetProperties[options->Origin()]->RandomOrigin(); } // while (!found_origin) } // fall through case BODY: { findBodyXYZ(options->JulianDay(), options->Origin(), options->OriginID(), oX, oY, oZ); if (options->OppositeSide()) { double tX, tY, tZ; options->getTarget(tX, tY, tZ); oX = 2*tX - oX; oY = 2*tY - oY; oZ = 2*tZ - oZ; } } break; case ABOVE: case BELOW: { if (options->Target() == SUN) { ostringstream errMsg; errMsg << "-origin above or below not applicable for SUN. " << "Use -latitude 90 or -90 instead\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } double pX, pY, pZ; findBodyXYZ(options->JulianDay(), options->Primary(), -1, pX, pY, pZ); double vX, vY, vZ; findBodyVelocity(options->JulianDay(), options->Target(), options->TargetID(), options->Primary(), -1, vX, vY, vZ); // cross product of position and velocity vectors points to the // orbital north pole double tX, tY, tZ; options->getTarget(tX, tY, tZ); double pos[3] = { tX - pX, tY - pY, tZ - pZ }; double vel[3] = { vX, vY, vZ }; double north[3]; cross(pos, vel, north); double mag = sqrt(dot(north, north)); Planet primary(options->JulianDay(), options->Primary()); double dist = FAR_DISTANCE * primary.Radius(); oX = dist * north[0]/mag + pX; oY = dist * north[1]/mag + pY; oZ = dist * north[2]/mag + pZ; const double radius = sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]); // will only be zero if -fov or -radius haven't been specified if (options->FieldOfView() < 0) { options->FieldOfView(4*radius/dist); // fit the orbit on the screen options->FOVMode(FOV); } if (options->OriginMode() == BELOW) { oX -= 2 * (oX - pX); oY -= 2 * (oY - pX); oZ -= 2 * (oZ - pX); } } break; } if (options->RangeSpecified() && options->TargetMode() != XYZ) { Planet p2(options->JulianDay(), options->Target()); p2.calcHeliocentricEquatorial(); double latitude, longitude; p2.XYZToPlanetographic(oX, oY, oZ, latitude, longitude); p2.PlanetographicToXYZ(oX, oY, oZ, latitude, longitude, options->Range()); } if (options->SeparationTarget() < RANDOM_BODY) { // rectangular coordinates of the separation target double sX, sY, sZ; findBodyXYZ(options->JulianDay(), options->SeparationTarget(), -1, sX, sY, sZ); // rectangular coordinates of the primary target double tX, tY, tZ; Planet p(options->JulianDay(), options->Target()); p.calcHeliocentricEquatorial(); p.getPosition(tX, tY, tZ); // Save the range double latitude, longitude, range; p.XYZToPlanetographic(oX, oY, oZ, latitude, longitude, range); // place the observer 90 degrees from the separation target in // the primary target's equatorial plane double n[3]; p.getBodyNorth(n[0], n[1], n[2]); double s[3] = { sX - tX, sY - tY, sZ - tZ }; double c[3]; cross(s, n, c); c[0] += tX; c[1] += tY; c[2] += tZ; p.XYZToPlanetographic(c[0], c[1], c[2], latitude, longitude); p.PlanetographicToXYZ(oX, oY, oZ, latitude, longitude, range); Separation sep(oX, oY, oZ, tX, tY, tZ, sX, sY, sZ); sep.setSeparation(options->SeparationDist() * deg_to_rad); sep.getOrigin(oX, oY, oZ); } options->setOrigin(oX, oY, oZ); } // Set the observer's lat/lon with respect to the target body, if // appropriate void getObsLatLon(Planet *target, PlanetProperties *planetProperties[]) { Options *options = Options::getInstance(); // XYZ mode is where the target isn't a planetary body. // (e.g. the Cassini spacecraft) if (options->TargetMode() == XYZ) { if (options->LightTime()) setTargetXYZ(planetProperties); } else { if (target == NULL) xpExit("Can't find target body?\n", __FILE__, __LINE__); if (options->LightTime()) { double tX, tY, tZ; target->getPosition(tX, tY, tZ); options->setTarget(tX, tY, tZ); } // Rectangular coordinates of the observer double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Find the sub-observer lat & lon double obs_lat, obs_lon; target->XYZToPlanetographic(oX, oY, oZ, obs_lat, obs_lon); options->Latitude(obs_lat); options->Longitude(obs_lon); // Find the sub-solar lat & lon. This is used for the image // label double sunLat, sunLon; target->XYZToPlanetographic(0, 0, 0, sunLat, sunLon); options->SunLat(sunLat); options->SunLon(sunLon); } } // Set the direction of the "Up" vector void setUpXYZ(const Planet *target, map &planetsFromSunMap, double &upX, double &upY, double &upZ) { Options *options = Options::getInstance(); switch (options->North()) { default: xpWarn("Unknown value for north, using body\n", __FILE__, __LINE__); case BODY: target->getBodyNorth(upX, upY, upZ); break; case GALACTIC: { const double GN_LAT = 27.4 * deg_to_rad; const double GN_LON = 192.25 * deg_to_rad; upX = cos(GN_LAT) * cos(GN_LON); upY = cos(GN_LAT) * sin(GN_LON); upZ = sin(GN_LAT); } break; case ORBIT: { // if it's a moon, pretend its orbital north is the same as // its primary, although in most cases it's the same as its // primary's rotational north if (target->Primary() == SUN) { target->getOrbitalNorth(upX, upY, upZ); } else { Planet *primary = findPlanetinMap(planetsFromSunMap, target->Primary()); primary->getOrbitalNorth(upX, upY, upZ); } } break; case PATH: { double vX, vY, vZ; findBodyVelocity(options->JulianDay(), options->Origin(), options->OriginID(), options->PathRelativeTo(), options->PathRelativeToID(), vX, vY, vZ); upX = vX; upY = vY; upZ = vZ; } break; case SEPARATION: { if (options->SeparationTarget() < RANDOM_BODY) { double sX, sY, sZ; double tX, tY, tZ; double oX, oY, oZ; findBodyXYZ(options->JulianDay(), options->SeparationTarget(), options->TargetID(), sX, sY, sZ); options->getOrigin(oX, oY, oZ); options->getTarget(tX, tY, tZ); double t[3] = {tX - oX, tY - oY, tZ - oZ}; double s[3] = {sX - oX, sY - oY, sZ - oZ}; double c[3]; cross(s, t, c); if (sin(options->SeparationDist() * deg_to_rad) > 0) { upX = c[0]; upY = c[1]; upZ = c[2]; } else { upX = -c[0]; upY = -c[1]; upZ = -c[2]; } } else { xpWarn("No separation target given, using -north body\n", __FILE__, __LINE__); target->getBodyNorth(upX, upY, upZ); } } break; case TERRESTRIAL: upX = 0; upY = 0; upZ = 1; break; } double up[3] = {upX, upY, upZ}; normalize(up); upX = up[0]; upY = up[1]; upZ = up[2]; } void setPositions(const vector &originVector, const vector::iterator &iterOriginVector, Planet *&target, map &planetMap, PlanetProperties *planetProperties[]) { Options *options = Options::getInstance(); // set the observer's XYZ coordinates if an origin file has // been specified setOriginXYZFromFile(originVector, iterOriginVector); // Set the target's XYZ coordinates. setTargetXYZ(planetProperties); // Set the origin's XYZ coordinates. setOriginXYZ(planetProperties); // Find the target body in the list body target_body = options->Target(); target = findPlanetinMap(planetMap, target_body); if (options->LightTime()) { double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Destroy the existing planet map and build a new one buildPlanetMap(options->JulianDay(), oX, oY, oZ, true, planetMap); target = findPlanetinMap(planetMap, target_body); // Set the target's XYZ coordinates. setTargetXYZ(planetProperties); // Set the origin's XYZ coordinates. setOriginXYZ(planetProperties); } // Now find the observer's lat/lon getObsLatLon(target, planetProperties); } xplanet-1.3.0/src/readConfig.cpp0000644000175000017500000004420111724306745013455 00000000000000#include #include #include #include #include #include using namespace std; #include "body.h" #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parse.h" #include "PlanetProperties.h" #include "xpDefines.h" #include "xpUtil.h" #include "libplanet/Planet.h" static PlanetProperties *defaultProperties; static PlanetProperties *currentProperties; static void readConfig(const char *line, PlanetProperties *planetProperties[]) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) return; } if (isEndOfLine(line[i])) return; Options *options = Options::getInstance(); while (static_cast (i) < strlen(line)) { char *returnString = NULL; int val = parse(i, line, returnString); if (val != BODY && currentProperties == NULL) xpExit("No Planet defined in config file!\n", __FILE__, __LINE__); switch (val) { case ARC_COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->ArcColor(color); } else { xpWarn("Need three values for arc_color\n", __FILE__, __LINE__); } } break; case ARC_FILE: currentProperties->AddArcFile(returnString); break; case BODY: { body index = Planet::parseBodyName(returnString); if (index < RANDOM_BODY) { // [default] should come first in the config file. // The first time we get to a body after [default], // set all of the planet properties to the default // value. If [default] isn't first, all of the bodies // specified before it get wiped out. if (currentProperties == defaultProperties) { for (int ibody = SUN; ibody < RANDOM_BODY; ibody++) { *planetProperties[ibody] = *defaultProperties; } } currentProperties = planetProperties[index]; } else if (index == DEFAULT) { // We really shouldn't have to do this, since // currentProperties is set to defaultProperties // before the file is read in, and [default] should // come at the top. currentProperties = defaultProperties; } else { xpExit("Unknown body in config file\n", __FILE__, __LINE__); } } break; case BUMP_MAP: { // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "bump_map specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } string bumpMap(returnString); if (bumpMap.find('.') == string::npos) bumpMap += defaultMapExt; currentProperties->BumpMap(bumpMap); } break; case BUMP_SCALE: { checkLocale(LC_NUMERIC, "C"); double bumpScale; sscanf(returnString, "%lf", &bumpScale); currentProperties->BumpScale(bumpScale); checkLocale(LC_NUMERIC, ""); } break; case BUMP_SHADE: { int s; sscanf(returnString, "%d", &s); if (s < 0) s = 0; else if (s > 100) s = 100; currentProperties->BumpShade(s/100.); } break; case CLOUD_GAMMA: { checkLocale(LC_NUMERIC, "C"); double cloudGamma; sscanf(returnString, "%lf", &cloudGamma); currentProperties->CloudGamma(cloudGamma); checkLocale(LC_NUMERIC, ""); } break; case CLOUD_MAP: { // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "cloud_map specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } string cloudMap(returnString); if (cloudMap.find('.') == string::npos) cloudMap += defaultMapExt; currentProperties->CloudMap(cloudMap); } break; case CLOUD_SSEC: currentProperties->SSECMap(returnString[0] == 't' || returnString[0] == 'T'); break; case CLOUD_THRESHOLD: { int t; sscanf(returnString, "%d", &t); if (t < 0) t = 0; else if (t > 255) t = 255; currentProperties->CloudThreshold(t); } break; case COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->Color(color); } else { xpWarn("Need three values for color\n", __FILE__, __LINE__); } } break; case DAY_MAP: case IMAGE: // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "image or map specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } currentProperties->DayMap(returnString); break; case DELIMITER: break; case DRAW_ORBIT: { bool drawOrbit = (returnString[0] == 't' || returnString[0] == 'T'); currentProperties->DrawOrbit(drawOrbit); } break; case ENDOFLINE: break; case GRID: { bool grid = (returnString[0] == 't' || returnString[0] == 'T'); currentProperties->Grid(grid); } break; case GRID1: { int grid1; sscanf(returnString, "%d", &grid1); if (grid1 < 0 || grid1 > 90) xpExit("grid1 must be between 0 and 90\n", __FILE__, __LINE__); currentProperties->Grid1(grid1); } break; case GRID2: { int grid2; sscanf(returnString, "%d", &grid2); if (grid2 < 0) xpExit("grid2 must be positive\n", __FILE__, __LINE__); currentProperties->Grid2(grid2); } break; case GRID_COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->GridColor(color); } else { xpWarn("Need three values for grid_color\n", __FILE__, __LINE__); } } break; case MAGNIFY: { checkLocale(LC_NUMERIC, "C"); double value; sscanf(returnString, "%lf", &value); if (value < 0) value = 1; currentProperties->Magnify(value); checkLocale(LC_NUMERIC, ""); } break; case MAP_BOUNDS: { // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "map_bounds specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } checkLocale(LC_NUMERIC, "C"); double uly, ulx, lry, lrx; int numRead = sscanf(returnString, "%lf,%lf,%lf,%lf", &uly, &ulx, &lry, &lrx); if (numRead == 4) { currentProperties->MapBounds(true, uly, ulx, lry, lrx); } else { xpWarn("Need four values for mapbounds\n", __FILE__, __LINE__); } checkLocale(LC_NUMERIC, ""); } break; case MARKER_COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->MarkerColor(color); } else { xpWarn("Need three values for marker_color\n", __FILE__, __LINE__); } } break; case MARKER_FILE: currentProperties->AddMarkerFile(returnString); break; case MARKER_FONT: currentProperties->MarkerFont(returnString); break; case MARKER_FONTSIZE: { int fontSize; sscanf(returnString, "%d", &fontSize); if (fontSize > 0) { currentProperties->MarkerFontSize(fontSize); } else { xpWarn("fontSize must be positive.\n", __FILE__, __LINE__); } } break; case MAX_RAD_FOR_LABEL: { checkLocale(LC_NUMERIC, "C"); double value; sscanf(returnString, "%lf", &value); currentProperties->MaxRadiusForLabel(value); checkLocale(LC_NUMERIC, ""); } break; case MIN_RAD_FOR_LABEL: { checkLocale(LC_NUMERIC, "C"); double value; sscanf(returnString, "%lf", &value); currentProperties->MinRadiusForLabel(value); checkLocale(LC_NUMERIC, ""); } break; case MIN_RAD_FOR_MARKERS: { checkLocale(LC_NUMERIC, "C"); double value; sscanf(returnString, "%lf", &value); currentProperties->MinRadiusForMarkers(value); checkLocale(LC_NUMERIC, ""); } break; case NAME: // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "name specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } currentProperties->Name(returnString); break; case NIGHT_MAP: // This is one that doesn't belong in [default] if (currentProperties == defaultProperties) { ostringstream errStr; errStr << "night_map specified in [default] section. " << "You probably want to put it in a specific " << "planet's section (like [earth]).\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } currentProperties->NightMap(returnString); break; case ORBIT: { checkLocale(LC_NUMERIC, "C"); double start, stop, delta; int numRead = sscanf(returnString, "%lf,%lf,%lf", &start, &stop, &delta); if (numRead == 3) { currentProperties->StartOrbit(start); currentProperties->StopOrbit(stop); currentProperties->DelOrbit(delta); } else { xpWarn("Need three values for orbit\n", __FILE__, __LINE__); } checkLocale(LC_NUMERIC, ""); } break; case ORBIT_COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->OrbitColor(color); } else { xpWarn("Need three values for orbit_color\n", __FILE__, __LINE__); } } break; case RANDOM_ORIGIN: currentProperties->RandomOrigin(returnString[0] == 't' || returnString[0] == 'T'); break; case RANDOM_TARGET: currentProperties->RandomTarget(returnString[0] == 't' || returnString[0] == 'T'); break; case RAYLEIGH_EMISSION_WEIGHT: { checkLocale(LC_NUMERIC, "C"); double scale; sscanf(returnString, "%lf", &scale); currentProperties->RayleighEmissionWeight(scale); checkLocale(LC_NUMERIC, ""); } break; case RAYLEIGH_FILE: currentProperties->RayleighFile(returnString); break; case RAYLEIGH_LIMB_SCALE: { checkLocale(LC_NUMERIC, "C"); double scale; sscanf(returnString, "%lf", &scale); currentProperties->RayleighLimbScale(scale); checkLocale(LC_NUMERIC, ""); } break; case RAYLEIGH_SCALE: { checkLocale(LC_NUMERIC, "C"); double scale; sscanf(returnString, "%lf", &scale); currentProperties->RayleighScale(scale); checkLocale(LC_NUMERIC, ""); } break; case SATELLITE_FILE: currentProperties->AddSatelliteFile(returnString); break; case SHADE: { int s; sscanf(returnString, "%d", &s); if (s < 0) s = 0; else if (s > 100) s = 100; currentProperties->Shade(s/100.); } break; case SPECULAR_MAP: currentProperties->SpecularMap(returnString); break; case TEXT_COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff }; currentProperties->TextColor(color); } else { xpWarn("Need three values for text_color\n", __FILE__, __LINE__); } } break; case THICKNESS: { int thickness; sscanf(returnString, "%d", &thickness); if (thickness > 0) { currentProperties->ArcThickness(thickness); } else { xpWarn("thickness must be positive.\n", __FILE__, __LINE__); } } break; case TWILIGHT: { int value; sscanf(returnString, "%d", &value); if (value >= 0 && value <= 90) { currentProperties->Twilight(value); } else { xpWarn("Twilight value should be between 0 and 90 degrees\n", __FILE__, __LINE__); } } break; default: { ostringstream errStr; errStr << "Unknown keyword in configuration file:\n\t" << line << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } break; } if (val != DELIMITER && options->Verbosity() > 3) { ostringstream msg; msg << "value is " << keyWordString[val - '?']; if (returnString != NULL) msg << ", returnString is " << returnString; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } delete [] returnString; if (val == ENDOFLINE) break; } } void readConfigFile(string configFile, PlanetProperties *planetProperties[]) { bool foundFile = findFile(configFile, "config"); if (foundFile) { defaultProperties = new PlanetProperties(UNKNOWN_BODY); currentProperties = defaultProperties; ifstream inFile(configFile.c_str()); char *line = new char[256]; while (inFile.getline(line, 256, '\n') != NULL) readConfig(line, planetProperties); // This condition will only be true if [default] is the only // section in the config file. In this case, set all planet // properties to the default values. if (currentProperties == defaultProperties) { for (int ibody = SUN; ibody < RANDOM_BODY; ibody++) { *planetProperties[ibody] = *defaultProperties; } } inFile.close(); delete [] line; delete defaultProperties; } else { ostringstream errStr; errStr << "Can't load configuration file " << configFile << endl; xpExit(errStr.str(), __FILE__, __LINE__); } } xplanet-1.3.0/src/libplanet/0000755000175000017500000000000011731372544012737 500000000000000xplanet-1.3.0/src/libplanet/Makefile.am0000644000175000017500000000031410411416255014701 00000000000000noinst_LIBRARIES = libplanet.a AM_CPPFLAGS = -I@top_srcdir@/src if USE_AR libplanet_a_AR = $(AR) cru else libplanet_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libplanet_a_SOURCES = Planet.cpp Planet.h xplanet-1.3.0/src/libplanet/Planet.h0000644000175000017500000000721710527363024014255 00000000000000#ifndef PLANET_H #define PLANET_H #include #include "body.h" class Ephemeris; class Planet { public: static body parseBodyName(char *name); Planet(const double jd, const body this_body); ~Planet(); void calcHeliocentricEquatorial(); void calcHeliocentricEquatorial(const bool relativeToSun); void PlanetographicToXYZ(double &X, double &Y, double &Z, double lat, double lon, const double rad); void PlanetocentricToXYZ(double &X, double &Y, double &Z, const double lat, const double lon, const double rad); void XYZToPlanetocentric(const double X, const double Y, const double Z, double &lat, double &lon); void XYZToPlanetocentric(const double X, const double Y, const double Z, double &lat, double &lon, double &rad); void XYZToPlanetographic(const double X, const double Y, const double Z, double &lat, double &lon); void XYZToPlanetographic(const double X, const double Y, const double Z, double &lat, double &lon, double &rad); void XYZToPlanetaryXYZ(const double X, const double Y, const double Z, double &pX, double &pY, double &pZ); void PlanetaryXYZToXYZ(const double pX, const double pY, const double pZ, double &X, double &Y, double &Z); void PlanetocentricToPlanetographic(double &lat, double &lon) const; void PlanetographicToPlanetocentric(double &lat, double &lon) const; void getPosition(double &X, double &Y, double &Z) const; void getBodyNorth(double &X, double &Y, double &Z) const; void getOrbitalNorth(double &X, double &Y, double &Z) const; double Illumination(const double oX, const double oY, const double oZ); body Index() const { return(index_); }; body Primary() const { return(primary_); }; double Flattening() const { return(flattening_); }; int Flipped() const { return(flipped_); }; double Period() const { return(period_); }; double Radius() const { return(radiusEq_); }; double Radius(const double lat) const; bool IsInMyShadow(const double x, const double y, const double z); private: body index_; Ephemeris *ephem_; bool ephemerisHigh_; bool ephemerisSpice_; double julianDay_; double T2000_; // Julian centuries from 2000 double d2000_; // days from 2000 body primary_; double alpha0_; // right ascension of the north pole double delta0_; // declination of the north pole double nullMeridian_; // orientation of zero longitude double nullMeridian0_; // orientation of zero longitude at time 0 double wdot_; // rotation rate double rot_[3][3]; // rotation matrix double invRot_[3][3]; // inverse of e bool needRotationMatrix_; double period_; // orbital period, in days double radiusEq_; // equatorial radius double radiusPol_; // polar radius double flattening_; // (Re - Rp)/Re double omf2_; // (1 - flattening_)^2 bool needShadowCoeffs_; // used to compute shadows by ellipsoids double sunX_, sunY_, sunZ_; double ellipseCoeffC_; /* flipped = 1 if planet's longitude increases to the east (e.g. earth), -1 if planet's longitude increases to the west (e.g. Mars), */ int flipped_; double X_, Y_, Z_; // Position vector void CreateRotationMatrix(); void ComputeShadowCoeffs(); }; #endif xplanet-1.3.0/src/libplanet/Makefile.in0000644000175000017500000003301311731356514014723 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libplanet DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libplanet_a_LIBADD = am_libplanet_a_OBJECTS = Planet.$(OBJEXT) libplanet_a_OBJECTS = $(am_libplanet_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libplanet_a_SOURCES) DIST_SOURCES = $(libplanet_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libplanet.a AM_CPPFLAGS = -I@top_srcdir@/src @USE_AR_FALSE@libplanet_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libplanet_a_AR = $(AR) cru libplanet_a_SOURCES = Planet.cpp Planet.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libplanet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libplanet/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libplanet.a: $(libplanet_a_OBJECTS) $(libplanet_a_DEPENDENCIES) -rm -f libplanet.a $(libplanet_a_AR) libplanet.a $(libplanet_a_OBJECTS) $(libplanet_a_LIBADD) $(RANLIB) libplanet.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Planet.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libplanet/Planet.cpp0000644000175000017500000007613211107136133014604 00000000000000#include #include #include #include #include #include using namespace std; #include "findFile.h" #include "Options.h" #include "Planet.h" #include "xpUtil.h" #include "libephemeris/ephemerisWrapper.h" body Planet::parseBodyName(char *name) { body return_body; char *lowercase = name; char *ptr = name; while (*ptr != '\0') *ptr++ = tolower(*name++); if (strncmp(lowercase, "above", 2) == 0) return_body = ABOVE_ORBIT; else if (strncmp(lowercase, body_string[ARIEL], 2) == 0) return_body = ARIEL; else if (strncmp(lowercase, "below", 1) == 0) return_body = BELOW_ORBIT; else if (strncmp(lowercase, body_string[CALLISTO], 2) == 0) return_body = CALLISTO; else if (strncmp(lowercase, body_string[CHARON], 2) == 0) return_body = CHARON; else if (strncmp(lowercase, "default", 3) == 0) return_body = DEFAULT; else if (strncmp(lowercase, body_string[DEIMOS], 3) == 0) return_body = DEIMOS; else if (strncmp(lowercase, body_string[DIONE], 2) == 0) return_body = DIONE; else if (strncmp(lowercase, body_string[EARTH], 2) == 0) return_body = EARTH; else if (strncmp(lowercase, body_string[ENCELADUS], 2) == 0) return_body = ENCELADUS; else if (strncmp(lowercase, body_string[EUROPA], 2) == 0) return_body = EUROPA; else if (strncmp(lowercase, body_string[GANYMEDE], 1) == 0) return_body = GANYMEDE; else if (strncmp(lowercase, body_string[HYPERION], 1) == 0) return_body = HYPERION; else if (strncmp(lowercase, body_string[IAPETUS], 2) == 0) return_body = IAPETUS; else if (strncmp(lowercase, body_string[IO], 2) == 0) return_body = IO; else if (strncmp(lowercase, body_string[JUPITER], 1) == 0) return_body = JUPITER; else if (strncmp(lowercase, "major", 3) == 0) return_body = MAJOR_PLANET; else if (strncmp(lowercase, body_string[MARS], 3) == 0) return_body = MARS; else if (strncmp(lowercase, body_string[MERCURY], 2) == 0) return_body = MERCURY; else if (strncmp(lowercase, body_string[MIMAS], 3) == 0) return_body = MIMAS; else if (strncmp(lowercase, body_string[MIRANDA], 3) == 0) return_body = MIRANDA; else if (strncmp(lowercase, body_string[MOON], 2) == 0) return_body = MOON; else if (strncmp(lowercase, "naif", 2) == 0) return_body = NAIF; else if (strncmp(lowercase, body_string[NEPTUNE], 3) == 0) return_body = NEPTUNE; else if (strncmp(lowercase, body_string[NEREID], 3) == 0) return_body = NEREID; else if (strncmp(lowercase, "norad", 2) == 0) return_body = NORAD; else if (strncmp(lowercase, body_string[OBERON], 1) == 0) return_body = OBERON; else if (strncmp(lowercase, "path", 2) == 0) return_body = ALONG_PATH; else if (strncmp(lowercase, body_string[PHOBOS], 4) == 0) return_body = PHOBOS; else if (strncmp(lowercase, body_string[PHOEBE], 4) == 0) return_body = PHOEBE; else if (strncmp(lowercase, body_string[PLUTO], 2) == 0) return_body = PLUTO; else if (strncmp(lowercase, "random", 2) == 0) return_body = RANDOM_BODY; else if (strncmp(lowercase, body_string[RHEA], 2) == 0) return_body = RHEA; else if (strncmp(lowercase, body_string[SATURN], 2) == 0) return_body = SATURN; else if (strncmp(lowercase, body_string[SUN], 2) == 0) return_body = SUN; else if (strncmp(lowercase, "system", 2) == 0) return_body = SAME_SYSTEM; else if (strncmp(lowercase, body_string[TETHYS], 2) == 0) return_body = TETHYS; else if (strncmp(lowercase, body_string[TITANIA], 6) == 0) return_body = TITANIA; else if (strncmp(lowercase, body_string[TITAN], 5) == 0) return_body = TITAN; else if (strncmp(lowercase, body_string[TRITON], 2) == 0) return_body = TRITON; else if (strncmp(lowercase, body_string[URANUS], 2) == 0) return_body = URANUS; else if (strncmp(lowercase, body_string[UMBRIEL], 2) == 0) return_body = UMBRIEL; else if (strncmp(lowercase, body_string[VENUS], 1) == 0) return_body = VENUS; else { xpWarn("parseBody: Unknown body specified\n", __FILE__, __LINE__); return_body = UNKNOWN_BODY; } return(return_body); } /* Rotational parameters are from Seidelmann et al. (2002), Celestial Mechanics 82, 83--110. */ Planet::Planet(const double jd, const body this_body) : index_(this_body), julianDay_(jd), needRotationMatrix_(true), period_(0), needShadowCoeffs_(true) { Options *options = Options::getInstance(); if (options->UniversalTime()) julianDay_ += delT(julianDay_) / 86400; d2000_ = (julianDay_ - 2451545.0); T2000_ = d2000_ / 36525; switch (index_) { case SUN: primary_ = SUN; alpha0_ = 286.13; delta0_ = 63.87; nullMeridian0_ = 84.10; wdot_ = 14.1844; flipped_ = 1; period_ = 0; radiusEq_ = 696000; flattening_ = 0; break; case MERCURY: primary_ = SUN; alpha0_ = 281.01 - 0.033 * T2000_; delta0_ = 61.45 - 0.005 * T2000_; nullMeridian0_ = 329.548; wdot_ = 6.1385025; flipped_ = -1; period_ = 87.969; radiusEq_ = 2439; flattening_ = 0; break; case VENUS: primary_ = SUN; alpha0_ = 272.76; delta0_ = 67.16; nullMeridian0_ = 160.20; wdot_ = -1.4813688; flipped_ = 1; period_ = 224.701; radiusEq_ = 6051.9; flattening_ = 0; break; case EARTH: primary_ = SUN; alpha0_ = 0 - 0.641 * T2000_; delta0_ = 90 - .557 * T2000_; nullMeridian0_ = 190.147; wdot_ = 360.9856235; flipped_ = 1; period_ = 365.256; // WGS84 ellipsoid radiusEq_ = 6378.137; flattening_ = 1/298.257223563; break; case MOON: { primary_ = EARTH; const double E1 = (125.045 - 0.0529921 * d2000_) * deg_to_rad; const double E2 = (250.089 - 0.1059842 * d2000_) * deg_to_rad; const double E3 = (260.008 + 13.0120009 * d2000_) * deg_to_rad; const double E4 = (176.625 + 13.3407154 * d2000_) * deg_to_rad; const double E5 = (357.529 + 0.9856003 * d2000_) * deg_to_rad; const double E6 = (311.589 + 26.4057084 * d2000_) * deg_to_rad; const double E7 = (134.963 + 13.0649930 * d2000_) * deg_to_rad; const double E8 = (276.617 + 0.3287146 * d2000_) * deg_to_rad; const double E9 = ( 34.226 + 1.7484877 * d2000_) * deg_to_rad; const double E10 = ( 15.134 - 0.1589763 * d2000_) * deg_to_rad; const double E11 = (119.743 + 0.0036096 * d2000_) * deg_to_rad; const double E12 = (239.961 + 0.1643573 * d2000_) * deg_to_rad; const double E13 = ( 25.053 + 12.9590088 * d2000_) * deg_to_rad; alpha0_ = 269.9949 + (0.0031 * T2000_ - 3.8787 * sin(E1) - 0.1204 * sin(E2) + 0.0700 * sin(E3) - 0.0172 * sin(E4) + 0.0072 * sin(E6) - 0.0052 * sin(E10) + 0.0043 * sin(E13)); delta0_ = 66.5392 + (0.0130 * T2000_ + 1.5419 * cos(E1) + 0.0239 * cos(E2) - 0.0278 * cos(E3) + 0.0068 * cos(E4) - 0.0029 * cos(E6) + 0.0009 * cos(E7) + 0.0008 * cos(E10) - 0.0009 * cos(E13)); nullMeridian0_ = 38.3213 + (d2000_ * (13.17635815 - 1.4E-12 * d2000_) + 3.5610 * sin(E1) + 0.1208 * sin(E2) - 0.0642 * sin(E3) + 0.0158 * sin(E4) + 0.0252 * sin(E5) - 0.0066 * sin(E6) - 0.0047 * sin(E7) - 0.0046 * sin(E8) + 0.0028 * sin(E9) + 0.0052 * sin(E10) + 0.0040 * sin(E11) + 0.0019 * sin(E12) - 0.0044 * sin(E13)); wdot_ = 0; flipped_ = 1; period_ = 27.321661; radiusEq_ = 1737.5; flattening_ = 0.002; } break; case MARS: case PHOBOS: case DEIMOS: { flipped_ = -1; const double M1 = (169.51 - 0.4357640 * d2000_) * deg_to_rad; const double M2 = (192.93 + 1128.4096700 * d2000_) * deg_to_rad; const double M3 = (53.47 - 0.0181510 * d2000_) * deg_to_rad; switch (index_) { case MARS: primary_ = SUN; alpha0_ = 317.68143 - 0.1061 * T2000_; delta0_ = 52.88650 - 0.0609 * T2000_; nullMeridian0_ = 176.630; wdot_ = 350.89198226; period_ = 686.980; radiusEq_ = 3397; flattening_ = 0.0065; break; case PHOBOS: primary_ = MARS; alpha0_ = 317.68 - 0.108 * T2000_ + 1.79 * sin(M1); delta0_ = 52.90 - 0.061 * T2000_ - 1.08 * cos(M1); nullMeridian0_ = (35.06 + 8.864 * T2000_ * T2000_ - 1.42 * sin(M1) - 0.78 * sin(M2)); wdot_ = 1128.8445850; period_ = 0.31891023; radiusEq_ = 10; // non-spherical flattening_ = 0; break; case DEIMOS: primary_ = MARS; alpha0_ = 316.65 - 0.108 * T2000_ + 2.98 * sin(M3); delta0_ = 53.52 - 0.061 * T2000_ - 1.78 * cos(M3); nullMeridian0_ = (79.41 - 0.520 * T2000_ * T2000_ - 2.58 * sin(M3) + 0.19 * cos(M3)); wdot_ = 285.1618970; period_ = 1.2624407; radiusEq_ = 6; // non-spherical flattening_ = 0; break; default: break; } } break; case JUPITER: case IO: case EUROPA: case GANYMEDE: case CALLISTO: { flipped_ = -1; const double J3 = (283.90 + 4850.7 * T2000_) * deg_to_rad; const double J4 = (355.80 + 1191.3 * T2000_) * deg_to_rad; const double J5 = (119.90 + 262.1 * T2000_) * deg_to_rad; const double J6 = (229.80 + 64.3 * T2000_) * deg_to_rad; const double J7 = (352.25 + 2382.6 * T2000_) * deg_to_rad; const double J8 = (113.35 + 6070.0 * T2000_) * deg_to_rad; switch (index_) { case JUPITER: primary_ = SUN; alpha0_ = 268.05 - 0.009 * T2000_; delta0_ = 64.49 + 0.003 * T2000_; // System III (magnetic field rotation) nullMeridian0_ = 284.95; wdot_ = 870.5366420; if (options->GRSSet()) { // System II nullMeridian0_ = 43.3; wdot_ = 870.270; } period_ = 4332.589; radiusEq_ = 71492; flattening_ = 0.06487; break; case IO: primary_ = JUPITER; alpha0_ = (268.05 - 0.009 * T2000_ + 0.094 * sin(J3) + 0.024 * sin(J4)); delta0_ = (64.50 + 0.003 * T2000_ + 0.040 * cos(J3) + 0.011 * cos(J4)); nullMeridian0_ = 200.39 - 0.085 * sin(J3) - 0.022 * sin(J4); wdot_ = 203.4889538; period_ = 1.769137786; radiusEq_ = 1821.6; flattening_ = 0; break; case EUROPA: primary_ = JUPITER; alpha0_ = (268.08 - 0.009 * T2000_ + 1.086 * sin(J4) + 0.060 * sin(J5) + 0.015 * sin(J6) + 0.009 * sin(J7)); delta0_ = (64.51 + 0.003 * T2000_ + 0.468 * cos(J4) + 0.026 * cos(J5) + 0.007 * cos(J6) + 0.002 * cos(J7)); nullMeridian0_ = (35.67 - 0.980 * sin(J4) - 0.054 * sin(J5) - 0.014 * sin(J6) - 0.008 * sin(J7)); wdot_ = 101.3747235; period_ = 3.551181041; radiusEq_ = 1560.8; flattening_ = 0; break; case GANYMEDE: primary_ = JUPITER; alpha0_ = (268.20 - 0.009 * T2000_ - 0.037 * sin(J4) + 0.431 * sin(J5) + 0.091 * sin(J6)); delta0_ = (64.57 + 0.003 * T2000_ - 0.016 * cos(J4) + 0.186 * cos(J5) + 0.039 * cos(J6)); nullMeridian0_ = (44.04 + 0.033 * sin(J4) - 0.389 * sin(J5) - 0.082 * sin(J6)); wdot_ = 50.3176081; period_ = 7.15455296; radiusEq_ = 2631.2; flattening_ = 0; break; case CALLISTO: primary_ = JUPITER; alpha0_ = (268.72 - 0.009 * T2000_ - 0.068 * sin(J5) + 0.590 * sin(J6) + 0.010 * sin(J8)); delta0_ = (64.83 + 0.003 * T2000_ - 0.029 * cos(J5) + 0.254 * cos(J6) - 0.004 * cos(J8)); nullMeridian0_ = (259.73 + 0.061 * sin(J5) - 0.533 * sin(J6) - 0.009 * sin(J8)); wdot_ = 21.5710715; period_ = 16.6890184; radiusEq_ = 2410.3; flattening_ = 0; break; default: break; } } break; case SATURN: case MIMAS: case ENCELADUS: case TETHYS: case DIONE: case RHEA: case TITAN: case HYPERION: case IAPETUS: case PHOEBE: { flipped_ = -1; const double S3 = (177.40 - 36505.5 * T2000_) * deg_to_rad; const double S4 = (300.00 - 7225.9 * T2000_) * deg_to_rad; const double S5 = (316.45 + 506.2 * T2000_) * deg_to_rad; const double S6 = (345.20 - 1016.3 * T2000_) * deg_to_rad; const double S7 = ( 29.80 - 52.1 * T2000_) * deg_to_rad; switch (index_) { case SATURN: primary_ = SUN; alpha0_ = 40.589 - 0.036 * T2000_; delta0_ = 83.537 - 0.004 * T2000_; nullMeridian0_ = 38.90; wdot_ = 810.7939024; period_ = 10759.22; radiusEq_ = 60268; flattening_ = 0.09796; break; case MIMAS: primary_ = SATURN; alpha0_ = 40.66 - 0.036 * T2000_ + 13.56 * sin(S3); delta0_ = 83.52 - 0.004 * T2000_ - 1.53 * cos(S3); nullMeridian0_ = 337.46 - 13.48 * sin(S3) - 44.85 * sin(S5); wdot_ = 381.994550; period_ = 0.942421813; radiusEq_ = 198.6; flattening_ = 0; break; case ENCELADUS: primary_ = SATURN; alpha0_ = 40.66 - 0.036 * T2000_; delta0_ = 83.52 - 0.004 * T2000_; nullMeridian0_ = 2.82; wdot_ = 262.7318996; period_ = 1.370217855; radiusEq_ = 249.4; flattening_ = 0; break; case TETHYS: primary_ = SATURN; alpha0_ = 40.66 - 0.036 * T2000_ + 9.66 * sin(S4); delta0_ = 83.52 - 0.004 * T2000_ - 1.09 * cos(S4); nullMeridian0_ = 10.45 - 9.60 * sin(S4) + 2.23 * sin(S5); wdot_ = 190.6979085; period_ = 1.887802160; radiusEq_ = 529.8; flattening_ = 0; break; case DIONE: primary_ = SATURN; alpha0_ = 40.66 - 0.036 * T2000_; delta0_ = 83.52 - 0.004 * T2000_; nullMeridian0_ = 357.00; wdot_ = 131.5349316; period_ = 2.736914742; radiusEq_ = 559; flattening_ = 0; break; case RHEA: primary_ = SATURN; alpha0_ = 40.38 - 0.036 * T2000_ + 3.10 * sin(S6); delta0_ = 83.55 - 0.004 * T2000_ - 0.35 * cos(S6); nullMeridian0_ = 235.16 - 3.08 * sin(S6); wdot_ = 79.6900478; period_ = 4.517500436; radiusEq_ = 764; flattening_ = 0; break; case TITAN: primary_ = SATURN; alpha0_ = 36.41 - 0.036 * T2000_ + 2.66 * sin(S7); delta0_ = 83.94 - 0.004 * T2000_ - 0.30 * cos(S7); nullMeridian0_ = 189.64 - 2.64 * sin(S7); wdot_ = 22.5769768; period_ = 15.94542068; radiusEq_ = 2575; flattening_ = 0; break; case HYPERION: primary_ = SATURN; alpha0_ = 40.589 - 0.036 * T2000_; delta0_ = 83.537 - 0.004 * T2000_; nullMeridian0_ = 0; wdot_ = 0; period_ = 21.2766088; radiusEq_ = 141.5; // non-spherical flattening_ = 0; break; case IAPETUS: primary_ = SATURN; alpha0_ = 318.16 - 3.949 * T2000_; delta0_ = 75.03 - 1.143 * T2000_; nullMeridian0_ = 350.20; wdot_ = 4.5379572; period_ = 79.3301825; radiusEq_ = 718; flattening_ = 0; break; case PHOEBE: primary_ = SATURN; alpha0_ = 355.00; delta0_ = 68.70; nullMeridian0_ = 304.70; wdot_ = 930.8338720; period_ = 550.48; radiusEq_ = 110; flattening_ = 0; break; default: break; } } break; case URANUS: case MIRANDA: case ARIEL: case UMBRIEL: case TITANIA: case OBERON: { flipped_ = 1; const double U11 = (141.69 + 41887.66 * T2000_) * deg_to_rad; const double U12 = (316.41 + 2863.96 * T2000_) * deg_to_rad; const double U13 = (304.01 - 51.94 * T2000_) * deg_to_rad; const double U14 = (308.71 - 93.17 * T2000_) * deg_to_rad; const double U15 = (340.82 - 75.32 * T2000_) * deg_to_rad; const double U16 = (259.14 - 504.81 * T2000_) * deg_to_rad; switch (index_) { case URANUS: primary_ = SUN; alpha0_ = 257.311; delta0_ = -15.175; nullMeridian0_ = 203.81; wdot_ = -501.1600928; period_ = 30685.4; radiusEq_ = 25559; flattening_ = 0.02293; break; case MIRANDA: primary_ = URANUS; alpha0_ = 257.42 + 4.41 * sin(U11) - 0.04 * sin(2*U11); delta0_ = -15.08 + 4.25 * cos(U11) - 0.02 * cos(2*U11); nullMeridian0_ = (30.70 - 1.27 * sin(U12) + 0.15 * sin(2*U12) + 1.15 * sin(U11) - 0.09 * sin(2*U11)); wdot_ = -254.6906892; period_ = 1.41347925; radiusEq_ = 235.8; flattening_ = 0; break; case ARIEL: primary_ = URANUS; alpha0_ = 257.43 + 0.29 * sin(U13); delta0_ = -15.10 + 0.28 * cos(U13); nullMeridian0_ = 156.22 + 0.05 * sin(U12) + 0.08 * sin(U13); wdot_ = -142.8356681; period_ = 2.52037935; radiusEq_ = 578.9; flattening_ = 0; break; case UMBRIEL: primary_ = URANUS; alpha0_ = 257.43 + 0.21 * sin(U14); delta0_ = -15.10 + 0.20 * cos(U14); nullMeridian0_ = 108.05 - 0.09 * sin(U12) + 0.06 * sin(U14); wdot_ = -86.8688923; period_ = 4.1441772; radiusEq_ = 584.7; flattening_ = 0; break; case TITANIA: primary_ = URANUS; alpha0_ = 257.43 + 0.29 * sin(U15); delta0_ = -15.10 + 0.28 * cos(U15); nullMeridian0_ = 77.74 + 0.08 * sin(U15); wdot_ = -41.3514316; period_ = 8.7058717; radiusEq_ = 788.9; flattening_ = 0; break; case OBERON: primary_ = URANUS; alpha0_ = 257.43 + 0.16 * sin(U16); delta0_ = -15.10 + 0.16 * cos(U16); nullMeridian0_ = 6.77 + 0.04 * sin(U16); wdot_ = -26.7394932; period_ = 13.4632389; radiusEq_ = 761.4; flattening_ = 0; break; default: break; } } break; case NEPTUNE: case TRITON: case NEREID: { flipped_ = -1; switch (index_) { case NEPTUNE: { primary_ = SUN; double N = (357.85 + 52.316 * T2000_) * deg_to_rad; alpha0_ = 299.36 + 0.70 * sin(N); delta0_ = 43.46 - 0.51 * cos(N); nullMeridian0_ = 253.18 - 0.48 * sin(N); wdot_ = 536.3128492; period_ = 60189.0; radiusEq_ = 24764; flattening_ = 0.0171; } break; case TRITON: { primary_ = NEPTUNE; const double N7 = (177.85 + 52.316 * T2000_) * deg_to_rad; alpha0_ = (299.36 - 32.35 * sin(N7) - 6.28 * sin(2*N7) - 2.08 * sin(3*N7) - 0.74 * sin(4*N7) - 0.28 * sin(5*N7) - 0.11 * sin(6*N7) - 0.07 * sin(7*N7) - 0.02 * sin(8*N7) - 0.01 * sin(9*N7)); delta0_ = (43.46 + 22.55 * cos(N7) + 2.10 * cos(2*N7) + 0.55 * cos(3*N7) + 0.16 * cos(4*N7) + 0.05 * cos(5*N7) + 0.02 * cos(6*N7) + 0.01 * cos(7*N7)); nullMeridian0_ = (296.53 + 22.25 * sin(N7) + 6.73 * sin(2*N7) + 2.05 * sin(3*N7) + 0.74 * sin(4*N7) + 0.28 * sin(5*N7) + 0.11 * sin(6*N7) + 0.05 * sin(7*N7) + 0.02 * sin(8*N7) + 0.01 * sin(9*N7)); wdot_ = -61.2572637; period_ = 5.8768541; radiusEq_ = 1353; flattening_ = 0; } break; case NEREID: { primary_ = NEPTUNE; alpha0_ = 299.36; delta0_ = 43.46; nullMeridian0_ = 0; wdot_ = 0; period_ = 360.13619; radiusEq_ = 170; flattening_ = 0; } break; default: break; } } break; case PLUTO: case CHARON: { flipped_ = 1; alpha0_ = 313.02; delta0_ = 9.09; wdot_ = -56.3623195; switch (index_) { case PLUTO: primary_ = SUN; nullMeridian0_ = 236.77; period_ = 90465.0; radiusEq_ = 1151; flattening_ = 0; break; case CHARON: primary_ = PLUTO; nullMeridian0_ = 56.77; period_ = 6.38723; radiusEq_ = 593; flattening_ = 0; break; default: break; } } break; default: xpExit("Planet: Unknown body specified.\n", __FILE__, __LINE__); } alpha0_ *= deg_to_rad; delta0_ *= deg_to_rad; radiusEq_ /= AU_to_km; nullMeridian_ = fmod(nullMeridian0_ + wdot_ * d2000_, 360.0); nullMeridian_ *= deg_to_rad; radiusPol_ = radiusEq_ * (1 - flattening_); omf2_ = (1 - flattening_) * (1 - flattening_); } Planet::~Planet() { } // Return the distance from the surface to the center, in units of // equatorial radius. Input latitude is assumed to be planetographic. double Planet::Radius(const double lat) const { double returnValue = 1; if (index_ == JUPITER || index_ == SATURN) { double tmpLat = lat; double tmpLon = 0; PlanetographicToPlanetocentric(tmpLat, tmpLon); const double ReSinLat = radiusEq_ * sin(tmpLat); const double RpCosLat = radiusPol_ * cos(tmpLat); // from http://mathworld.wolfram.com/Ellipse.html returnValue = radiusPol_ / sqrt(RpCosLat * RpCosLat + ReSinLat * ReSinLat); } return(returnValue); } // Compute heliocentric equatorial coordinates of the planet void Planet::calcHeliocentricEquatorial() { calcHeliocentricEquatorial(true); } void Planet::calcHeliocentricEquatorial(const bool relativeToSun) { GetHeliocentricXYZ(index_, primary_, julianDay_, relativeToSun, X_, Y_, Z_); } // Return rectangular coordinates in heliocentric equatorial frame void Planet::getPosition(double &X, double &Y, double &Z) const { X = X_; Y = Y_; Z = Z_; } double Planet::Illumination(const double oX, const double oY, const double oZ) { return(50 * (ndot(X_, Y_, Z_, X_ - oX, Y_ - oY, Z_ - oZ) + 1)); } void Planet::CreateRotationMatrix() { /* These equations are from "Astronomy on the Personal Computer, 3rd Edition", by Montenbruck and Pfleger, Chapter 7. */ const double cosW = cos(nullMeridian_); const double sinW = sin(nullMeridian_); const double cosA = cos(alpha0_); const double sinA = sin(alpha0_); const double cosD = cos(delta0_); const double sinD = sin(delta0_); rot_[0][0] = -cosW * sinA - sinW * sinD * cosA; rot_[0][1] = cosW * cosA - sinW * sinD * sinA; rot_[0][2] = sinW * cosD; rot_[1][0] = sinW * sinA - cosW * sinD * cosA; rot_[1][1] = -sinW * cosA - cosW * sinD * sinA; rot_[1][2] = cosW * cosD; rot_[2][0] = cosD * cosA; rot_[2][1] = cosD * sinA; rot_[2][2] = sinD; invertMatrix(rot_, invRot_); needRotationMatrix_ = false; } void Planet::PlanetocentricToXYZ(double &X, double &Y, double &Z, const double lat, const double lon, const double rad) { if (needRotationMatrix_) CreateRotationMatrix(); double r[3]; r[0] = cos(lat) * cos(lon); r[1] = cos(lat) * sin(lon); r[2] = sin(lat); double newrad = rad * radiusEq_; X = dot(invRot_[0], r) * newrad; Y = dot(invRot_[1], r) * newrad; Z = dot(invRot_[2], r) * newrad; X += X_; Y += Y_; Z += Z_; } void Planet::PlanetographicToXYZ(double &X, double &Y, double &Z, double lat, double lon, const double rad) { PlanetographicToPlanetocentric(lat, lon); PlanetocentricToXYZ(X, Y, Z, lat, lon, rad); } void Planet::XYZToPlanetocentric(const double X, const double Y, const double Z, double &lat, double &lon) { double rad = 0; XYZToPlanetocentric(X, Y, Z, lat, lon, rad); } void Planet::XYZToPlanetocentric(const double X, const double Y, const double Z, double &lat, double &lon, double &rad) { if (needRotationMatrix_) CreateRotationMatrix(); const double r[3] = { X - X_, Y - Y_, Z - Z_ }; const double sx = dot(rot_[0], r); const double sy = dot(rot_[1], r); const double sz = dot(rot_[2], r); rad = sqrt(sx * sx + sy*sy); if (rad > 0) lat = atan(sz/rad); else lat = 0; if (cos(lat) > 0) lon = atan2(sy, sx); else lon = 0; if (lon < 0) lon += TWO_PI; rad = sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2]); rad /= radiusEq_; } void Planet::XYZToPlanetographic(const double X, const double Y, const double Z, double &lat, double &lon) { double rad = 0; XYZToPlanetographic(X, Y, Z, lat, lon, rad); } void Planet::XYZToPlanetographic(const double X, const double Y, const double Z, double &lat, double &lon, double &rad) { XYZToPlanetocentric(X, Y, Z, lat, lon, rad); PlanetocentricToPlanetographic(lat, lon); } void Planet::XYZToPlanetaryXYZ(const double X, const double Y, const double Z, double &pX, double &pY, double &pZ) { double lat, lon, rad; XYZToPlanetocentric(X, Y, Z, lat, lon, rad); pX = rad * cos(lat) * cos(lon); pY = rad * cos(lat) * sin(lon); pZ = rad * sin(lat); } void Planet::PlanetaryXYZToXYZ(const double pX, const double pY, const double pZ, double &X, double &Y, double &Z) { const double lat = atan(pZ / sqrt(pX * pX + pY * pY)); double lon; if (cos(lat) > 1e-5) lon = atan2(pY, pX); else lon = 0; const double rad = sqrt(pX * pX + pY * pY + pZ * pZ); PlanetocentricToXYZ(X, Y, Z, lat, lon, rad); } void Planet::PlanetocentricToPlanetographic(double &lat, double &lon) const { if (flattening_ > 0) lat = atan(tan(lat) / omf2_); if (index_ == EARTH || index_ == SUN) lon *= -1; if (wdot_ > 0) lon *= -1; if (lon < 0) lon += TWO_PI; } void Planet::PlanetographicToPlanetocentric(double &lat, double &lon) const { if (flattening_ > 0) lat = atan(omf2_ * tan(lat)); if (index_ == EARTH || index_ == SUN) lon *= -1; if (wdot_ > 0) lon *= -1; } void Planet::ComputeShadowCoeffs() { XYZToPlanetaryXYZ(0, 0, 0, sunX_, sunY_, sunZ_); ellipseCoeffC_ = sunZ_ * sunZ_ / omf2_; ellipseCoeffC_ += sunY_ * sunY_; ellipseCoeffC_ += sunX_ * sunX_; ellipseCoeffC_ -= 1; needShadowCoeffs_ = false; } // x, y, z must be in planetary XYZ frame bool Planet::IsInMyShadow(const double x, const double y, const double z) { if (needShadowCoeffs_) ComputeShadowCoeffs(); double ellipseCoeffA = (z - sunZ_) * (z - sunZ_) / omf2_; ellipseCoeffA += (y - sunY_) * (y - sunY_); ellipseCoeffA += (x - sunX_) * (x - sunX_); double ellipseCoeffB = (z - sunZ_) * sunZ_ / omf2_; ellipseCoeffB += (y - sunY_) * sunY_; ellipseCoeffB += (x - sunX_) * sunX_; const double determinant = (ellipseCoeffB * ellipseCoeffB - ellipseCoeffA * ellipseCoeffC_); return(determinant > 0); } void Planet::getOrbitalNorth(double &X, double &Y, double &Z) const { if (index_ == SUN) { X = cos(delta0_) * cos(alpha0_); Y = cos(delta0_) * sin(alpha0_); Z = sin(delta0_); return; } // cross product of position and velocity vectors points to the // orbital north pole double pos[3] = { X_, Y_, Z_ }; double pX0, pY0, pZ0; double pX1, pY1, pZ1; GetHeliocentricXYZ(index_, primary_, julianDay_ - 0.5, true, pX0, pY0, pZ0); GetHeliocentricXYZ(index_, primary_, julianDay_ + 0.5, true, pX1, pY1, pZ1); double vel[3] = { pX1 - pX0, pY1 - pY0, pZ1 - pZ0 }; double north[3]; cross(pos, vel, north); double mag = sqrt(dot(north, north)); X = north[0]/mag; Y = north[1]/mag; Z = north[2]/mag; } void Planet::getBodyNorth(double &X, double &Y, double &Z) const { // get direction of the rotational axis X = cos(alpha0_) * cos(delta0_); Y = sin(alpha0_) * cos(delta0_); Z = sin(delta0_); } xplanet-1.3.0/src/createMap.h0000644000175000017500000000062510411344513012747 00000000000000#ifndef CREATEMAP_H #define CREATEMAP_H #include class Map; class Planet; class PlanetProperties; class Ring; extern Map * createMap(const double sLat, const double sLon, const double obsLat, const double obsLon, const int width, const int height, const double pR, Planet *p, Ring *r, std::map &planetsFromSunMap, PlanetProperties *planetProperties); #endif xplanet-1.3.0/src/findFile.h0000644000175000017500000000043410411357011012561 00000000000000#ifndef FINDFILE_H #define FINDFILE_H #include #include extern void buildDirectoryVector(std::vector &directoryVector, const std::string &subdir); extern bool findFile(std::string &filename, const std::string &subdir); #endif xplanet-1.3.0/src/ParseGeom.c0000644000175000017500000001113110411344513012715 00000000000000/* This is a slightly modified XParseGeometry routine from the XFree distribution from the Open Group. Their copyright follows. */ /* $TOG: ParseGeom.c /main/11 1998/02/06 17:46:27 kaleb $ */ /* Copyright 1985, 1986, 1987,1998 The Open Group All Rights Reserved. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* Modified for xplanet */ /* #include "Xlibint.h" #include "Xutil.h" */ #include #include "ParseGeom.h" /* End xplanet modifications */ #ifdef notdef /* *Returns pointer to first char ins search which is also in what, else NULL. */ static char *strscan (search, what) char *search, *what; { int i, len = strlen (what); char c; while ((c = *(search++)) != NULL) for (i = 0; i < len; i++) if (c == what [i]) return (--search); return (NULL); } #endif /* * XParseGeometry parses strings of the form * "=x{+-}{+-}", where * width, height, xoffset, and yoffset are unsigned integers. * Example: "=80x24+300-49" * The equal sign is optional. * It returns a bitmask that indicates which of the four values * were actually found in the string. For each value found, * the corresponding argument is updated; for each value * not found, the corresponding argument is left unchanged. */ static int ReadInteger(string, NextString) register char *string; char **NextString; { register int Result = 0; int Sign = 1; if (*string == '+') string++; else if (*string == '-') { string++; Sign = -1; } for (; (*string >= '0') && (*string <= '9'); string++) { Result = (Result * 10) + (*string - '0'); } *NextString = string; if (Sign >= 0) return (Result); else return (-Result); } #if NeedFunctionPrototypes int XParseGeometry ( _Xconst char *string, int *x, int *y, unsigned int *width, /* RETURN */ unsigned int *height) /* RETURN */ #else int XParseGeometry (string, x, y, width, height) char *string; int *x, *y; unsigned int *width, *height; /* RETURN */ #endif { int mask = NoValue; register char *strind; unsigned int tempWidth, tempHeight; int tempX, tempY; char *nextCharacter; if ( (string == NULL) || (*string == '\0')) return(mask); if (*string == '=') string++; /* ignore possible '=' at beg of geometry spec */ strind = (char *)string; if (*strind != '+' && *strind != '-' && *strind != 'x') { tempWidth = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= WidthValue; } if (*strind == 'x' || *strind == 'X') { strind++; tempHeight = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= HeightValue; } if ((*strind == '+') || (*strind == '-')) { if (*strind == '-') { strind++; tempX = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= XNegative; } else { strind++; tempX = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; } mask |= XValue; if ((*strind == '+') || (*strind == '-')) { if (*strind == '-') { strind++; tempY = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; mask |= YNegative; } else { strind++; tempY = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; } mask |= YValue; } } /* If strind isn't at the end of the string the it's an invalid geometry specification. */ if (*strind != '\0') return (0); if (mask & XValue) *x = tempX; if (mask & YValue) *y = tempY; if (mask & WidthValue) *width = tempWidth; if (mask & HeightValue) *height = tempHeight; return (mask); } xplanet-1.3.0/src/parse.h0000644000175000017500000000025410411344513012156 00000000000000#ifndef PARSE_H #define PARSE_H extern bool isDelimiter(char c); extern bool isEndOfLine(char c); extern int parse(int &i, const char *line, char *&returnstring); #endif xplanet-1.3.0/src/libmultiple/0000755000175000017500000000000011731372544013307 500000000000000xplanet-1.3.0/src/libmultiple/libmultiple.h0000644000175000017500000000302511716060341015712 00000000000000#ifndef LIBMULTIPLE_H #define LIBMULTIPLE_H #include class Annotation; class DisplayBase; class Map; class Planet; class PlanetProperties; class Ring; class View; extern void addOrbits(const double jd0, const View *view, const int width, const int height, Planet *p, PlanetProperties *currentProperties, std::multimap &annotationMap); extern void drawEllipsoid(const double pX, const double pY, const double pR, const double oX, const double oY, const double oZ, const double X, const double Y, const double Z, DisplayBase *display, const View *view, const Map *map, Planet *planet, PlanetProperties *planetProperties); extern void drawRings(Planet *p, DisplayBase *display, View *view, Ring *ring, const double X, const double Y, const double R, const double obs_lat, const double obs_lon, const bool lit_side, const bool draw_far_side); extern void drawSphere(const double pX, const double pY, const double pR, const double oX, const double oY, const double oZ, const double X, const double Y, const double Z, DisplayBase *display, const View *view, const Map *map, Planet *planet, PlanetProperties *planetProperties); extern void drawSunGlare(DisplayBase *display, const double X, const double Y, const double R, const unsigned char *color); extern void drawStars(DisplayBase *display, View *view); #endif xplanet-1.3.0/src/libmultiple/Makefile.am0000644000175000017500000000061411716064572015266 00000000000000noinst_LIBRARIES = libmultiple.a AM_CPPFLAGS = -I@top_srcdir@/src @FREETYPE_CFLAGS@ if USE_AR libmultiple_a_AR = $(AR) cru else libmultiple_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libmultiple_a_SOURCES = \ libmultiple.h \ addOrbits.cpp \ RayleighScattering.h \ RayleighScattering.cpp \ drawSphere.cpp \ drawEllipsoid.cpp \ drawRings.cpp \ drawStars.cpp \ drawSunGlare.cpp xplanet-1.3.0/src/libmultiple/drawEllipsoid.cpp0000644000175000017500000001075211713241041016525 00000000000000#include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "View.h" #include "xpUtil.h" #include "libdisplay/libdisplay.h" #include "libplanet/Planet.h" void drawEllipsoid(const double pX, const double pY, const double pR, const double oX, const double oY, const double oZ, const double X, const double Y, const double Z, DisplayBase *display, const View *view, const Map *map, Planet *planet, PlanetProperties *planetProperties) { double lat, lon; unsigned char color[3]; const int j0 = 0; const int j1 = display->Height(); const int i0 = 0; const int i1 = display->Width(); // P1 (Observer) is at (oX, oY, oZ), or (0, 0, 0) in view // coordinates // P2 (current pixel) is on the line from P1 to (vX, vY, vZ) // P3 (Planet center) is at (X, Y, Z) in heliocentric rectangular // Now find the intersection of the line with the planet's ellipsoid. // Define a new coordinate system: planetary XYZ // X = 0 lon, Z = north pole, Y = Z x X // Convert P1, P2, P3 to planetary XYZ: // 1) Convert to planetocentric // 2) Convert to planetary XYZ (units of planetary radius) double p1X = 0, p1Y = 0, p1Z = 0; double p2X = 0, p2Y = 0, p2Z = 0; double p3X = 0, p3Y = 0, p3Z = 0; const double ratio = 1/(1 - planet->Flattening()); planet->XYZToPlanetaryXYZ(oX, oY, oZ, p1X, p1Y, p1Z); p1Z *= ratio; const double planetRadius = planetProperties->Magnify(); const double c = 2 * (dot(p1X - p3X, p1Y - p3Y, p1Z - p3Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z) - planetRadius * planetRadius); Options *options = Options::getInstance(); // compute the value of the determinant at the center of the body view->PixelToViewCoordinates(options->CenterX() - pX, options->CenterY() - pY, p2X, p2Y, p2Z); view->RotateToXYZ(p2X, p2Y, p2Z, p2X, p2Y, p2Z); planet->XYZToPlanetaryXYZ(p2X, p2Y, p2Z, p2X, p2Y, p2Z); p2Z *= ratio; const double centerA = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z)); const double centerB = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z)); const double centerDet = centerB * centerB - centerA * c; for (int j = j0; j < j1; j++) { for (int i = i0; i < i1; i++) { const double dX = options->CenterX() - i; const double dY = options->CenterY() - j; view->PixelToViewCoordinates(dX, dY, p2X, p2Y, p2Z); view->RotateToXYZ(p2X, p2Y, p2Z, p2X, p2Y, p2Z); planet->XYZToPlanetaryXYZ(p2X, p2Y, p2Z, p2X, p2Y, p2Z); p2Z *= ratio; const double a = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z)); const double b = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z)); const double determinant = b*b - a * c; if (determinant < 0) continue; double u = -(b + sqrt(determinant)); u /= a; // if the intersection point is behind the observer, don't // plot it if (u < 0) continue; // coordinates of the intersection point double iX, iY, iZ; iX = p1X + u * (p2X - p1X); iY = p1Y + u * (p2Y - p1Y); iZ = p1Z + u * (p2Z - p1Z); iZ /= ratio; planet->PlanetaryXYZToXYZ(iX, iY, iZ, iX, iY, iZ); planet->XYZToPlanetographic(iX, iY, iZ, lat, lon); map->GetPixel(lat, lon, color); double darkening = ndot(X - iX, Y - iY, Z - iZ, X - oX, Y - oY, Z - oZ); if (darkening < 0) darkening = 0; else darkening = photoFunction(darkening); for (int k = 0; k < 3; k++) color[k] = static_cast (color[k] * darkening); double opacity = 1; if (pR * determinant/centerDet < 10) { opacity = 1 - pow(1-determinant/centerDet, pR); } display->setPixel(i, j, color, opacity); } } } xplanet-1.3.0/src/libmultiple/drawStars.cpp0000644000175000017500000000572610411417337015711 00000000000000#include #include #include #include #include using namespace std; #include "findFile.h" #include "Options.h" #include "View.h" #include "xpUtil.h" #include "libdisplay/libdisplay.h" void drawStars(DisplayBase *display, View *view) { Options *options = Options::getInstance(); string starMap = options->getStarMap(); if (!findFile(starMap, "stars")) { ostringstream errMsg; errMsg << "Can't open star map " << starMap << endl; xpWarn(errMsg.str(), __FILE__, __LINE__); return; } const int width = display->Width(); const int height = display->Height(); const int area = width * height; bool *starPresent = new bool [area]; double *magnitude = new double [area]; for (int i = 0; i < area; i++) { starPresent[i] = false; magnitude[i] = 0; } ifstream inFile(starMap.c_str()); char line[MAX_LINE_LENGTH]; while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) { if (line[0] == '#') continue; double Vmag, RA, Dec; checkLocale(LC_NUMERIC, "C"); if (sscanf(line, "%lf %lf %lf", &Dec, &RA, &Vmag) < 3) continue; checkLocale(LC_NUMERIC, ""); RA *= deg_to_rad; Dec *= deg_to_rad; double sX, sY, sZ; RADecToXYZ(RA, Dec, sX, sY, sZ); double X, Y, Z; view->XYZToPixel(sX, sY, sZ, X, Y, Z); X += options->CenterX(); Y += options->CenterY(); if (Z < 0 || X < 0 || X >= width || Y < 0 || Y >= height) continue; int ipos[4]; ipos[0] = ((int) floor(Y)) * width + ((int) floor(X)); ipos[1] = ipos[0] + 1; ipos[2] = ipos[0] + width; ipos[3] = ipos[2] + 1; const double t = X - floor(X); const double u = 1 - (Y - floor(Y)); double weight[4]; getWeights(t, u, weight); for (int i = 0; i < 4; i++) { if (ipos[i] >= area) ipos[i] = ipos[0]; magnitude[ipos[i]] += weight[i] * pow(10, -0.4 * Vmag); starPresent[ipos[i]] = true; } } inFile.close(); for (int i = 0; i < area; i++) { if (starPresent[i]) magnitude[i] = -2.5 * log10(magnitude[i]); } // a magnitude 10 star will have a pixel brightness of 1 const double baseMag = options->BaseMagnitude(); const double logMagStep = options->LogMagnitudeStep(); for (int j = 0; j < height; j++) { int istart = j * width; for (int i = 0; i < width; i++) { const double mag = magnitude[istart+i]; if (starPresent[istart+i]) { double brightness = pow(10, -logMagStep * (mag - baseMag)); if (brightness > 255) brightness = 255; display->setPixel(i, j, (unsigned int) brightness); } } } delete [] magnitude; delete [] starPresent; } xplanet-1.3.0/src/libmultiple/RayleighScattering.h0000644000175000017500000000425411722157307017173 00000000000000#ifndef RAYLEIGHSCATTERING_H #define RAYLEIGHSCATTERING_H #include #include #include class Image; class RayleighScattering { public: RayleighScattering(std::string configFile); virtual ~RayleighScattering(); void clear(); void clearTables(); void createTables(); double getColor(int index); double getRed() { return getColor(0); }; double getGreen() { return getColor(1); }; double getBlue() { return getColor(2); }; double getScaleHeightKm() { return scaleHeight_ / 1e3; }; void calcScatteringDisk(double inc, double ems, double phase); void calcScatteringLimb(double inc, double tanht, double phase); private: std::vector incidence_; std::vector emission_; std::vector tanHeight_; std::vector phaseDeg_; std::vector lambda_; std::map PNGTable_; std::map BINTable_; bool diskPNG_; std::string diskTemplate_; double indexOfRefraction_; bool limbPNG_; std::string limbTemplate_; double numberDensity_; double radius_; double scaleHeight_; double scattering_[3]; void calcScattering(double inc, double y, double phase, int color, std::vector yaxis, std::string thisTemplate, bool usePNG); double * readBinaryTable(const char *filename); void readConfigFile(std::string configFile); void readTableValue(std::string thisTemplate, bool usePNG, int color, int x, int y, std::vector yaxis, int phase, double values[4]); bool readBlock(std::ifstream &inFile, const char *format, std::vector &values); bool readValue(std::ifstream &inFile, const char *format, double &value); void writeTable(const char *buffer, double *array, size_t dim0, size_t dim1, size_t dim2, bool usePNG); void doubleToARGB(double x, unsigned char argb[4]); double ARGBToDouble(unsigned char argb[4]); }; #endif xplanet-1.3.0/src/libmultiple/drawRings.cpp0000644000175000017500000001127110411417337015667 00000000000000#include #include using namespace std; #include "Options.h" #include "Ring.h" #include "View.h" #include "xpUtil.h" #include "libplanet/Planet.h" #include "libdisplay/libdisplay.h" /* This routine gets the coefficients for the equation of the equatorial plane, which is in the form Ax + By + Cz + D = 0 The equation of a plane containing the 3 points P1, P2, P3 is | x - x1 y - y1 z - z1 | | x2 - x1 y2 - y1 z2 - z1 | = 0 | x3 - x1 y3 - y1 z3 - z1 | Solving for A, B, C, and D, we get A = [(y2 - y1)(z3 - z1) - (y3 - y1)(z2 - z1)] B = [(x3 - x1)(z2 - z1) - (x2 - x1)(z3 - z1)] C = [(x2 - x1)(y3 - y1) - (x3 - x1)(y2 - y1)] D = -[x1 * A + y1 * B + z1 * C] */ static void getEquatorialPlane(Planet *p, View *view, double &A, double &B, double &C, double &D) { double x1, x2, x3; double y1, y2, y3; double z1, z2, z3; p->PlanetocentricToXYZ(x1, y1, z1, 0, 0, 1); p->PlanetocentricToXYZ(x2, y2, z2, 0, 120 * deg_to_rad, 1); p->PlanetocentricToXYZ(x3, y3, z3, 0, -120 * deg_to_rad, 1); view->RotateToViewCoordinates(x1, y1, z1, x1, y1, z1); view->RotateToViewCoordinates(x2, y2, z2, x2, y2, z2); view->RotateToViewCoordinates(x3, y3, z3, x3, y3, z3); A = ((y2 - y1) * (z3 - z1) - (y3 - y1) * (z2 - z1)); B = ((x3 - x1) * (z2 - z1) - (x2 - x1) * (z3 - z1)); C = ((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)); D = -(x1 * A + y1 * B + z1 * C); } void drawRings(Planet *p, DisplayBase *display, View *view, Ring *ring, const double X, const double Y, const double R, const double obs_lat, const double obs_lon, const bool lit_side, const bool draw_far_side) { double A, B, C, D; getEquatorialPlane(p, view, A, B, C, D); double pX, pY, pZ; p->getPosition(pX, pY, pZ); view->RotateToViewCoordinates(pX, pY, pZ, pX, pY, pZ); const double dist_to_planet = sqrt(pX * pX + pY * pY + pZ * pZ); Options *options = Options::getInstance(); const int height = display->Height(); const int width = display->Width(); const double outer_radius = ring->getOuterRadius() * R; int j0 = (int) (floor(Y - outer_radius)); int j1 = (int) (ceil(Y + outer_radius + 1)); int i0 = (int) (floor(X - outer_radius)); int i1 = (int) (ceil(X + outer_radius + 1)); if (j0 < 0) j0 = 0; if (j1 > height) j1 = height; if (i0 < 0) i0 = 0; if (i1 > width) i1 = width; unsigned char ring_color[3] = {255, 224, 209}; unsigned char pixel[3]; double dist_per_pixel = 1/R; double min_dist_per_pixel = dist_per_pixel; dist_per_pixel /= fabs(sin(obs_lat)); j0 = 0; j1 = height; i0 = 0; i1 = width; for (int j = j0; j < j1; j++) { for (int i = i0; i < i1; i++) { view->PixelToViewCoordinates(options->CenterX() - i, options->CenterY() - j, pX, pY, pZ); // Find the intersection of the line from the observer to // the point on the view plane passing through the ring // plane const double u = -D / (A * pX + B * pY + C * pZ); // if the intersection point is behind the observer, don't // plot it if (u < 0) continue; // The view coordinates of the point in the ring plane double rX, rY, rZ; rX = u * pX; rY = u * pY; rZ = u * pZ; const double dist_to_point = sqrt(rX * rX + rY * rY + rZ * rZ); if ((draw_far_side && dist_to_point <= dist_to_planet) || (!draw_far_side && dist_to_point > dist_to_planet)) continue; // convert to heliocentric XYZ view->RotateToXYZ(rX, rY, rZ, rX, rY, rZ); // find lat & lon of ring pixel double lat, lon = options->Longitude(); double dist; p->XYZToPlanetographic(rX, rY, rZ, lat, lon, dist); double dpp = dist_per_pixel * fabs(cos(obs_lon - lon)); dpp *= dist_to_point/dist_to_planet; if (dpp < min_dist_per_pixel) dpp = min_dist_per_pixel; ring->setDistPerPixel(dpp); double t = ring->getTransparency(dist); if (t < 0) continue; double b; if (lit_side) b = ring->getBrightness(lon, dist); else b = ring->getBrightness(lon, dist, t); if (b < 0) continue; for (int k = 0; k < 3; k++) pixel[k] = (unsigned char) (b * ring_color[k]); display->setPixel(i, j, pixel, 1 - t); } } } xplanet-1.3.0/src/libmultiple/Makefile.in0000644000175000017500000003451711731356514015305 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libmultiple DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libmultiple_a_LIBADD = am_libmultiple_a_OBJECTS = addOrbits.$(OBJEXT) \ RayleighScattering.$(OBJEXT) drawSphere.$(OBJEXT) \ drawEllipsoid.$(OBJEXT) drawRings.$(OBJEXT) \ drawStars.$(OBJEXT) drawSunGlare.$(OBJEXT) libmultiple_a_OBJECTS = $(am_libmultiple_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libmultiple_a_SOURCES) DIST_SOURCES = $(libmultiple_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libmultiple.a AM_CPPFLAGS = -I@top_srcdir@/src @FREETYPE_CFLAGS@ @USE_AR_FALSE@libmultiple_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libmultiple_a_AR = $(AR) cru libmultiple_a_SOURCES = \ libmultiple.h \ addOrbits.cpp \ RayleighScattering.h \ RayleighScattering.cpp \ drawSphere.cpp \ drawEllipsoid.cpp \ drawRings.cpp \ drawStars.cpp \ drawSunGlare.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libmultiple/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libmultiple/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmultiple.a: $(libmultiple_a_OBJECTS) $(libmultiple_a_DEPENDENCIES) -rm -f libmultiple.a $(libmultiple_a_AR) libmultiple.a $(libmultiple_a_OBJECTS) $(libmultiple_a_LIBADD) $(RANLIB) libmultiple.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RayleighScattering.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addOrbits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawEllipsoid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawRings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawSphere.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawStars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawSunGlare.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libmultiple/RayleighScattering.cpp0000644000175000017500000006276211722206473017535 00000000000000#include #include #include #include #include using namespace std; #include "findFile.h" #include "parse.h" #include "xpUtil.h" #include "libimage/Image.h" #include "libmultiple/RayleighScattering.h" // Calculate the airmass using the expressions in Smith and Smith, JGR // 77(19), 3592--3597, 1972 // x = distance from planet center, units of atmospheric scale height // chi = zenith angle static double chapman(double x, double chi) { double chapman; double y = sqrt(x/2) * fabs(cos(chi)); if (chi < M_PI_2) chapman = sqrt(x * M_PI_2) * exp(y*y) * erfc(y); else chapman = sqrt(2 * M_PI * x) * (sqrt(sin(chi))*exp(x*(1-sin(chi))) -0.5*exp(y*y)*erfc(y)); return chapman; } // Find the altitude (units of planetary radius) where the sun sets // for a given zenith angle static double shadowHeight(double sza) { double shadowHeight; if (cos(sza) > 0) shadowHeight = 0; else shadowHeight = 1/sin(sza) - 1; return shadowHeight; } // find the height above the ground given the zenith angle at the ground // and the slant path length to the ground static double slantHeight(double chi, double slant) { double a = 1; double b = 2; double c = -slant * (slant + 2 * cos(chi)); return (-b + sqrt(b*b-4*a*c))/2*a; } // find the slant path length to the ground given the zenith angle at the ground // and the height above the ground static double slantLength(double chi, double height) { double a = 1; double b = 2 * cos(chi); double c = -height * (height + 2); return (-b + sqrt(b*b-4*a*c))/2*a; } // find the zenith angle along the slant path given the // zenith angle at the ground and the height above the ground static double zenithAlongSlant(double chi, double height) { return (asin(sin(chi) / (1+height))); } // find the zenith angle at a point along the tangent given the zenith // angle at the tangent point. Set isNear to true if the point is // closer than the tangent, false if it is on the far side. Tangent // point is assumed to be at the ground. static double zenithAlongTangent(double chi, double height, bool isNear) { double angle1 = asin(1/(1+height)); double angle2 = M_PI_2 - chi; if (isNear) { return angle1 - angle2; } else { return M_PI - angle1 - angle2; } } void RayleighScattering::createTables() { double deg_to_rad = M_PI/180; double planck1 = 1.19104e-6; double planck2 = 0.0143883; double temp = 5700; double peakLambda = 510e-9; double peakRadiance = planck1/(pow(peakLambda,5) * (exp(planck2/(peakLambda*temp))-1)); double htop = tanHeight_[tanHeight_.size()-1]; double min_dh = scaleHeight_ / 5; // assume tables for each degree between 0 and 180 vector phase_d; vector phase; for (int i = 0; i < 181; i++) { phase_d.push_back(i); phase.push_back(i * deg_to_rad); } int area_th = incidence_.size() * tanHeight_.size(); int area_em = incidence_.size() * emission_.size(); double n2m1 = indexOfRefraction_*indexOfRefraction_-1; // build the limb tables for (unsigned int ip = 0; ip < phase.size(); ip++) { double th_array[lambda_.size() * area_th]; for (unsigned int i = 0; i < lambda_.size() * area_th; i++) th_array[i] = 0; for (unsigned int il = 0; il < lambda_.size(); il++) { double lambda4 = pow(lambda_[il], 4); double rayleighScale = 1/peakRadiance; rayleighScale *= planck1/(pow(lambda_[il],5) * (exp(planck2/(lambda_[il]*temp))-1)); rayleighScale *= (2 * pow(M_PI*n2m1, 2)) / (3*numberDensity_); double crossRayleigh = 4*M_PI*rayleighScale / (numberDensity_*lambda4); // fudge factor - scale the red down at low phase angles if (il == 0) rayleighScale *= 0.5 * (1 + (1-cos(phase[ip]/2))); for (unsigned int ii = 0; ii < incidence_.size(); ii++) { if (phase[ip] > (M_PI_2+incidence_[ii])+2*deg_to_rad) continue; if (phase[ip] < fabs(M_PI_2-incidence_[ii])-2*deg_to_rad) continue; double hmin = shadowHeight(incidence_[ii]) * radius_; if (htop < hmin) continue; double cos2phase = cos(phase[ip]) * cos(phase[ip]); for (unsigned int it = 0; it < tanHeight_.size(); it++) { unsigned int ipos = il*area_th + it*incidence_.size() + ii; double rayleigh = 0; // slant distance from the tangent point to htop double xfar = slantLength(M_PI_2, (htop-tanHeight_[it]) /(radius_+tanHeight_[it])); xfar *= (radius_+tanHeight_[it]); int n_h = (int) ceil(xfar/min_dh); double dx = xfar / (n_h-1); // the far side of the tangent point for (int ix = n_h-2; ix >= 0; ix--) { double x = (ix + 0.5)* dx; double h = slantHeight(M_PI_2, x/(radius_+tanHeight_[it])); double thisIncidence = zenithAlongTangent(incidence_[ii], h, (phase[ip]>M_PI_2)); double thisEmission = zenithAlongTangent(M_PI_2, h, false); h *= (radius_ + tanHeight_[it]); h += tanHeight_[it]; hmin = shadowHeight(thisIncidence) * radius_; if (h < hmin) continue; double atten = exp(-h/scaleHeight_); double tauScale = numberDensity_*atten*scaleHeight_*crossRayleigh; double tauSun = chapman((h+radius_)/scaleHeight_, thisIncidence); double tauView = chapman((h+radius_)/scaleHeight_, thisEmission); rayleigh += dx * atten * exp(-(tauSun+tauView)*tauScale); } // the near side of the tangent point for (int ix = 0; ix < n_h-1; ix++) { double x = (ix+0.5) * dx; double h = slantHeight(M_PI_2, x/(radius_+tanHeight_[it])); double thisIncidence = zenithAlongTangent(incidence_[ii], h, (phase[ip] htop) continue; for (unsigned int ie = 0; ie < emission_.size(); ie++) { if (phase[ip] > (emission_[ie]+incidence_[ii])+2*deg_to_rad) continue; if (phase[ip] < fabs(emission_[ie]-incidence_[ii])-2*deg_to_rad) continue; unsigned int ipos = il * area_em + ie * incidence_.size() + ii; double rayleigh = 0; // slant distance from the tangent point to htop double xfar = slantLength(emission_[ie], htop/radius_); xfar *= radius_; int n_h = (int) ceil(xfar/min_dh); double dx = xfar / (n_h-1); // integrate along the slant path for (int ix = 0; ix < n_h-1; ix++) { double x = (ix+0.5) * dx; double h = slantHeight(emission_[ie], x/radius_); double thisIncidence = zenithAlongSlant(incidence_[ii], h); double thisEmission = zenithAlongSlant(emission_[ie], h); h *= radius_; if (h < hmin) continue; double atten = exp(-h/scaleHeight_); double tauSun = chapman((h+radius_)/scaleHeight_, thisIncidence); double tauView = chapman((h+radius_)/scaleHeight_,thisEmission); double tauScale = numberDensity_ * atten * scaleHeight_ * crossRayleigh; rayleigh += dx * atten * exp(-(tauSun+tauView)*tauScale); } rayleigh *= (0.75*(1+cos2phase)*rayleighScale/lambda4); em_array[ipos] = rayleigh; } // emission } // incidence } // lambda char buffer[64]; snprintf(buffer, 64, diskTemplate_.c_str(), (int) (phase_d[ip])); writeTable(buffer, em_array, lambda_.size(), incidence_.size(), emission_.size(), diskPNG_); } } RayleighScattering::RayleighScattering(string configFile) : diskPNG_(false), diskTemplate_(""), indexOfRefraction_(0.), limbPNG_(false), limbTemplate_(""), numberDensity_(0.), radius_(0.), scaleHeight_(0.) { bool foundFile = findFile(configFile, "scattering"); if (!foundFile) { ostringstream errStr; errStr << "Can't load scattering file " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } phaseDeg_.clear(); for (int i = 0; i < 181; i++) { phaseDeg_.push_back((double) i); PNGTable_.insert(make_pair(i, (Image *) NULL)); BINTable_.insert(make_pair(i, (double *) NULL)); } for (int i = 0; i < 3; i++) scattering_[i] = 0; readConfigFile(configFile); } void RayleighScattering::readConfigFile(string configFile) { ifstream inFile(configFile.c_str()); char line[MAX_LINE_LENGTH]; vector values; if (!readBlock(inFile, "INCIDENCE %d", values)) { ostringstream errStr; errStr << "INCIDENCE block not found in " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } incidence_.clear(); for (unsigned int ii = 0; ii < values.size(); ii++) incidence_.push_back(values[ii] * deg_to_rad); if (!readBlock(inFile, "EMISSION %d", values)) { ostringstream errStr; errStr << "EMISSION block not found in " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } emission_.clear(); for (unsigned int ii = 0; ii < values.size(); ii++) emission_.push_back(values[ii] * deg_to_rad); if (!readBlock(inFile, "TANGENT_HEIGHT %d", values)) { ostringstream errStr; errStr << "TANGENT_HEIGHT block not found in " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } tanHeight_.clear(); for (unsigned int ii = 0; ii < values.size(); ii++) tanHeight_.push_back(values[ii] * 1e3); diskTemplate_.clear(); limbTemplate_.clear(); while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) break; } if (static_cast (i) > strlen(line)) continue; if (isEndOfLine(line[i])) continue; char templ1[MAX_LINE_LENGTH]; char templ2[MAX_LINE_LENGTH]; sscanf(line, "TEMPLATES %s %s", templ1, templ2); diskTemplate_.assign(templ1); limbTemplate_.assign(templ2); size_t found = diskTemplate_.find(".png"); if (found == string::npos) found = diskTemplate_.find(".PNG"); diskPNG_ = (found != string::npos); found = limbTemplate_.find(".png"); if (found == string::npos) found = limbTemplate_.find(".PNG"); limbPNG_ = (found != string::npos); break; } if (diskTemplate_.length() == 0) { ostringstream errStr; errStr << "TEMPLATE disk file not found in " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } if (limbTemplate_.length() == 0) { ostringstream errStr; errStr << "TEMPLATE limb file not found in " << configFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } // remaining parameters are only required for table generation readBlock(inFile, "WAVELENGTHS %d", values); lambda_.clear(); for (unsigned int ii = 0; ii < values.size(); ii++) lambda_.push_back(values[ii] * 1e-9); readValue(inFile, "RADIUS %lf", radius_); radius_ *= 1e3; readValue(inFile, "SCALE_HEIGHT %lf", scaleHeight_); readValue(inFile, "INDEX_OF_REFRACTION %lf", indexOfRefraction_); readValue(inFile, "DENSITY %lf", numberDensity_); } RayleighScattering::~RayleighScattering() { clearTables(); } bool RayleighScattering::readBlock(ifstream &inFile, const char *format, vector &values) { values.clear(); char line[MAX_LINE_LENGTH]; while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) break; } if (static_cast (i) > strlen(line)) continue; if (isEndOfLine(line[i])) continue; int size; if (sscanf(line, format, &size) == 0) break; for (int ii = 0; ii < size; ii++) { double thisValue; inFile >> thisValue; values.push_back(thisValue); } return true; } return false; } bool RayleighScattering::readValue(ifstream &inFile, const char *format, double &value) { char line[MAX_LINE_LENGTH]; while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) break; } if (static_cast (i) > strlen(line)) continue; if (isEndOfLine(line[i])) continue; if (sscanf(line, format, &value) == 0) break; return true; } return false; } void RayleighScattering::clear() { for (int i = 0; i < 3; i ++) scattering_[i] = 0; } void RayleighScattering::clearTables() { for (map::iterator it = PNGTable_.begin(); it != PNGTable_.end(); it++) { delete it->second; it->second = NULL; } for (map::iterator it = BINTable_.begin(); it != BINTable_.end(); it++) { delete [] it->second; it->second = NULL; } } // store a double (0 < x < 1) as a four byte array of unsigned char // big endian order: // four bytes ABCD -> alpha = A, red = B, green = C, blue = D void RayleighScattering::doubleToARGB(double x, unsigned char argb[4]) { static const unsigned long maxValue = 0xffffffff; unsigned long ul = (unsigned long) (x * maxValue); argb[0] = (ul >> 24) & 0xff; argb[1] = (ul >> 16) & 0xff; argb[2] = (ul >> 8) & 0xff; argb[3] = ul & 0xff; } // turn a four byte unsigned char array to a double (0 < x < 1) // Note: four bytes is only good enough for a float double RayleighScattering::ARGBToDouble(unsigned char argb[4]) { static const unsigned long maxValue = 0xffffffff; unsigned long ul = argb[0] << 24 | argb[1] << 16 | argb[2] << 8 | argb[3]; double x = ul; x /= maxValue; return x; } void RayleighScattering::writeTable(const char *buffer, double *array, size_t dim0, size_t dim1, size_t dim2, bool usePNG) { if (usePNG) { unsigned int area = dim1 * dim2; unsigned char rgb[dim0 * 3 * area]; unsigned char alpha[dim0 * area]; memset(rgb, 0, dim0 * 3 * area); memset(alpha, 0, dim0 * area); unsigned char argb[4]; for (unsigned int il = 0; il < dim0; il++) { for (unsigned int it = 0; it < dim2; it++) { for (unsigned int ii = 0; ii < dim1; ii++) { unsigned int ipos = il * area + it * dim1 + ii; doubleToARGB(array[ipos], argb); alpha[il * area + it * dim1 + ii] = argb[0]; memcpy(rgb+3*(il * area + it*dim1 + ii), argb + 1, 3); } } } Image pngImage(dim1, dim0*dim2, rgb, alpha); if (!pngImage.Write(buffer)) { ostringstream errStr; errStr << "Can't write scattering file " << buffer << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } else { string message("Wrote "); message.append(buffer); message.append("\n"); xpMsg(message, __FILE__, __LINE__); } } else { FILE *outfile = fopen(buffer, "wb"); if (outfile == NULL) { ostringstream errStr; errStr << "Can't write scattering file " << buffer << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } else { fwrite(&dim0, sizeof(size_t), 1, outfile); fwrite(&dim1, sizeof(size_t), 1, outfile); fwrite(&dim2, sizeof(size_t), 1, outfile); fwrite(array, sizeof(double), dim0*dim1*dim2, outfile); fclose(outfile); string message("Wrote "); message.append(buffer); message.append("\n"); xpMsg(message, __FILE__, __LINE__); } } } double * RayleighScattering::readBinaryTable(const char *filename) { double *dblArray = NULL; FILE *inFile = fopen(filename, "rb"); if (inFile != NULL) { size_t dim0, dim1, dim2; fread(&dim0, sizeof(size_t), 1, inFile); fread(&dim1, sizeof(size_t), 1, inFile); fread(&dim2, sizeof(size_t), 1, inFile); size_t size = dim0*dim1*dim2; dblArray = new double[size]; fread(dblArray, sizeof(double), size, inFile); } fclose(inFile); return dblArray; } double RayleighScattering::getColor(int index) { return scattering_[index]; } void RayleighScattering::calcScatteringLimb(double inc, double tanht, double phase) { for (int ic = 0; ic < 3; ic++) calcScattering(inc, tanht, phase, ic, tanHeight_, limbTemplate_, limbPNG_); } void RayleighScattering::calcScatteringDisk(double inc, double ems, double phase) { if (phase > M_PI_2) phase = M_PI - phase; for (int ic = 0; ic < 3; ic++) calcScattering(inc, ems, phase, ic, emission_, diskTemplate_, diskPNG_); } void RayleighScattering::readTableValue(string thisTemplate, bool usePNG, int color, int x, int y, vector yaxis, int phase, double values[4]) { if (usePNG) { map::iterator it = PNGTable_.find(phase); Image *image = NULL; if (it->second == NULL) { char buffer[64]; snprintf(buffer, 64, thisTemplate.c_str(), phase); string thisFile(buffer); if (!findFile(thisFile, "scattering")) { ostringstream errStr; errStr << "Can't load scattering file " << thisFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } image = new Image(); if (!image->Read(thisFile.c_str())) { scattering_[color] = 0; return; } it->second = image; } unsigned char argb[4]; image = it->second; image->getPixel(x, y, argb+1, argb); values[0] = ARGBToDouble(argb); image->getPixel(x+1, y, argb+1, argb); values[1] = ARGBToDouble(argb); image->getPixel(x, y+1, argb+1, argb); values[2] = ARGBToDouble(argb); image->getPixel(x+1, y+1, argb+1, argb); values[3] = ARGBToDouble(argb); } else { map::iterator it = BINTable_.find(phase); double *array = NULL; if (it->second == NULL) { char buffer[64]; snprintf(buffer, 64, thisTemplate.c_str(), phase); string thisFile(buffer); if (!findFile(thisFile, "scattering")) { ostringstream errStr; errStr << "Can't load scattering file " << thisFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } array = readBinaryTable(thisFile.c_str()); if (array == NULL) { scattering_[color] = 0; return; } it->second = array; } array = it->second; unsigned int ipos[4]; ipos[0] = y * incidence_.size() + x; ipos[1] = y * incidence_.size() + x+1; ipos[2] = (y+1) * incidence_.size() + x; ipos[3] = (y+1) * incidence_.size() + x+1; unsigned int isize = 3 * yaxis.size() * incidence_.size(); for (int i = 0; i < 4; i++) { if (isize > ipos[i]) values[i] = array[ipos[i]]; else values[i] = 0; } } } void RayleighScattering::calcScattering(double inc, double yValue, double phase, int color, vector yaxis, string thisTemplate, bool usePNG) { double deg_to_rad = M_PI / 180; if (inc < incidence_.front() || inc > incidence_.back() \ || yValue < yaxis.front() || yValue > yaxis.back()) { scattering_[color] = 0; return; } double phase_deg = phase / deg_to_rad; int phase_lo = floor(phase_deg); if (phase_lo < 0) phase_lo = 0; int phase_hi = ceil(phase_deg); if (phase_hi - phase_deg < 1e-3) phase_hi = phase_lo+1; vector::iterator inc_hi, inc_lo; // lower_bound returns first element greater than or equal to value inc_lo = lower_bound(incidence_.begin(), incidence_.end(), inc); if (inc_lo > incidence_.begin()) inc_lo--; // upper_bound returns first element greater than value inc_hi = upper_bound(incidence_.begin(), incidence_.end(), inc); vector::iterator y_hi, y_lo; y_lo = lower_bound(yaxis.begin(), yaxis.end(), yValue); if (y_lo > yaxis.begin()) y_lo--; y_hi = upper_bound(yaxis.begin(), yaxis.end(), yValue); int x = inc_lo - incidence_.begin(); double xFrac = (*inc_hi == *inc_lo ? 0 : (inc - *inc_lo) / (*inc_hi - *inc_lo)); int y = y_lo - yaxis.begin(); double yFrac = (*y_hi == *y_lo ? 0 : (yValue - *y_lo) / (*y_hi - *y_lo)); double weight[4]; getWeights(xFrac, 1-yFrac, weight); y += color * yaxis.size(); double values[4]; readTableValue(thisTemplate, usePNG, color, x, y, yaxis, phase_lo, values); double loPhase = 0; for (int i = 0; i < 4; i++) loPhase += weight[i] * values[i]; readTableValue(thisTemplate, usePNG, color, x, y, yaxis, phase_hi, values); double hiPhase = 0; for (int i = 0; i < 4; i++) hiPhase += weight[i] * values[i]; scattering_[color] = loPhase; if (phase_hi - phase_lo != 0) scattering_[color] += (phase_deg-phase_lo)/(phase_hi-phase_lo) * (hiPhase - loPhase); if (scattering_[color] < 0) scattering_[color] = 0; } xplanet-1.3.0/src/libmultiple/drawSphere.cpp0000644000175000017500000001766111724306745016054 00000000000000#include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "View.h" #include "xpUtil.h" #include "libdisplay/libdisplay.h" #include "libmultiple/libmultiple.h" #include "libmultiple/RayleighScattering.h" #include "libplanet/Planet.h" void drawSphere(const double pX, const double pY, const double pR, const double oX, const double oY, const double oZ, const double X, const double Y, const double Z, DisplayBase *display, const View *view, const Map *map, Planet *planet, PlanetProperties *planetProperties) { double lat, lon; unsigned char color[3]; const int j0 = 0; const int j1 = display->Height(); const int i0 = 0; const int i1 = display->Width(); // P1 (Observer) is at (oX, oY, oZ), or (0, 0, 0) in view // coordinates // P2 (current pixel) is on the line from P1 to (vX, vY, vZ) // P3 (Planet center) is at (X, Y, Z) in heliocentric rectangular // Now find the intersection of the line with the planet's sphere. // This algorithm is from // http://astronomy.swin.edu.au/~pbourke/geometry/sphereline const double p1X = 0, p1Y = 0, p1Z = 0; double p2X, p2Y, p2Z; double p3X, p3Y, p3Z; view->RotateToViewCoordinates(X, Y, Z, p3X, p3Y, p3Z); const double planetRadius = planet->Radius() * planetProperties->Magnify(); const double c = 2 * (dot(p1X - p3X, p1Y - p3Y, p1Z - p3Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z) - planetRadius * planetRadius); Options *options = Options::getInstance(); // compute the value of the determinant at the center of the body view->PixelToViewCoordinates(options->CenterX() - pX, options->CenterY() - pY, p2X, p2Y, p2Z); const double centerA = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z)); const double centerB = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z)); const double centerDet = centerB * centerB - centerA * c; double plX, plY, plZ; planet->getPosition(plX, plY, plZ); RayleighScattering *rayleighDisk = NULL; RayleighScattering *rayleighLimb = NULL; double rayleighScale = planetProperties->RayleighScale(); if (rayleighScale > 0) { rayleighDisk = new RayleighScattering(planetProperties->RayleighFile()); rayleighLimb = new RayleighScattering(planetProperties->RayleighFile()); double radiansPerPixel = options->FieldOfView() / display->Width(); double dX = plX - oX; double dY = plY - oY; double dZ = plZ - oZ; double targetDist = sqrt(dX*dX + dY*dY + dZ*dZ); double kmPerPixel = radiansPerPixel * targetDist * AU_to_km; double minRes = 2 * rayleighLimb->getScaleHeightKm() * planetProperties->RayleighLimbScale(); if (kmPerPixel > minRes) { delete rayleighLimb; rayleighLimb = NULL; } } for (int j = j0; j < j1; j++) { for (int i = i0; i < i1; i++) { const double dX = options->CenterX() - i; const double dY = options->CenterY() - j; view->PixelToViewCoordinates(dX, dY, p2X, p2Y, p2Z); const double a = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z)); const double b = 2 * (dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p1X - p3X, p1Y - p3Y, p1Z - p3Z)); const double determinant = b*b - a * c; double u; double iX, iY, iZ; if (rayleighLimb != NULL) { u = -b/a; iX = p1X + u * (p2X - p1X); iY = p1Y + u * (p2Y - p1Y); iZ = p1Z + u * (p2Z - p1Z); view->RotateToXYZ(iX, iY, iZ, iX, iY, iZ); double lon, lat, rad; planet->XYZToPlanetographic(iX, iY, iZ, lat, lon, rad); if (rad >= 1 || pR * determinant/centerDet < 10) { double incidence = acos(ndot(iX-plX, iY-plY, iZ-plZ, -iX, -iY, -iZ)); double phase = acos(ndot(oX-iX, oY-iY, oZ-iZ, -iX, -iY, -iZ)); double tanht = planet->Radius() * AU_to_km * 1e3 * (rad-1); if (tanht < 0) tanht = 0; if (planetProperties->RayleighLimbScale() > 0) tanht /= planetProperties->RayleighLimbScale(); rayleighLimb->calcScatteringLimb(incidence, tanht, phase); display->getPixel(i, j, color); double opacity[3] = { 0, 0, 0 }; for (int ic = 0; ic < 3; ic++) { double thisColor = rayleighLimb->getColor(ic); thisColor = (rayleighScale * 255 * thisColor); if (thisColor > 255) thisColor = 255; color[ic] = thisColor; opacity[ic] = thisColor / 255; } display->setPixel(i, j, color, opacity); } rayleighLimb->clear(); } if (determinant < 0) continue; u = -(b + sqrt(determinant)); u /= a; // if the intersection point is behind the observer, don't // plot it if (u < 0) continue; // coordinates of the intersection point iX = p1X + u * (p2X - p1X); iY = p1Y + u * (p2Y - p1Y); iZ = p1Z + u * (p2Z - p1Z); view->RotateToXYZ(iX, iY, iZ, iX, iY, iZ); planet->XYZToPlanetographic(iX, iY, iZ, lat, lon); map->GetPixel(lat, lon, color); if (rayleighDisk != NULL) { double incidence = acos(ndot(iX-plX, iY-plY, iZ-plZ, -iX, -iY, -iZ)); double emission = acos(ndot(iX-plX, iY-plY, iZ-plZ, oX-iX, oY-iY, oZ-iZ)); double phase = acos(ndot(oX-iX, oY-iY, oZ-iZ, -iX, -iY, -iZ)); double emsScale = 1; if (planetProperties->RayleighEmissionWeight() > 0) emsScale = pow(sin(emission), planetProperties->RayleighEmissionWeight()); rayleighDisk->calcScatteringDisk(incidence, emission, phase); for (int ic = 0; ic < 3; ic++) { double thisColor = rayleighDisk->getColor(ic) * emsScale; thisColor = (rayleighScale * 255 * thisColor + color[ic]); if (thisColor > 255) thisColor = 255; color[ic] = thisColor; } rayleighDisk->clear(); } double darkening = 1; if (planet->Index() != SUN && rayleighScale <= 0) { darkening = ndot(X - iX, Y - iY, Z - iZ, X - oX, Y - oY, Z - oZ); if (darkening < 0) darkening = 0; else darkening = photoFunction(darkening); } for (int k = 0; k < 3; k++) color[k] = static_cast (color[k] * darkening); double opacity = 1; if (pR * determinant/centerDet < 10) opacity = 1 - pow(1-determinant/centerDet, pR); display->setPixel(i, j, color, opacity); } } delete rayleighDisk; delete rayleighLimb; } xplanet-1.3.0/src/libmultiple/drawSunGlare.cpp0000644000175000017500000000224510434364426016333 00000000000000#include using namespace std; #include "Options.h" #include "libdisplay/libdisplay.h" void drawSunGlare(DisplayBase *display, const double X, const double Y, const double R, const unsigned char *color) { Options *options = Options::getInstance(); const double glare = options->Glare() * R; if (glare == 0) return; const double falloff = options->Glare() / log(256.0); const int height = display->Height(); const int width = display->Width(); for (int j = 0; j < height; j++) { const double jdist = Y - j; // decreases downward for (int i = 0; i < width; i++) { const double idist = i - X; // increases to the right const double dist = sqrt(idist * idist + jdist * jdist); if (dist > R-3 && dist < glare) { // draw the glare const double angle = atan2(jdist, idist); const double brightness = (0.05 * (19 + cos(12 * angle)) * exp((1-dist/R)/falloff)); display->setPixel(i, j, color, brightness); } } } } xplanet-1.3.0/src/libmultiple/addOrbits.cpp0000644000175000017500000000664411174726707015665 00000000000000#include #include #include using namespace std; #include "body.h" #include "Options.h" #include "PlanetProperties.h" #include "View.h" #include "libannotate/LineSegment.h" #include "libmultiple/libmultiple.h" #include "libplanet/Planet.h" static void addArc(const double startTime, const double stopTime, const int numTimes, const unsigned char color[3], const int thickness, const View *view, const int width, const int height, const double Prx, const double Pry, const double Prz, Planet *p, multimap &annotationMap) { Options *options = Options::getInstance(); const body b = p->Index(); const double delTime = (stopTime - startTime) / numTimes; for (int i = 0; i <= numTimes; i++) { bool skipThisArc = false; double oldX, oldY, oldZ; double newX, newY, newZ; for (int j = 0; j < 2; j ++) { const double jd = startTime + (i + j) * delTime; double X, Y, Z; Planet planet(jd, b); planet.calcHeliocentricEquatorial(false); planet.getPosition(X, Y, Z); view->XYZToPixel(X + Prx, Y + Pry, Z + Prz, X, Y, Z); X += options->CenterX(); Y += options->CenterY(); if (X < -width || X > 2*width || Y < -height || Y > 2*height || Z < 0) { skipThisArc = true; break; } if (j == 0) { oldX = X; oldY = Y; oldZ = Z; } else { newX = X; newY = Y; newZ = Z; } } if (skipThisArc) continue; LineSegment *ls = new LineSegment(color, thickness, oldX, oldY, newX, newY); double midZ = 0.5 * (oldZ + newZ); annotationMap.insert(pair(midZ, ls)); } } void addOrbits(const double jd0, const View *view, const int width, const int height, Planet *p, PlanetProperties *currentProperties, multimap &annotationMap) { const double period = p->Period(); if (period == 0) return; // Units of orbit circumference const double startOrbit = currentProperties->StartOrbit(); const double stopOrbit = currentProperties->StopOrbit(); // degrees const double delOrbit = currentProperties->DelOrbit(); const unsigned char *color = currentProperties->OrbitColor(); const int thickness = currentProperties->ArcThickness(); double Prx=0, Pry=0, Prz=0; if (p->Primary() != SUN) { Planet primary(jd0, p->Primary()); primary.calcHeliocentricEquatorial(); primary.getPosition(Prx, Pry, Prz); } const double startTime = jd0 + startOrbit * period; const double stopTime = jd0 + stopOrbit * period; int numTimes = (int) abs(360 * startOrbit / delOrbit + 0.5); addArc(startTime, jd0, numTimes, color, thickness, view, width, height, Prx, Pry, Prz, p, annotationMap); numTimes = (int) abs(360 * stopOrbit / delOrbit + 0.5); addArc(jd0, stopTime, numTimes, color, thickness, view, width, height, Prx, Pry, Prz, p, annotationMap); } xplanet-1.3.0/src/drawMultipleBodies.cpp0000644000175000017500000004374211717725336015227 00000000000000#include #include #include #include #include #include #include using namespace std; #include "body.h" #include "buildPlanetMap.h" #include "config.h" #include "createMap.h" #include "findBodyXYZ.h" #include "findFile.h" #include "keywords.h" #include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "Ring.h" #include "satrings.h" #include "sphericalToPixel.h" #include "View.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libdisplay/libdisplay.h" #include "libimage/Image.h" #include "libmultiple/libmultiple.h" #include "libplanet/Planet.h" struct plotDetail { Planet *p; double X, Y; // pixel location double radius; // radius in pixels double sun_lat, sun_lon; // sub-solar location double obs_lat, obs_lon; // sub-observer location }; extern void arrangeMarkers(multimap &annotationMap, DisplayBase *display); void drawMultipleBodies(DisplayBase *display, Planet *target, const double upX, const double upY, const double upZ, map &planetsFromSunMap, PlanetProperties *planetProperties[]) { Options *options = Options::getInstance(); const int width = display->Width(); const int height = display->Height(); // Get the rectangular position of the origin double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Get the rectangular position of the target double tX, tY, tZ; options->getTarget(tX, tY, tZ); // Get the displacement from origin to target double dX = tX - oX; double dY = tY - oY; double dZ = tZ - oZ; double target_dist = sqrt(dX*dX + dY*dY + dZ*dZ); if (target_dist == 0) xpExit("Origin and target bodies can't be the same!\n", __FILE__, __LINE__); if (options->Verbosity() > 0) { if (options->TargetMode() != XYZ && (options->OriginMode() == BODY || options->OriginMode() == MAJOR || options->OriginMode() == RANDOM || options->OriginMode() == SYSTEM)) { ostringstream msg; msg << "Looking at " << planetProperties[options->Target()]->Name() << " from " << planetProperties[options->Origin()]->Name() << endl; xpMsg(msg.str(), __FILE__, __LINE__); if (options->Verbosity() > 1) { char buffer[128]; snprintf(buffer, 128, "target dist = %12.6f, in units of radius = %12.6f\n", target_dist, target_dist / (planetProperties[target->Index()]->Magnify() * target->Radius())); xpMsg(buffer, __FILE__, __LINE__); } } } // Find the pixel radius and angle subtended by the target. // This is used to get degrees per pixel. double pixels_per_radian = -1; switch (options->FOVMode()) { case RADIUS: { double target_pixel_radius = (options->Radius() * height); target_pixel_radius /= planetProperties[options->Target()]->Magnify(); if (target->Index() == SATURN) target_pixel_radius /= 2.32166; const double target_angular_radius = target->Radius() / target_dist; pixels_per_radian = target_pixel_radius / target_angular_radius; options->FieldOfView(width / pixels_per_radian); } break; case FOV: { pixels_per_radian = width / options->FieldOfView(); if (options->TargetMode() != XYZ) { const double target_angular_radius = target->Radius()/target_dist; double target_pixel_radius = (target_angular_radius * pixels_per_radian); double scale = 1.0; if (target->Index() == SATURN) scale *= 2.32166; options->Radius(scale * target_pixel_radius / height); } } break; default: xpExit("drawMultipleBodies: Unknown FOV mode???\n", __FILE__, __LINE__); } // Linear distance per pixel const double dist_per_pixel = target_dist / pixels_per_radian; if (options->Verbosity() > 1) { ostringstream msg; char buffer[128]; int year, month, day, hour, min; double sec; fromJulian(options->JulianDay(), year, month, day, hour, min, sec); snprintf(buffer, 128, "Julian Date = %14.6f (%04d%02d%02d.%02d%02d%02d)\n", options->JulianDay(), year, month, day, hour, min, (int) (sec+0.5)); msg << buffer; snprintf(buffer, 128, "origin XYZ = %14.8f %14.8f %14.8f\n", oX, oY, oZ); msg << buffer; snprintf(buffer, 128, "target XYZ = %14.8f %14.8f %14.8f\n", tX, tY, tZ); msg << buffer; snprintf(buffer, 128, "up XYZ = %14.8f %14.8f %14.8f\n", upX, upY, upZ); msg << buffer; snprintf(buffer, 128, "fov = %14.8f degrees\n", options->FieldOfView()/deg_to_rad); msg << buffer; snprintf(buffer, 128, "dist_per_pixel = %14.8e AU (%14.8e km)\n", dist_per_pixel, dist_per_pixel*AU_to_km); msg << buffer; xpMsg(msg.str(), __FILE__, __LINE__); } // Put the primary in the center of the field of view when looking // from above or below if (options->OriginMode() == ABOVE || options->OriginMode() == BELOW) { findBodyXYZ(options->JulianDay(), options->Primary(), -1, tX, tY, tZ); } View *view = new View(oX, oY, oZ, tX, tY, tZ, upX * FAR_DISTANCE, upY * FAR_DISTANCE, upZ * FAR_DISTANCE, dist_per_pixel, options->Rotate()); multimap annotationMap; annotationMap.clear(); multimap planetMap; planetMap.clear(); // Now run through all of the other bodies to see if any of // them are in the field of view for (map::iterator it0 = planetsFromSunMap.begin(); it0 != planetsFromSunMap.end(); it0++) { Planet *current_planet = it0->second; body b = current_planet->Index(); PlanetProperties *currentProperties = planetProperties[current_planet->Index()]; // Get the planet's position double pX, pY, pZ; current_planet->getPosition(pX, pY, pZ); // Now get the position relative to the origin dX = pX - oX; dY = pY - oY; dZ = pZ - oZ; double dist = sqrt(dX*dX + dY*dY + dZ*dZ); if (currentProperties->DrawOrbit()) { double light_time = 0; if (options->LightTime()) { light_time = dist * AU_to_km / 299792.458; light_time /= 86400; } addOrbits(options->JulianDay() - light_time, view, width, height, current_planet, currentProperties, annotationMap); } if (dist == 0) continue; const double angularRadius = current_planet->Radius() / dist; double pixel_radius = (angularRadius * pixels_per_radian * currentProperties->Magnify()); // Get the pixel location of this body double X, Y, Z; view->XYZToPixel(pX, pY, pZ, X, Y, Z); X += options->CenterX(); Y += options->CenterY(); // only annotate the image if it's big enough if (currentProperties->MinRadiusForMarkers() < pixel_radius) { if (currentProperties->DrawArcs()) addArcs(currentProperties, current_planet, view, NULL, annotationMap); if (currentProperties->DrawMarkers()) addMarkers(currentProperties, current_planet, pixel_radius, X, Y, Z, view, NULL, width, height, planetsFromSunMap, annotationMap); if (currentProperties->DrawSatellites()) addSatellites(currentProperties, current_planet, view, NULL, annotationMap); } // Even if the disk of the Sun or Saturn is off the // screen, we still want to draw the glare or the rings. double multFactor = fabs(current_planet->Radius() / Z); if (multFactor < 1) multFactor = 1; if (b == SUN) multFactor = 28; else if (b == SATURN) multFactor = 5 * multFactor; pixel_radius *= multFactor; // if it's behind us or off the screen, skip this one if (Z < -current_planet->Radius() * multFactor || X < -pixel_radius || X > width + pixel_radius || Y < -pixel_radius || Y > height + pixel_radius) continue; pixel_radius /= multFactor; // Now calculate the sub-solar and sub-observer points double sun_lat, sun_lon; current_planet->XYZToPlanetographic(0, 0, 0, sun_lat, sun_lon); double obs_lat, obs_lon; current_planet->XYZToPlanetographic(oX, oY, oZ, obs_lat, obs_lon); // Label this body with its name if (pixel_radius >= currentProperties->MinRadiusForLabel() && pixel_radius <= currentProperties->MaxRadiusForLabel()) { Text *t = new Text(currentProperties->TextColor(), static_cast (X + 0.5), static_cast (Y + 0.5), static_cast (pixel_radius + 1), static_cast (pixel_radius + 1), AUTO, currentProperties->Name()); annotationMap.insert(pair(Z, t)); } // And save for plotting plotDetail planetDetail = {current_planet, X, Y, pixel_radius, sun_lat, sun_lon, obs_lat, obs_lon}; planetMap.insert(pair(Z, planetDetail)); } if (options->Verbosity() > 0) { ostringstream msg; char buffer[256]; snprintf(buffer, 256, "%10s%10s%8s%8s%8s%8s%8s%8s%8s\n", "Name", "Dist", "X", "Y", "radius", "sun lat", "sun lon","obs lat", "obs lon"); msg << buffer; xpMsg(msg.str(), __FILE__, __LINE__); } drawStars(display, view); #ifdef HAVE_CSPICE if (!options->SpiceFiles().empty()) addSpiceObjects(planetsFromSunMap, view, NULL, annotationMap); #endif if (!options->ArcFiles().empty()) addArcs(view, annotationMap); if (!options->MarkerFiles().empty()) addMarkers(view, width, height, planetsFromSunMap, annotationMap); // place markers so that they don't overlap one another, if // possible arrangeMarkers(annotationMap, display); // draw all of the annotations if (!annotationMap.empty()) { multimap::iterator annotationIterator; for (annotationIterator = annotationMap.begin(); annotationIterator != annotationMap.end(); annotationIterator++) { (annotationIterator->second)->Draw(display); } } // planetMap contains a list of bodies to plot, sorted by // distance to the observer multimap::iterator planetIterator = planetMap.end(); while (planetIterator != planetMap.begin()) { planetIterator--; const double dist_to_planet = planetIterator->first; Planet *current_planet = planetIterator->second.p; const double pX = planetIterator->second.X; const double pY = planetIterator->second.Y; double pR = planetIterator->second.radius; const double sLat = planetIterator->second.sun_lat; const double sLon = planetIterator->second.sun_lon; const double oLat = planetIterator->second.obs_lat; const double oLon = planetIterator->second.obs_lon; PlanetProperties *currentProperties = planetProperties[current_planet->Index()]; if (options->Verbosity() > 0) { ostringstream msg; char buffer[256]; snprintf(buffer, 256, "%10s%10.4f%8.1f%8.1f%8.1f%8.2f%8.2f%8.2f%8.2f\n", currentProperties->Name().c_str(), dist_to_planet, pX, pY, pR, sLat/deg_to_rad, sLon/deg_to_rad, oLat/deg_to_rad, oLon/deg_to_rad); msg << buffer; xpMsg(msg.str(), __FILE__, __LINE__); } if (pR <= 1) { display->setPixel(pX, pY, currentProperties->Color()); if (current_planet->Index() == SUN) drawSunGlare(display, pX, pY, 1, currentProperties->Color()); continue; } double X, Y, Z; current_planet->getPosition(X, Y, Z); Ring *ring = NULL; // Draw the far side of Saturn's rings if (current_planet->Index() == SATURN) { const double r_in = (currentProperties->Magnify() * inner_radius/saturn_radius); const double r_out = (currentProperties->Magnify() * outer_radius/saturn_radius); ring = new Ring(r_in, r_out, ring_brightness, LIT, ring_transparency, TRANSP, sLon, sLat, currentProperties->Shade(), planetsFromSunMap, current_planet); const bool lit_side = (sLat * oLat > 0); drawRings(current_planet, display, view, ring, pX, pY, pR, oLat, oLon, lit_side, true); } Map *m = NULL; m = createMap(sLat, sLon, oLat, oLon, width, height, pR, current_planet, ring, planetsFromSunMap, currentProperties); if (!options->OutputMapRect().empty()) { if (current_planet->Index() == options->Target()) { if (!m->Write(options->OutputMapRect().c_str())) { ostringstream errStr; errStr << "Can't create " << options->OutputMapRect() << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } } if (current_planet->Index() == JUPITER || current_planet->Index() == SATURN) { drawEllipsoid(pX, pY, pR, oX, oY, oZ, X, Y, Z, display, view, m, current_planet, currentProperties); } else { drawSphere(pX, pY, pR, oX, oY, oZ, X, Y, Z, display, view, m, current_planet, currentProperties); } delete m; // Draw the grid if (currentProperties->Grid()) { const double grid1 = currentProperties->Grid1(); const double grid2 = currentProperties->Grid2(); const unsigned char *color = currentProperties->GridColor(); for (double lat = -M_PI_2; lat <= M_PI_2; lat += M_PI_2/grid1) { const double radius = current_planet->Radius(lat); for (double lon = -M_PI; lon <= M_PI; lon += M_PI_2/(grid1 * grid2)) { double X, Y, Z; sphericalToPixel(lat, lon, radius * currentProperties->Magnify(), X, Y, Z, current_planet, view, NULL); if (Z < dist_to_planet) display->setPixel(X, Y, color); } } for (double lat = -M_PI_2; lat <= M_PI_2; lat += M_PI_2/(grid1 * grid2)) { const double radius = current_planet->Radius(lat); for (double lon = -M_PI; lon <= M_PI; lon += M_PI_2/grid1) { double X, Y, Z; sphericalToPixel(lat, lon, radius * currentProperties->Magnify(), X, Y, Z, current_planet, view, NULL); if (Z < dist_to_planet) display->setPixel(X, Y, color); } } } if (current_planet->Index() == SUN) { drawSunGlare(display, pX, pY, pR, currentProperties->Color()); } // Draw the near side of Saturn's rings if (current_planet->Index() == SATURN) { const bool lit_side = (sLat * oLat > 0); drawRings(current_planet, display, view, ring, pX, pY, pR, oLat, oLon, lit_side, false); } delete ring; // draw all of the annotations in front of this body if (!annotationMap.empty()) { multimap::iterator annotationIterator = annotationMap.begin(); while (annotationIterator != annotationMap.end() && annotationIterator->first < dist_to_planet) { (annotationIterator->second)->Draw(display); annotationIterator++; } } } // clean up the annotationMap if (!annotationMap.empty()) { multimap::iterator annotationIterator; for (annotationIterator = annotationMap.begin(); annotationIterator != annotationMap.end(); annotationIterator++) delete annotationIterator->second; } delete view; } xplanet-1.3.0/src/Satellite.h0000644000175000017500000000113610411344513012772 00000000000000#ifndef SATELLITE_H #define SATELLITE_H namespace sgp4sdp4 { #include "libsgp4sdp4/sgp4sdp4.h" } class Satellite { public: Satellite(char tle_line[3][80]); ~Satellite(); bool isGoodData() const; int getID() const; const char * getName() const; void getSpherical(const time_t tv_sec, double &lat, double &lon, double &alt); void loadTLE(); void printTLE() const; bool operator == (const Satellite &sat) const; private: bool good; // if TLE is in the right format char tle_entry[3][80]; sgp4sdp4::tle_t tle; }; #endif xplanet-1.3.0/src/parseColor.cpp0000644000175000017500000000533711107137110013513 00000000000000#include #include #include #include #include #include #include using namespace std; #include "findFile.h" #include "xpUtil.h" static map RGBColors; static void buildColorMap() { string RGBFile("rgb.txt"); bool foundFile = findFile(RGBFile, ""); if (!foundFile) { ostringstream errStr; errStr << "Can't load RGB file " << RGBFile << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } char line[128], name[128]; int r, g, b; ifstream infile(RGBFile.c_str()); while (infile.getline(line, 128)) { if (sscanf(line, "%d %d %d %[^\n]\n", &r, &g, &b, name) != 4) continue; if ((r < 0 || r > 255) || (g < 0 || g > 255) || (b < 0 || g > 255)) continue; // strip off DOS end-of-line char *ptr = strchr(name, 13); if (ptr != NULL) *ptr = '\0'; // convert to lower case for (ptr = name; *ptr != '\0'; ptr++) *ptr = tolower(*ptr); unsigned int c = (r << 16) + (g << 8) + b; RGBColors.insert(make_pair(string(name), c)); } infile.close(); } void parseColor(string color, unsigned char RGB[3], string &failed) { if (RGBColors.empty()) buildColorMap(); string defaultcolor = "red"; if (color.empty()) color = defaultcolor; unsigned int value = 0xff0000; if (color[0] == '0' && color[1] == 'x') { value = strtoul(color.c_str(), NULL, 16); } else { // Convert to lower case for (unsigned int i = 0; i < color.size(); i++) color[i] = tolower(color[i]); // There's a DarkSlateGray but no DarkSlateGrey string::size_type grey = color.find("grey"); if (grey != string::npos && grey < color.size()) color[grey+2] = 'a'; memset(RGB, 0, 3); map::iterator p; p = RGBColors.find(color); if (p != RGBColors.end()) { value = p->second; } else { if (color.compare(defaultcolor) != 0) { ostringstream errStr; errStr << "Can't find color " << color << ", using " << defaultcolor << "\n"; failed.assign(errStr.str()); } } } RGB[0] = (unsigned char) ((value & 0xff0000) >> 16); RGB[1] = (unsigned char) ((value & 0x00ff00) >> 8); RGB[2] = (unsigned char) (value & 0x0000ff); } void parseColor(string color, unsigned char RGB[3]) { string failed; parseColor(color, RGB, failed); if (!failed.empty()) xpWarn(failed, __FILE__, __LINE__); } xplanet-1.3.0/src/xpUtil.h0000644000175000017500000000500211716060577012343 00000000000000#ifndef XPUTIL_H #define XPUTIL_H #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 /* pi/2 */ #endif const double deg_to_rad = M_PI/180.; const double TWO_PI = 2 * M_PI; const double AU_to_km = 149597870.66; const double FAR_DISTANCE = 1e6; const int MAX_LINE_LENGTH = 512; extern void cross(const double a[3], const double b[3], double c[3]); extern double dot(const double A0, const double A1, const double A2, const double B0, const double B1, const double B2); extern double ndot(const double A0, const double A1, const double A2, const double B0, const double B1, const double B2); extern double dot(const double a[3], const double b[3]); extern double ndot(const double a[3], const double b[3]); extern double normalize(double a[3]); extern void invertMatrix(const double in[3][3], double out[3][3]); extern time_t get_tv_sec(double jd); extern void RADecToXYZ(double RA, double Dec, double &X, double &Y, double &Z); extern void fromJulian(double jd, int &year, int &month, int &day, int &hour, int &min, double &sec); extern std::string fromJulian(double date); extern double toJulian(int year, int month, int day, int hour, int min, int sec); extern double delT(const double jd); extern void rotateX(double &X, double &Y, double &Z, const double theta); extern void rotateZ(double &X, double &Y, double &Z, const double theta); extern void removeFromEnvironment(const char *name); extern void unlinkFile(const char *name); extern void getWeights(const double t, const double u, double weights[4]); extern void calcGreatArc(const double lat1, const double lon1, const double lat2, const double lon2, double &trueCourse, double &dist); extern double kepler(const double e, double M); extern void precessB1950J2000(double &X, double &Y, double &Z); extern double photoFunction(const double x); extern void xpExit(const std::string &message, const char *file, const int line); extern void xpWarn(const std::string &message, const char *file, const int line); extern void xpMsg(const std::string &message, const char *file, const int line); extern void strftimeUTF8(std::string &timeString); extern char * checkLocale(const int category, const char *locale); #endif xplanet-1.3.0/src/PlanetProperties.h0000644000175000017500000001710111724306745014360 00000000000000#ifndef PLANETPROPERTIES_H #define PLANETPROPERTIES_H #include #include #include #include "body.h" class PlanetProperties { public: PlanetProperties(const body index); ~PlanetProperties(); PlanetProperties & operator= (const PlanetProperties &p); const unsigned char * ArcColor() const { return(arcColor_); }; void ArcColor(unsigned char color[3]) { memcpy(arcColor_, color, 3); }; const int ArcThickness() const { return(arcThickness_); }; void ArcThickness(const int thickness) { arcThickness_ = thickness; }; const std::string & BumpMap() const { return(bumpMap_); }; void BumpMap(const std::string &b) { bumpMap_ = b; }; double BumpScale() const { return(bumpScale_); }; void BumpScale(double b) { bumpScale_ = b; }; double BumpShade() const { return(bumpShade_); }; void BumpShade(double s) { bumpShade_ = s; }; double CloudGamma() const { return(cloudGamma_); }; void CloudGamma(double c) { cloudGamma_ = c; }; void CloudMap(const std::string &c) { cloudMap_ = c; }; const std::string & CloudMap() const { return(cloudMap_); }; int CloudThreshold() const { return(cloudThreshold_); }; void CloudThreshold(int c) { cloudThreshold_ = c; }; const unsigned char * Color() const { return(color_); }; void Color(unsigned char color[3]) { memcpy(color_, color, 3); }; void DayMap(const std::string &dayMap) { dayMap_ = dayMap; }; const std::string & DayMap() const { return(dayMap_); }; void Grid(const bool g) { grid_ = g; }; bool Grid() const { return(grid_); }; void Grid1(const int g) { grid1_ = g; }; int Grid1() const { return(grid1_); }; void Grid2(const int g) { grid2_ = g; }; int Grid2() const { return(grid2_); }; const unsigned char * GridColor() const { return(gridColor_); }; void GridColor(unsigned char color[3]) { memcpy(gridColor_, color, 3); }; const unsigned char * MarkerColor() const { return(markerColor_); }; void MarkerColor(unsigned char color[3]) { memcpy(markerColor_, color, 3); }; const std::string & MarkerFont() const { return(markerFont_); }; void MarkerFont(const std::string &font) { markerFont_ = font; }; int MarkerFontSize() const { return(markerFontSize_); }; void MarkerFontSize(const int fontsize) { markerFontSize_ = fontsize; }; const unsigned char * OrbitColor() const { return(orbitColor_); }; void OrbitColor(unsigned char color[3]) { memcpy(orbitColor_, color, 3); }; const unsigned char * TextColor() const { return(textColor_); }; void TextColor(unsigned char color[3]) { memcpy(textColor_, color, 3); }; void AddArcFile(const std::string &arcFile) { arcFiles_.push_back(arcFile); }; bool DrawArcs() const { return(!arcFiles_.empty()); }; const std::vector & ArcFiles() const { return(arcFiles_); }; void AddMarkerFile(const std::string &markerFile) { markerFiles_.push_back(markerFile); }; bool DrawMarkers() const { return(!markerFiles_.empty()); }; const std::vector & MarkerFiles() const { return(markerFiles_); }; void AddSatelliteFile(const std::string &satelliteFile) { satelliteFiles_.push_back(satelliteFile); }; bool DrawSatellites() const { return(!satelliteFiles_.empty()); }; const std::vector & SatelliteFiles() const { return(satelliteFiles_); }; bool MapBounds() const { return(mapBounds_); }; void MapBounds(double &uly, double &ulx, double &lry, double &lrx) const { uly = mapUly_; ulx = mapUlx_; lry = mapLry_; lrx = mapLrx_; }; void MapBounds(bool b, double uly, double ulx, double lry, double lrx) { mapBounds_ = b; mapUly_ = uly; mapUlx_ = ulx; mapLry_ = lry; mapLrx_ = lrx; }; double MinRadiusForLabel() const { return(minRadiusForLabel_); }; void MinRadiusForLabel(double m) { minRadiusForLabel_ = m; }; double MaxRadiusForLabel() const { return(maxRadiusForLabel_); }; void MaxRadiusForLabel(double m) { maxRadiusForLabel_ = m; }; double MinRadiusForMarkers() const { return(minRadiusForMarkers_); }; void MinRadiusForMarkers(double m) { minRadiusForMarkers_ = m; }; void Name(const std::string &name) { name_ = name; }; const std::string & Name() { return(name_); }; void NightMap(const std::string &nightMap) { nightMap_ = nightMap; }; const std::string & NightMap() const { return(nightMap_); }; bool SSECMap() const { return(ssecMap_); }; void SSECMap(bool b) { ssecMap_ = b; }; void SpecularMap(const std::string &specularMap) { specularMap_ = specularMap; }; const std::string & SpecularMap() const { return(specularMap_); }; void Magnify(const double m) { magnify_ = m; }; double Magnify() const { return(magnify_); }; bool RandomOrigin() const { return(randomOrigin_); }; void RandomOrigin(bool b) { randomOrigin_ = b; }; bool RandomTarget() const { return(randomTarget_); }; void RandomTarget(bool b) { randomTarget_ = b; }; void RayleighEmissionWeight(double r) { rayleighEmissionWeight_ = r; }; double RayleighEmissionWeight() { return rayleighEmissionWeight_; }; void RayleighFile(const std::string &rayleighFile) { rayleighFile_ = rayleighFile; }; const std::string & RayleighFile() const { return rayleighFile_; }; void RayleighLimbScale(double r) { rayleighLimbScale_ = r; }; double RayleighLimbScale() { return rayleighLimbScale_; }; void RayleighScale(double r) { rayleighScale_ = r; }; double RayleighScale() { return rayleighScale_; }; double Shade() const { return(shade_); }; void Shade(double s) { shade_ = s; }; double Twilight() const { return(twilight_); }; void Twilight(double t) { twilight_ = t; }; void DrawOrbit(const bool d) { drawOrbit_ = d; }; bool DrawOrbit() const { return(drawOrbit_); }; void StartOrbit(const double s) { startOrbit_ = s; }; double StartOrbit() const { return(startOrbit_); }; void StopOrbit(const double s) { stopOrbit_ = s; }; double StopOrbit() const { return(stopOrbit_); }; void DelOrbit(const double d) { delOrbit_ = d; }; double DelOrbit() const { return(delOrbit_); }; private: body index_; unsigned char arcColor_[3]; std::vector arcFiles_; int arcThickness_; std::string bumpMap_; double bumpScale_; double bumpShade_; double cloudGamma_; std::string cloudMap_; int cloudThreshold_; unsigned char color_[3]; std::string dayMap_; double delOrbit_; bool drawOrbit_; bool grid_; int grid1_, grid2_; unsigned char gridColor_[3]; double magnify_; bool mapBounds_; double mapUlx_, mapUly_, mapLrx_, mapLry_; unsigned char markerColor_[3]; std::string markerFont_; int markerFontSize_; std::vector markerFiles_; double minRadiusForLabel_, maxRadiusForLabel_; double minRadiusForMarkers_; std::string name_; std::string nightMap_; unsigned char orbitColor_[3]; bool randomOrigin_; bool randomTarget_; double rayleighEmissionWeight_; std::string rayleighFile_; double rayleighLimbScale_; double rayleighScale_; std::vector satelliteFiles_; bool ssecMap_; double shade_; std::string specularMap_; double startOrbit_, stopOrbit_; unsigned char textColor_[3]; double twilight_; // if the sun is within twilight degrees of // the horizon, blend the day and night // images together }; #endif xplanet-1.3.0/src/libsgp4sdp4/0000755000175000017500000000000011731372545013125 500000000000000xplanet-1.3.0/src/libsgp4sdp4/Makefile.am0000644000175000017500000000044410411344513015067 00000000000000noinst_LIBRARIES = libsgp4sdp4.a if USE_AR libsgp4sdp4_a_AR = $(AR) cru else libsgp4sdp4_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libsgp4sdp4_a_SOURCES = \ sgp4sdp4.h \ sgp4sdp4.c \ sgp_in.c \ sgp_math.c \ sgp_obs.c \ sgp_time.c \ solar.c EXTRA_libsgp4sdp4_a_SOURCES = main.c xplanet-1.3.0/src/libsgp4sdp4/sgp_time.c0000644000175000017500000002635610411344513015020 00000000000000/* * Unit SGP_Time * Author: Dr TS Kelso * Original Version: 1992 Jun 02 * Current Revision: 2000 Jan 22 * Modified for Y2K: 1999 Mar 07 * Version: 2.05 * Copyright: 1992-1999, All Rights Reserved * Version 1.50 added Y2K support. Due to limitations in the current * format of the NORAD two-line element sets, however, only dates * through 2056 December 31/2359 UTC are valid. * Version 1.60 modifies Calendar_Date to ensure date matches time * resolution and modifies Time_of_Day to make it more robust. * Version 2.00 adds Julian_Date, Date_Time, and Check_Date to support * checking for valid date/times, permitting the use of Time_to_UTC and * Time_from_UTC for UTC/local time conversions. * Version 2.05 modifies UTC_offset to allow non-integer offsets. * * Ported to C by: Neoklis Kyriazis April 9 2001 */ #include "sgp4sdp4.h" /* The function Julian_Date_of_Epoch returns the Julian Date of */ /* an epoch specified in the format used in the NORAD two-line */ /* element sets. It has been modified to support dates beyond */ /* the year 1999 assuming that two-digit years in the range 00-56 */ /* correspond to 2000-2056. Until the two-line element set format */ /* is changed, it is only valid for dates through 2056 December 31. */ double Julian_Date_of_Epoch(double epoch) { double year,day; /* Modification to support Y2K */ /* Valid 1957 through 2056 */ day = modf(epoch*1E-3, &year)*1E3; if( year < 57 ) year = year + 2000; else year = year + 1900; /* End modification */ return( Julian_Date_of_Year(year) + day ); } /*Function Julian_Date_of_Epoch*/ /*------------------------------------------------------------------*/ /* Converts a Julian epoch to NORAD TLE epoch format */ double Epoch_Time(double jd) { double yr,time,epoch_time; struct tm edate; Calendar_Date(jd, &edate); yr = edate.tm_year - 100*(edate.tm_year/100) ; time = Frac(jd + 0.5); epoch_time = yr*1000 + DOY(edate.tm_year, edate.tm_mon, edate.tm_mday) + time; return( epoch_time ); } /*Function Epoch_Time*/ /*------------------------------------------------------------------*/ /* The function DOY calculates the day of the year for the specified */ /* date. The calculation uses the rules for the Gregorian calendar */ /* and is valid from the inception of that calendar system. */ int DOY(int yr, int mo, int dy) { const int days[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int i,day; day = 0; for( i = 0; i < mo-1; i++ ) day += days[i]; day = day + dy; /* Leap year correction */ if( (yr%4 == 0) && ((yr%100 != 0) || (yr%400 == 0)) && (mo>2) ) day++; return( day ); } /*Function DOY*/ /*------------------------------------------------------------------*/ /* Fraction_of_Day calculates the fraction of */ /* a day passed at the specified input time. */ double Fraction_of_Day(int hr,int mi,int se) { return( (hr + (mi + se/60.0)/60.0)/24.0 ); } /*Function Fraction_of_Day*/ /*------------------------------------------------------------------*/ /* The function Calendar_Date converts a Julian Date to a struct tm. */ /* Only the members tm_year, tm_mon and tm_mday are calculated and set */ void Calendar_Date(double jd, struct tm *cdate) { /* Astronomical Formulae for Calculators, Jean Meeus, pages 26-27 */ int Z,month; double A,B,C,D,E,F,alpha,day,year,factor; factor = 0.5/secday/1000; F = Frac(jd + 0.5); if (F + factor >= 1.0) { jd = jd + factor; F = 0.0; } /*if*/ Z = Round(jd); if( Z < 2299161 ) A = Z; else { alpha = Int((Z - 1867216.25)/36524.25); A = Z + 1 + alpha - Int(alpha/4); } /*else*/ B = A + 1524; C = Int((B - 122.1)/365.25); D = Int(365.25 * C); E = Int((B - D)/30.6001); day = B - D - Int(30.6001 * E) + F; if( E < 13.5 ) month = Round(E - 1); else month = Round(E - 13); if( month > 2.5 ) year = C - 4716; else year = C - 4715; cdate->tm_year = (int) year; cdate->tm_mon = month; cdate->tm_mday = (int) floor(day); } /*Function Calendar_Date*/ /*------------------------------------------------------------------*/ /* Time_of_Day takes a Julian Date and calculates the clock time */ /* portion of that date. Only tm_hour, tm_min and tm_sec are set */ void Time_of_Day(double jd, struct tm *cdate) { int hr,mn,sc; double time; time = Frac(jd - 0.5)*secday; time = Round(time); hr = floor(time/3600.0); time = time - 3600.0*hr; if( hr == 24 ) hr = 0; mn = floor(time/60.0); sc = time - 60.0*mn; cdate->tm_hour = hr; cdate->tm_min = mn; cdate->tm_sec = sc; } /*Function Time_of_Day*/ /*------------------------------------------------------------------*/ /* The function Julian_Date converts a standard calendar */ /* date and time to a Julian Date. The procedure Date_Time */ /* performs the inverse of this function. */ double Julian_Date(struct tm *cdate) { double julian_date; julian_date = Julian_Date_of_Year(cdate->tm_year) + DOY(cdate->tm_year,cdate->tm_mon,cdate->tm_mday) + Fraction_of_Day(cdate->tm_hour,cdate->tm_min,cdate->tm_sec); return( julian_date ); } /*Function Julian_Date */ /*------------------------------------------------------------------*/ /* Date_Time() * * The function Date_Time() converts a Julian Date to * standard calendar date and time. The function * Julian_Date() performs the inverse of this function. */ void Date_Time(double julian_date, struct tm *cdate) { time_t jtime; jtime = (julian_date - 2440587.5)*86400.; *cdate = *gmtime( &jtime ); } /* End of Date_Time() */ /*------------------------------------------------------------------*/ /* The procedure Check_Date can be used as a check to see if a calendar */ /* date and time are valid. It works by first converting the calendar */ /* date and time to a Julian Date (which allows for irregularities, such */ /* as a time greater than 24 hours) and then converting back and comparing.*/ int Check_Date(struct tm *cdate) { double jt; struct tm chkdate; jt = Julian_Date(cdate); Date_Time(jt, &chkdate); if( (cdate->tm_year == chkdate.tm_year) && (cdate->tm_mon == chkdate.tm_mon ) && (cdate->tm_mday == chkdate.tm_mday) && (cdate->tm_hour == chkdate.tm_hour) && (cdate->tm_min == chkdate.tm_min ) && (cdate->tm_sec == chkdate.tm_sec ) ) return ( 1 ); else return( 0 ); } /*Procedure Check_Date*/ /*------------------------------------------------------------------*/ /* Procedures Time_to_UTC and Time_from_UTC are used to */ /* convert 'struct tm' dates between UTC and local time. */ /* The procedures JD_to_UTC and JD_from_UTC are used to */ /* do the same thing working directly with Julian dates. */ struct tm Time_to_UTC(struct tm *cdate) { time_t tdate; tdate = mktime(cdate); return( *gmtime(&tdate) ); } /*Procedure Time_to_UTC*/ /*------------------------------------------------------------------*/ struct tm Time_from_UTC(struct tm *cdate) { time_t tdate; tdate = mktime(cdate); return( *localtime(&tdate) ); } /*Procedure Time_from_UTC*/ /*------------------------------------------------------------------*/ /* BSD systems don't define the timezone variable, so the following two routines won't work. They're not used anyway in the example main(), so we might as well comment them out. */ #if 0 double JD_to_UTC(double jt) { extern long timezone; struct tm cdate; time_t t = 0; cdate = *localtime( &t ); jt = jt - timezone/secday; if( cdate.tm_isdst ) jt= jt - 1.0/24.0; return( jt ); } /*Procedure JD_to_UTC*/ /*------------------------------------------------------------------*/ double JD_from_UTC(double jt) { extern long timezone; struct tm cdate; time_t t = 0; cdate = *localtime( &t ); jt = jt + timezone/secday; if( cdate.tm_isdst ) jt= jt + 1.0/24.0; return( jt ); } /*Procedure JD_from_UTC*/ #endif /*------------------------------------------------------------------*/ /* The function Delta_ET has been added to allow calculations on */ /* the position of the sun. It provides the difference between UT */ /* (approximately the same as UTC) and ET (now referred to as TDT).*/ /* This function is based on a least squares fit of data from 1950 */ /* to 1991 and will need to be updated periodically. */ double Delta_ET(double year) { /* Values determined using data from 1950-1991 in the 1990 Astronomical Almanac. See DELTA_ET.WQ1 for details. */ double delta_et; delta_et = 26.465 + 0.747622*(year - 1950) + 1.886913*sin(twopi*(year - 1975)/33); return( delta_et ); } /*Function Delta_ET*/ /*------------------------------------------------------------------*/ /* The function Julian_Date_of_Year calculates the Julian Date */ /* of Day 0.0 of {year}. This function is used to calculate the */ /* Julian Date of any date by using Julian_Date_of_Year, DOY, */ /* and Fraction_of_Day. */ double Julian_Date_of_Year(double year) { /* Astronomical Formulae for Calculators, Jean Meeus, */ /* pages 23-25. Calculate Julian Date of 0.0 Jan year */ long A,B,i; double jdoy; year = year-1; i = year/100; A = i; i = A/4; B = 2-A+i; i = 365.25*year; i += 30.6001*14; jdoy = i+1720994.5+B; return (jdoy); } /*Function Julian_Date_of_Year*/ /*------------------------------------------------------------------*/ /* The function ThetaG calculates the Greenwich Mean Sidereal Time */ /* for an epoch specified in the format used in the NORAD two-line */ /* element sets. It has now been adapted for dates beyond the year */ /* 1999, as described above. The function ThetaG_JD provides the */ /* same calculation except that it is based on an input in the */ /* form of a Julian Date. */ double ThetaG(double epoch, deep_arg_t *deep_arg) { /* Reference: The 1992 Astronomical Almanac, page B6. */ double year,day,UT,jd,TU,GMST,ThetaG; /* Modification to support Y2K */ /* Valid 1957 through 2056 */ day = modf(epoch*1E-3,&year)*1E3; if(year < 57) year += 2000; else year += 1900; /* End modification */ UT = modf(day,&day); jd = Julian_Date_of_Year(year)+day; TU = (jd-2451545.0)/36525; GMST = 24110.54841+TU*(8640184.812866+TU*(0.093104-TU* 6.2E-6)); GMST = Modulus(GMST+secday*omega_E*UT,secday); ThetaG = twopi*GMST/secday; deep_arg->ds50 = jd-2433281.5+UT; ThetaG = FMod2p(6.3003880987*deep_arg->ds50+1.72944494); return (ThetaG); } /* Function ThetaG */ /*------------------------------------------------------------------*/ double ThetaG_JD(double jd) { /* Reference: The 1992 Astronomical Almanac, page B6. */ double UT,TU,GMST; UT = Frac(jd + 0.5); jd = jd - UT; TU = (jd - 2451545.0)/36525; GMST = 24110.54841 + TU * (8640184.812866 + TU * (0.093104 - TU * 6.2E-6)); GMST = Modulus(GMST + secday*omega_E*UT,secday); return( twopi * GMST/secday ); } /*Function ThetaG_JD*/ /*------------------------------------------------------------------*/ /* Gets calendar time from time() and produces a UTC calendar date */ void UTC_Calendar_Now( struct tm *cdate ) { time_t t; t = time(0); *cdate = *gmtime(&t); cdate->tm_year += 1900; cdate->tm_mon += 1; } /* End UTC_Calendar_Now */ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/sgp4sdp4.c0000644000175000017500000007612010411344513014653 00000000000000/* * Unit SGP4SDP4 * Author: Dr TS Kelso * Original Version: 1991 Oct 30 * Current Revision: 1992 Sep 03 * Version: 1.50 * Copyright: 1991-1992, All Rights Reserved * * Ported to C by: Neoklis Kyriazis April 10 2001 */ #include "sgp4sdp4.h" /* SGP4 */ /* This function is used to calculate the position and velocity */ /* of near-earth (period < 225 minutes) satellites. tsince is */ /* time since epoch in minutes, tle is a pointer to a tle_t */ /* structure with Keplerian orbital elements and pos and vel */ /* are vector_t structures returning ECI satellite position and */ /* velocity. Use Convert_Sat_State() to convert to km and km/s.*/ void SGP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel) { static double aodp,aycof,c1,c4,c5,cosio,d2,d3,d4,delmo,omgcof, eta,omgdot,sinio,xnodp,sinmo,t2cof,t3cof,t4cof,t5cof, x1mth2,x3thm1,x7thm1,xmcof,xmdot,xnodcf,xnodot,xlcof; double cosuk,sinuk,rfdotk,vx,vy,vz,ux,uy,uz,xmy,xmx, cosnok,sinnok,cosik,sinik,rdotk,xinck,xnodek,uk, rk,cos2u,sin2u,u,sinu,cosu,betal,rfdot,rdot,r,pl, elsq,esine,ecose,epw,cosepw,x1m5th,xhdot1,tfour, sinepw,capu,ayn,xlt,aynl,xll,axn,xn,beta,xl,e,a, tcube,delm,delomg,templ,tempe,tempa,xnode,tsq,xmp, omega,xnoddf,omgadf,xmdf,a1,a3ovk2,ao,betao,betao2, c1sq,c2,c3,coef,coef1,del1,delo,eeta,eosq,etasq, perige,pinvsq,psisq,qoms24,s4,temp,temp1,temp2, temp3,temp4,temp5,temp6,theta2,theta4,tsi; int i; /* Initialization */ if (isFlagClear(SGP4_INITIALIZED_FLAG)) { SetFlag(SGP4_INITIALIZED_FLAG); /* Recover original mean motion (xnodp) and */ /* semimajor axis (aodp) from input elements. */ a1 = pow(xke/tle->xno,tothrd); cosio = cos(tle->xincl); theta2 = cosio*cosio; x3thm1 = 3*theta2-1.0; eosq = tle->eo*tle->eo; betao2 = 1-eosq; betao = sqrt(betao2); del1 = 1.5*ck2*x3thm1/(a1*a1*betao*betao2); ao = a1*(1-del1*(0.5*tothrd+del1*(1+134/81*del1))); delo = 1.5*ck2*x3thm1/(ao*ao*betao*betao2); xnodp = tle->xno/(1+delo); aodp = ao/(1-delo); /* For perigee less than 220 kilometers, the "simple" flag is set */ /* and the equations are truncated to linear variation in sqrt a */ /* and quadratic variation in mean anomaly. Also, the c3 term, */ /* the delta omega term, and the delta m term are dropped. */ if((aodp*(1-tle->eo)/ae) < (220/xkmper+ae)) SetFlag(SIMPLE_FLAG); else ClearFlag(SIMPLE_FLAG); /* For perigee below 156 km, the */ /* values of s and qoms2t are altered. */ s4 = s; qoms24 = qoms2t; perige = (aodp*(1-tle->eo)-ae)*xkmper; if(perige < 156) { if(perige <= 98) s4 = 20; else s4 = perige-78; qoms24 = pow((120-s4)*ae/xkmper,4); s4 = s4/xkmper+ae; }; /* End of if(perige <= 98) */ pinvsq = 1/(aodp*aodp*betao2*betao2); tsi = 1/(aodp-s4); eta = aodp*tle->eo*tsi; etasq = eta*eta; eeta = tle->eo*eta; psisq = fabs(1-etasq); coef = qoms24*pow(tsi,4); coef1 = coef/pow(psisq,3.5); c2 = coef1*xnodp*(aodp*(1+1.5*etasq+eeta*(4+etasq))+ 0.75*ck2*tsi/psisq*x3thm1*(8+3*etasq*(8+etasq))); c1 = tle->bstar*c2; sinio = sin(tle->xincl); a3ovk2 = -xj3/ck2*pow(ae,3); c3 = coef*tsi*a3ovk2*xnodp*ae*sinio/tle->eo; x1mth2 = 1-theta2; c4 = 2*xnodp*coef1*aodp*betao2*(eta*(2+0.5*etasq)+ tle->eo*(0.5+2*etasq)-2*ck2*tsi/(aodp*psisq)* (-3*x3thm1*(1-2*eeta+etasq*(1.5-0.5*eeta))+0.75* x1mth2*(2*etasq-eeta*(1+etasq))*cos(2*tle->omegao))); c5 = 2*coef1*aodp*betao2*(1+2.75*(etasq+eeta)+eeta*etasq); theta4 = theta2*theta2; temp1 = 3*ck2*pinvsq*xnodp; temp2 = temp1*ck2*pinvsq; temp3 = 1.25*ck4*pinvsq*pinvsq*xnodp; xmdot = xnodp+0.5*temp1*betao*x3thm1+ 0.0625*temp2*betao*(13-78*theta2+137*theta4); x1m5th = 1-5*theta2; omgdot = -0.5*temp1*x1m5th+0.0625*temp2*(7-114*theta2+ 395*theta4)+temp3*(3-36*theta2+49*theta4); xhdot1 = -temp1*cosio; xnodot = xhdot1+(0.5*temp2*(4-19*theta2)+ 2*temp3*(3-7*theta2))*cosio; omgcof = tle->bstar*c3*cos(tle->omegao); xmcof = -tothrd*coef*tle->bstar*ae/eeta; xnodcf = 3.5*betao2*xhdot1*c1; t2cof = 1.5*c1; xlcof = 0.125*a3ovk2*sinio*(3+5*cosio)/(1+cosio); aycof = 0.25*a3ovk2*sinio; delmo = pow(1+eta*cos(tle->xmo),3); sinmo = sin(tle->xmo); x7thm1 = 7*theta2-1; if (isFlagClear(SIMPLE_FLAG)) { c1sq = c1*c1; d2 = 4*aodp*tsi*c1sq; temp = d2*tsi*c1/3; d3 = (17*aodp+s4)*temp; d4 = 0.5*temp*aodp*tsi*(221*aodp+31*s4)*c1; t3cof = d2+2*c1sq; t4cof = 0.25*(3*d3+c1*(12*d2+10*c1sq)); t5cof = 0.2*(3*d4+12*c1*d3+6*d2*d2+15*c1sq*(2*d2+c1sq)); }; /* End of if (isFlagClear(SIMPLE_FLAG)) */ }; /* End of SGP4() initialization */ /* Update for secular gravity and atmospheric drag. */ xmdf = tle->xmo+xmdot*tsince; omgadf = tle->omegao+omgdot*tsince; xnoddf = tle->xnodeo+xnodot*tsince; omega = omgadf; xmp = xmdf; tsq = tsince*tsince; xnode = xnoddf+xnodcf*tsq; tempa = 1-c1*tsince; tempe = tle->bstar*c4*tsince; templ = t2cof*tsq; if (isFlagClear(SIMPLE_FLAG)) { delomg = omgcof*tsince; delm = xmcof*(pow(1+eta*cos(xmdf),3)-delmo); temp = delomg+delm; xmp = xmdf+temp; omega = omgadf-temp; tcube = tsq*tsince; tfour = tsince*tcube; tempa = tempa-d2*tsq-d3*tcube-d4*tfour; tempe = tempe+tle->bstar*c5*(sin(xmp)-sinmo); templ = templ+t3cof*tcube+tfour*(t4cof+tsince*t5cof); }; /* End of if (isFlagClear(SIMPLE_FLAG)) */ a = aodp*pow(tempa,2); e = tle->eo-tempe; xl = xmp+omega+xnode+xnodp*templ; beta = sqrt(1-e*e); xn = xke/pow(a,1.5); /* Long period periodics */ axn = e*cos(omega); temp = 1/(a*beta*beta); xll = temp*xlcof*axn; aynl = temp*aycof; xlt = xl+xll; ayn = e*sin(omega)+aynl; /* Solve Kepler's' Equation */ capu = FMod2p(xlt-xnode); temp2 = capu; i = 0; do { sinepw = sin(temp2); cosepw = cos(temp2); temp3 = axn*sinepw; temp4 = ayn*cosepw; temp5 = axn*cosepw; temp6 = ayn*sinepw; epw = (capu-temp4+temp3-temp2)/(1-temp5-temp6)+temp2; if(fabs(epw-temp2) <= e6a) break; temp2 = epw; } while( i++ < 10 ); /* Short period preliminary quantities */ ecose = temp5+temp6; esine = temp3-temp4; elsq = axn*axn+ayn*ayn; temp = 1-elsq; pl = a*temp; r = a*(1-ecose); temp1 = 1/r; rdot = xke*sqrt(a)*esine*temp1; rfdot = xke*sqrt(pl)*temp1; temp2 = a*temp1; betal = sqrt(temp); temp3 = 1/(1+betal); cosu = temp2*(cosepw-axn+ayn*esine*temp3); sinu = temp2*(sinepw-ayn-axn*esine*temp3); u = AcTan(sinu, cosu); sin2u = 2*sinu*cosu; cos2u = 2*cosu*cosu-1; temp = 1/pl; temp1 = ck2*temp; temp2 = temp1*temp; /* Update for short periodics */ rk = r*(1-1.5*temp2*betal*x3thm1)+0.5*temp1*x1mth2*cos2u; uk = u-0.25*temp2*x7thm1*sin2u; xnodek = xnode+1.5*temp2*cosio*sin2u; xinck = tle->xincl+1.5*temp2*cosio*sinio*cos2u; rdotk = rdot-xn*temp1*x1mth2*sin2u; rfdotk = rfdot+xn*temp1*(x1mth2*cos2u+1.5*x3thm1); /* Orientation vectors */ sinuk = sin(uk); cosuk = cos(uk); sinik = sin(xinck); cosik = cos(xinck); sinnok = sin(xnodek); cosnok = cos(xnodek); xmx = -sinnok*cosik; xmy = cosnok*cosik; ux = xmx*sinuk+cosnok*cosuk; uy = xmy*sinuk+sinnok*cosuk; uz = sinik*sinuk; vx = xmx*cosuk-cosnok*sinuk; vy = xmy*cosuk-sinnok*sinuk; vz = sinik*cosuk; /* Position and velocity */ pos->x = rk*ux; pos->y = rk*uy; pos->z = rk*uz; vel->x = rdotk*ux+rfdotk*vx; vel->y = rdotk*uy+rfdotk*vy; vel->z = rdotk*uz+rfdotk*vz; } /*SGP4*/ /*------------------------------------------------------------------*/ /* SDP4 */ /* This function is used to calculate the position and velocity */ /* of deep-space (period > 225 minutes) satellites. tsince is */ /* time since epoch in minutes, tle is a pointer to a tle_t */ /* structure with Keplerian orbital elements and pos and vel */ /* are vector_t structures returning ECI satellite position and */ /* velocity. Use Convert_Sat_State() to convert to km and km/s. */ void SDP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel) { int i; static double x3thm1,c1,x1mth2,c4,xnodcf,t2cof,xlcof,aycof,x7thm1; double a,axn,ayn,aynl,beta,betal,capu,cos2u,cosepw,cosik, cosnok,cosu,cosuk,ecose,elsq,epw,esine,pl,theta4, rdot,rdotk,rfdot,rfdotk,rk,sin2u,sinepw,sinik, sinnok,sinu,sinuk,tempe,templ,tsq,u,uk,ux,uy,uz, vx,vy,vz,xinck,xl,xlt,xmam,xmdf,xmx,xmy,xnoddf, xnodek,xll,a1,a3ovk2,ao,c2,coef,coef1,x1m5th, xhdot1,del1,r,delo,eeta,eta,etasq,perige, psisq,tsi,qoms24,s4,pinvsq,temp,tempa,temp1, temp2,temp3,temp4,temp5,temp6; static deep_arg_t deep_arg; /* Initialization */ if (isFlagClear(SDP4_INITIALIZED_FLAG)) { SetFlag(SDP4_INITIALIZED_FLAG); /* Recover original mean motion (xnodp) and */ /* semimajor axis (aodp) from input elements. */ a1 = pow(xke/tle->xno,tothrd); deep_arg.cosio = cos(tle->xincl); deep_arg.theta2 = deep_arg.cosio*deep_arg.cosio; x3thm1 = 3*deep_arg.theta2-1; deep_arg.eosq = tle->eo*tle->eo; deep_arg.betao2 = 1-deep_arg.eosq; deep_arg.betao = sqrt(deep_arg.betao2); del1 = 1.5*ck2*x3thm1/(a1*a1*deep_arg.betao*deep_arg.betao2); ao = a1*(1-del1*(0.5*tothrd+del1*(1+134/81*del1))); delo = 1.5*ck2*x3thm1/(ao*ao*deep_arg.betao*deep_arg.betao2); deep_arg.xnodp = tle->xno/(1+delo); deep_arg.aodp = ao/(1-delo); /* For perigee below 156 km, the values */ /* of s and qoms2t are altered. */ s4 = s; qoms24 = qoms2t; perige = (deep_arg.aodp*(1-tle->eo)-ae)*xkmper; if(perige < 156) { if(perige <= 98) s4 = 20; else s4 = perige-78; qoms24 = pow((120-s4)*ae/xkmper,4); s4 = s4/xkmper+ae; } pinvsq = 1/(deep_arg.aodp*deep_arg.aodp* deep_arg.betao2*deep_arg.betao2); deep_arg.sing = sin(tle->omegao); deep_arg.cosg = cos(tle->omegao); tsi = 1/(deep_arg.aodp-s4); eta = deep_arg.aodp*tle->eo*tsi; etasq = eta*eta; eeta = tle->eo*eta; psisq = fabs(1-etasq); coef = qoms24*pow(tsi,4); coef1 = coef/pow(psisq,3.5); c2 = coef1*deep_arg.xnodp*(deep_arg.aodp*(1+1.5*etasq+eeta* (4+etasq))+0.75*ck2*tsi/psisq*x3thm1*(8+3*etasq*(8+etasq))); c1 = tle->bstar*c2; deep_arg.sinio = sin(tle->xincl); a3ovk2 = -xj3/ck2*pow(ae,3); x1mth2 = 1-deep_arg.theta2; c4 = 2*deep_arg.xnodp*coef1*deep_arg.aodp*deep_arg.betao2* (eta*(2+0.5*etasq)+tle->eo*(0.5+2*etasq)-2*ck2*tsi/ (deep_arg.aodp*psisq)*(-3*x3thm1*(1-2*eeta+etasq* (1.5-0.5*eeta))+0.75*x1mth2*(2*etasq-eeta*(1+etasq))* cos(2*tle->omegao))); theta4 = deep_arg.theta2*deep_arg.theta2; temp1 = 3*ck2*pinvsq*deep_arg.xnodp; temp2 = temp1*ck2*pinvsq; temp3 = 1.25*ck4*pinvsq*pinvsq*deep_arg.xnodp; deep_arg.xmdot = deep_arg.xnodp+0.5*temp1*deep_arg.betao* x3thm1+0.0625*temp2*deep_arg.betao* (13-78*deep_arg.theta2+137*theta4); x1m5th = 1-5*deep_arg.theta2; deep_arg.omgdot = -0.5*temp1*x1m5th+0.0625*temp2* (7-114*deep_arg.theta2+395*theta4)+ temp3*(3-36*deep_arg.theta2+49*theta4); xhdot1 = -temp1*deep_arg.cosio; deep_arg.xnodot = xhdot1+(0.5*temp2*(4-19*deep_arg.theta2)+ 2*temp3*(3-7*deep_arg.theta2))*deep_arg.cosio; xnodcf = 3.5*deep_arg.betao2*xhdot1*c1; t2cof = 1.5*c1; xlcof = 0.125*a3ovk2*deep_arg.sinio*(3+5*deep_arg.cosio)/ (1+deep_arg.cosio); aycof = 0.25*a3ovk2*deep_arg.sinio; x7thm1 = 7*deep_arg.theta2-1; /* initialize Deep() */ Deep(dpinit, tle, &deep_arg); }; /*End of SDP4() initialization */ /* Update for secular gravity and atmospheric drag */ xmdf = tle->xmo+deep_arg.xmdot*tsince; deep_arg.omgadf = tle->omegao+deep_arg.omgdot*tsince; xnoddf = tle->xnodeo+deep_arg.xnodot*tsince; tsq = tsince*tsince; deep_arg.xnode = xnoddf+xnodcf*tsq; tempa = 1-c1*tsince; tempe = tle->bstar*c4*tsince; templ = t2cof*tsq; deep_arg.xn = deep_arg.xnodp; /* Update for deep-space secular effects */ deep_arg.xll = xmdf; deep_arg.t = tsince; Deep(dpsec, tle, &deep_arg); xmdf = deep_arg.xll; a = pow(xke/deep_arg.xn,tothrd)*tempa*tempa; deep_arg.em = deep_arg.em-tempe; xmam = xmdf+deep_arg.xnodp*templ; /* Update for deep-space periodic effects */ deep_arg.xll = xmam; Deep(dpper, tle, &deep_arg); xmam = deep_arg.xll; xl = xmam+deep_arg.omgadf+deep_arg.xnode; beta = sqrt(1-deep_arg.em*deep_arg.em); deep_arg.xn = xke/pow(a,1.5); /* Long period periodics */ axn = deep_arg.em*cos(deep_arg.omgadf); temp = 1/(a*beta*beta); xll = temp*xlcof*axn; aynl = temp*aycof; xlt = xl+xll; ayn = deep_arg.em*sin(deep_arg.omgadf)+aynl; /* Solve Kepler's Equation */ capu = FMod2p(xlt-deep_arg.xnode); temp2 = capu; i = 0; do { sinepw = sin(temp2); cosepw = cos(temp2); temp3 = axn*sinepw; temp4 = ayn*cosepw; temp5 = axn*cosepw; temp6 = ayn*sinepw; epw = (capu-temp4+temp3-temp2)/(1-temp5-temp6)+temp2; if(fabs(epw-temp2) <= e6a) break; temp2 = epw; } while( i++ < 10 ); /* Short period preliminary quantities */ ecose = temp5+temp6; esine = temp3-temp4; elsq = axn*axn+ayn*ayn; temp = 1-elsq; pl = a*temp; r = a*(1-ecose); temp1 = 1/r; rdot = xke*sqrt(a)*esine*temp1; rfdot = xke*sqrt(pl)*temp1; temp2 = a*temp1; betal = sqrt(temp); temp3 = 1/(1+betal); cosu = temp2*(cosepw-axn+ayn*esine*temp3); sinu = temp2*(sinepw-ayn-axn*esine*temp3); u = AcTan(sinu,cosu); sin2u = 2*sinu*cosu; cos2u = 2*cosu*cosu-1; temp = 1/pl; temp1 = ck2*temp; temp2 = temp1*temp; /* Update for short periodics */ rk = r*(1-1.5*temp2*betal*x3thm1)+0.5*temp1*x1mth2*cos2u; uk = u-0.25*temp2*x7thm1*sin2u; xnodek = deep_arg.xnode+1.5*temp2*deep_arg.cosio*sin2u; xinck = deep_arg.xinc+1.5*temp2*deep_arg.cosio*deep_arg.sinio*cos2u; rdotk = rdot-deep_arg.xn*temp1*x1mth2*sin2u; rfdotk = rfdot+deep_arg.xn*temp1*(x1mth2*cos2u+1.5*x3thm1); /* Orientation vectors */ sinuk = sin(uk); cosuk = cos(uk); sinik = sin(xinck); cosik = cos(xinck); sinnok = sin(xnodek); cosnok = cos(xnodek); xmx = -sinnok*cosik; xmy = cosnok*cosik; ux = xmx*sinuk+cosnok*cosuk; uy = xmy*sinuk+sinnok*cosuk; uz = sinik*sinuk; vx = xmx*cosuk-cosnok*sinuk; vy = xmy*cosuk-sinnok*sinuk; vz = sinik*cosuk; /* Position and velocity */ pos->x = rk*ux; pos->y = rk*uy; pos->z = rk*uz; vel->x = rdotk*ux+rfdotk*vx; vel->y = rdotk*uy+rfdotk*vy; vel->z = rdotk*uz+rfdotk*vz; } /* SDP4 */ /*------------------------------------------------------------------*/ /* DEEP */ /* This function is used by SDP4 to add lunar and solar */ /* perturbation effects to deep-space orbit objects. */ void Deep(int ientry, tle_t *tle, deep_arg_t *deep_arg) { static double thgr,xnq,xqncl,omegaq,zmol,zmos,savtsn,ee2,e3,xi2, xl2,xl3,xl4,xgh2,xgh3,xgh4,xh2,xh3,sse,ssi,ssg,xi3, se2,si2,sl2,sgh2,sh2,se3,si3,sl3,sgh3,sh3,sl4,sgh4, ssl,ssh,d3210,d3222,d4410,d4422,d5220,d5232,d5421, d5433,del1,del2,del3,fasx2,fasx4,fasx6,xlamo,xfact, xni,atime,stepp,stepn,step2,preep,pl,sghs,xli, d2201,d2211,sghl,sh1,pinc,pe,shs,zsingl,zcosgl, zsinhl,zcoshl,zsinil,zcosil; double a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,ainv2,alfdp,aqnv, sgh,sini2,sinis,sinok,sh,si,sil,day,betdp,dalf, bfact,c,cc,cosis,cosok,cosq,ctem,f322,zx,zy, dbet,dls,eoc,eq,f2,f220,f221,f3,f311,f321,xnoh, f330,f441,f442,f522,f523,f542,f543,g200,g201, g211,pgh,ph,s1,s2,s3,s4,s5,s6,s7,se,sel,ses,xls, g300,g310,g322,g410,g422,g520,g521,g532,g533,gam, sinq,sinzf,sis,sl,sll,sls,stem,temp,temp1,x1,x2, x2li,x2omi,x3,x4,x5,x6,x7,x8,xl,xldot,xmao,xnddt, xndot,xno2,xnodce,xnoi,xomi,xpidot,z1,z11,z12,z13, z2,z21,z22,z23,z3,z31,z32,z33,ze,zf,zm,zmo,zn, zsing,zsinh,zsini,zcosg,zcosh,zcosi,delt=0,ft=0; switch(ientry) { case dpinit : /* Entrance for deep space initialization */ thgr = ThetaG(tle->epoch, deep_arg); eq = tle->eo; xnq = deep_arg->xnodp; aqnv = 1/deep_arg->aodp; xqncl = tle->xincl; xmao = tle->xmo; xpidot = deep_arg->omgdot+deep_arg->xnodot; sinq = sin(tle->xnodeo); cosq = cos(tle->xnodeo); omegaq = tle->omegao; /* Initialize lunar solar terms */ day = deep_arg->ds50+18261.5; /*Days since 1900 Jan 0.5*/ if (day != preep) { preep = day; xnodce = 4.5236020-9.2422029E-4*day; stem = sin(xnodce); ctem = cos(xnodce); zcosil = 0.91375164-0.03568096*ctem; zsinil = sqrt(1-zcosil*zcosil); zsinhl = 0.089683511*stem/zsinil; zcoshl = sqrt(1-zsinhl*zsinhl); c = 4.7199672+0.22997150*day; gam = 5.8351514+0.0019443680*day; zmol = FMod2p(c-gam); zx = 0.39785416*stem/zsinil; zy = zcoshl*ctem+0.91744867*zsinhl*stem; zx = AcTan(zx,zy); zx = gam+zx-xnodce; zcosgl = cos(zx); zsingl = sin(zx); zmos = 6.2565837+0.017201977*day; zmos = FMod2p(zmos); } /* End if(day != preep) */ /* Do solar terms */ savtsn = 1E20; zcosg = zcosgs; zsing = zsings; zcosi = zcosis; zsini = zsinis; zcosh = cosq; zsinh = sinq; cc = c1ss; zn = zns; ze = zes; zmo = zmos; xnoi = 1/xnq; /* Loop breaks when Solar terms are done a second */ /* time, after Lunar terms are initialized */ for(;;) { /* Solar terms done again after Lunar terms are done */ a1 = zcosg*zcosh+zsing*zcosi*zsinh; a3 = -zsing*zcosh+zcosg*zcosi*zsinh; a7 = -zcosg*zsinh+zsing*zcosi*zcosh; a8 = zsing*zsini; a9 = zsing*zsinh+zcosg*zcosi*zcosh; a10 = zcosg*zsini; a2 = deep_arg->cosio*a7+ deep_arg->sinio*a8; a4 = deep_arg->cosio*a9+ deep_arg->sinio*a10; a5 = -deep_arg->sinio*a7+ deep_arg->cosio*a8; a6 = -deep_arg->sinio*a9+ deep_arg->cosio*a10; x1 = a1*deep_arg->cosg+a2*deep_arg->sing; x2 = a3*deep_arg->cosg+a4*deep_arg->sing; x3 = -a1*deep_arg->sing+a2*deep_arg->cosg; x4 = -a3*deep_arg->sing+a4*deep_arg->cosg; x5 = a5*deep_arg->sing; x6 = a6*deep_arg->sing; x7 = a5*deep_arg->cosg; x8 = a6*deep_arg->cosg; z31 = 12*x1*x1-3*x3*x3; z32 = 24*x1*x2-6*x3*x4; z33 = 12*x2*x2-3*x4*x4; z1 = 3*(a1*a1+a2*a2)+z31*deep_arg->eosq; z2 = 6*(a1*a3+a2*a4)+z32*deep_arg->eosq; z3 = 3*(a3*a3+a4*a4)+z33*deep_arg->eosq; z11 = -6*a1*a5+deep_arg->eosq*(-24*x1*x7-6*x3*x5); z12 = -6*(a1*a6+a3*a5)+ deep_arg->eosq* (-24*(x2*x7+x1*x8)-6*(x3*x6+x4*x5)); z13 = -6*a3*a6+deep_arg->eosq*(-24*x2*x8-6*x4*x6); z21 = 6*a2*a5+deep_arg->eosq*(24*x1*x5-6*x3*x7); z22 = 6*(a4*a5+a2*a6)+ deep_arg->eosq* (24*(x2*x5+x1*x6)-6*(x4*x7+x3*x8)); z23 = 6*a4*a6+deep_arg->eosq*(24*x2*x6-6*x4*x8); z1 = z1+z1+deep_arg->betao2*z31; z2 = z2+z2+deep_arg->betao2*z32; z3 = z3+z3+deep_arg->betao2*z33; s3 = cc*xnoi; s2 = -0.5*s3/deep_arg->betao; s4 = s3*deep_arg->betao; s1 = -15*eq*s4; s5 = x1*x3+x2*x4; s6 = x2*x3+x1*x4; s7 = x2*x4-x1*x3; se = s1*zn*s5; si = s2*zn*(z11+z13); sl = -zn*s3*(z1+z3-14-6*deep_arg->eosq); sgh = s4*zn*(z31+z33-6); sh = -zn*s2*(z21+z23); if (xqncl < 5.2359877E-2) sh = 0; ee2 = 2*s1*s6; e3 = 2*s1*s7; xi2 = 2*s2*z12; xi3 = 2*s2*(z13-z11); xl2 = -2*s3*z2; xl3 = -2*s3*(z3-z1); xl4 = -2*s3*(-21-9*deep_arg->eosq)*ze; xgh2 = 2*s4*z32; xgh3 = 2*s4*(z33-z31); xgh4 = -18*s4*ze; xh2 = -2*s2*z22; xh3 = -2*s2*(z23-z21); if(isFlagSet(LUNAR_TERMS_DONE_FLAG)) break; /* Do lunar terms */ sse = se; ssi = si; ssl = sl; ssh = sh/deep_arg->sinio; ssg = sgh-deep_arg->cosio*ssh; se2 = ee2; si2 = xi2; sl2 = xl2; sgh2 = xgh2; sh2 = xh2; se3 = e3; si3 = xi3; sl3 = xl3; sgh3 = xgh3; sh3 = xh3; sl4 = xl4; sgh4 = xgh4; zcosg = zcosgl; zsing = zsingl; zcosi = zcosil; zsini = zsinil; zcosh = zcoshl*cosq+zsinhl*sinq; zsinh = sinq*zcoshl-cosq*zsinhl; zn = znl; cc = c1l; ze = zel; zmo = zmol; SetFlag(LUNAR_TERMS_DONE_FLAG); } /* End of for(;;) */ sse = sse+se; ssi = ssi+si; ssl = ssl+sl; ssg = ssg+sgh-deep_arg->cosio/deep_arg->sinio*sh; ssh = ssh+sh/deep_arg->sinio; /* Geopotential resonance initialization for 12 hour orbits */ ClearFlag(RESONANCE_FLAG); ClearFlag(SYNCHRONOUS_FLAG); if( !((xnq < 0.0052359877) && (xnq > 0.0034906585)) ) { if( (xnq < 0.00826) || (xnq > 0.00924) ) return; if (eq < 0.5) return; SetFlag(RESONANCE_FLAG); eoc = eq*deep_arg->eosq; g201 = -0.306-(eq-0.64)*0.440; if (eq <= 0.65) { g211 = 3.616-13.247*eq+16.290*deep_arg->eosq; g310 = -19.302+117.390*eq-228.419* deep_arg->eosq+156.591*eoc; g322 = -18.9068+109.7927*eq-214.6334* deep_arg->eosq+146.5816*eoc; g410 = -41.122+242.694*eq-471.094* deep_arg->eosq+313.953*eoc; g422 = -146.407+841.880*eq-1629.014* deep_arg->eosq+1083.435*eoc; g520 = -532.114+3017.977*eq-5740* deep_arg->eosq+3708.276*eoc; } else { g211 = -72.099+331.819*eq-508.738* deep_arg->eosq+266.724*eoc; g310 = -346.844+1582.851*eq-2415.925* deep_arg->eosq+1246.113*eoc; g322 = -342.585+1554.908*eq-2366.899* deep_arg->eosq+1215.972*eoc; g410 = -1052.797+4758.686*eq-7193.992* deep_arg->eosq+3651.957*eoc; g422 = -3581.69+16178.11*eq-24462.77* deep_arg->eosq+ 12422.52*eoc; if (eq <= 0.715) g520 = 1464.74-4664.75*eq+3763.64*deep_arg->eosq; else g520 = -5149.66+29936.92*eq-54087.36* deep_arg->eosq+31324.56*eoc; } /* End if (eq <= 0.65) */ if (eq < 0.7) { g533 = -919.2277+4988.61*eq-9064.77* deep_arg->eosq+5542.21*eoc; g521 = -822.71072+4568.6173*eq-8491.4146* deep_arg->eosq+5337.524*eoc; g532 = -853.666+4690.25*eq-8624.77* deep_arg->eosq+ 5341.4*eoc; } else { g533 = -37995.78+161616.52*eq-229838.2* deep_arg->eosq+109377.94*eoc; g521 = -51752.104+218913.95*eq-309468.16* deep_arg->eosq+146349.42*eoc; g532 = -40023.88+170470.89*eq-242699.48* deep_arg->eosq+115605.82*eoc; } /* End if (eq <= 0.7) */ sini2 = deep_arg->sinio*deep_arg->sinio; f220 = 0.75*(1+2*deep_arg->cosio+deep_arg->theta2); f221 = 1.5*sini2; f321 = 1.875*deep_arg->sinio*(1-2*\ deep_arg->cosio-3*deep_arg->theta2); f322 = -1.875*deep_arg->sinio*(1+2* deep_arg->cosio-3*deep_arg->theta2); f441 = 35*sini2*f220; f442 = 39.3750*sini2*sini2; f522 = 9.84375*deep_arg->sinio*(sini2*(1-2*deep_arg->cosio-5* deep_arg->theta2)+0.33333333*(-2+4*deep_arg->cosio+ 6*deep_arg->theta2)); f523 = deep_arg->sinio*(4.92187512*sini2*(-2-4* deep_arg->cosio+10*deep_arg->theta2)+6.56250012 *(1+2*deep_arg->cosio-3*deep_arg->theta2)); f542 = 29.53125*deep_arg->sinio*(2-8* deep_arg->cosio+deep_arg->theta2* (-12+8*deep_arg->cosio+10*deep_arg->theta2)); f543 = 29.53125*deep_arg->sinio*(-2-8*deep_arg->cosio+ deep_arg->theta2*(12+8*deep_arg->cosio-10* deep_arg->theta2)); xno2 = xnq*xnq; ainv2 = aqnv*aqnv; temp1 = 3*xno2*ainv2; temp = temp1*root22; d2201 = temp*f220*g201; d2211 = temp*f221*g211; temp1 = temp1*aqnv; temp = temp1*root32; d3210 = temp*f321*g310; d3222 = temp*f322*g322; temp1 = temp1*aqnv; temp = 2*temp1*root44; d4410 = temp*f441*g410; d4422 = temp*f442*g422; temp1 = temp1*aqnv; temp = temp1*root52; d5220 = temp*f522*g520; d5232 = temp*f523*g532; temp = 2*temp1*root54; d5421 = temp*f542*g521; d5433 = temp*f543*g533; xlamo = xmao+tle->xnodeo+tle->xnodeo-thgr-thgr; bfact = deep_arg->xmdot+deep_arg->xnodot+ deep_arg->xnodot-thdt-thdt; bfact = bfact+ssl+ssh+ssh; } /* if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */ else { SetFlag(RESONANCE_FLAG); SetFlag(SYNCHRONOUS_FLAG); /* Synchronous resonance terms initialization */ g200 = 1+deep_arg->eosq*(-2.5+0.8125*deep_arg->eosq); g310 = 1+2*deep_arg->eosq; g300 = 1+deep_arg->eosq*(-6+6.60937*deep_arg->eosq); f220 = 0.75*(1+deep_arg->cosio)*(1+deep_arg->cosio); f311 = 0.9375*deep_arg->sinio*deep_arg->sinio* (1+3*deep_arg->cosio)-0.75*(1+deep_arg->cosio); f330 = 1+deep_arg->cosio; f330 = 1.875*f330*f330*f330; del1 = 3*xnq*xnq*aqnv*aqnv; del2 = 2*del1*f220*g200*q22; del3 = 3*del1*f330*g300*q33*aqnv; del1 = del1*f311*g310*q31*aqnv; fasx2 = 0.13130908; fasx4 = 2.8843198; fasx6 = 0.37448087; xlamo = xmao+tle->xnodeo+tle->omegao-thgr; bfact = deep_arg->xmdot+xpidot-thdt; bfact = bfact+ssl+ssg+ssh; } /* End if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */ xfact = bfact-xnq; /* Initialize integrator */ xli = xlamo; xni = xnq; atime = 0; stepp = 720; stepn = -720; step2 = 259200; /* End case dpinit: */ return; case dpsec: /* Entrance for deep space secular effects */ deep_arg->xll = deep_arg->xll+ssl*deep_arg->t; deep_arg->omgadf = deep_arg->omgadf+ssg*deep_arg->t; deep_arg->xnode = deep_arg->xnode+ssh*deep_arg->t; deep_arg->em = tle->eo+sse*deep_arg->t; deep_arg->xinc = tle->xincl+ssi*deep_arg->t; if (deep_arg->xinc < 0) { deep_arg->xinc = -deep_arg->xinc; deep_arg->xnode = deep_arg->xnode + pi; deep_arg->omgadf = deep_arg->omgadf-pi; } if( isFlagClear(RESONANCE_FLAG) ) return; do { if( (atime == 0) || ((deep_arg->t >= 0) && (atime < 0)) || ((deep_arg->t < 0) && (atime >= 0)) ) { /* Epoch restart */ if( deep_arg->t >= 0 ) delt = stepp; else delt = stepn; atime = 0; xni = xnq; xli = xlamo; } else { if( fabs(deep_arg->t) >= fabs(atime) ) { if ( deep_arg->t > 0 ) delt = stepp; else delt = stepn; } } do { if ( fabs(deep_arg->t-atime) >= stepp ) { SetFlag(DO_LOOP_FLAG); ClearFlag(EPOCH_RESTART_FLAG); } else { ft = deep_arg->t-atime; ClearFlag(DO_LOOP_FLAG); } if( fabs(deep_arg->t) < fabs(atime) ) { if (deep_arg->t >= 0) delt = stepn; else delt = stepp; SetFlag(DO_LOOP_FLAG | EPOCH_RESTART_FLAG); } /* Dot terms calculated */ if( isFlagSet(SYNCHRONOUS_FLAG) ) { xndot = del1*sin(xli-fasx2)+del2*sin(2*(xli-fasx4)) +del3*sin(3*(xli-fasx6)); xnddt = del1*cos(xli-fasx2)+2*del2*cos(2*(xli-fasx4)) +3*del3*cos(3*(xli-fasx6)); } else { xomi = omegaq+deep_arg->omgdot*atime; x2omi = xomi+xomi; x2li = xli+xli; xndot = d2201*sin(x2omi+xli-g22) +d2211*sin(xli-g22) +d3210*sin(xomi+xli-g32) +d3222*sin(-xomi+xli-g32) +d4410*sin(x2omi+x2li-g44) +d4422*sin(x2li-g44) +d5220*sin(xomi+xli-g52) +d5232*sin(-xomi+xli-g52) +d5421*sin(xomi+x2li-g54) +d5433*sin(-xomi+x2li-g54); xnddt = d2201*cos(x2omi+xli-g22) +d2211*cos(xli-g22) +d3210*cos(xomi+xli-g32) +d3222*cos(-xomi+xli-g32) +d5220*cos(xomi+xli-g52) +d5232*cos(-xomi+xli-g52) +2*(d4410*cos(x2omi+x2li-g44) +d4422*cos(x2li-g44) +d5421*cos(xomi+x2li-g54) +d5433*cos(-xomi+x2li-g54)); } /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */ xldot = xni+xfact; xnddt = xnddt*xldot; if(isFlagSet(DO_LOOP_FLAG)) { xli = xli+xldot*delt+xndot*step2; xni = xni+xndot*delt+xnddt*step2; atime = atime+delt; } } while(isFlagSet(DO_LOOP_FLAG) && isFlagClear(EPOCH_RESTART_FLAG)); } while(isFlagSet(DO_LOOP_FLAG) && isFlagSet(EPOCH_RESTART_FLAG)); deep_arg->xn = xni+xndot*ft+xnddt*ft*ft*0.5; xl = xli+xldot*ft+xndot*ft*ft*0.5; temp = -deep_arg->xnode+thgr+deep_arg->t*thdt; if (isFlagClear(SYNCHRONOUS_FLAG)) deep_arg->xll = xl+temp+temp; else deep_arg->xll = xl-deep_arg->omgadf+temp; return; /*End case dpsec: */ case dpper: /* Entrance for lunar-solar periodics */ sinis = sin(deep_arg->xinc); cosis = cos(deep_arg->xinc); if (fabs(savtsn-deep_arg->t) >= 30) { savtsn = deep_arg->t; zm = zmos+zns*deep_arg->t; zf = zm+2*zes*sin(zm); sinzf = sin(zf); f2 = 0.5*sinzf*sinzf-0.25; f3 = -0.5*sinzf*cos(zf); ses = se2*f2+se3*f3; sis = si2*f2+si3*f3; sls = sl2*f2+sl3*f3+sl4*sinzf; sghs = sgh2*f2+sgh3*f3+sgh4*sinzf; shs = sh2*f2+sh3*f3; zm = zmol+znl*deep_arg->t; zf = zm+2*zel*sin(zm); sinzf = sin(zf); f2 = 0.5*sinzf*sinzf-0.25; f3 = -0.5*sinzf*cos(zf); sel = ee2*f2+e3*f3; sil = xi2*f2+xi3*f3; sll = xl2*f2+xl3*f3+xl4*sinzf; sghl = xgh2*f2+xgh3*f3+xgh4*sinzf; sh1 = xh2*f2+xh3*f3; pe = ses+sel; pinc = sis+sil; pl = sls+sll; } pgh = sghs+sghl; ph = shs+sh1; deep_arg->xinc = deep_arg->xinc+pinc; deep_arg->em = deep_arg->em+pe; if (xqncl >= 0.2) { /* Apply periodics directly */ ph = ph/deep_arg->sinio; pgh = pgh-deep_arg->cosio*ph; deep_arg->omgadf = deep_arg->omgadf+pgh; deep_arg->xnode = deep_arg->xnode+ph; deep_arg->xll = deep_arg->xll+pl; } else { /* Apply periodics with Lyddane modification */ sinok = sin(deep_arg->xnode); cosok = cos(deep_arg->xnode); alfdp = sinis*sinok; betdp = sinis*cosok; dalf = ph*cosok+pinc*cosis*sinok; dbet = -ph*sinok+pinc*cosis*cosok; alfdp = alfdp+dalf; betdp = betdp+dbet; deep_arg->xnode = FMod2p(deep_arg->xnode); xls = deep_arg->xll+deep_arg->omgadf+cosis*deep_arg->xnode; dls = pl+pgh-pinc*deep_arg->xnode*sinis; xls = xls+dls; xnoh = deep_arg->xnode; deep_arg->xnode = AcTan(alfdp,betdp); /* This is a patch to Lyddane modification */ /* suggested by Rob Matson. */ if(fabs(xnoh-deep_arg->xnode) > pi) { if(deep_arg->xnode < xnoh) deep_arg->xnode +=twopi; else deep_arg->xnode -=twopi; } deep_arg->xll = deep_arg->xll+pl; deep_arg->omgadf = xls-deep_arg->xll-cos(deep_arg->xinc)* deep_arg->xnode; } /* End case dpper: */ return; } /* End switch(ientry) */ } /* End of Deep() */ /*------------------------------------------------------------------*/ /* Functions for testing and setting/clearing flags */ /* An int variable holding the single-bit flags */ static int Flags = 0; int isFlagSet(int flag) { return (Flags & flag); } int isFlagClear(int flag) { return (~Flags & flag); } void SetFlag(int flag) { Flags |= flag; } void ClearFlag(int flag) { Flags &= ~flag; } /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/sgp_in.c0000644000175000017500000001516510411344513014464 00000000000000/* Unit SGP_In */ /* Author: Dr TS Kelso */ /* Original Version: 1992 Jun 25 */ /* Current Revision: 1999 Nov 27 */ /* Version: 2.10 */ /* Copyright: 1992-1999, All Rights Reserved */ /* Ported to C by N. Kyriazis April 6 2001 */ #include "sgp4sdp4.h" /* Calculates the checksum mod 10 of a line from a TLE set and */ /* returns 1 if it compares with checksum in column 68, else 0.*/ /* tle_set is a character string holding the two lines read */ /* from a text file containing NASA format Keplerian elements. */ int Checksum_Good( char *tle_set ) { int i, check_digit, value, checksum = 0; for(i = 0; i < 68; i++) { if( (tle_set[i] >= '0') && (tle_set[i] <= '9') ) value = tle_set[i] - '0'; else if( tle_set[i] == '-' ) value = 1; else value = 0; checksum += value; } /* End for(i = 0; i < 68; i++) */ checksum %= 10; check_digit = tle_set[68] - '0'; return( checksum == check_digit ); } /* Function Checksums_Good */ /*------------------------------------------------------------------*/ /* Carries out various checks on a TLE set to verify its validity */ /* tle_set is a character string holding the two lines read */ /* from a text file containing NASA format Keplerian elements. */ int Good_Elements( char *tle_set ) { /* Verify checksum of both lines of a TLE set */ if( !Checksum_Good(&tle_set[0]) || !Checksum_Good(&tle_set[69]) ) return (0); /* Check the line number of each line */ if( (tle_set[0] != '1') || (tle_set[69] != '2') ) return (0); /* Verify that Satellite Number is same in both lines */ if( strncmp( &tle_set[2], &tle_set[71], 5 ) != 0 ) return (0); /* Check that various elements are in the right place */ if( (tle_set[ 23] != '.') || (tle_set[ 34] != '.') || (tle_set[ 80] != '.') || (tle_set[ 89] != '.') || (tle_set[106] != '.') || (tle_set[115] != '.') || (tle_set[123] != '.') || (strncmp(&tle_set[61], " 0 ", 3) != 0) ) return (0); return(1); } /* Function Good_Elements */ /*------------------------------------------------------------------*/ /* Converts the strings in a raw two-line element set */ /* to their intended numerical values. No processing */ /* of these values is done, e.g. from deg to rads etc. */ /* This is done in the select_ephemeris() function. */ void Convert_Satellite_Data( char *tle_set, tle_t *tle ) { char buff[15]; /** Decode Card 1 **/ /* Satellite's catalogue number */ strncpy( buff, &tle_set[2],5 ); buff[5] = '\0'; tle->catnr = atoi(buff); /* International Designator for satellite */ strncpy( tle->idesg, &tle_set[9],8 ); tle->idesg[8] = '\0'; /* Satellite's epoch */ strncpy( buff, &tle_set[18],14 ); buff[14] = '\0'; tle->epoch = atof(buff); /* Satellite's First Time Derivative */ strncpy( buff, &tle_set[33],10 ); buff[10]='\0'; tle->xndt2o = atof(buff); /* Satellite's Second Time Derivative */ strncpy( buff, &tle_set[44],1 ); buff[1] = '.'; strncpy( &buff[2], &tle_set[45],5 ); buff[7] = 'E'; strncpy( &buff[8], &tle_set[50],2 ); buff[10]='\0'; tle->xndd6o = atof(buff); /* Satellite's bstar drag term */ strncpy( buff, &tle_set[53],1 ); buff[1] = '.'; strncpy( &buff[2], &tle_set[54],5 ); buff[7] = 'E'; strncpy( &buff[8], &tle_set[59],2 ); buff[10]='\0'; tle->bstar = atof(buff); /* Element Number */ strncpy( buff, &tle_set[64],4 ); buff[4]='\0'; tle->elset = atoi(buff); /** Decode Card 2 **/ /* Satellite's Orbital Inclination (degrees) */ strncpy( buff, &tle_set[77], 8 ); buff[8]='\0'; tle->xincl = atof(buff); /* Satellite's RAAN (degrees) */ strncpy( buff, &tle_set[86], 8 ); buff[8]='\0'; tle->xnodeo = atof(buff); /* Satellite's Orbital Eccentricity */ buff[0] = '.'; strncpy( &buff[1], &tle_set[95], 7 ); buff[8]='\0'; tle->eo = atof(buff); /* Satellite's Argument of Perigee (degrees) */ strncpy( buff, &tle_set[103], 8 ); buff[8]='\0'; tle->omegao = atof(buff); /* Satellite's Mean Anomaly of Orbit (degrees) */ strncpy( buff, &tle_set[112], 8 ); buff[8]='\0'; tle->xmo = atof(buff); /* Satellite's Mean Motion (rev/day) */ strncpy( buff, &tle_set[121], 10 ); buff[10]='\0'; tle->xno = atof(buff); /* Satellite's Revolution number at epoch */ strncpy( buff, &tle_set[132], 5 ); buff[5]='\0'; tle->revnum = atof(buff); } /* Procedure Convert_Satellite_Data */ /*------------------------------------------------------------------*/ int Get_Next_Tle_Set( char line[3][80], tle_t *tle) { int idx, /* Index for loops and arrays */ chr; /* Used for inputting characters */ char tle_set[139]; /* Two lines of a TLE set */ /* Read the satellite's name */ for (idx = 0 ; idx < 25; idx++) { if( ((chr = line[0][idx]) != CR) && (chr != LF) && (chr != '\0')) tle->sat_name[idx] = chr; else { /* strip off trailing spaces */ while ((chr = line[0][--idx]) == ' '); tle->sat_name[++idx] = '\0'; break; } } /* Read in first line of TLE set */ strncpy(tle_set, line[1], 70); /* Read in second line of TLE set and terminate string */ strncpy(&tle_set[69], line[2], 70); tle_set[138]='\0'; /* Check TLE set and abort if not valid */ if( !Good_Elements(tle_set) ) return(-2); /* Convert the TLE set to orbital elements */ Convert_Satellite_Data( tle_set, tle ); return(1); } /*------------------------------------------------------------------*/ /* Selects the apropriate ephemeris type to be used */ /* for predictions according to the data in the TLE */ /* It also processes values in the tle set so that */ /* they are apropriate for the sgp4/sdp4 routines */ void select_ephemeris(tle_t *tle) { double ao,xnodp,dd1,dd2,delo,temp,a1,del1,r1; /* Preprocess tle set */ tle->xnodeo *= de2ra; tle-> omegao *= de2ra; tle->xmo *= de2ra; tle->xincl *= de2ra; temp = twopi/xmnpda/xmnpda; tle->xno = tle->xno*temp*xmnpda; tle->xndt2o *= temp; tle->xndd6o = tle->xndd6o*temp/xmnpda; tle->bstar /= ae; /* Period > 225 minutes is deep space */ dd1 = (xke/tle->xno); dd2 = tothrd; a1 = pow(dd1, dd2); r1 = cos(tle->xincl); dd1 = (1.0-tle->eo*tle->eo); temp = ck2*1.5f*(r1*r1*3.0-1.0)/pow(dd1, 1.5); del1 = temp/(a1*a1); ao = a1*(1.0-del1*(tothrd*.5+del1* (del1*1.654320987654321+1.0))); delo = temp/(ao*ao); xnodp = tle->xno/(delo+1.0); /* Select a deep-space/near-earth ephemeris */ if (twopi/xnodp/xmnpda >= .15625) SetFlag(DEEP_SPACE_EPHEM_FLAG); else ClearFlag(DEEP_SPACE_EPHEM_FLAG); return; } /* End of select_ephemeris() */ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/Makefile.in0000644000175000017500000003373111731356514015117 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libsgp4sdp4 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libsgp4sdp4_a_LIBADD = am_libsgp4sdp4_a_OBJECTS = sgp4sdp4.$(OBJEXT) sgp_in.$(OBJEXT) \ sgp_math.$(OBJEXT) sgp_obs.$(OBJEXT) sgp_time.$(OBJEXT) \ solar.$(OBJEXT) libsgp4sdp4_a_OBJECTS = $(am_libsgp4sdp4_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libsgp4sdp4_a_SOURCES) $(EXTRA_libsgp4sdp4_a_SOURCES) DIST_SOURCES = $(libsgp4sdp4_a_SOURCES) $(EXTRA_libsgp4sdp4_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libsgp4sdp4.a @USE_AR_FALSE@libsgp4sdp4_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libsgp4sdp4_a_AR = $(AR) cru libsgp4sdp4_a_SOURCES = \ sgp4sdp4.h \ sgp4sdp4.c \ sgp_in.c \ sgp_math.c \ sgp_obs.c \ sgp_time.c \ solar.c EXTRA_libsgp4sdp4_a_SOURCES = main.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libsgp4sdp4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libsgp4sdp4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsgp4sdp4.a: $(libsgp4sdp4_a_OBJECTS) $(libsgp4sdp4_a_DEPENDENCIES) -rm -f libsgp4sdp4.a $(libsgp4sdp4_a_AR) libsgp4sdp4.a $(libsgp4sdp4_a_OBJECTS) $(libsgp4sdp4_a_LIBADD) $(RANLIB) libsgp4sdp4.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgp4sdp4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgp_in.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgp_math.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgp_obs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgp_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solar.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libsgp4sdp4/sgp_math.c0000644000175000017500000001404710411344513015005 00000000000000/* * Unit SGP_Math * Author: Dr TS Kelso * Original Version: 1991 Oct 30 * Current Revision: 1998 Mar 17 * Version: 3.00 * Copyright: 1991-1998, All Rights Reserved * * ported to C by: Neoklis Kyriazis April 9 2001 */ #include "sgp4sdp4.h" /* Returns sign of a double */ int Sign(double arg) { if( arg > 0 ) return( 1 ); else if( arg < 0 ) return( -1 ); else return( 0 ); } /* Function Sign*/ /*------------------------------------------------------------------*/ /* Returns square of a double */ double Sqr(double arg) { return( arg*arg ); } /* Function Sqr */ /*------------------------------------------------------------------*/ /* Returns cube of a double */ double Cube(double arg) { return( arg*arg*arg ); } /*Function Cube*/ /*------------------------------------------------------------------*/ /* Returns angle in radians from arg id degrees */ double Radians(double arg) { return( arg*de2ra ); } /*Function Radians*/ /*------------------------------------------------------------------*/ /* Returns angle in degrees from arg in rads */ double Degrees(double arg) { return( arg/de2ra ); } /*Function Degrees*/ /*------------------------------------------------------------------*/ /* Returns the arcsine of the argument */ double ArcSin(double arg) { if( fabs(arg) >= 1 ) return( Sign(arg)*pio2 ); else return( atan(arg/sqrt(1-arg*arg)) ); } /*Function ArcSin*/ /*------------------------------------------------------------------*/ /* Returns orccosine of rgument */ double ArcCos(double arg) { return( pio2 - ArcSin(arg) ); } /*Function ArcCos*/ /*------------------------------------------------------------------*/ /* Calculates scalar magnitude of a vector_t argument */ void Magnitude(vector_t *v) { v->w = sqrt(Sqr(v->x) + Sqr(v->y) + Sqr(v->z)); } /*Procedure Magnitude*/ /*------------------------------------------------------------------*/ /* Adds vectors v1 and v2 together to produce v3 */ void Vec_Add(vector_t *v1, vector_t *v2, vector_t *v3) { v3->x = v1->x + v2->x; v3->y = v1->y + v2->y; v3->z = v1->z + v2->z; Magnitude(v3); } /*Procedure Vec_Add*/ /*------------------------------------------------------------------*/ /* Subtracts vector v2 from v1 to produce v3 */ void Vec_Sub(vector_t *v1, vector_t *v2, vector_t *v3) { v3->x = v1->x - v2->x; v3->y = v1->y - v2->y; v3->z = v1->z - v2->z; Magnitude(v3); } /*Procedure Vec_Sub*/ /*------------------------------------------------------------------*/ /* Multiplies the vector v1 by the scalar k to produce the vector v2 */ void Scalar_Multiply(double k, vector_t *v1, vector_t *v2) { v2->x = k * v1->x; v2->y = k * v1->y; v2->z = k * v1->z; v2->w = fabs(k) * v1->w; } /*Procedure Scalar_Multiply*/ /*------------------------------------------------------------------*/ /* Multiplies the vector v1 by the scalar k */ void Scale_Vector(double k, vector_t *v) { v->x *= k; v->y *= k; v->z *= k; Magnitude(v); } /* Procedure Scale_Vector */ /*------------------------------------------------------------------*/ /* Returns the dot product of two vectors */ double Dot(vector_t *v1, vector_t *v2) { return( v1->x*v2->x + v1->y*v2->y + v1->z*v2->z ); } /*Function Dot*/ /*------------------------------------------------------------------*/ /* Calculates the angle between vectors v1 and v2 */ double Angle(vector_t *v1, vector_t *v2) { Magnitude(v1); Magnitude(v2); return( ArcCos(Dot(v1,v2)/(v1->w*v2->w)) ); } /*Function Angle*/ /*------------------------------------------------------------------*/ /* Produces cross product of v1 and v2, and returns in v3 */ void Cross(vector_t *v1, vector_t *v2 ,vector_t *v3) { v3->x = v1->y*v2->z - v1->z*v2->y; v3->y = v1->z*v2->x - v1->x*v2->z; v3->z = v1->x*v2->y - v1->y*v2->x; Magnitude(v3); } /*Procedure Cross*/ /*------------------------------------------------------------------*/ /* Normalizes a vector */ void Normalize( vector_t *v ) { v->x /= v->w; v->y /= v->w; v->z /= v->w; } /*Procedure Normalize*/ /*------------------------------------------------------------------*/ /* Four-quadrant arctan function */ double AcTan(double sinx, double cosx) { if(cosx == 0) { if(sinx > 0) return (pio2); else return (x3pio2); } else { if(cosx > 0) { if(sinx > 0) return ( atan(sinx/cosx) ); else return ( twopi + atan(sinx/cosx) ); } else return ( pi + atan(sinx/cosx) ); } } /* Function AcTan */ /*------------------------------------------------------------------*/ /* Returns mod 2pi of argument */ double FMod2p(double x) { int i; double ret_val; ret_val = x; i = ret_val/twopi; ret_val -= i*twopi; if (ret_val < 0) ret_val += twopi; return (ret_val); } /* fmod2p */ /*------------------------------------------------------------------*/ /* Returns arg1 mod arg2 */ double Modulus(double arg1, double arg2) { int i; double ret_val; ret_val = arg1; i = ret_val/arg2; ret_val -= i*arg2; if (ret_val < 0) ret_val += arg2; return (ret_val); } /* modulus */ /*------------------------------------------------------------------*/ /* Returns fractional part of double argument */ double Frac( double arg ) { return( arg - floor(arg) ); } /* Frac */ /*------------------------------------------------------------------*/ /* Returns argument rounded up to nearest integer */ int Round( double arg ) { return( (int) floor(arg + 0.5) ); } /* Round */ /*------------------------------------------------------------------*/ /* Returns the floor integer of a double arguement, as double */ double Int( double arg ) { return( floor(arg) ); } /* Int */ /*------------------------------------------------------------------*/ /* Converts the satellite's position and velocity */ /* vectors from normalised values to km and km/sec */ void Convert_Sat_State( vector_t *pos, vector_t *vel ) { Scale_Vector( xkmper, pos ); Scale_Vector( xkmper*xmnpda/secday, vel ); } /* Procedure Convert_Sat_State */ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/README0000644000175000017500000000037710411344513013720 00000000000000This library is based on the sgp4sdp4-0.3 by Neoklis Kyriazis (http://leonardo.spidernet.net/Copernicus/22420). I made some minor modifications to the code in order to create a library that works on multiple platforms. Hari Nair hari@alumni.caltech.edu xplanet-1.3.0/src/libsgp4sdp4/main.c0000644000175000017500000001455610411344513014134 00000000000000/* * main.c April 10 2001 * * A skeleton main() function to demonstrate the use of * the SGP4() and SDP4() in the sgp4sdp4.c file. * The TLE set to be used is read from the file amateur.txt * downloaded from Dr Kelso's website at www.celestrak.com. * Please note that this is a simple application and can only * read the first TLE kep set, including line 0 with the Name. */ #include "sgp4sdp4.h" /* Main program */ int main(void) { /* TLE source file */ char tle_file[] = "./amateur.txt"; /* Observer's geodetic co-ordinates. */ /* Lat North, Lon East in rads, Alt in km */ geodetic_t obs_geodetic = {0.6056, 0.5761, 0.15, 0.0}; /* Two-line Orbital Elements for the satellite */ tle_t tle ; /* Zero vector for initializations */ vector_t zero_vector = {0,0,0,0}; /* Satellite position and velocity vectors */ vector_t vel = zero_vector; vector_t pos = zero_vector; /* Satellite Az, El, Range, Range rate */ vector_t obs_set; /* Solar ECI position vector */ vector_t solar_vector = zero_vector; /* Solar observed azi and ele vector */ vector_t solar_set; /* Calendar date and time (UTC) */ struct tm utc; /* Satellite's predicted geodetic position */ geodetic_t sat_geodetic; double tsince, /* Time since epoch (in minutes) */ jul_epoch, /* Julian date of epoch */ jul_utc, /* Julian UTC date */ eclipse_depth = 0, /* Depth of satellite eclipse */ /* Satellite's observed position, range, range rate */ sat_azi, sat_ele, sat_range, sat_range_rate, /* Satellites geodetic position and velocity */ sat_lat, sat_lon, sat_alt, sat_vel, /* Solar azimuth and elevation */ sun_azi, sun_ele; /* Used for storing function return codes */ int flg; char ephem[5], /* Ephemeris in use string */ sat_status[12], /* Satellite eclipse status */ tle_lines[3][80]; /* Satellite name + two line element */ /* File pointer for opening TLE source file */ FILE *fp; /* Open TLE file, abort on failure */ if( (fp = fopen( tle_file, "r")) == NULL ) { printf(" File open failed - Exiting!\n"); exit(-1); } /* Get the first three lines */ fgets(tle_lines[0], 80, fp); fgets(tle_lines[1], 80, fp); fgets(tle_lines[2], 80, fp); fclose(fp); flg = Get_Next_Tle_Set(tle_lines, &tle); /* Print satellite name and TLE read status */ printf(" %s: ", tle.sat_name); if( flg == -2 ) { printf("TLE set bad - Exiting!\n"); exit(-2); } else printf("TLE set good - Happy Tracking!\n"); /* Printout of tle set data for tests if needed */ /* printf("\n %s %s %i %i %i\n" " %14f %10f %8f %8f\n" " %8f %8f %9f %8f %8f %12f\n", tle.sat_name, tle.idesg, tle.catnr, tle.elset, tle.revnum, tle.epoch, tle.xndt2o, tle.xndd6o, tle.bstar, tle.xincl, tle.xnodeo, tle.eo, tle.omegao, tle.xmo, tle.xno); */ /** !Clear all flags! **/ /* Before calling a different ephemeris */ /* or changing the TLE set, flow control */ /* flags must be cleared in main(). */ ClearFlag(ALL_FLAGS); /** Select ephemeris type **/ /* Will set or clear the DEEP_SPACE_EPHEM_FLAG */ /* depending on the TLE parameters of the satellite. */ /* It will also pre-process tle members for the */ /* ephemeris functions SGP4 or SDP4 so this function */ /* must be called each time a new tle set is used */ select_ephemeris(&tle); do /* Loop */ { /* Get UTC calendar and convert to Julian */ UTC_Calendar_Now(&utc); jul_utc = Julian_Date(&utc); /* Convert satellite's epoch time to Julian */ /* and calculate time since epoch in minutes */ jul_epoch = Julian_Date_of_Epoch(tle.epoch); tsince = (jul_utc - jul_epoch) * xmnpda; /* Copy the ephemeris type in use to ephem string */ if( isFlagSet(DEEP_SPACE_EPHEM_FLAG) ) strcpy(ephem,"SDP4"); else strcpy(ephem,"SGP4"); /* Call NORAD routines according to deep-space flag */ if( isFlagSet(DEEP_SPACE_EPHEM_FLAG) ) SDP4(tsince, &tle, &pos, &vel); else SGP4(tsince, &tle, &pos, &vel); /* Scale position and velocity vectors to km and km/sec */ Convert_Sat_State( &pos, &vel ); /* Calculate velocity of satellite */ Magnitude( &vel ); sat_vel = vel.w; /** All angles in rads. Distance in km. Velocity in km/s **/ /* Calculate satellite Azi, Ele, Range and Range-rate */ Calculate_Obs(jul_utc, &pos, &vel, &obs_geodetic, &obs_set); /* Calculate satellite Lat North, Lon East and Alt. */ Calculate_LatLonAlt(jul_utc, &pos, &sat_geodetic); /* Calculate solar position and satellite eclipse depth */ /* Also set or clear the satellite eclipsed flag accordingly */ Calculate_Solar_Position(jul_utc, &solar_vector); Calculate_Obs(jul_utc,&solar_vector,&zero_vector,&obs_geodetic,&solar_set); if( Sat_Eclipsed(&pos, &solar_vector, &eclipse_depth) ) SetFlag( SAT_ECLIPSED_FLAG ); else ClearFlag( SAT_ECLIPSED_FLAG ); /* Copy a satellite eclipse status string in sat_status */ if( isFlagSet( SAT_ECLIPSED_FLAG ) ) strcpy( sat_status, "Eclipsed" ); else strcpy( sat_status, "In Sunlight" ); /* Convert and print satellite and solar data */ sat_azi = Degrees(obs_set.x); sat_ele = Degrees(obs_set.y); sat_range = obs_set.z; sat_range_rate = obs_set.w; sat_lat = Degrees(sat_geodetic.lat); sat_lon = Degrees(sat_geodetic.lon); sat_alt = sat_geodetic.alt; sun_azi = Degrees(solar_set.x); sun_ele = Degrees(solar_set.y); printf("\n Date: %02d/%02d/%04d UTC: %02d:%02d:%02d Ephemeris: %s" "\n Azi=%6.1f Ele=%6.1f Range=%8.1f Range Rate=%6.2f" "\n Lat=%6.1f Lon=%6.1f Alt=%8.1f Vel=%8.3f" "\n Stellite Status: %s - Depth: %2.3f" "\n Sun Azi=%6.1f Sun Ele=%6.1f\n", utc.tm_mday, utc.tm_mon, utc.tm_year, utc.tm_hour, utc.tm_min, utc.tm_sec, ephem, sat_azi, sat_ele, sat_range, sat_range_rate, sat_lat, sat_lon, sat_alt, sat_vel, sat_status, eclipse_depth, sun_azi, sun_ele); sleep(1); } /* End of do */ while( flg == flg ); /* This stops Compaq ccc 'unreachcode' warning! */ return(0); } /* End of main() */ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/sgp_obs.c0000644000175000017500000001567210411344513014644 00000000000000/* * Unit SGP_Obs * Author: Dr TS Kelso * Original Version: 1992 Jun 02 * Current Revision: 1992 Sep 28 * Version: 1.40 * Copyright: 1992, All Rights Reserved * * Ported to C by: Neoklis Kyriazis April 9 2001 */ #include "sgp4sdp4.h" /* Procedure Calculate_User_PosVel passes the user's geodetic position */ /* and the time of interest and returns the ECI position and velocity */ /* of the observer. The velocity calculation assumes the geodetic */ /* position is stationary relative to the earth's surface. */ void Calculate_User_PosVel(double time, geodetic_t *geodetic, vector_t *obs_pos, vector_t *obs_vel) { /* Reference: The 1992 Astronomical Almanac, page K11. */ double c,sq,achcp; geodetic->theta = FMod2p(ThetaG_JD(time) + geodetic->lon);/*LMST*/ c = 1/sqrt(1 + f*(f - 2)*Sqr(sin(geodetic->lat))); sq = Sqr(1 - f)*c; achcp = (xkmper*c + geodetic->alt)*cos(geodetic->lat); obs_pos->x = achcp*cos(geodetic->theta);/*kilometers*/ obs_pos->y = achcp*sin(geodetic->theta); obs_pos->z = (xkmper*sq + geodetic->alt)*sin(geodetic->lat); obs_vel->x = -mfactor*obs_pos->y;/*kilometers/second*/ obs_vel->y = mfactor*obs_pos->x; obs_vel->z = 0; Magnitude(obs_pos); Magnitude(obs_vel); } /*Procedure Calculate_User_PosVel*/ /*------------------------------------------------------------------*/ /* Procedure Calculate_LatLonAlt will calculate the geodetic */ /* position of an object given its ECI position pos and time. */ /* It is intended to be used to determine the ground track of */ /* a satellite. The calculations assume the earth to be an */ /* oblate spheroid as defined in WGS '72. */ void Calculate_LatLonAlt(double time, vector_t *pos, geodetic_t *geodetic) { /* Reference: The 1992 Astronomical Almanac, page K12. */ double r,e2,phi,c; geodetic->theta = AcTan(pos->y,pos->x);/*radians*/ geodetic->lon = FMod2p(geodetic->theta - ThetaG_JD(time));/*radians*/ r = sqrt(Sqr(pos->x) + Sqr(pos->y)); e2 = f*(2 - f); geodetic->lat = AcTan(pos->z,r);/*radians*/ do { phi = geodetic->lat; c = 1/sqrt(1 - e2*Sqr(sin(phi))); geodetic->lat = AcTan(pos->z + xkmper*c*e2*sin(phi),r); } while(fabs(geodetic->lat - phi) >= 1E-10); geodetic->alt = r/cos(geodetic->lat) - xkmper*c;/*kilometers*/ if( geodetic->lat > pio2 ) geodetic->lat -= twopi; } /*Procedure Calculate_LatLonAlt*/ /*------------------------------------------------------------------*/ /* The procedures Calculate_Obs and Calculate_RADec calculate */ /* the *topocentric* coordinates of the object with ECI position, */ /* {pos}, and velocity, {vel}, from location {geodetic} at {time}. */ /* The {obs_set} returned for Calculate_Obs consists of azimuth, */ /* elevation, range, and range rate (in that order) with units of */ /* radians, radians, kilometers, and kilometers/second, respectively. */ /* The WGS '72 geoid is used and the effect of atmospheric refraction */ /* (under standard temperature and pressure) is incorporated into the */ /* elevation calculation; the effect of atmospheric refraction on */ /* range and range rate has not yet been quantified. */ /* The {obs_set} for Calculate_RADec consists of right ascension and */ /* declination (in that order) in radians. Again, calculations are */ /* based on *topocentric* position using the WGS '72 geoid and */ /* incorporating atmospheric refraction. */ void Calculate_Obs(double time, vector_t *pos, vector_t *vel, geodetic_t *geodetic, vector_t *obs_set) { double sin_lat,cos_lat, sin_theta,cos_theta, el,azim, top_s,top_e,top_z; vector_t obs_pos,obs_vel,range,rgvel; Calculate_User_PosVel(time, geodetic, &obs_pos, &obs_vel); range.x = pos->x - obs_pos.x; range.y = pos->y - obs_pos.y; range.z = pos->z - obs_pos.z; rgvel.x = vel->x - obs_vel.x; rgvel.y = vel->y - obs_vel.y; rgvel.z = vel->z - obs_vel.z; Magnitude(&range); sin_lat = sin(geodetic->lat); cos_lat = cos(geodetic->lat); sin_theta = sin(geodetic->theta); cos_theta = cos(geodetic->theta); top_s = sin_lat*cos_theta*range.x + sin_lat*sin_theta*range.y - cos_lat*range.z; top_e = -sin_theta*range.x + cos_theta*range.y; top_z = cos_lat*cos_theta*range.x + cos_lat*sin_theta*range.y + sin_lat*range.z; azim = atan(-top_e/top_s); /*Azimuth*/ if( top_s > 0 ) azim = azim + pi; if( azim < 0 ) azim = azim + twopi; el = ArcSin(top_z/range.w); obs_set->x = azim; /* Azimuth (radians) */ obs_set->y = el; /* Elevation (radians)*/ obs_set->z = range.w; /* Range (kilometers) */ /*Range Rate (kilometers/second)*/ obs_set->w = Dot(&range, &rgvel)/range.w; /* Corrections for atmospheric refraction */ /* Reference: Astronomical Algorithms by Jean Meeus, pp. 101-104 */ /* Correction is meaningless when apparent elevation is below horizon */ obs_set->y = obs_set->y + Radians((1.02/tan(Radians(Degrees(el)+ 10.3/(Degrees(el)+5.11))))/60); if( obs_set->y >= 0 ) SetFlag(VISIBLE_FLAG); else { obs_set->y = el; /*Reset to true elevation*/ ClearFlag(VISIBLE_FLAG); } /*else*/ } /*Procedure Calculate_Obs*/ /*------------------------------------------------------------------*/ void Calculate_RADec( double time, vector_t *pos, vector_t *vel, geodetic_t *geodetic, vector_t *obs_set) { /* Reference: Methods of Orbit Determination by */ /* Pedro Ramon Escobal, pp. 401-402 */ double phi,theta,sin_theta,cos_theta,sin_phi,cos_phi, az,el,Lxh,Lyh,Lzh,Sx,Ex,Zx,Sy,Ey,Zy,Sz,Ez,Zz, Lx,Ly,Lz,cos_delta,sin_alpha,cos_alpha; Calculate_Obs(time,pos,vel,geodetic,obs_set); if( isFlagSet(VISIBLE_FLAG) ) { az = obs_set->x; el = obs_set->y; phi = geodetic->lat; theta = FMod2p(ThetaG_JD(time) + geodetic->lon); sin_theta = sin(theta); cos_theta = cos(theta); sin_phi = sin(phi); cos_phi = cos(phi); Lxh = -cos(az)*cos(el); Lyh = sin(az)*cos(el); Lzh = sin(el); Sx = sin_phi*cos_theta; Ex = -sin_theta; Zx = cos_theta*cos_phi; Sy = sin_phi*sin_theta; Ey = cos_theta; Zy = sin_theta*cos_phi; Sz = -cos_phi; Ez = 0; Zz = sin_phi; Lx = Sx*Lxh + Ex*Lyh + Zx*Lzh; Ly = Sy*Lxh + Ey*Lyh + Zy*Lzh; Lz = Sz*Lxh + Ez*Lyh + Zz*Lzh; obs_set->y = ArcSin(Lz); /*Declination (radians)*/ cos_delta = sqrt(1 - Sqr(Lz)); sin_alpha = Ly/cos_delta; cos_alpha = Lx/cos_delta; obs_set->x = AcTan(sin_alpha,cos_alpha); /*Right Ascension (radians)*/ obs_set->x = FMod2p(obs_set->x); } /*if*/ } /* Procedure Calculate_RADec */ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/solar.c0000644000175000017500000000405410411344513014320 00000000000000/* * Unit Solar * Author: Dr TS Kelso * Original Version: 1990 Jul 29 * Current Revision: 1999 Nov 27 * Version: 1.30 * Copyright: 1990-1999, All Rights Reserved * * Ported to C by: Neoklis Kyriazis April 1 2001 */ #include "sgp4sdp4.h" /* Calculates solar position vector */ void Calculate_Solar_Position(double time, vector_t *solar_vector) { double mjd,year,T,M,L,e,C,O,Lsa,nu,R,eps; mjd = time - 2415020.0; year = 1900 + mjd/365.25; T = (mjd + Delta_ET(year)/secday)/36525.0; M = Radians(Modulus(358.47583 + Modulus(35999.04975*T,360.0) - (0.000150 + 0.0000033*T)*Sqr(T),360.0)); L = Radians(Modulus(279.69668 + Modulus(36000.76892*T,360.0) + 0.0003025*Sqr(T),360.0)); e = 0.01675104 - (0.0000418 + 0.000000126*T)*T; C = Radians((1.919460 - (0.004789 + 0.000014*T)*T)*sin(M) + (0.020094 - 0.000100*T)*sin(2*M) + 0.000293*sin(3*M)); O = Radians(Modulus(259.18 - 1934.142*T,360.0)); Lsa = Modulus(L + C - Radians(0.00569 - 0.00479*sin(O)),twopi); nu = Modulus(M + C,twopi); R = 1.0000002*(1 - Sqr(e))/(1 + e*cos(nu)); eps = Radians(23.452294 - (0.0130125 + (0.00000164 - 0.000000503*T)*T)*T + 0.00256*cos(O)); R = AU*R; solar_vector->x = R*cos(Lsa); solar_vector->y = R*sin(Lsa)*cos(eps); solar_vector->z = R*sin(Lsa)*sin(eps); solar_vector->w = R; } /*Procedure Calculate_Solar_Position*/ /*------------------------------------------------------------------*/ /* Calculates stellite's eclipse status and depth */ int Sat_Eclipsed(vector_t *pos, vector_t *sol, double *depth) { double sd_sun, sd_earth, delta; vector_t Rho, earth; /* Determine partial eclipse */ sd_earth = ArcSin(xkmper/pos->w); Vec_Sub(sol,pos,&Rho); sd_sun = ArcSin(sr/Rho.w); Scalar_Multiply(-1,pos,&earth); delta = Angle(sol,&earth); *depth = sd_earth - sd_sun - delta; if( sd_earth < sd_sun ) return( 0 ); else if( *depth >= 0 ) return( 1 ); else return( 0 ); } /*Function Sat_Eclipsed*/ /*------------------------------------------------------------------*/ xplanet-1.3.0/src/libsgp4sdp4/sgp4sdp4.h0000644000175000017500000001572510411344513014664 00000000000000/* * kelso.h April 9 2001 * * Header file for kelso */ #ifndef KELSO_H #define KELSO_H 1 #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include /* #include */ /* from David Kaelbling */ #define select duplicate_select #include #undef select /** Type definitions **/ /* Two-line-element satellite orbital data */ typedef struct { double epoch, xndt2o, xndd6o, bstar, xincl, xnodeo, eo, omegao, xmo, xno; int catnr, /* Catalogue Number */ elset, /* Element Set */ revnum; /* Revolution Number */ char sat_name[25], /* Satellite name string */ idesg[9]; /* International Designator */ } tle_t; /* Geodetic position structure */ typedef struct { double lat, lon, alt, theta; } geodetic_t; /* General three-dimensional vector structure */ typedef struct { double x, y, z, w; } vector_t; /* Common arguments between deep-space functions */ typedef struct { /* Used by dpinit part of Deep() */ double eosq,sinio,cosio,betao,aodp,theta2,sing,cosg, betao2,xmdot,omgdot,xnodot,xnodp; /* Used by dpsec and dpper parts of Deep() */ double xll,omgadf,xnode,em,xinc,xn,t; /* Used by thetg and Deep() */ double ds50; } deep_arg_t; /** Table of constant values **/ #define de2ra 1.74532925E-2 /* Degrees to Radians */ #define pi 3.1415926535898 /* Pi */ #define pio2 1.5707963267949 /* Pi/2 */ #define x3pio2 4.71238898 /* 3*Pi/2 */ #define twopi 6.2831853071796 /* 2*Pi */ #define e6a 1.0E-6 #define tothrd 6.6666667E-1 /* 2/3 */ #define xj2 1.0826158E-3 /* J2 Harmonic */ #define xj3 -2.53881E-6 /* J3 Harmonic */ #define xj4 -1.65597E-6 /* J4 Harmonic */ #define xke 7.43669161E-2 #define xkmper 6.378135E3 /* Earth radius km */ #define xmnpda 1.44E3 /* Minutes per day */ #define ae 1.0 #define ck2 5.413079E-4 #define ck4 6.209887E-7 #define f 3.352779E-3 #define ge 3.986008E5 #define s 1.012229 #define qoms2t 1.880279E-09 #define secday 8.6400E4 /* Seconds per day */ #define omega_E 1.0027379 #define omega_ER 6.3003879 #define zns 1.19459E-5 #define c1ss 2.9864797E-6 #define zes 1.675E-2 #define znl 1.5835218E-4 #define c1l 4.7968065E-7 #define zel 5.490E-2 #define zcosis 9.1744867E-1 #define zsinis 3.9785416E-1 #define zsings -9.8088458E-1 #define zcosgs 1.945905E-1 #define zcoshs 1 #define zsinhs 0 #define q22 1.7891679E-6 #define q31 2.1460748E-6 #define q33 2.2123015E-7 #define g22 5.7686396 #define g32 9.5240898E-1 #define g44 1.8014998 #define g52 1.0508330 #define g54 4.4108898 #define root22 1.7891679E-6 #define root32 3.7393792E-7 #define root44 7.3636953E-9 #define root52 1.1428639E-7 #define root54 2.1765803E-9 #define thdt 4.3752691E-3 #define rho 1.5696615E-1 #define mfactor 7.292115E-5 #define sr 6.96000E5 /*Solar radius - kilometers (IAU 76)*/ #define AU 1.49597870E8 /*Astronomical unit - kilometers (IAU 76)*/ /* Entry points of Deep() */ #define dpinit 1 /* Deep-space initialization code */ #define dpsec 2 /* Deep-space secular code */ #define dpper 3 /* Deep-space periodic code */ /* Carriage return and line feed */ #define CR 0x0A #define LF 0x0D /* Flow control flag definitions */ #define ALL_FLAGS -1 #define SGP_INITIALIZED_FLAG 0x000001 #define SGP4_INITIALIZED_FLAG 0x000002 #define SDP4_INITIALIZED_FLAG 0x000004 #define SGP8_INITIALIZED_FLAG 0x000008 #define SDP8_INITIALIZED_FLAG 0x000010 #define SIMPLE_FLAG 0x000020 #define DEEP_SPACE_EPHEM_FLAG 0x000040 #define LUNAR_TERMS_DONE_FLAG 0x000080 #define NEW_EPHEMERIS_FLAG 0x000100 #define DO_LOOP_FLAG 0x000200 #define RESONANCE_FLAG 0x000400 #define SYNCHRONOUS_FLAG 0x000800 #define EPOCH_RESTART_FLAG 0x001000 #define VISIBLE_FLAG 0x002000 #define SAT_ECLIPSED_FLAG 0x004000 /** Funtion prototypes **/ /* main.c */ /* int main(void); */ /* sgp4sdp4.c */ void SGP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel); void SDP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel); void Deep(int ientry, tle_t *tle, deep_arg_t *deep_arg); int isFlagSet(int flag); int isFlagClear(int flag); void SetFlag(int flag); void ClearFlag(int flag); /* sgp_in.c */ int Checksum_Good(char *tle_set); int Good_Elements(char *tle_set); void Convert_Satellite_Data(char *tle_set, tle_t *tle); int Get_Next_Tle_Set( char lines[3][80], tle_t *tle ); void select_ephemeris(tle_t *tle); /* sgp_math.c */ int Sign(double arg); double Sqr(double arg); double Cube(double arg); double Radians(double arg); double Degrees(double arg); double ArcSin(double arg); double ArcCos(double arg); void Magnitude(vector_t *v); void Vec_Add(vector_t *v1, vector_t *v2, vector_t *v3); void Vec_Sub(vector_t *v1, vector_t *v2, vector_t *v3); void Scalar_Multiply(double k, vector_t *v1, vector_t *v2); void Scale_Vector(double k, vector_t *v); double Dot(vector_t *v1, vector_t *v2); double Angle(vector_t *v1, vector_t *v2); void Cross(vector_t *v1, vector_t *v2, vector_t *v3); void Normalize(vector_t *v); double AcTan(double sinx, double cosx); double FMod2p(double x); double Modulus(double arg1, double arg2); double Frac(double arg); int Round(double arg); double Int(double arg); void Convert_Sat_State(vector_t *pos, vector_t *vel); /* sgp_obs.c */ void Calculate_User_PosVel(double time, geodetic_t *geodetic, vector_t *obs_pos, vector_t *obs_vel); void Calculate_LatLonAlt(double time, vector_t *pos, geodetic_t *geodetic); void Calculate_Obs(double time, vector_t *pos, vector_t *vel, geodetic_t *geodetic, vector_t *obs_set); void Calculate_RADec(double time, vector_t *pos, vector_t *vel, geodetic_t *geodetic, vector_t *obs_set); /* sgp_time.c */ double Julian_Date_of_Epoch(double epoch); double Epoch_Time(double jd); int DOY(int yr, int mo, int dy); double Fraction_of_Day(int hr, int mi, int se); void Calendar_Date(double jd, struct tm *cdate); void Time_of_Day(double jd, struct tm *cdate); double Julian_Date(struct tm *cdate); void Date_Time(double jd, struct tm *cdate); int Check_Date(struct tm *cdate); struct tm Time_to_UTC(struct tm *cdate); struct tm Time_from_UTC(struct tm *cdate); double JD_to_UTC(double jt); double JD_from_UTC(double jt); double Delta_ET(double year); double Julian_Date_of_Year(double year); double ThetaG(double epoch, deep_arg_t *deep_arg); double ThetaG_JD(double jd); void UTC_Calendar_Now(struct tm *cdate); /* solar.c */ void Calculate_Solar_Position(double time, vector_t *solar_vector); int Sat_Eclipsed(vector_t *pos, vector_t *sol, double *depth); #ifdef __cplusplus } #endif #endif xplanet-1.3.0/src/findBodyXYZ.h0000644000175000017500000000070410411417337013222 00000000000000#ifndef FINDBODYXYZ_H #define FINDBODYXYZ_H #include "body.h" extern void findBodyXYZ(const double julianDay, const body bodyIndex, const int bodyID, double &X, double &Y, double &Z); extern void findBodyVelocity(const double julianDay, const body bodyIndex, const int bodyID, const body relativeIndex, const int relativeID, double &vX, double &vY, double &vZ); #endif xplanet-1.3.0/src/ParseGeom.h0000644000175000017500000000474510411344513012737 00000000000000/* The following defines are from Xutil.h from the XFree distribution from the Open Group. Their copyright follows. */ /*********************************************************** Copyright 1987, 1998 The Open Group All Rights Reserved. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. */ #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 #define WidthValue 0x0004 #define HeightValue 0x0008 #define AllValues 0x000F #define XNegative 0x0010 #define YNegative 0x0020 xplanet-1.3.0/src/libimage/0000755000175000017500000000000011731372544012536 500000000000000xplanet-1.3.0/src/libimage/ReadImage.cpp0000644000175000017500000000650010411360615014767 00000000000000#include #include using namespace std; #include "config.h" extern "C" { int read_bmp(const char *filename, int *width, int *height, unsigned char **rgb); #ifdef HAVE_LIBGIF int read_gif(const char *filename, int *width, int *height, unsigned char **rgb); #endif #ifdef HAVE_LIBJPEG int read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb); #endif #ifdef HAVE_LIBPNG int read_png(const char *filename, int *width, int *height, unsigned char **rgb, unsigned char **alpha); #endif #ifdef HAVE_LIBPNM int read_pnm(const char *filename, int *width, int *height, unsigned char **rgb); #endif #ifdef HAVE_LIBTIFF int read_tiff(const char *filename, int *width, int *height, unsigned char **rgb); #endif } bool ReadImage(const char *filename, int &width, int &height, unsigned char *&rgb_data, unsigned char *&png_alpha) { char buf[4]; unsigned char *ubuf = (unsigned char *) buf; int success = 0; FILE *file; file = fopen(filename, "rb"); if (file == NULL) return(false); /* see what kind of file we have */ fread(buf, 1, 4, file); fclose(file); if (!strncmp("BM", buf, 2)) { success = read_bmp(filename, &width, &height, &rgb_data); } else if (!strncmp("GIF8", buf, 4)) { #ifdef HAVE_LIBGIF success = read_gif(filename, &width, &height, &rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with GIF support\n"); success = 0; #endif /* HAVE_LIBGIF */ } else if ((ubuf[0] == 0xff) && (ubuf[1] == 0xd8)) { #ifdef HAVE_LIBJPEG success = read_jpeg(filename, &width, &height, &rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with JPEG support\n"); success = 0; #endif /* HAVE_LIBJPEG */ } else if ((ubuf[0] == 0x89) && !strncmp("PNG", buf+1, 3)) { #ifdef HAVE_LIBPNG success = read_png(filename, &width, &height, &rgb_data, &png_alpha); #else fprintf(stderr, "Sorry, this program was not compiled with PNG support\n"); success = 0; #endif /* HAVE_LIBPNG */ } else if (( !strncmp("P6\n", buf, 3)) || (!strncmp("P5\n", buf, 3)) || (!strncmp("P4\n", buf, 3)) || (!strncmp("P3\n", buf, 3)) || (!strncmp("P2\n", buf, 3)) || (!strncmp("P1\n", buf, 3))) { #ifdef HAVE_LIBPNM success = read_pnm(filename, &width, &height, &rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with PNM support\n"); success = 0; #endif /* HAVE_LIBPNM */ } else if (((!strncmp ("MM", buf, 2)) && (ubuf[2] == 0x00) && (ubuf[3] == 0x2a)) || ((!strncmp ("II", buf, 2)) && (ubuf[2] == 0x2a) && (ubuf[3] == 0x00))) { #ifdef HAVE_LIBTIFF success = read_tiff(filename, &width, &height, &rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with TIFF support\n"); success = 0; #endif } else { fprintf(stderr, "Unknown image format\n"); success = 0; } return(success == 1); } xplanet-1.3.0/src/libimage/Makefile.am0000644000175000017500000000124011411445166014503 00000000000000noinst_LIBRARIES = libimage.a read = ReadImage.cpp write = WriteImage.cpp bmp = bmp.c if HAVE_LIBGIF gif = gif.c endif if HAVE_LIBJPEG jpeg = jpeg.c endif if HAVE_LIBPNG png = png.c endif if HAVE_LIBPNM pnm = pnm.c endif if HAVE_LIBTIFF tiff = tiff.c endif EXTRA_libimage_a_SOURCES = bmp.c gif.c jpeg.c png.c pnm.c tiff.c ReadImage.cpp WriteImage.cpp AM_CPPFLAGS = -I@top_srcdir@/src if USE_AR libdisplay_a_AR = $(AR) cru libtimer_a_AR = $(AR) cru else libdisplay_a_AR = $(CXX) @xplanet_ARFLAGS@ libtimer_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libimage_a_SOURCES = Image.cpp Image.h $(read) $(write) $(bmp) $(gif) $(jpeg) $(png) $(pnm) $(tiff) xplanet-1.3.0/src/libimage/Image.cpp0000644000175000017500000001661211723302221014174 00000000000000#include #include #include #include #include using namespace std; #include "Image.h" extern bool ReadImage(const char *filename, int &width, int &height, unsigned char *&rgb_data, unsigned char *&png_alpha); extern bool WriteImage(const char *filename, const int width, const int height, unsigned char * const rgb_data, unsigned char * const png_alpha, const int quality); Image::Image() : width_(0), height_(0), area_(0), rgbData_(NULL), pngAlpha_(NULL), quality_(80) { } Image::Image(const int w, const int h, const unsigned char *rgb, const unsigned char *alpha) : width_(w), height_(h), area_(w*h), quality_(80) { rgbData_ = (unsigned char *) malloc(3 * area_); memcpy(rgbData_, rgb, 3 * area_); if (alpha == NULL) { pngAlpha_ = NULL; } else { pngAlpha_ = (unsigned char *) malloc(area_); memcpy(pngAlpha_, alpha, area_); } } Image::~Image() { free(rgbData_); free(pngAlpha_); } bool Image::Read(const char *filename) { bool success = ReadImage(filename, width_, height_, rgbData_, pngAlpha_); area_ = width_ * height_; return(success); } bool Image::Write(const char *filename) { bool success = WriteImage(filename, width_, height_, rgbData_, pngAlpha_, quality_); return(success); } bool Image::Crop(const int x0, const int y0, const int x1, const int y1) { if (x1 <= x0 || y1 <= y0) return(false); const int w = x1 - x0; const int h = y1 - y0; const int new_area = w * h; unsigned char *new_rgb = (unsigned char *) malloc(3 * new_area); memset(new_rgb, 0, 3 * new_area); unsigned char *new_alpha = NULL; if (pngAlpha_ != NULL) { new_alpha = (unsigned char *) malloc(new_area); memset(new_alpha, 0, new_area); } int ipos = 0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { memcpy(new_rgb + ipos, rgbData_ + 3 * ((j + y0) * width_ + (i + x0)), 3); ipos += 3; } } free(rgbData_); free(pngAlpha_); width_ = w; height_ = h; area_ = new_area; rgbData_ = new_rgb; pngAlpha_ = new_alpha; return(true); } void Image::Reduce(const int factor) { if (factor < 1) return; int scale = 1; for (int i = 0; i < factor; i++) scale *= 2; double scale2 = scale*scale; int w = width_ / scale; int h = height_ / scale; int new_area = w * h; unsigned char *new_rgb = (unsigned char *) malloc(3 * new_area); memset(new_rgb, 0, 3 * new_area); unsigned char *new_alpha = NULL; if (pngAlpha_ != NULL) { new_alpha = (unsigned char *) malloc(new_area); memset(new_alpha, 0, new_area); } int ipos = 0; for (int j = 0; j < height_; j++) { int js = j / scale; for (int i = 0; i < width_; i++) { int is = i/scale; for (int k = 0; k < 3; k++) new_rgb[3*(js * w + is) + k] += static_cast ((rgbData_[3*ipos + k] + 0.5) / scale2); if (pngAlpha_ != NULL) new_alpha[js * w + is] += static_cast (pngAlpha_[ipos]/scale2); ipos++; } } free(rgbData_); free(pngAlpha_); width_ = w; height_ = h; area_ = new_area; rgbData_ = new_rgb; pngAlpha_ = new_alpha; } void Image::Resize(const int w, const int h) { int new_area = w * h; unsigned char *new_rgb = (unsigned char *) malloc(3 * new_area); unsigned char *new_alpha = NULL; if (pngAlpha_ != NULL) new_alpha = (unsigned char *) malloc(new_area); const double scale_x = ((double) w) / width_; const double scale_y = ((double) h) / height_; int ipos = 0; for (int j = 0; j < h; j++) { const double y = j / scale_y; for (int i = 0; i < w; i++) { const double x = i / scale_x; if (new_alpha == NULL) getPixel(x, y, new_rgb + 3*ipos); else getPixel(x, y, new_rgb + 3*ipos, new_alpha + ipos); ipos++; } } free(rgbData_); free(pngAlpha_); width_ = w; height_ = h; area_ = w * h; rgbData_ = new_rgb; pngAlpha_ = new_alpha; } // Slide the whole image to the right (for positive x) or to the left // (for negative x). The original pixel 0 column will be in the pixel // x column after this routine is called. void Image::Shift(const int x) { unsigned char *new_rgb = (unsigned char *) malloc(3 * area_); unsigned char *new_alpha = NULL; if (pngAlpha_ != NULL) new_alpha = (unsigned char *) malloc(area_); int shift = x; while (shift < 0) shift += width_; while (shift >= width_) shift -= width_; int ipos = 0; for (int j = 0; j < height_; j++) { for (int i = 0; i < width_; i++) { int ii = i + shift; if (ii < 0) ii += width_; if (ii >= width_) ii -= width_; int iipos = j * width_ + ii; memcpy(new_rgb + 3*ipos, rgbData_ + 3*iipos, 3); if (pngAlpha_ != NULL) new_alpha[ipos] = pngAlpha_[iipos]; ipos++; } } free(rgbData_); free(pngAlpha_); rgbData_ = new_rgb; pngAlpha_ = new_alpha; } // Find the color of the desired point using bilinear interpolation. // Assume the array indices refer to the center of the pixel, so each // pixel has corners at (i - 0.5, j - 0.5) and (i + 0.5, j + 0.5) void Image::getPixel(double x, double y, unsigned char *pixel) { getPixel(x, y, pixel, NULL); } void Image::getPixel(double x, double y, unsigned char *pixel, unsigned char *alpha) { if (x < -0.5) x = -0.5; if (x >= width_ - 0.5) x = width_ - 0.5; if (y < -0.5) y = -0.5; if (y >= height_ - 0.5) y = height_ - 0.5; int ix0 = (int) (floor(x)); int ix1 = ix0 + 1; if (ix0 < 0) ix0 = width_ - 1; if (ix1 >= width_) ix1 = 0; int iy0 = (int) (floor(y)); int iy1 = iy0 + 1; if (iy0 < 0) iy0 = 0; if (iy1 >= height_) iy1 = height_ - 1; const double t = x - floor(x); const double u = 1 - (y - floor(y)); // Weights are from Numerical Recipes, 2nd Edition // weight[0] = (1 - t) * u; // weight[2] = (1-t) * (1-u); // weight[3] = t * (1-u); double weight[4]; weight[1] = t * u; weight[0] = u - weight[1]; weight[2] = 1 - t - u + weight[1]; weight[3] = t - weight[1]; unsigned char *pixels[4]; pixels[0] = rgbData_ + 3 * (iy0 * width_ + ix0); pixels[1] = rgbData_ + 3 * (iy0 * width_ + ix1); pixels[2] = rgbData_ + 3 * (iy1 * width_ + ix0); pixels[3] = rgbData_ + 3 * (iy1 * width_ + ix1); memset(pixel, 0, 3); for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) pixel[j] += (unsigned char) (weight[i] * pixels[i][j]); } if (alpha != NULL) { unsigned char pixels[4]; pixels[0] = pngAlpha_[iy0 * width_ + ix0]; pixels[1] = pngAlpha_[iy0 * width_ + ix1]; pixels[2] = pngAlpha_[iy0 * width_ + ix0]; pixels[3] = pngAlpha_[iy1 * width_ + ix1]; *alpha = 0; for (int i = 0; i < 4; i++) *alpha += (unsigned char) (weight[i] * pixels[i]); } } xplanet-1.3.0/src/libimage/png.c0000644000175000017500000001557511526616476013432 00000000000000/**************************************************************************** png.c - read and write png images using libpng routines. Distributed with Xplanet. Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include #define MAX_DIMENSION 21600 int read_png(const char *filename, int *width, int *height, unsigned char **rgb, unsigned char **alpha) { FILE *infile = fopen(filename, "rb"); png_structp png_ptr; png_infop info_ptr; png_bytepp row_pointers; unsigned char *ptr = NULL; png_uint_32 w, h; int bit_depth, color_type, interlace_type; int i; png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp) NULL, (png_error_ptr) NULL, (png_error_ptr) NULL); if (!png_ptr) { fclose(infile); return(0); } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp) NULL, (png_infopp) NULL); fclose(infile); return(0); } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); fclose(infile); return(0); } png_init_io(png_ptr, infile); png_read_info(png_ptr, info_ptr); png_get_IHDR(png_ptr, info_ptr, &w, &h, &bit_depth, &color_type, &interlace_type, (int *) NULL, (int *) NULL); *width = (int) w; *height = (int) h; /* Prevent against integer overflow - thanks to Niels Heinen */ if (*width > MAX_DIMENSION || *height > MAX_DIMENSION) { fprintf(stderr, "Width, height in PNG header is %d, %d\n", *width, *height); return(0); } if (color_type == PNG_COLOR_TYPE_RGB_ALPHA || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { alpha[0] = malloc(*width * *height); if (alpha[0] == NULL) { fprintf(stderr, "Can't allocate memory for alpha channel in PNG file.\n"); return(0); } } /* Change a paletted/grayscale image to RGB */ if (color_type == PNG_COLOR_TYPE_PALETTE && bit_depth <= 8) png_set_expand(png_ptr); /* Change a grayscale image to RGB */ if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png_ptr); /* If the PNG file has 16 bits per channel, strip them down to 8 */ if (bit_depth == 16) png_set_strip_16(png_ptr); /* use 1 byte per pixel */ png_set_packing(png_ptr); row_pointers = malloc(*height * sizeof(png_bytep)); if (row_pointers == NULL) { fprintf(stderr, "Can't allocate memory for PNG file.\n"); return(0); } for (i = 0; i < *height; i++) { row_pointers[i] = malloc(4 * *width); if (row_pointers == NULL) { fprintf(stderr, "Can't allocate memory for PNG line.\n"); return(0); } } png_read_image(png_ptr, row_pointers); rgb[0] = malloc(3 * *width * *height); if (rgb[0] == NULL) { fprintf(stderr, "Can't allocate memory for PNG file.\n"); return(0); } if (alpha[0] == NULL) { ptr = rgb[0]; for (i = 0; i < *height; i++) { memcpy(ptr, row_pointers[i], 3 * *width); ptr += 3 * *width; } } else { int j; ptr = rgb[0]; for (i = 0; i < *height; i++) { int ipos = 0; for (j = 0; j < *width; j++) { *ptr++ = row_pointers[i][ipos++]; *ptr++ = row_pointers[i][ipos++]; *ptr++ = row_pointers[i][ipos++]; alpha[0][i * *width + j] = row_pointers[i][ipos++]; } } } png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); for (i = 0; i < *height; i++) free(row_pointers[i]); free(row_pointers); fclose(infile); return(1); } int write_png(FILE *outfile, int width, int height, unsigned char *rgb, unsigned char *alpha) { png_structp png_ptr; png_infop info_ptr; png_bytep row_ptr; int i; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp) NULL, (png_error_ptr) NULL, (png_error_ptr) NULL); if (!png_ptr) return(0); info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, (png_infopp) NULL); return(0); } png_init_io(png_ptr, outfile); if (alpha == NULL) { png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(png_ptr, info_ptr); for (i = 0; i < height; i++) { row_ptr = rgb + 3 * i * width; png_write_rows(png_ptr, &row_ptr, 1); } } else { int irgb = 0; int irgba = 0; int area = width * height; unsigned char *rgba = malloc(4 * area); png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(png_ptr, info_ptr); for (i = 0; i < area; i++) { rgba[irgba++] = rgb[irgb++]; rgba[irgba++] = rgb[irgb++]; rgba[irgba++] = rgb[irgb++]; rgba[irgba++] = alpha[i]; } for (i = 0; i < height; i++) { row_ptr = rgba + 4 * i * width; png_write_rows(png_ptr, &row_ptr, 1); } free(rgba); } png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); return(1); } xplanet-1.3.0/src/libimage/pnm.c0000644000175000017500000001112010411344513013374 00000000000000/**************************************************************************** pnm.c - read and write pnm images using libpnm/netpbm routines. Distributed with Xplanet. Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include int read_pnm(const char *filename, int *width, int *height, char **rgb) { FILE *infile = fopen(filename, "rb"); xelval maxvalP; int formatP; xel **imagearray; int argcP = 1; char **argv; int i, j, ipos = 0; argv = malloc(sizeof(char **)); if (argv == NULL) { fprintf(stderr, "Can't allocate memory in read_pnm().\n"); return(0); } argv[0] = malloc(10); if (argv[0] == NULL) { fprintf(stderr, "Can't allocate memory in read_pnm().\n"); return(0); } strcpy(argv[0], "loadimage"); pnm_init(&argcP, argv); imagearray = pnm_readpnm(infile, width, height, &maxvalP, &formatP); rgb[0] = malloc(3 * *width * *height); if (rgb[0] == NULL) { fprintf(stderr, "Can't allocate memory for PNM file.\n"); return(0); } switch (PNM_FORMAT_TYPE(formatP)) { case PPM_TYPE: for (j = 0; j < *height; j++) for (i = 0; i < *width; i++) { rgb[0][ipos++] = (unsigned char) (PPM_GETR(imagearray[j][i]) & 0xff); rgb[0][ipos++] = (unsigned char) (PPM_GETG(imagearray[j][i]) & 0xff); rgb[0][ipos++] = (unsigned char) (PPM_GETB(imagearray[j][i]) & 0xff); } break; case PGM_TYPE: case PBM_TYPE: for (j = 0; j < *height; j++) for (i = 0; i < *width; i++) { memset(rgb[0] + ipos, (unsigned char) (PNM_GET1(imagearray[j][i]) & 0xff), 3); ipos +=3; } break; default: fprintf(stderr, "Unknown magic number for pnm file\n"); return(0); } pnm_freearray(imagearray, *height); return(1); } int write_pnm(FILE *outfile, int width, int height, unsigned char *rgb, int maxv, int format, int forceplain) { xelval maxval = maxv; xel **imagearray = pnm_allocarray(width, height); int i, j, ipos; xelval avg; switch (format) { case PBM_TYPE: for (j = 0; j < height; j++) { ipos = j * width; for (i = 0; i < width; i++) { avg = (rgb[3 * (ipos + i)] + rgb[3 * (ipos + i) + 1] + rgb[3 * (ipos + i) + 2]) / 3; PNM_ASSIGN1(imagearray[j][i], (avg > 127 ? 1 : 0)); } } break; case PGM_TYPE: for (j = 0; j < height; j++) { ipos = j * width; for (i = 0; i < width; i++) { avg = (rgb[3 * (ipos + i)] + rgb[3 * (ipos + i) + 1] + rgb[3 * (ipos + i) + 2]) / 3; PNM_ASSIGN1(imagearray[j][i], avg); } } break; case PPM_TYPE: for (j = 0; j < height; j++) { ipos = j * width; for (i = 0; i < width; i++) { PPM_ASSIGN(imagearray[j][i], (xelval) rgb[3 * (ipos + i)], (xelval) rgb[3 * (ipos + i) + 1], (xelval) rgb[3 * (ipos + i) + 2]); } } break; default: fprintf(stderr, "Unknown pnm format\n"); } pnm_writepnm(outfile, imagearray, width, height, maxval, format, forceplain); pnm_freearray(imagearray, height); return(1); } xplanet-1.3.0/src/libimage/WriteImage.cpp0000644000175000017500000000762710411360615015221 00000000000000#include #include #include #include using namespace std; #include "config.h" extern "C" { int write_bmp(const char *filename, int width, int height, unsigned char *rgb); #ifdef HAVE_LIBGIF int write_gif(const char *filename, int width, int height, unsigned char *rgb); #endif #ifdef HAVE_LIBJPEG int write_jpeg(FILE *outfile, int width, int height, unsigned char *rgb, int quality); #endif #ifdef HAVE_LIBPNG int write_png(FILE *outfile, int width, int height, unsigned char *rgb, unsigned char *alpha); #endif #ifdef HAVE_LIBPNM #include int write_pnm(FILE *outfile, int width, int height, unsigned char *rgb, int maxv, int format, int forceplain); #endif #ifdef HAVE_LIBTIFF int write_tiff(const char *filename, int width, int height, unsigned char *rgb); #endif } bool WriteImage(const char *filename, const int width, const int height, unsigned char * const rgb_data, unsigned char * const png_alpha, const int quality) { FILE *outfile; const char *extension = strrchr(filename, '.'); char *lowercase; char *ptr; int success = 0; lowercase = (char *) malloc(strlen(extension) + 1); strcpy(lowercase, extension); ptr = lowercase; while (*ptr != '\0') *ptr++ = (char) tolower(*extension++); outfile = fopen(filename, "wb"); if (outfile == NULL) return(false); if (strcmp(lowercase, ".bmp" ) == 0) { success = write_bmp(filename, width, height, rgb_data); } else if (strcmp(lowercase, ".gif" ) == 0) { #ifdef HAVE_LIBGIF success = write_gif(filename, width, height, rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with GIF support\n"); success = 0; #endif /* HAVE_LIBGIF */ } else if (( strcmp(lowercase, ".jpg" ) == 0) || (strcmp(lowercase, ".jpeg") == 0)) { #ifdef HAVE_LIBJPEG success = write_jpeg(outfile, width, height, rgb_data, quality); #else fprintf(stderr, "Sorry, this program was not compiled with JPEG support\n"); success = 0; #endif /* HAVE_LIBJPEG */ } else if (strcmp(lowercase, ".png" ) == 0) { #ifdef HAVE_LIBPNG success = write_png(outfile, width, height, rgb_data, png_alpha); #else fprintf(stderr, "Sorry, this program was not compiled with PNG support\n"); success = 0; #endif /* HAVE_LIBPNG */ } else if (( strcmp(lowercase, ".pbm") == 0) || (strcmp(lowercase, ".pgm") == 0) || (strcmp(lowercase, ".ppm") == 0)) { #ifdef HAVE_LIBPNM if (strcmp(lowercase, ".pbm") == 0) success = write_pnm(outfile, width, height, rgb_data, 1, PBM_TYPE, 0); else if (strcmp(lowercase, ".pgm") == 0) success = write_pnm(outfile, width, height, rgb_data, 255, PGM_TYPE, 0); else if (strcmp(lowercase, ".ppm") == 0) success = write_pnm(outfile, width, height, rgb_data, 255, PPM_TYPE, 0); #else fprintf(stderr, "Sorry, this program was not compiled with PNM support\n"); success = 0; #endif /* HAVE_LIBPNM */ } else if ((strcmp(lowercase, ".tif" ) == 0) || (strcmp(lowercase, ".tiff" ) == 0)) { #ifdef HAVE_LIBTIFF success = write_tiff(filename, width, height, rgb_data); #else fprintf(stderr, "Sorry, this program was not compiled with TIFF support\n"); success = 0; #endif /* HAVE_LIBTIFF */ } else { fprintf(stderr, "Unknown image format\n"); success = 0; } free(lowercase); fclose(outfile); return(success == 1); } xplanet-1.3.0/src/libimage/bmp.c0000644000175000017500000001046411173337666013413 00000000000000/**************************************************************************** bmp.c - read and write bmp images. Distributed with Xplanet. Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include struct BMPHeader { char bfType[2]; /* "BM" */ int bfSize; /* Size of file in bytes */ int bfReserved; /* set to 0 */ int bfOffBits; /* Byte offset to actual bitmap data (= 54) */ int biSize; /* Size of BITMAPINFOHEADER, in bytes (= 40) */ int biWidth; /* Width of image, in pixels */ int biHeight; /* Height of images, in pixels */ short biPlanes; /* Number of planes in target device (set to 1) */ short biBitCount; /* Bits per pixel (24 in this case) */ int biCompression; /* Type of compression (0 if no compression) */ int biSizeImage; /* Image size, in bytes (0 if no compression) */ int biXPelsPerMeter; /* Resolution in pixels/meter of display device */ int biYPelsPerMeter; /* Resolution in pixels/meter of display device */ int biClrUsed; /* Number of colors in the color table (if 0, use maximum allowed by biBitCount) */ int biClrImportant; /* Number of important colors. If 0, all colors are important */ }; int read_bmp(const char *filename, int *width, int *height, unsigned char **rgb) { fprintf(stderr, "Sorry, reading of .bmp files isn't supported yet.\n"); return(0); } int write_bmp(const char *filename, int width, int height, char *rgb) { int i, j, ipos; int bytesPerLine; unsigned char *line; FILE *file; struct BMPHeader bmph; /* The length of each line must be a multiple of 4 bytes */ bytesPerLine = (3 * (width + 1) / 4) * 4; /* copy only "BM" without a terminating null byte */ strncpy(bmph.bfType, "BM", 2); bmph.bfOffBits = 54; bmph.bfSize = bmph.bfOffBits + bytesPerLine * height; bmph.bfReserved = 0; bmph.biSize = 40; bmph.biWidth = width; bmph.biHeight = height; bmph.biPlanes = 1; bmph.biBitCount = 24; bmph.biCompression = 0; bmph.biSizeImage = bytesPerLine * height; bmph.biXPelsPerMeter = 0; bmph.biYPelsPerMeter = 0; bmph.biClrUsed = 0; bmph.biClrImportant = 0; file = fopen (filename, "wb"); if (file == NULL) return(0); fwrite(&bmph.bfType, 2, 1, file); fwrite(&bmph.bfSize, 4, 1, file); fwrite(&bmph.bfReserved, 4, 1, file); fwrite(&bmph.bfOffBits, 4, 1, file); fwrite(&bmph.biSize, 4, 1, file); fwrite(&bmph.biWidth, 4, 1, file); fwrite(&bmph.biHeight, 4, 1, file); fwrite(&bmph.biPlanes, 2, 1, file); fwrite(&bmph.biBitCount, 2, 1, file); fwrite(&bmph.biCompression, 4, 1, file); fwrite(&bmph.biSizeImage, 4, 1, file); fwrite(&bmph.biXPelsPerMeter, 4, 1, file); fwrite(&bmph.biYPelsPerMeter, 4, 1, file); fwrite(&bmph.biClrUsed, 4, 1, file); fwrite(&bmph.biClrImportant, 4, 1, file); line = malloc(bytesPerLine); if (line == NULL) { fprintf(stderr, "Can't allocate memory for BMP file.\n"); return(0); } for (i = height - 1; i >= 0; i--) { for (j = 0; j < width; j++) { ipos = 3 * (width * i + j); line[3*j] = rgb[ipos + 2]; line[3*j+1] = rgb[ipos + 1]; line[3*j+2] = rgb[ipos]; } fwrite(line, bytesPerLine, 1, file); } free(line); fclose(file); return(1); } xplanet-1.3.0/src/libimage/tiff.c0000644000175000017500000000634710411344513013551 00000000000000/**************************************************************************** tiff.c - read and write tiff images using libtiff routines. Distributed with Xplanet. Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include int read_tiff(const char *filename, int *width, int *height, unsigned char **rgb) { unsigned char *ptr = NULL; int i, j, istart; TIFF* tif = TIFFOpen(filename, "r"); uint32 w, h; uint32* raster; TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); *width = (int) w; *height = (int) h; raster = _TIFFmalloc(w * h * sizeof(uint32)); if (raster != NULL) { rgb[0] = (unsigned char *) realloc(rgb[0], 3 * *width * *height); if (rgb[0] == NULL) { fprintf(stderr, "Can't allocate memory for TIFF file.\n"); return(0); } ptr = rgb[0]; if (TIFFReadRGBAImage(tif, w, h, raster, 0)) { for (j = h - 1; j >= 0; j--) { istart = j * w; for (i = 0; i < w; i++) { *ptr++ = (unsigned char) TIFFGetR(raster[istart + i]); *ptr++ = (unsigned char) TIFFGetG(raster[istart + i]); *ptr++ = (unsigned char) TIFFGetB(raster[istart + i]); } } } else { _TIFFfree(raster); return(0); } _TIFFfree(raster); } else return(0); TIFFClose(tif); return(1); } int write_tiff(const char *filename, int width, int height, unsigned char *rgb) { unsigned char *raster; int j; TIFF* tif = TIFFOpen(filename, "w"); if (tif == NULL) { fprintf(stderr, "Can't create TIFF file\n"); return(0); } TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (uint32) width); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (uint32) height); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, -1)); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3); for (j = 0; j < height; j++) { raster = rgb + (j * width * 3); TIFFWriteScanline(tif, raster, j, 0); } TIFFClose(tif); return(1); } xplanet-1.3.0/src/libimage/Makefile.in0000644000175000017500000003767011731356514014537 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libimage DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libimage_a_AR = $(AR) $(ARFLAGS) libimage_a_LIBADD = am__libimage_a_SOURCES_DIST = Image.cpp Image.h ReadImage.cpp \ WriteImage.cpp bmp.c gif.c jpeg.c png.c pnm.c tiff.c am__objects_1 = ReadImage.$(OBJEXT) am__objects_2 = WriteImage.$(OBJEXT) am__objects_3 = bmp.$(OBJEXT) @HAVE_LIBGIF_TRUE@am__objects_4 = gif.$(OBJEXT) @HAVE_LIBJPEG_TRUE@am__objects_5 = jpeg.$(OBJEXT) @HAVE_LIBPNG_TRUE@am__objects_6 = png.$(OBJEXT) @HAVE_LIBPNM_TRUE@am__objects_7 = pnm.$(OBJEXT) @HAVE_LIBTIFF_TRUE@am__objects_8 = tiff.$(OBJEXT) am_libimage_a_OBJECTS = Image.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) libimage_a_OBJECTS = $(am_libimage_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libimage_a_SOURCES) $(EXTRA_libimage_a_SOURCES) DIST_SOURCES = $(am__libimage_a_SOURCES_DIST) \ $(EXTRA_libimage_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libimage.a read = ReadImage.cpp write = WriteImage.cpp bmp = bmp.c @HAVE_LIBGIF_TRUE@gif = gif.c @HAVE_LIBJPEG_TRUE@jpeg = jpeg.c @HAVE_LIBPNG_TRUE@png = png.c @HAVE_LIBPNM_TRUE@pnm = pnm.c @HAVE_LIBTIFF_TRUE@tiff = tiff.c EXTRA_libimage_a_SOURCES = bmp.c gif.c jpeg.c png.c pnm.c tiff.c ReadImage.cpp WriteImage.cpp AM_CPPFLAGS = -I@top_srcdir@/src @USE_AR_FALSE@libdisplay_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libdisplay_a_AR = $(AR) cru @USE_AR_FALSE@libtimer_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libtimer_a_AR = $(AR) cru libimage_a_SOURCES = Image.cpp Image.h $(read) $(write) $(bmp) $(gif) $(jpeg) $(png) $(pnm) $(tiff) all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libimage/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libimage/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libimage.a: $(libimage_a_OBJECTS) $(libimage_a_DEPENDENCIES) -rm -f libimage.a $(libimage_a_AR) libimage.a $(libimage_a_OBJECTS) $(libimage_a_LIBADD) $(RANLIB) libimage.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReadImage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WriteImage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/png.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libimage/Image.h0000644000175000017500000000174610411420230013635 00000000000000#ifndef IMAGE_H #define IMAGE_H class Image { public: Image(); Image(const int w, const int h, const unsigned char *rgb, const unsigned char *alpha); ~Image(); const unsigned char * getPNGAlpha() const { return(pngAlpha_); }; const unsigned char * getRGBData() const { return(rgbData_); }; void getPixel(double px, double py, unsigned char *pixel); void getPixel(double px, double py, unsigned char *pixel, unsigned char *alpha); int Width() const { return(width_); }; int Height() const { return(height_); }; void Quality(const int q) { quality_ = q; }; bool Read(const char *filename); bool Write(const char *filename); bool Crop(const int x0, const int y0, const int x1, const int y1); void Reduce(const int factor); void Resize(const int w, const int h); void Shift(const int x); private: int width_, height_, area_; unsigned char *rgbData_; unsigned char *pngAlpha_; int quality_; }; #endif xplanet-1.3.0/src/libimage/jpeg.c0000644000175000017500000000753711435614155013561 00000000000000/**************************************************************************** jpeg.c - read and write jpeg images using libjpeg routines Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include #include #define MAX_DIMENSION 21600 int read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; unsigned char *ptr = NULL; unsigned int i, ipos; FILE *infile = fopen(filename, "rb"); cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, infile); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); *width = cinfo.output_width; *height = cinfo.output_height; /* Prevent against integer overflow - thanks to Niels Heinen */ if (cinfo.output_width > MAX_DIMENSION || cinfo.output_height > MAX_DIMENSION) { fprintf(stderr, "Width, height in JPEG header is %d, %d\n", cinfo.output_width, cinfo.output_height); return(0); } rgb[0] = malloc(3 * cinfo.output_width * cinfo.output_height); if (rgb[0] == NULL) { fprintf(stderr, "Can't allocate memory for JPEG file.\n"); fclose(infile); return(0); } if (cinfo.output_components == 3) { ptr = rgb[0]; while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, &ptr, 1); ptr += 3 * cinfo.output_width; } } else if (cinfo.output_components == 1) { ptr = malloc(cinfo.output_width); if (ptr == NULL) { fprintf(stderr, "Can't allocate memory for JPEG file.\n"); fclose(infile); return(0); } ipos = 0; while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, &ptr, 1); for (i = 0; i < cinfo.output_width; i++) { memset(rgb[0] + ipos, ptr[i], 3); ipos += 3; } } free(ptr); } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(infile); return(1); } int write_jpeg(FILE *outfile, int width, int height, unsigned char *rgb, int quality) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPROW scanline[1]; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = width; cinfo.image_height = height; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE); jpeg_start_compress(&cinfo, TRUE); while (cinfo.next_scanline < (unsigned int) height) { scanline[0] = rgb + 3 * width * cinfo.next_scanline; jpeg_write_scanlines(&cinfo, scanline, 1); } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); return(1); } xplanet-1.3.0/src/libimage/gif.c0000644000175000017500000001466510411344513013370 00000000000000/**************************************************************************** gif.c - read and write gif images using libgif/libungif. Distributed with Xplanet. Copyright (C) 2002 Hari Nair This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ****************************************************************************/ #include #include #include /* A lot of this is based on the gif2rgb and rgb2gif codes in the libungif distribution. */ int read_gif(const char *filename, int *width, int *height, unsigned char **rgb) { int interlace_offset[] = { 0, 4, 2, 1 }; int interlace_jump[] = { 8, 8, 4, 2 }; GifColorType *colormap; GifFileType *infile; GifRecordType record_type; GifRowType *buffer = NULL; int i, j; int color_index; unsigned char *ptr = NULL; infile = DGifOpenFileName(filename); if (infile == NULL) { PrintGifError(); return(0); } do { if (DGifGetRecordType(infile, &record_type) == GIF_ERROR) { PrintGifError(); return(0); } switch (record_type) { case IMAGE_DESC_RECORD_TYPE: if (DGifGetImageDesc(infile) == GIF_ERROR) { PrintGifError(); return(0); } *width = infile->Image.Width; *height = infile->Image.Height; buffer = malloc(*height * sizeof(GifRowType *)); if (buffer == NULL) { fprintf(stderr, "Can't allocate memory for GIF file.\n"); return(0); } for (i = 0; i < *height; i++) { buffer[i] = malloc(*width * sizeof(GifPixelType)); if (buffer[i] == NULL) { fprintf(stderr, "Can't allocate memory for GIF line.\n"); return(0); } } if (infile->Image.Interlace) { for (i = 0; i < 4; i++) for (j = interlace_offset[i]; j < *height; j += interlace_jump[i]) DGifGetLine(infile, buffer[j], *width); } else { for (i = 0; i < *height; i++) DGifGetLine(infile, buffer[i], *width); } break; case EXTENSION_RECORD_TYPE: { /* Skip extension blocks */ int ext_code; GifByteType *ext; if (DGifGetExtension(infile, &ext_code, &ext) == GIF_ERROR) { PrintGifError(); return(0); } while (ext != NULL) { if (DGifGetExtensionNext(infile, &ext) == GIF_ERROR) { PrintGifError(); return(0); } } } break; case TERMINATE_RECORD_TYPE: break; default: fprintf(stderr, "unknown record type in GIF file\n"); break; } } while (record_type != TERMINATE_RECORD_TYPE); colormap = (infile->Image.ColorMap ? infile->Image.ColorMap->Colors : infile->SColorMap->Colors); rgb[0] = malloc(3 * *width * *height); if (rgb[0] == NULL) { fprintf(stderr, "Can't allocate memory for GIF file.\n"); return(0); } ptr = rgb[0]; for (j = 0; j < *height; j++) { for (i = 0; i < *width; i++) { color_index = (int) buffer[j][i]; *ptr++ = (unsigned char) colormap[color_index].Red; *ptr++ = (unsigned char) colormap[color_index].Green; *ptr++ = (unsigned char) colormap[color_index].Blue; } free(buffer[j]); } free(buffer); DGifCloseFile(infile); return(1); } int write_gif(const char *filename, int width, int height, char *rgb) { int i; int colormap_size = 256; GifByteType *red, *green, *blue, *buffer, *ptr; GifFileType *outfile; ColorMapObject *colormap; red = malloc(width * height * sizeof(GifByteType)); green = malloc(width * height * sizeof(GifByteType)); blue = malloc(width * height * sizeof(GifByteType)); buffer = malloc(width * height * sizeof(GifByteType)); if (red == NULL || green == NULL || blue == NULL || buffer == NULL) { fprintf(stderr, "Can't allocate memory for GIF file.\n"); return(0); } colormap = MakeMapObject(colormap_size, NULL); for (i = 0; i < width * height; i++) { red[i] = (GifByteType) rgb[3*i ]; green[i] = (GifByteType) rgb[3*i+1]; blue[i] = (GifByteType) rgb[3*i+2]; } if (QuantizeBuffer(width, height, &colormap_size, red, green, blue, buffer, colormap->Colors) == GIF_ERROR) { PrintGifError(); return(0); } free(red); free(green); free(blue); outfile = EGifOpenFileName((char *) filename, FALSE); if (outfile == NULL) { PrintGifError(); return(0); } if (EGifPutScreenDesc(outfile, width, height, colormap_size, 0, colormap) == GIF_ERROR) { PrintGifError(); return(0); } if (EGifPutImageDesc(outfile, 0, 0, width, height, FALSE, NULL) == GIF_ERROR) { PrintGifError(); return(0); } ptr = buffer; for (i = 0; i < height; i++) { if (EGifPutLine(outfile, ptr, width) == GIF_ERROR) { PrintGifError(); return(0); } ptr += width; } EGifSpew(outfile); if (EGifCloseFile(outfile) == GIF_ERROR) PrintGifError(); free(buffer); return(1); } xplanet-1.3.0/src/Ring.h0000644000175000017500000000410411164146056011751 00000000000000#ifndef RING_H #define RING_H #include class Planet; class Ring { public: Ring(const double inner_radius, const double outer_radius, const double *ring_brightness, const int num_bright, const double *ring_transparency, const int num_trans, const double sunlon, const double sunlat, const double shade, std::map &planetsFromSunMap, Planet *p); ~Ring(); // get the radius of the ring shadowing the specified location on // the planet double getShadowRadius(double lat, double lon); // get the brightness on the lit side double getBrightness(const double lon, const double r); // get the brightness on the dark side double getBrightness(const double lon, const double r, const double t); double getTransparency(const double r); // set the size of each pixel, used to window average the ring // brightness/transparency void setDistPerPixel(const double d); double getOuterRadius() const { return(r_out); }; private: double r_out; // outer ring radius, units of planetary radii double dr_b; // resolution of brightness grid double dr_t; // resolution of transparency grid int num_t; double *radius_t; double *transparency; double *brightness_dark; // brightness of the dark side int window_t; // each pixel contains this many transparency points int num_b; double *radius_b; double *brightness; int window_b; // each pixel contains this many brightness points Planet *planet_; std::map planetsFromSunMap_; double shade_; double sunLat_, sunLon_; double sunX_, sunY_, sunZ_; // get a window average of array double getValue(const double *array, const int size, const int window, const double dr, const double r); // get a window average of array, accounts for shadowing by the planet double getValue(const double *array, const int size, const int window, const double dr, const double r, const double lon); }; #endif xplanet-1.3.0/src/View.cpp0000644000175000017500000000731610411353363012322 00000000000000#include using namespace std; #include "xpUtil.h" #include "View.h" /* Creation of the rotation matrix is based on Section 5.7 of Computer Graphics: Principles and Practice, by Foley et al. */ View::View(const double PRPx, const double PRPy, const double PRPz, const double VRPx, const double VRPy, const double VRPz, const double VUPx, const double VUPy, const double VUPz, const double dpp, const double rotate_angle) : distPerPixel_(dpp) { // P1 = Observer location // P2 = Target planet // P3 = Up direction double P1[3] = { PRPx, PRPy, PRPz }; double P2[3] = { VRPx, VRPy, VRPz }; double P3[3] = { VUPx, VUPy, VUPz }; double P2P1[3]; for (int i = 0; i < 3; i++) P2P1[i] = (P2[i] - P1[i]); double P3P1[3]; for (int i = 0; i < 3; i++) P3P1[i] = (P3[i] - P1[i]); // define the unit vector along P1P2 double length = sqrt(dot(P2P1, P2P1)); double Rz[3]; for (int i = 0; i < 3; i++) Rz[i] = P2P1[i]/length; distToPlane_ = length; // define the unit vector perpendicular to the plane P1P2P3. This // is the cross product of P1P2 and P1P3. double Rx[3]; cross(P3P1, P2P1, Rx); length = sqrt(dot(Rx, Rx)); for (int i = 0; i < 3; i++) Rx[i] /= length; // define the unit vector perpendicular to the other two double Ry[3]; cross(Rz, Rx, Ry); length = sqrt(dot(Ry, Ry)); for (int i = 0; i < 3; i++) Ry[i] /= length; const double cos_rot = cos(rotate_angle); const double sin_rot = sin(rotate_angle); // set the rotation matrix for (int i = 0; i < 3; i++) { rotate[0][i] = Rx[i] * cos_rot + Ry[i] * sin_rot; rotate[1][i] = -Rx[i] * sin_rot + Ry[i] * cos_rot; rotate[2][i] = Rz[i]; } // set the translation matrix translate[0] = -PRPx; translate[1] = -PRPy; translate[2] = -PRPz; invertMatrix(rotate, inv_rotate); } View::~View() { } // Rotate the point in the View coordinate system to XYZ void View::RotateToXYZ(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const { double P[3] = { X, Y, Z }; newX = dot(inv_rotate[0], P) - translate[0]; newY = dot(inv_rotate[1], P) - translate[1]; newZ = dot(inv_rotate[2], P) - translate[2]; } // Rotate the point in heliocentric XYZ to the viewing coordinate system. void View::RotateToViewCoordinates(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const { double P[3] = { X, Y, Z }; for (int i = 0; i < 3; i++) P[i] += translate[i]; newX = dot(rotate[0], P); newY = dot(rotate[1], P); newZ = dot(rotate[2], P); } // Given heliocentric equatorial (X, Y, Z), return (X, Y, Z) such that // the X and Y coordinates are pixel offsets from the projection // center. X increases to the right and Y increases downward. The Z // coordinate tells us the distance from the viewing plane, which is // useful when deciding the order to draw objects; higher Z values get // drawn first and are covered up by lower Z values. void View::XYZToPixel(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const { RotateToViewCoordinates(X, Y, Z, newX, newY, newZ); newX *= -(distToPlane_/(newZ*distPerPixel_)); newY *= -(distToPlane_/(newZ*distPerPixel_)); } // Given pixel position (X, Y), return (X, Y, Z) in view coordinates void View::PixelToViewCoordinates(const double X, const double Y, double &newX, double &newY, double &newZ) const { newX = X * distPerPixel_; newY = Y * distPerPixel_; newZ = distToPlane_; } xplanet-1.3.0/src/Separation.h0000644000175000017500000000122110501304153013140 00000000000000#ifndef SEPARATION_H #define SEPARATION_H class View; class Separation { public: Separation(const double oX, const double oY, const double oZ, const double tX, const double tY, const double tZ, const double sX, const double sY, const double sZ); ~Separation(); void getOrigin(double &oX, double &oY, double &oZ); void setSeparation(double sep); private: double tX_, tY_, tZ_; double sX_, sY_, sZ_; double oX_, oY_, oZ_; double oR_; // target 1 - observer distance double sR_; // target 1 - target 2 distance View *view_; double calcSeparation(const double angle); }; #endif xplanet-1.3.0/src/parseColor.h0000644000175000017500000000033710411420230013146 00000000000000#ifndef PARSECOLOR_H #define PARSECOLOR_H #include extern void parseColor(std::string color, unsigned char RGB[3]); extern void parseColor(std::string color, unsigned char RGB[3], std::string &failed); #endif xplanet-1.3.0/src/xplanet.cpp0000644000175000017500000002037111716027571013067 00000000000000#include #include #include #include #include #include #include #include using namespace std; #include #include #include "config.h" #include "buildPlanetMap.h" #include "findBodyXYZ.h" #include "keywords.h" #include "Options.h" #include "PlanetProperties.h" #include "readOriginFile.h" #include "setPositions.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libdisplay/libdisplay.h" #include "libdisplay/libtimer.h" #include "libephemeris/ephemerisWrapper.h" #include "libplanet/Planet.h" #include "libmultiple/RayleighScattering.h" extern void drawMultipleBodies(DisplayBase *display, Planet *target, const double upX, const double upY, const double upZ, map &planetsFromSunMap, PlanetProperties *planetProperties[]); extern void drawProjection(DisplayBase *display, Planet *target, const double upX, const double upY, const double upZ, map &planetsFromSunMap, PlanetProperties *planetProperties); extern void readConfigFile(string configFile, PlanetProperties *planetProperties[]); extern void setPositions(const vector &originVector, const vector::iterator &iterOriginVector, Planet *&target, map &planetMap, PlanetProperties *planetProperties[]); int main(int argc, char **argv) { if (setlocale(LC_ALL, "") == NULL) { ostringstream errMsg; errMsg << "Warning: setlocale(LC_ALL, \"\") failed! " << "Check your LANG environment variable " << "(currently "; char *lang = getenv("LANG"); if (lang == NULL) { errMsg << "NULL"; } else { errMsg << "\"" << lang << "\""; } errMsg << "). Setting to \"C\".\n"; setlocale(LC_ALL, "C"); cerr << errMsg.str(); } Options *options = Options::getInstance(); options->parseArgs(argc, argv); if (options->Fork()) { pid_t pid = fork(); switch (pid) { case 0: // This is the child process close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); setsid(); break; case -1: xpExit("fork() failed!\n", __FILE__, __LINE__); break; default: // This is the parent process if (options->Verbosity() > 1) { ostringstream msg; msg << "Forked child process, PID is " << pid << "\n"; xpMsg(msg.str(), __FILE__, __LINE__); } return(EXIT_SUCCESS); } } if (options->RayleighFile().length() > 0) { RayleighScattering rayleigh(options->RayleighFile()); rayleigh.createTables(); return(EXIT_SUCCESS); } setUpEphemeris(); PlanetProperties *planetProperties[RANDOM_BODY]; for (int i = 0; i < RANDOM_BODY; i++) planetProperties[i] = new PlanetProperties((body) i); // Load the drawing info for each planet readConfigFile(options->ConfigFile(), planetProperties); #ifdef HAVE_CSPICE // Load any SPICE kernels processSpiceKernels(true); #endif // If an origin file has been specified, read it const bool origin_file = !options->OriginFile().empty(); vector originVector; if (origin_file) { readOriginFile(options->OriginFile(), originVector); if (!options->InterpolateOriginFile()) options->NumTimes(originVector.size()); } vector::iterator iterOriginVector = originVector.begin(); // Initialize the timer Timer *timer = getTimer(options->getWait(), options->Hibernate(), options->IdleWait()); int times_run = 0; while (1) { // Set the time for the next update timer->Update(); // Run any commands specified with -prev_command if (!options->PrevCommand().empty()) { if (system(options->PrevCommand().c_str()) != 0) { ostringstream errStr; errStr << "Can't execute " << options->PrevCommand() << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } // Load artificial satellite orbital elements if (!planetProperties[EARTH]->SatelliteFiles().empty()) loadSatelliteVector(planetProperties[EARTH]); // delete the markerbounds file, since we'll create a new one string markerBounds(options->MarkerBounds()); if (!markerBounds.empty()) unlinkFile(markerBounds.c_str()); // Set the time to the current time, if desired if (options->UseCurrentTime()) { struct timeval time; gettimeofday(&time, NULL); time_t t = time.tv_sec; int year = gmtime(static_cast (&t))->tm_year + 1900; int month = gmtime(static_cast (&t))->tm_mon + 1; int day = gmtime(static_cast (&t))->tm_mday; int hour = gmtime(static_cast (&t))->tm_hour; int min = gmtime(static_cast (&t))->tm_min; int sec = gmtime(static_cast (&t))->tm_sec; const double julianDay = toJulian(year, month, day, hour, min, sec); options->setTime(julianDay); } // Calculate the positions of the planets & moons. The map // container sorts on the key, so the bodies will be ordered // by heliocentric distance. This makes calculating shadows // easier. map planetsFromSunMap; buildPlanetMap(options->JulianDay(), planetsFromSunMap); // set the observer and target XYZ positions Planet *target; setPositions(originVector, iterOriginVector, target, planetsFromSunMap, planetProperties); // Set the "up" vector. This points to the top of the screen. double upX, upY, upZ; setUpXYZ(target, planetsFromSunMap, upX, upY, upZ); // Initialize display device DisplayBase *display = getDisplay(times_run); if (options->ProjectionMode() == MULTIPLE) { drawMultipleBodies(display, target, upX, upY, upZ, planetsFromSunMap, planetProperties); } else { drawProjection(display, target, upX, upY, upZ, planetsFromSunMap, planetProperties[target->Index()]); } display->renderImage(planetProperties); delete display; destroyPlanetMap(); times_run++; if (!options->PostCommand().empty()) { if (system(options->PostCommand().c_str()) != 0) { ostringstream errStr; errStr << "Can't execute " << options->PostCommand() << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } if (options->NumTimes() > 0 && times_run >= options->NumTimes()) break; if (origin_file && !options->InterpolateOriginFile()) { // If we've run through the origin file, break out of the // while(1) loop. iterOriginVector++; if (iterOriginVector == originVector.end()) break; } if (!options->UseCurrentTime()) { // Set the time to the next update options->incrementTime(options->getTimeWarp() * options->getWait()); } // Sleep until the next update. If Sleep() returns false, // then quit. if (!timer->Sleep()) break; } #ifdef HAVE_CSPICE // unload any SPICE kernels processSpiceKernels(false); #endif delete timer; for (int i = 0; i < RANDOM_BODY; i++) delete planetProperties[i]; cleanUpEphemeris(); return(EXIT_SUCCESS); } xplanet-1.3.0/src/printVersion.cpp0000644000175000017500000000310011724306745014107 00000000000000#include using namespace std; #include "config.h" #include "xpUtil.h" #ifdef HAVE_LIBFREETYPE #include #include FT_FREETYPE_H #include FT_GLYPH_H #endif #ifdef HAVE_CSPICE #include #endif void printVersion() { cout << "Xplanet " << VERSION << endl; cout << "Copyright (C) 2012 " << "Hari Nair " << endl; cout << "The latest version can be found at " << "http://xplanet.sourceforge.net\n"; cout << "Compiled with support for:\n"; #ifdef HAVE_AQUA cout << "\tMac OS X\n"; #endif #ifdef HAVE_CYGWIN cout << "\tCygwin\n"; #endif #ifdef HAVE_LIBX11 cout << "\tX11"; # ifdef HAVE_XSS cout << " (with screensaver extensions)"; # endif cout << endl; #endif #ifdef HAVE_LIBGIF cout << "\tGIF\n"; #endif #ifdef HAVE_LIBJPEG cout << "\tJPEG\n"; #endif #ifdef HAVE_LIBPNG cout << "\tPNG\n"; #endif #ifdef HAVE_LIBPNM cout << "\tPBM\n"; #endif #ifdef HAVE_LIBTIFF cout << "\tTIFF\n"; #endif #ifdef HAVE_LIBFREETYPE FT_Library library; const int error = FT_Init_FreeType(&library); if (error) xpExit("Can't initialize freetype library\n", __FILE__, __LINE__); FT_Int amajor, aminor, apatch; FT_Library_Version(library, &amajor, &aminor, &apatch); cout << "\tFreeType (version " << amajor << "." << aminor << "." << apatch << ")\n"; FT_Done_FreeType(library); #endif #ifdef HAVE_LIBPANGOFT2 cout << "\tPango\n"; #endif #ifdef HAVE_CSPICE cout << "\t" << tkvrsn_c( "TOOLKIT" ) << endl; #endif } xplanet-1.3.0/src/Map.h0000644000175000017500000000552311453174475011604 00000000000000#ifndef MAP_H #define MAP_H #include class Planet; class PlanetProperties; class Ring; class Map { public: Map(const int w, const int h); // Use this constructor if there are no image maps Map(const int w, const int h, const double sunLat, const double sunLon, Planet *t, PlanetProperties *tp, Ring *r, std::map &planetsFromSunMap); Map(const int w, const int h, const double sunLat, const double sunLon, const double obsLat, const double obsLon, const unsigned char *day, const unsigned char *night, const unsigned char *bump, const unsigned char *specular, const unsigned char *clouds, Planet *t, PlanetProperties *tp, Ring *r, std::map &planetsFromSunMap); ~Map(); void Reduce(const int factor); void GetPixel(const double lat, double lon, unsigned char pixel[3]) const; double Width() const { return(width_); }; double Height() const { return(height_); }; double StartLat() const { return(startLat_); }; double StartLon() const { return(startLon_); }; double MapHeight() const { return(mapHeight_); }; double MapWidth() const { return(mapWidth_); }; bool Write(const char *filename) const; private: int width_, height_, area_; bool mapbounds_; unsigned char color_[3]; unsigned char *mapData_; unsigned char *dayData_; unsigned char *nightData_; double *latArray_; double *lonArray_; double *cosLatArray_; double *cosLonArray_; double *sinLatArray_; double *sinLonArray_; double delLon_, delLat_; double mapHeight_, mapWidth_; double startLon_, startLat_; Planet *target_; PlanetProperties *targetProperties_; Ring *ring_; const double sunLat_; const double sunLon_; void SetUpMap(); void AddBumpMap(const unsigned char *bump); void AddSpecularReflection(const unsigned char *specular, const double obsLat, const double obsLon); void OverlayClouds(const unsigned char *clouds); void AddShadows(std::map &planetsFromSunMap); void AddShadow(Planet *p, const double sun_size); double Overlap(const double elong, const double sun_radius, const double p_radius); double OverlapEllipse(const double elong, const double sunRadius, const double planetRadius, const double X, const double Y, const double Z, const double sunX, const double sunY, const double sunZ, const double ratio, Planet *planet); void CreateMap(); void CopyBlock(unsigned char *dest, unsigned char *src, const int x1, const int y1, int x2, int y2); }; #endif xplanet-1.3.0/src/libannotate/0000755000175000017500000000000011731372544013265 500000000000000xplanet-1.3.0/src/libannotate/Makefile.am0000644000175000017500000000122311430534510015224 00000000000000noinst_LIBRARIES = libannotate.a AM_CPPFLAGS = -I@top_srcdir@/src @FREETYPE_CFLAGS@ if USE_AR libannotate_a_AR = $(AR) cru else libannotate_a_AR = $(CXX) @xplanet_ARFLAGS@ endif if HAVE_CSPICE spiceFiles = addSpiceObjects.cpp endif EXTRA_libannotate_a_SOURCES = addSpiceObjects.cpp libannotate_a_SOURCES = \ Annotation.h \ Annotation.cpp \ addArcs.cpp \ addMarkers.cpp \ addSatellites.cpp \ arrangeMarkers.cpp \ drawArc.h \ drawArc.cpp \ drawCircle.h \ drawCircle.cpp \ Icon.h \ Icon.cpp \ LineSegment.h \ LineSegment.cpp \ Symbol.h \ Symbol.cpp \ Text.h \ Text.cpp \ libannotate.h \ $(spiceFiles) xplanet-1.3.0/src/libannotate/drawArc.cpp0000644000175000017500000000524210423221014015255 00000000000000#include #include using namespace std; #include "sphericalToPixel.h" #include "xpUtil.h" #include "drawArc.h" #include "libannotate/libannotate.h" void drawArc(const double lat1, const double lon1, const double rad1, const double lat2, const double lon2, const double rad2, const unsigned char color[3], const int thickness, const double spacing, const double magnify, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap) { double tc, dist; calcGreatArc(lat1, lon1, lat2, lon2, tc, dist); const double sin_lat1 = sin(lat1); const double cos_lat1 = cos(lat1); const double sin_tc = sin(tc); const double cos_tc = cos(tc); double prevX = 0, prevY = 0, prevZ = 0; double prevLength2 = 0; bool drawPrev; bool firstTime = true; for (double d = 0; d < dist; d += spacing) { const double lat = asin(sin_lat1 * cos(d) + cos_lat1 * sin(d) * cos_tc); const double dlon = atan2(sin_tc * sin(d) * cos_lat1, cos(d) - sin_lat1 * sin(lat)); const double lon = fmod(lon1 - dlon + M_PI, TWO_PI) - M_PI; const double rad = rad1 + (rad2 - rad1) * d/dist; double X, Y, Z; const bool drawThis = sphericalToPixel(lat, lon, rad * magnify, X, Y, Z, planet, view, projection); if (!firstTime) { double X1, Y1, Z1; double X2, Y2, Z2; if (prevZ > Z) { X1 = X; Y1 = Y; Z1 = Z; X2 = prevX; Y2 = prevY; Z2 = prevZ; } else { X1 = prevX; Y1 = prevY; Z1 = prevZ; X2 = X; Y2 = Y; Z2 = Z; } if (drawThis && drawPrev) { const double length2 = ((X2-X1) * (X2-X1) + (Y2-Y1) * (Y2-Y1)); if (length2 < 10*prevLength2) { LineSegment *ls = new LineSegment(color, thickness, X2, Y2, X1, Y1); annotationMap.insert(pair(Z, ls)); } prevLength2 = length2; } } prevX = X; prevY = Y; prevZ = Z; drawPrev = drawThis; firstTime = false; } } xplanet-1.3.0/src/libannotate/Symbol.h0000644000175000017500000000071410411344513014612 00000000000000#ifndef SYMBOL_H #define SYMBOL_H #include "Annotation.h" class Symbol : public Annotation { public: Symbol(const unsigned char color[3], const int x, const int y, const int r); virtual ~Symbol(); virtual void Shift(const int x) { x_ += x; }; virtual void Draw(DisplayBase *display); private: int x_; const int y_, r_; void DrawCircle(DisplayBase *display, const int r, const unsigned char color[3]); }; #endif xplanet-1.3.0/src/libannotate/Symbol.cpp0000644000175000017500000000260010510000610015124 00000000000000#include using namespace std; #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 /* pi/2 */ #endif #include "Symbol.h" #include "libdisplay/libdisplay.h" Symbol::Symbol(const unsigned char color[3], const int x, const int y, const int r) : Annotation(color), x_(x), y_(y), r_(r) { width_ = 2*r; height_ = 2*r; } Symbol::~Symbol() { } void Symbol::DrawCircle(DisplayBase *display, const int r, const unsigned char color[3]) { if (r <= 0) return; int xx, yy; double r2 = r * r; double dd = 1 / (M_PI_2 * r); for (double d = 0; d < M_PI_2; d += dd) { xx = static_cast(cos(d) * r + 0.5); yy = static_cast(sin(d) * r + 0.5); double opacity = (xx * xx + yy * yy) / r2; if (opacity > 1) opacity = 1/opacity; display->setPixel(x_ + xx, y_ + yy, color, opacity); display->setPixel(x_ - xx, y_ + yy, color, opacity); display->setPixel(x_ + xx, y_ - yy, color, opacity); display->setPixel(x_ - xx, y_ - yy, color, opacity); } display->setPixel(x_, y_ + r, color); display->setPixel(x_, y_ - r, color); } void Symbol::Draw(DisplayBase *display) { if (r_ < 1) return; unsigned char black[3] = { 0, 0, 0 }; DrawCircle(display, r_ - 1, black); DrawCircle(display, r_ + 1, black); DrawCircle(display, r_, color_); } xplanet-1.3.0/src/libannotate/addSpiceObjects.cpp0000644000175000017500000004257611107135773016753 00000000000000#include #include #include #include #include #include using namespace std; #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parse.h" #include "sphericalToPixel.h" #include "View.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" #include "libprojection/ProjectionBase.h" bool calculateSpicePosition(double jd, const int naifInt, Planet *relative, const int relativeInt, double &X, double &Y, double &Z) { SpiceInt naifId = static_cast (naifInt); SpiceInt relativeTo = static_cast (relativeInt); // seconds past J2000 const SpiceDouble et = ((jd - 2451545.0) * 86400); SpiceDouble pos[3]; SpiceDouble lt; spkgps_c(naifId, et, "J2000", relativeTo, pos, <); if (return_c()) // true if spkgps_c fails { reset_c(); // reset the SPICE error flags return(false); } // convert from km to AU for (int i = 0; i < 3; i++) pos[i] /= AU_to_km; relative->getPosition(X, Y, Z); X += pos[0]; Y += pos[1]; Z += pos[2]; Options *options = Options::getInstance(); if (options->LightTime()) { // Rectangular coordinates of the observer double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Now get the position relative to the origin double dX = X - oX; double dY = Y - oY; double dZ = Z - oZ; double dist = sqrt(dX*dX + dY*dY + dZ*dZ); double light_time = dist * AU_to_km / 299792.458; spkgps_c(naifId, et - light_time, "J2000", relativeTo, pos, <); if (return_c()) { reset_c(); return(false); } for (int i = 0; i < 3; i++) pos[i] /= AU_to_km; relative->getPosition(X, Y, Z); X += pos[0]; Y += pos[1]; Z += pos[2]; } return(true); } static void readSpiceFile(const char *line, map &planetsFromSunMap, View *view, ProjectionBase *projection, multimap &annotationMap) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) return; } if (isEndOfLine(line[i])) return; Options *options = Options::getInstance(); int align = AUTO; string name(""); unsigned char color[3] = { 255, 0, 0 }; string font(""); int fontSize = -1; string image(""); int symbolSize = 2; bool syntaxError = false; int thickness = 1; double trailStart = 0; double trailEnd = 0; double trailInterval = 1; bool transparency = false; unsigned char transparent_pixel[3]; bool haveId = false; int naifInt = 0; // Solar system barycenter int relativeInt = 10; // SUN SpiceChar relativeName[128]; SpiceBoolean found; bodc2n_c(static_cast (relativeInt), 128, relativeName, &found); while (static_cast (i) < strlen(line)) { char *returnString = NULL; int val = parse(i, line, returnString); switch (val) { case ALIGN: if (returnString == NULL) break; switch (returnString[0]) { case 'r': case 'R': align = RIGHT; break; case 'l': case 'L': align = LEFT; break; case 'a': case 'A': align = ABOVE; break; case 'b': case 'B': align = BELOW; break; case 'c': case 'C': align = CENTER; break; default: xpWarn("Unrecognized option for align in spice file\n", __FILE__, __LINE__); syntaxError = true; break; } break; case COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { color[0] = r & 0xff; color[1] = g & 0xff; color[2] = b & 0xff; } else { xpWarn("need three values for color\n", __FILE__, __LINE__); syntaxError = true; } } break; case FONT: font.assign(returnString); break; case FONTSIZE: sscanf(returnString, "%d", &fontSize); if (fontSize <= 0) { xpWarn("fontSize must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case IMAGE: image.assign(returnString); break; case LATLON: { sscanf(returnString, "%d", &naifInt); SpiceChar bodyName[128]; bodc2n_c(static_cast (naifInt), 128, bodyName, &found); if (found != SPICETRUE) { ostringstream errStr; errStr << "Invalid NAIF id code: " << naifInt << ".\n"; xpWarn(errStr.str(), __FILE__, __LINE__); syntaxError = true; } else { if (name.empty()) name.assign(bodyName); haveId = true; } } break; case NAME: name.assign(returnString); break; case ORIGIN: // relative_to keyword { sscanf(returnString, "%d", &relativeInt); bodc2n_c(static_cast (relativeInt), 128, relativeName, &found); if (found != SPICETRUE) { ostringstream errStr; errStr << "Invalid NAIF id code: " << relativeInt << ".\n"; xpWarn(errStr.str(), __FILE__, __LINE__); syntaxError = true; } } break; case SYMBOLSIZE: sscanf(returnString, "%d", &symbolSize); if (symbolSize < 0) symbolSize = 2; break; case THICKNESS: sscanf(returnString, "%d", &thickness); if (thickness < 1) { xpWarn("thickness must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case TRAIL: { checkLocale(LC_NUMERIC, "C"); if (!sscanf(returnString, "%lf,%lf,%lf", &trailStart, &trailEnd, &trailInterval) == 3) { xpWarn("Need three values for trail{}!\n", __FILE__, __LINE__); syntaxError = true; } else { if (trailInterval < 1e-4) trailInterval = 1e-4; } checkLocale(LC_NUMERIC, ""); } break; case TRANSPARENT: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { transparent_pixel[0] = r & 0xff; transparent_pixel[1] = g & 0xff; transparent_pixel[2] = b & 0xff; } else { xpWarn("Need three values for transparency pixel!\n", __FILE__, __LINE__); syntaxError = true; } transparency = true; } break; case UNKNOWN: syntaxError = true; default: case DELIMITER: break; } if (val != DELIMITER && options->Verbosity() > 3) { ostringstream msg; msg << "value is " << keyWordString[val - '?']; if (returnString != NULL) msg << ", returnString is " << returnString; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } delete [] returnString; if (syntaxError) { ostringstream errStr; errStr << "Syntax error in spice file\n"; errStr << "line is \"" << line << "\"" << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return; } if (val == ENDOFLINE) break; } if (!haveId) { ostringstream errStr; errStr << "Can't compute position of " << name << " relative to " << relativeName << ", try a major planet or satellite.\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } Planet *relative = NULL; for (map::iterator it0 = planetsFromSunMap.begin(); it0 != planetsFromSunMap.end(); it0++) { relative = it0->second; if (relativeInt == naif_id[relative->Index()]) break; relative = NULL; } if (relative == NULL) return; const double jd = options->JulianDay(); double X, Y, Z; if (calculateSpicePosition(jd, naifInt, relative, relativeInt, X, Y, Z)) { if (options->Verbosity() > 1) { ostringstream xpStr; xpStr << "Calculating position of " << name << " relative to " << relativeName << endl; xpMsg(xpStr.str(), __FILE__, __LINE__); } } else { ostringstream errStr; errStr << "Can't compute position of " << name << " relative to " << relativeName << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return; } bool plotThis = false; if (view != NULL) { double pX, pY, pZ; view->XYZToPixel(X, Y, Z, pX, pY, pZ); pX += options->CenterX(); pY += options->CenterY(); plotThis = (pZ > 0); // Rectangular coordinates of the observer double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Now get the position relative to the origin double dX = X - oX; double dY = Y - oY; double dZ = Z - oZ; double dist = sqrt(dX*dX + dY*dY + dZ*dZ); // don't plot this point if it's too close to a planet for (map::iterator it0 = planetsFromSunMap.begin(); it0 != planetsFromSunMap.end(); it0++) { Planet *planet = it0->second; double rX, rY, rZ; planet->getPosition(rX, rY, rZ); view->XYZToPixel(rX, rY, rZ, rX, rY, rZ); rX += options->CenterX(); rY += options->CenterY(); double pixelDist = sqrt((rX - pX)*(rX - pX) + (rY - pY)*(rY - pY)); if (pixelDist < 1) { double planetRadius = planet->Radius() / dist; plotThis = (planetRadius / options->FieldOfView() > 0.01); break; } } if (options->Verbosity() > 0 && plotThis) { ostringstream msg; char buffer[256]; char shortName[10]; memcpy(shortName, name.c_str(), 9); shortName[9] = '\0'; snprintf(buffer, 256, "%10s%10.4f%8.1f%8.1f\n", shortName, dist, pX, pY); msg << buffer; xpMsg(msg.str(), __FILE__, __LINE__); } X = pX; Y = pY; Z = pZ; } else { double lat, lon; relative->XYZToPlanetographic(X, Y, Z, lat, lon); plotThis = projection->sphericalToPixel(lon * relative->Flipped(), lat, X, Y); Z = 0; } if (plotThis) { const int ix = static_cast (floor(X + 0.5)); const int iy = static_cast (floor(Y + 0.5)); int xOffset = 0; int yOffset = 0; if (image.empty()) { Symbol *sym = new Symbol(color, ix, iy, symbolSize); annotationMap.insert(pair(Z, sym)); xOffset = symbolSize; yOffset = symbolSize; } else if (image.compare("none") != 0) { unsigned char *transparent = (transparency ? transparent_pixel : NULL); Icon *icon = new Icon(ix, iy, image, transparent); annotationMap.insert(pair(Z, icon)); xOffset = icon->Width() / 2; yOffset = icon->Height() / 2; } if (!name.empty()) { Text *t = new Text(color, ix, iy, xOffset, yOffset, align, name); annotationMap.insert(pair(Z, t)); } } if (trailInterval > 0) { double X0, Y0, Z0; double X1, Y1, Z1; calculateSpicePosition(jd + trailStart, naifInt, relative, relativeInt, X0, Y0, Z0); for (double et = trailStart + trailInterval; et <= trailEnd; et += trailInterval) { calculateSpicePosition(jd + et, naifInt, relative, relativeInt, X1, Y1, Z1); double newX0 = X1; double newY0 = Y1; double newZ0 = Z1; if (view != NULL) { view->XYZToPixel(X0, Y0, Z0, X0, Y0, Z0); X0 += options->CenterX(); Y0 += options->CenterY(); view->XYZToPixel(X1, Y1, Z1, X1, Y1, Z1); X1 += options->CenterX(); Y1 += options->CenterY(); } else { double lat, lon; relative->XYZToPlanetographic(X0, Y0, Z0, lat, lon); if (projection->sphericalToPixel(lon * relative->Flipped(), lat, X0, Y0)) Z0 = 0; else Z0 = -1; relative->XYZToPlanetographic(X1, Y1, Z1, lat, lon); if (projection->sphericalToPixel(lon * relative->Flipped(), lat, X1, Y1)) Z1 = 0; else Z1 = -1; } if (Z0 >= 0 && Z1 >= 0) { double Z = 0.5 * (Z0 + Z1); LineSegment *ls = new LineSegment(color, thickness, X1, Y1, X0, Y0); annotationMap.insert(pair(Z, ls)); } X0 = newX0; Y0 = newY0; Z0 = newZ0; } } } void processSpiceKernels(const bool load) { // Set the SPICELIB error response action to "RETURN": erract_c ( "SET", 200, "RETURN" ); // Output ALL CSPICE error messages on error: errprt_c ( "SET", 200, "NONE, ALL" ); Options *options = Options::getInstance(); vector spiceFiles = options->SpiceFiles(); for (unsigned int i = 0; i < spiceFiles.size(); i++) { string kernelFile(spiceFiles[i]); kernelFile += ".krn"; if (findFile(kernelFile, "spice")) { ifstream inFile(kernelFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) { int ii = 0; while (isDelimiter(line[ii])) { ii++; if (static_cast (ii) > strlen(line)) continue; } if (isEndOfLine(line[ii])) continue; char *ptr = &line[ii]; while (!(isDelimiter(*ptr) || isEndOfLine(*ptr))) ptr++; *ptr = '\0'; string spiceFile(&line[ii]); if (findFile(spiceFile, "spice")) { if (load) furnsh_c(spiceFile.c_str()); else unload_c(spiceFile.c_str()); } } inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't find spice kernel file " << kernelFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } } } void addSpiceObjects(map &planetsFromSunMap, View *view, ProjectionBase *projection, multimap &annotationMap) { Options *options = Options::getInstance(); vector spiceFiles = options->SpiceFiles(); for (unsigned int i = 0; i < spiceFiles.size(); i++) { string spiceFile(spiceFiles[i]); if (findFile(spiceFile, "spice")) { ifstream inFile(spiceFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL) readSpiceFile(line, planetsFromSunMap, view, projection, annotationMap); inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load spice file " << spiceFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } } } xplanet-1.3.0/src/libannotate/addMarkers.cpp0000644000175000017500000003464311660341770015776 00000000000000#include #include #include #include #include #include #include #include #include #include using namespace std; #include "buildPlanetMap.h" #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parse.h" #include "PlanetProperties.h" #include "sphericalToPixel.h" #include "View.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" #include "libprojection/ProjectionBase.h" static void readMarkerFile(const char *line, Planet *planet, const double pR, const double pX, const double pY, const double pZ, View *view, ProjectionBase *projection, const int width, const int height, unsigned char *color, string &font, int fontSize, const double magnify, map &planetsFromSunMap, multimap &annotationMap) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) return; } if (isEndOfLine(line[i])) return; Options *options = Options::getInstance(); int align = AUTO; bool haveLat = false; bool haveLon = false; double lat, lon; string image; string lang(""); string name(""); double opacity = 1.0; bool outlined = true; bool pixelCoords = false; double radius = -1; bool relativeToEdges = true; int symbolSize = 2; bool syntaxError = false; string timezone; bool transparency = false; unsigned char transparent_pixel[3]; while (static_cast (i) < strlen(line)) { char *returnString = NULL; int val = parse(i, line, returnString); switch (val) { case ALIGN: if (returnString == NULL) break; switch (returnString[0]) { case 'r': case 'R': align = RIGHT; break; case 'l': case 'L': align = LEFT; break; case 'a': case 'A': align = ABOVE; break; case 'b': case 'B': align = BELOW; break; case 'c': case 'C': align = CENTER; break; default: xpWarn("Unrecognized option for align in marker file\n", __FILE__, __LINE__); syntaxError = true; break; } break; case COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { color[0] = static_cast (r & 0xff); color[1] = static_cast (g & 0xff); color[2] = static_cast (b & 0xff); } else { xpWarn("Need three values for color\n", __FILE__, __LINE__); syntaxError = true; } } break; case FONT: font.assign(returnString); break; case FONTSIZE: sscanf(returnString, "%d", &fontSize); if (fontSize <= 0) { xpWarn("fontSize must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case IMAGE: image.assign(returnString); break; case LANGUAGE: lang.assign(returnString); break; case LATLON: checkLocale(LC_NUMERIC, "C"); if (haveLon) { syntaxError = true; } else if (haveLat) { sscanf(returnString, "%lf", &lon); haveLon = true; } else { sscanf(returnString, "%lf", &lat); haveLat = true; } checkLocale(LC_NUMERIC, ""); break; case MAX_RAD_FOR_MARKERS: { double maxRad; sscanf(returnString, "%lf", &maxRad); maxRad *= height; if (pR > 0 && pR > maxRad) return; } break; case MIN_RAD_FOR_MARKERS: { double minRad; sscanf(returnString, "%lf", &minRad); minRad *= height; if (pR > 0 && pR < minRad) return; } break; case NAME: name.assign(returnString); break; case OPACITY: { int s; sscanf(returnString, "%d", &s); if (s < 0) s = 0; else if (s > 100) s = 100; opacity = s/100.; } break; case OUTLINED: if (strncmp(returnString, "f", 1) == 0 || strncmp(returnString, "F", 1) == 0) outlined = false; break; case POSITION: if (strncmp(returnString, "pixel", 2) == 0) { pixelCoords = true; } else if (strncmp(returnString, "absolute", 3) == 0) { pixelCoords = true; relativeToEdges = false; } else { if (planet != NULL) { body pIndex = Planet::parseBodyName(returnString); if (pIndex != planet->Index()) { const Planet *other = findPlanetinMap(planetsFromSunMap, pIndex); double X, Y, Z; other->getPosition(X, Y, Z); planet->XYZToPlanetographic(X, Y, Z, lat, lon); lat /= deg_to_rad; lon /= deg_to_rad; } } } break; case RADIUS: checkLocale(LC_NUMERIC, "C"); sscanf(returnString, "%lf", &radius); if (radius < 0) { xpWarn("Radius value must be positive\n", __FILE__, __LINE__); radius = -1; syntaxError = true; } checkLocale(LC_NUMERIC, ""); break; case SYMBOLSIZE: sscanf(returnString, "%d", &symbolSize); if (symbolSize < 0) symbolSize = 2; break; case TIMEZONE: timezone.assign(returnString); break; case TRANSPARENT: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { transparent_pixel[0] = static_cast (r & 0xff); transparent_pixel[1] = static_cast (g & 0xff); transparent_pixel[2] = static_cast (b & 0xff); } else { xpWarn("Need three values for transparency pixel!\n", __FILE__, __LINE__); syntaxError = true; } transparency = true; } break; case UNKNOWN: syntaxError = true; default: case DELIMITER: break; } if (val != DELIMITER && options->Verbosity() > 3) { ostringstream msg; msg << "value is " << keyWordString[val - '?']; if (returnString != NULL) msg << ", returnString is " << returnString; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } delete [] returnString; if (syntaxError) { ostringstream errStr; errStr << "Syntax error in marker file\n" << "line is \"" << line << "\"\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } if (val == ENDOFLINE) break; } double X, Y, Z = 0; bool markerVisible = false; if (pixelCoords) { X = lon; Y = lat; if (relativeToEdges) { if (X < 0) X += width; if (Y < 0) Y += height; } } else { lat *= deg_to_rad; lon *= deg_to_rad; if (radius < 0) { if (planet != NULL) { radius = planet->Radius(lat); } else { radius = 1; } } markerVisible = sphericalToPixel(lat, lon, radius * magnify, X, Y, Z, planet, view, projection); // don't draw markers on the far side of the planet if (planet != NULL && view != NULL && Z > pZ && sqrt((X-pX)*(X-pX) + (Y-pY)*(Y-pY))/pR < radius * magnify) markerVisible = false; } if (pixelCoords || markerVisible) { const int ix = static_cast (floor(X + 0.5)); const int iy = static_cast (floor(Y + 0.5)); int iconWidth = 0; int iconHeight = 0; if (image.empty()) { Symbol *s = new Symbol(color, ix, iy, symbolSize); annotationMap.insert(pair(Z, s)); iconWidth = symbolSize * 2; iconHeight = symbolSize * 2; } else if (image.compare("none") != 0) { unsigned char *transparent = (transparency ? transparent_pixel : NULL); Icon *i = new Icon(ix, iy, image, transparent); annotationMap.insert(pair(Z, i)); iconWidth = i->Width(); iconHeight = i->Height(); } // if the name string has time formatting codes, and the // timezone is defined, run the name string through strftime() if (name.find("%") != string::npos && !timezone.empty()) { const char *tzEnv = getenv("TZ"); string tzSave; if (tzEnv != NULL) { tzSave = "TZ="; tzSave += tzEnv; } string tz = "TZ="; tz += timezone; putenv((char *) tz.c_str()); tzset(); if (!lang.empty()) checkLocale(LC_ALL, lang.c_str()); // run name string through strftime() and convert to UTF-8 strftimeUTF8(name); if (tzEnv == NULL) removeFromEnvironment("TZ"); else putenv((char *) tzSave.c_str()); tzset(); if (!lang.empty()) checkLocale(LC_ALL, ""); } if (!name.empty()) { Text *t = new Text(color, ix, iy, iconWidth, iconHeight, align, name); t->Opacity(opacity); t->Outline(outlined); if (!font.empty()) t->Font(font); if (fontSize > 0) t->FontSize(fontSize); annotationMap.insert(pair(Z, t)); } } } // Used for labeling planets/moons void addMarkers(PlanetProperties *planetProperties, Planet *planet, const double pixel_radius, const double X, const double Y, const double Z, View *view, ProjectionBase *projection, const int width, const int height, map &planetsFromSunMap, multimap &annotationMap) { vector markerfiles = planetProperties->MarkerFiles(); vector::iterator ii = markerfiles.begin(); while (ii != markerfiles.end()) { string markerFile(*ii); bool foundFile = findFile(markerFile, "markers"); if (foundFile) { ifstream inFile(markerFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) { unsigned char color[3]; memcpy(color, planetProperties->MarkerColor(), 3); string font(planetProperties->MarkerFont()); int fontSize(planetProperties->MarkerFontSize()); readMarkerFile(line, planet, pixel_radius, X, Y, Z, view, projection, width, height, color, font, fontSize, planetProperties->Magnify(), planetsFromSunMap, annotationMap); } inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load marker file " << markerFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } // Used for labeling star fields void addMarkers(View *view, const int width, const int height, map &planetsFromSunMap, multimap &annotationMap) { Options *options = Options::getInstance(); vector markerfiles = options->MarkerFiles(); vector::iterator ii = markerfiles.begin(); while (ii != markerfiles.end()) { string markerFile(*ii); bool foundFile = findFile(markerFile, "markers"); if (foundFile) { ifstream inFile(markerFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) { unsigned char color[3]; memcpy(color, options->Color(), 3); string font(options->Font()); int fontSize(options->FontSize()); readMarkerFile(line, NULL, 0, 0, 0, 0, view, NULL, width, height, color, font, fontSize, 1.0, planetsFromSunMap, annotationMap); } inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load marker file " << markerFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } xplanet-1.3.0/src/libannotate/arrangeMarkers.cpp0000644000175000017500000000373710411344513016654 00000000000000#include #include using namespace std; #include "keywords.h" #include "libannotate/Text.h" #include "libdisplay/libdisplay.h" static int findOverlap(multimap &textMap, Text *text) { int totalOverlap = 0; multimap::iterator textIterator; for (textIterator = textMap.begin(); textIterator != textMap.end(); textIterator++) { Text *t = textIterator->second; if (t != text) totalOverlap += text->Overlap(t); } return(totalOverlap); } void arrangeMarkers(multimap &annotationMap, DisplayBase *display) { if (annotationMap.empty()) return; // This will hold a list of text strings, sorted by x coordinate multimap textMap; multimap::iterator annotationIterator; for (annotationIterator = annotationMap.begin(); annotationIterator != annotationMap.end(); annotationIterator++) { Text *t = dynamic_cast (annotationIterator->second); if (t != NULL) { t->ComputeBoundingBox(display); textMap.insert(pair(t->X(), t)); } } const int align[4] = { RIGHT, LEFT, ABOVE, BELOW }; for (int i = 0; i < 2; i++) { multimap::iterator textIterator; for (textIterator = textMap.begin(); textIterator != textMap.end(); textIterator++) { Text *t = textIterator->second; if (t->FixedAlign()) continue; int totalOverlap = 0; int minOverlap = 0; int alignIndex = 0; // Choose the alignment which yields the minimum overlap for // this marker for (int i = 0; i < 4; i++) { if (i == 0 || totalOverlap) { t->Align(align[i]); totalOverlap = findOverlap(textMap, t); totalOverlap += t->Overhang(display->Width(), display->Height()); if (i == 0 || totalOverlap < minOverlap) { minOverlap = totalOverlap; alignIndex = i; } } } t->Align(align[alignIndex]); } } } xplanet-1.3.0/src/libannotate/Icon.cpp0000644000175000017500000000415311107135746014602 00000000000000#include #include using namespace std; #include "findFile.h" #include "xpUtil.h" #include "Icon.h" #include "libdisplay/libdisplay.h" #include "libimage/Image.h" Icon::Icon(const int x, const int y, const std::string &filename, const unsigned char *transparent) : x_(x), y_(y), filename_(filename), image_(NULL), transparent_(NULL) { bool foundFile = findFile(filename_, "images"); if (foundFile) { image_ = new Image; foundFile = image_->Read(filename_.c_str()); width_ = image_->Width(); height_ = image_->Height(); if (transparent != NULL) { transparent_ = new unsigned char[3]; memcpy(transparent_, transparent, 3); } } else { ostringstream errStr; errStr << "Can't find image file " << filename << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } } Icon::~Icon() { delete image_; delete [] transparent_; } void Icon::Draw(DisplayBase *display) { if (image_ != NULL) { const unsigned char *rgb_data = image_->getRGBData(); const unsigned char *png_alpha = image_->getPNGAlpha(); const int ulx = x_ - width_ / 2; const int uly = y_ - height_ / 2; for (int j = 0; j < height_; j++) { for (int i = 0; i < width_; i++) { const unsigned char *pixel = rgb_data + 3*(j * width_ + i); double opacity = 1; if (transparent_ != NULL) { opacity = 0; for (int ii = 0; ii < 3; ii++) { if (pixel[ii] != transparent_[ii]) { opacity = 1; break; } } } else if (png_alpha != NULL) { opacity = png_alpha[j * width_ + i] / 255.; } display->setPixel(ulx + i, uly + j, pixel, opacity); } } } } xplanet-1.3.0/src/libannotate/Text.h0000644000175000017500000000312311660335247014301 00000000000000#ifndef TEXT_H #define TEXT_H #include #include "Annotation.h" class Text : public Annotation { public: Text(const unsigned char color[3], const int x, const int y, const int iconWidth, const int iconHeight, const int align, const std::string &text); virtual ~Text(); int Align() const { return(align_); }; void Align(const int align); void ComputeBoundingBox(DisplayBase *display); bool FixedAlign() const { return(fixedAlign_); }; void Font(const std::string &font) { font_.assign(font); }; void FontSize(const int fontSize) { fontSize_ = fontSize; }; void Opacity(const double d) { opacity_ = d; }; void Outline(const bool b) { outlined_ = b; }; int Overhang(const int width, const int height); int Overlap(const Text *const t); void X(const int x) { x_ = x; } ; int X() const { return(x_); }; virtual void Shift(const int x) { x_ += x; }; virtual void Draw(DisplayBase *display); private: int align_; bool fixedAlign_; std::string font_; int fontSize_; const int iconHeight_; const int iconWidth_; bool needAlign_; bool needBoundingBox_; double opacity_; // (xOffset, yOffset) is the offset of the text from (x_, y_) int xOffset_; int yOffset_; bool outlined_; std::string text_; int textHeight_; int textWidth_; // (x_, y_) is the center of the icon int x_; const int y_; int ulx_, uly_; int lrx_, lry_; int Overlap(const int ulx, const int uly, const int lrx, const int lry); }; #endif xplanet-1.3.0/src/libannotate/LineSegment.cpp0000644000175000017500000000703210423221014016103 00000000000000#include using namespace std; #include "LineSegment.h" #include "libdisplay/libdisplay.h" LineSegment::LineSegment(const unsigned char color[3], const int thickness, const double X0, const double Y0, const double X1, const double Y1) : Annotation(color), X0_(X0), Y0_(Y0), X1_(X1), Y1_(Y1) { thickness_ = 0.5 * (thickness - 1); if (thickness_ < 0) thickness_ = 0; } LineSegment::~LineSegment() { } void LineSegment::Draw(DisplayBase *display) { const double width = display->Width(); const double height = display->Height(); // return if the line segment is not on the screen if ((X0_ < 0 && X1_ < 0) || (X0_ >= width && X1_ >= width) || (Y0_ < 0 && Y1_ < 0) || (Y0_ >= height && Y1_ >= height)) return; // check if this is a vertical line (infinite slope!) if (X0_ == X1_) { double y0 = (Y0_ < Y1_ ? Y0_ : Y1_); double y1 = (Y0_ < Y1_ ? Y1_ : Y0_); for (double y = y0; y < y1; y++) { for (double i = 0; i <= thickness_; i += 0.25) { display->setPixel(X0_ + i, y, color_); if (i > 0) display->setPixel(X0_ - i, y, color_); } } return; } // check if this is a horizontal line if (Y0_ == Y1_) { double x0 = (X0_ < X1_ ? X0_ : X1_); double x1 = (X0_ < X1_ ? X1_ : X0_); for (double x = x0; x < x1; x++) { for (double i = 0; i <= thickness_; i += 0.25) { display->setPixel(x, Y0_ + i, color_); if (i > 0) display->setPixel(x, Y0_ - i, color_); } } return; } const double slope = (Y1_ - Y0_) / (X1_ - X0_); const double hypot = sqrt((Y1_ - Y0_) * (Y1_ - Y0_) + (X1_ - X0_) * (X1_ - X0_)); const double cosTheta = (X1_ - X0_) / hypot; const double sinTheta = (Y1_ - Y0_) / hypot; if (fabs(slope) < 1) { // find the starting point double y = Y0_; double x0 = X0_; double x1 = X1_; if (X0_ > X1_) { y = Y1_; x0 = X1_; x1 = X0_; } // check if the point is off of the screen if (x0 < 0) { y -= slope * x0; x0 = 0; } if (x1 >= width) x1 = width - 1; // draw the line for (double x = x0; x < x1; x++) { for (double i = 0; i <= thickness_; i += 0.25) { display->setPixel(x + i * sinTheta, y - i * cosTheta, color_); if (i > 0) display->setPixel(x - i * sinTheta, y + i * cosTheta, color_); } y += slope; } } else { double x = X0_; double y0 = Y0_; double y1 = Y1_; if (Y0_ > Y1_) { x = X1_; y0 = Y1_; y1 = Y0_; } if (y0 < 0) { x -= y0/slope; y0 = 0; } if (y1 >= height) y1 = height - 1; for (double y = y0; y < y1; y++) { for (double i = 0; i <= thickness_; i += 0.25) { display->setPixel(x + i * sinTheta, y - i * cosTheta, color_); if (i > 0) display->setPixel(x - i * sinTheta, y + i * cosTheta, color_); } x += (1/slope); } } } xplanet-1.3.0/src/libannotate/addSatellites.cpp0000644000175000017500000004056611424644322016501 00000000000000#include #include #include #include #include #include #include #include #include #include using namespace std; #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parse.h" #include "PlanetProperties.h" #include "Satellite.h" #include "sphericalToPixel.h" #include "View.h" #include "xpUtil.h" #include "drawArc.h" #include "drawCircle.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" #include "libprojection/ProjectionBase.h" static vector satelliteVector; bool calculateSatellitePosition(time_t tv_sec, const int id, double &lat, double &lon, double &rad) { Options *options = Options::getInstance(); if (options->LightTime()) { double tX, tY, tZ; double jd = options->JulianDay(); Planet earth(jd, EARTH); earth.calcHeliocentricEquatorial(); earth.getPosition(tX, tY, tZ); double oX, oY, oZ; options->getOrigin(oX, oY, oZ); // Now get the position relative to the origin double dX = tX - oX; double dY = tY - oY; double dZ = tZ - oZ; double dist = sqrt(dX*dX + dY*dY + dZ*dZ); double light_time = dist * AU_to_km / 299792.458; tv_sec -= static_cast (light_time); } for (unsigned int i = 0; i < satelliteVector.size(); i++) { if (id == satelliteVector[i].getID()) { satelliteVector[i].loadTLE(); satelliteVector[i].getSpherical(tv_sec, lat, lon, rad); return(true); } } ostringstream msg; msg << "Can't find satellite # " << id << ".\n"; xpMsg(msg.str(), __FILE__, __LINE__); return(false); } static void readSatelliteFile(const char *line, Planet *planet, View *view, ProjectionBase *projection, PlanetProperties *planetProperties, multimap &annotationMap) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) return; } if (isEndOfLine(line[i])) return; Options *options = Options::getInstance(); unsigned char color[3]; memcpy(color, planetProperties->MarkerColor(), 3); int align = RIGHT; vector altcirc; string font(""); int fontSize = -1; string image; string name(""); ofstream outputFile; Satellite *satellite = NULL; int symbolSize = 2; double spacing = 0.1; bool syntaxError = false; string timezone; int thickness = planetProperties->ArcThickness(); int trailType = ORBIT; int trailStart = 0; int trailEnd = 0; int trailInterval = 1; bool transparency = false; unsigned char transparent_pixel[3]; while (static_cast (i) < strlen(line)) { char *returnString = NULL; int val = parse(i, line, returnString); switch (val) { case ALIGN: if (returnString == NULL) break; switch (returnString[0]) { case 'r': case 'R': align = RIGHT; break; case 'l': case 'L': align = LEFT; break; case 'a': case 'A': align = ABOVE; break; case 'b': case 'B': align = BELOW; break; case 'c': case 'C': align = CENTER; break; default: xpWarn("Unrecognized option for align in satellite file\n", __FILE__, __LINE__); syntaxError = true; break; } break; case CIRCLE: { checkLocale(LC_NUMERIC, "C"); double angle; sscanf(returnString, "%lf", &angle); if (angle < 0) angle *= -1; if (angle > 90) angle = 90; angle = 90 - angle; altcirc.push_back(angle * deg_to_rad); checkLocale(LC_NUMERIC, ""); } break; case COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { color[0] = static_cast (r & 0xff); color[1] = static_cast (g & 0xff); color[2] = static_cast (b & 0xff); } else { xpWarn("need three values for color\n", __FILE__, __LINE__); syntaxError = true; } } break; case FONT: font.assign(returnString); break; case FONTSIZE: sscanf(returnString, "%d", &fontSize); if (fontSize <= 0) { xpWarn("fontSize must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case IMAGE: image.assign(returnString); break; case LATLON: { int id; sscanf(returnString, "%d", &id); vector::iterator ii = satelliteVector.begin(); while (ii != satelliteVector.end()) { if (ii->getID() == id) { satellite = &(*ii); if (name.empty()) name.assign(satellite->getName()); if (options->Verbosity() > 3) { ostringstream msg; msg << "Found satellite # " << id << " (" << satellite->getName() << ")\n"; xpMsg(msg.str(), __FILE__, __LINE__); } break; } ii++; } } break; case NAME: name.assign(returnString); break; case OUTPUT: outputFile.open(returnString, ios::app); if (outputFile.fail()) { ostringstream errMsg; errMsg << "Can't open satellite output file: " << returnString << endl; xpWarn(errMsg.str(), __FILE__, __LINE__); } break; case SPACING: checkLocale(LC_NUMERIC, "C"); sscanf(returnString, "%lf", &spacing); if (spacing < 0) { xpWarn("spacing must be positive\n", __FILE__, __LINE__); spacing = 0.1; syntaxError = true; } checkLocale(LC_NUMERIC, ""); break; case THICKNESS: sscanf(returnString, "%d", &thickness); if (thickness < 1) { xpWarn("thickness must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case TRAIL: { char *ptr = returnString; while (ptr[0] != ',') { if (ptr[0] == '\0') { syntaxError = true; break; } ptr++; } if (syntaxError) break; if (!sscanf(++ptr, "%d,%d,%d", &trailStart, &trailEnd, &trailInterval) == 3) { xpWarn("Need four values for trail{}!\n", __FILE__, __LINE__); syntaxError = true; } else { switch (returnString[0]) { case 'g': case 'G': trailType = GROUND; break; case 'o': case 'O': trailType = ORBIT; break; default: xpWarn("Unknown type of orbit trail!\n", __FILE__, __LINE__); syntaxError = true; break; } if (trailInterval < 1) trailInterval = 1; } } break; case TRANSPARENT: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { transparent_pixel[0] = static_cast (r & 0xff); transparent_pixel[1] = static_cast (g & 0xff); transparent_pixel[2] = static_cast (b & 0xff); } else { xpWarn("Need three values for transparency pixel!\n", __FILE__, __LINE__); syntaxError = true; } transparency = true; } break; case UNKNOWN: syntaxError = true; default: case DELIMITER: break; } if (val != DELIMITER && options->Verbosity() > 3) { ostringstream msg; msg << "value is " << keyWordString[val - '?']; if (returnString != NULL) msg << ", returnString is " << returnString; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } delete [] returnString; if (syntaxError) { ostringstream errStr; errStr << "Syntax error in satellite file\n"; errStr << "line is \"" << line << "\"" << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return; } if (val == ENDOFLINE) break; } if (satellite == NULL) { ostringstream errStr; errStr << "No satellite found for \"" << line << "\"" << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return; } // Load TLE data here since select_ephemeris() in libsgp4sdp4 // changes it. This is in case the user wants to have two entries // with the same satellite. satellite->loadTLE(); time_t startTime = static_cast (options->TVSec() + trailStart * 60); time_t endTime = static_cast (options->TVSec() + trailEnd * 60); time_t interval = static_cast (trailInterval * 60); if (startTime > endTime) { time_t tmp = startTime; startTime = endTime; endTime = tmp; } double lat, lon, rad; satellite->getSpherical(startTime, lat, lon, rad); if (outputFile.is_open() && endTime > startTime) { outputFile << "BEGIN " << satellite->getName() << "\t" << satellite->getID() << endl; char line[128]; snprintf(line, 128, "%12s%12s%12s%12s%30s\n", "lat", "lon", "alt", "UNIX time", "UTC "); outputFile << line; } for (time_t t = startTime + interval; t <= endTime; t += interval) { const double prevLat = lat; const double prevLon = lon; double prevRad = rad; satellite->getSpherical(t, lat, lon, rad); if (outputFile.is_open()) { char line[128]; snprintf(line, 128, "%12.3f%12.3f%12.3f%12ld%30s", lat/deg_to_rad, lon/deg_to_rad, 6378.14 * (rad - 1), t, asctime(gmtime((time_t *) &t))); outputFile << line; } if (trailType == GROUND) { rad = 1; prevRad = 1; } drawArc(prevLat, prevLon, prevRad, lat, lon, rad, color, thickness, spacing * deg_to_rad, planetProperties->Magnify(), planet, view, projection, annotationMap); } if (outputFile.is_open()) { if (endTime > startTime) { outputFile << "END " << satellite->getName() << "\t" << satellite->getID() << endl; } outputFile.close(); } satellite->getSpherical(options->TVSec(), lat, lon, rad); if (trailType == GROUND) rad = 1; double X, Y, Z; if (sphericalToPixel(lat, lon, rad * planetProperties->Magnify(), X, Y, Z, planet, view, projection)) { const int ix = static_cast (floor(X + 0.5)); const int iy = static_cast (floor(Y + 0.5)); int xOffset = 0; int yOffset = 0; if (image.empty()) { Symbol *sym = new Symbol(color, ix, iy, symbolSize); annotationMap.insert(pair(Z, sym)); xOffset = symbolSize; yOffset = symbolSize; } else if (image.compare("none") != 0) { unsigned char *transparent = (transparency ? transparent_pixel : NULL); Icon *icon = new Icon(ix, iy, image, transparent); annotationMap.insert(pair(Z, icon)); xOffset = icon->Width() / 2; yOffset = icon->Height() / 2; } if (!name.empty()) { Text *t = new Text(color, ix, iy, xOffset, yOffset, align, name); if (!font.empty()) t->Font(font); if (fontSize > 0) t->FontSize(fontSize); annotationMap.insert(pair(Z, t)); } } vector::iterator a = altcirc.begin(); while (a != altcirc.end()) { // Given the angle of the spacecraft above the horizon, // compute the great arc distance from the sub-spacecraft // point const double r = *a - asin(sin(*a)/rad); drawCircle(lat, lon, r, color, thickness, spacing * deg_to_rad, planetProperties->Magnify(), planet, view, projection, annotationMap); a++; } } void loadSatelliteVector(PlanetProperties *planetProperties) { vector satfiles = planetProperties->SatelliteFiles(); vector::iterator ii = satfiles.begin(); satelliteVector.clear(); while (ii != satfiles.end()) { string tleFile = *ii + ".tle"; const bool foundFile = findFile(tleFile, "satellites"); if (foundFile) { ifstream inFile(tleFile.c_str()); char lines[3][80]; while (inFile.getline(lines[0], 80) != NULL) { if ((inFile.getline(lines[1], 80) == NULL) || (inFile.getline(lines[2], 80) == NULL)) { ostringstream errStr; errStr << "Malformed TLE file (" << tleFile << ")?\n"; xpWarn(errStr.str(), __FILE__, __LINE__); break; } Satellite sat(lines); if (!sat.isGoodData()) { ostringstream errStr; errStr << "Bad TLE data in " << tleFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); continue; } satelliteVector.push_back(sat); } inFile.close(); } else { ostringstream errStr; errStr << "Can't load satellite TLE file " << tleFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } void addSatellites(PlanetProperties *planetProperties, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap) { if (planet->Index() != EARTH) return; vector satfiles = planetProperties->SatelliteFiles(); vector::iterator ii = satfiles.begin(); while (ii != satfiles.end()) { string satFile(*ii); bool foundFile = findFile(satFile, "satellites"); if (foundFile) { ifstream inFile(satFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) readSatelliteFile(line, planet, view, projection, planetProperties, annotationMap); inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load satellite file " << satFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } xplanet-1.3.0/src/libannotate/drawCircle.h0000644000175000017500000000071110423221014015412 00000000000000#ifndef DRAW_CIRCLE_H #define DRAW_CIRCLE_H #include class Annotation; class Planet; class ProjectionBase; class View; extern void drawCircle(const double lat, const double lon, const double rad, const unsigned char color[3], const int thickness, const double spacing, const double magnify, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap); #endif xplanet-1.3.0/src/libannotate/Makefile.in0000644000175000017500000003666511731356513015270 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libannotate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libannotate_a_LIBADD = am__libannotate_a_SOURCES_DIST = Annotation.h Annotation.cpp \ addArcs.cpp addMarkers.cpp addSatellites.cpp \ arrangeMarkers.cpp drawArc.h drawArc.cpp drawCircle.h \ drawCircle.cpp Icon.h Icon.cpp LineSegment.h LineSegment.cpp \ Symbol.h Symbol.cpp Text.h Text.cpp libannotate.h \ addSpiceObjects.cpp @HAVE_CSPICE_TRUE@am__objects_1 = addSpiceObjects.$(OBJEXT) am_libannotate_a_OBJECTS = Annotation.$(OBJEXT) addArcs.$(OBJEXT) \ addMarkers.$(OBJEXT) addSatellites.$(OBJEXT) \ arrangeMarkers.$(OBJEXT) drawArc.$(OBJEXT) \ drawCircle.$(OBJEXT) Icon.$(OBJEXT) LineSegment.$(OBJEXT) \ Symbol.$(OBJEXT) Text.$(OBJEXT) $(am__objects_1) libannotate_a_OBJECTS = $(am_libannotate_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libannotate_a_SOURCES) $(EXTRA_libannotate_a_SOURCES) DIST_SOURCES = $(am__libannotate_a_SOURCES_DIST) \ $(EXTRA_libannotate_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libannotate.a AM_CPPFLAGS = -I@top_srcdir@/src @FREETYPE_CFLAGS@ @USE_AR_FALSE@libannotate_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libannotate_a_AR = $(AR) cru @HAVE_CSPICE_TRUE@spiceFiles = addSpiceObjects.cpp EXTRA_libannotate_a_SOURCES = addSpiceObjects.cpp libannotate_a_SOURCES = \ Annotation.h \ Annotation.cpp \ addArcs.cpp \ addMarkers.cpp \ addSatellites.cpp \ arrangeMarkers.cpp \ drawArc.h \ drawArc.cpp \ drawCircle.h \ drawCircle.cpp \ Icon.h \ Icon.cpp \ LineSegment.h \ LineSegment.cpp \ Symbol.h \ Symbol.cpp \ Text.h \ Text.cpp \ libannotate.h \ $(spiceFiles) all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libannotate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libannotate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libannotate.a: $(libannotate_a_OBJECTS) $(libannotate_a_DEPENDENCIES) -rm -f libannotate.a $(libannotate_a_AR) libannotate.a $(libannotate_a_OBJECTS) $(libannotate_a_LIBADD) $(RANLIB) libannotate.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Annotation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Icon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineSegment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Text.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addArcs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addMarkers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addSatellites.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addSpiceObjects.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arrangeMarkers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawArc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawCircle.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libannotate/libannotate.h0000644000175000017500000000367110411360615015653 00000000000000#ifndef LIBANNOTATE_H #define LIBANNOTATE_H #include "config.h" #include "Icon.h" #include "LineSegment.h" #include "Symbol.h" #include "Text.h" #include class Annotation; class Planet; class PlanetProperties; class ProjectionBase; class View; extern void addArcs(View *view, multimap &annotationMap); extern void addArcs(PlanetProperties *planetProperties, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap); extern void addMarkers(View *view, const int width, const int height, map &planetsFromSunMap, multimap &annotationMap); extern void addMarkers(PlanetProperties *planetProperties, Planet *planet, const double pR, const double X, const double Y, const double Z, View *view, ProjectionBase *projection, const int width, const int height, map &planetsFromSunMap, std::multimap &annotationMap); extern bool calculateSatellitePosition(time_t tv_sec, const int id, double &lat, double &lon, double &rad); extern void addSatellites(PlanetProperties *planetProperties, Planet *planet, View *view, ProjectionBase *projection, std::multimap &annotationMap); extern void loadSatelliteVector(PlanetProperties *planetProperties); #ifdef HAVE_CSPICE extern void addSpiceObjects(map &planetsFromSunMap, View *view, ProjectionBase *projection, multimap &annotationMap); extern void processSpiceKernels(const bool load); extern bool calculateSpicePosition(double jd, const int naifInt, Planet *relative, const int relativeInt, double &X, double &Y, double &Z); #endif #endif xplanet-1.3.0/src/libannotate/drawCircle.cpp0000644000175000017500000000452010423221014015747 00000000000000#include #include using namespace std; #include "xpUtil.h" #include "drawArc.h" #include "drawCircle.h" #include "libannotate/libannotate.h" #include "libprojection/ProjectionRectangular.h" // Given an value X and radius d, this routine draws a half-circle in // the plane where X is constant. static void drawAltitudeHalfCirc(ProjectionRectangular *rect, const double X, const double d, bool Z_positive, const unsigned char color[3], const int thickness, const double spacing, const double magnify, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap) { double Y = d; double Z = (1 - X*X - Y*Y); if (fabs(Z) < 1e-5) Z = 0; Z = (Z_positive ? sqrt(Z) : -sqrt(Z)); double lat = M_PI_2 - acos(Z); double lon = atan2(Y, X); rect->RotateXYZ(lat, lon); for (double sinY = 1; sinY >= -1; sinY -= 0.1) { double prevLat = lat; double prevLon = lon; Y = sin(M_PI_2 * sinY) * d; Z = (1 - X*X - Y*Y); if (fabs(Z) < 1e-5) Z = 0; Z = (Z_positive ? sqrt(Z) : -sqrt(Z)); lat = M_PI_2 - acos(Z); lon = atan2(Y, X); rect->RotateXYZ(lat, lon); drawArc(prevLat, prevLon, 1, lat, lon, 1, color, thickness, spacing * deg_to_rad, magnify, planet, view, projection, annotationMap); } } // Draw a circle centered at lat, lon with angular radius rad void drawCircle(const double lat, const double lon, const double rad, const unsigned char color[3], const int thickness, const double spacing, const double magnify, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap) { ProjectionRectangular *rect = new ProjectionRectangular(1, 0, 0); rect->SetXYZRotationMatrix(0, lat, -lon); drawAltitudeHalfCirc(rect, cos(rad), sin(rad), true, color, thickness, spacing, magnify, planet, view, projection, annotationMap); drawAltitudeHalfCirc(rect, cos(rad), sin(rad), false, color, thickness, spacing, magnify, planet, view, projection, annotationMap); delete rect; } xplanet-1.3.0/src/libannotate/addArcs.cpp0000644000175000017500000002143311107135656015253 00000000000000#include #include #include #include #include #include #include #include using namespace std; #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parse.h" #include "PlanetProperties.h" #include "sphericalToPixel.h" #include "xpUtil.h" #include "drawArc.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" #include "libprojection/ProjectionBase.h" class View; static void readArcFile(const char *line, Planet *planet, View *view, ProjectionBase *projection, PlanetProperties *planetProperties, multimap &annotationMap) { int i = 0; while (isDelimiter(line[i])) { i++; if (static_cast (i) > strlen(line)) return; } if (isEndOfLine(line[i])) return; Options *options = Options::getInstance(); unsigned char color[3]; double magnify; int thickness; if (planetProperties != NULL) { memcpy(color, planetProperties->ArcColor(), 3); magnify = planetProperties->Magnify(); thickness = planetProperties->ArcThickness(); } else { memset(color, 128, 3); magnify = 1.0; thickness = options->ArcThickness(); } double coords[4]; int numCoords = 0; int numRad = 0; double radius[2] = { -1, -1 }; double spacing = options->ArcSpacing(); bool syntaxError = false; while (static_cast (i) < strlen(line)) { char *returnString = NULL; int val = parse(i, line, returnString); switch (val) { case COLOR: { int r, g, b; if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3) { color[0] = static_cast (r & 0xff); color[1] = static_cast (g & 0xff); color[2] = static_cast (b & 0xff); } else { xpWarn("Need three values for color\n", __FILE__, __LINE__); syntaxError = true; } } break; case LATLON: checkLocale(LC_NUMERIC, "C"); if (numCoords < 4) { sscanf(returnString, "%lf", &coords[numCoords]); if (numCoords % 2 == 0) { if (coords[numCoords] < -90 || coords[numCoords] > 90) { ostringstream errMsg; errMsg << "Latitude value must be between -90 " << "and 90 degrees\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); syntaxError = true; } } else { if (coords[numCoords] < -360 || coords[numCoords] > 360) { ostringstream errMsg; errMsg << "Longitude value must be between -360 " << "and 360 degrees\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); syntaxError = true; } } coords[numCoords] *= deg_to_rad; numCoords++; } else { syntaxError = true; } checkLocale(LC_NUMERIC, ""); break; case RADIUS: checkLocale(LC_NUMERIC, "C"); if (numRad < 2) { sscanf(returnString, "%lf", &radius[numRad]); if (radius[numRad] < 0) { xpWarn("Radius value must be positive\n", __FILE__, __LINE__); radius[numRad] = -1; syntaxError = true; } else { numRad++; } } checkLocale(LC_NUMERIC, ""); break; case SPACING: checkLocale(LC_NUMERIC, "C"); sscanf(returnString, "%lf", &spacing); if (spacing < 0) { xpWarn("spacing must be positive\n", __FILE__, __LINE__); spacing = 0.1; syntaxError = true; } checkLocale(LC_NUMERIC, ""); break; case THICKNESS: sscanf(returnString, "%d", &thickness); if (thickness < 1) { xpWarn("thickness must be positive.\n", __FILE__, __LINE__); syntaxError = true; } break; case UNKNOWN: syntaxError = true; default: case DELIMITER: break; } if (val != DELIMITER && options->Verbosity() > 3) { ostringstream msg; msg << "value is " << keyWordString[val - '?']; if (returnString != NULL) msg << ", returnString is " << returnString; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } delete [] returnString; if (syntaxError) { ostringstream errStr; errStr << "Syntax error in arc file\n" << "line is \"" << line << "\"\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } if (val == ENDOFLINE) break; } if (numCoords != 4) { ostringstream errStr; errStr << "Incomplete entry in arc file\n" << "line is \"" << line << "\"\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } if (numRad == 0) radius[1] = radius[0]; for (i = 0; i < 2; i++) { if (radius[i] < 0) { if (planet != NULL) { radius[i] = planet->Radius(coords[2*i]); } else { radius[i] = 1; } } } if (planet == NULL) { double X1, Y1, Z1; double X2, Y2, Z2; sphericalToPixel(coords[0], coords[1], 1.0, X1, Y1, Z1, NULL, view, NULL); sphericalToPixel(coords[2], coords[3], 1.0, X2, Y2, Z2, NULL, view, NULL); LineSegment *ls = new LineSegment(color, thickness, X2, Y2, X1, Y1); double avgZ = 0.5 * (Z1 + Z2); if (Z1 > 0 && Z2 > 0) annotationMap.insert(pair(avgZ, ls)); } else { drawArc(coords[0], coords[1], radius[0], coords[2], coords[3], radius[1], color, thickness, spacing * deg_to_rad, magnify, planet, view, projection, annotationMap); } } // read an arc file to be plotted on a planet void addArcs(PlanetProperties *planetProperties, Planet *planet, View *view, ProjectionBase *projection, multimap &annotationMap) { vector arcfiles = planetProperties->ArcFiles(); vector::iterator ii = arcfiles.begin(); while (ii != arcfiles.end()) { string arcFile(*ii); bool foundFile = findFile(arcFile, "arcs"); if (foundFile) { ifstream inFile(arcFile.c_str()); char *line = new char[MAX_LINE_LENGTH]; while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL) readArcFile(line, planet, view, projection, planetProperties, annotationMap); inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load arc file " << arcFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } // Read an arc file to be plotted against the background stars (like // constellation lines) void addArcs(View *view, multimap &annotationMap) { Options *options = Options::getInstance(); vector arcfiles = options->ArcFiles(); vector::iterator ii = arcfiles.begin(); while (ii != arcfiles.end()) { string arcFile(*ii); bool foundFile = findFile(arcFile, "arcs"); if (foundFile) { ifstream inFile(arcFile.c_str()); char *line = new char[256]; while (inFile.getline (line, 256, '\n') != NULL) readArcFile(line, NULL, view, NULL, NULL, annotationMap); inFile.close(); delete [] line; } else { ostringstream errStr; errStr << "Can't load arc file " << arcFile << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } ii++; } } xplanet-1.3.0/src/libannotate/Annotation.h0000644000175000017500000000067310411344513015463 00000000000000#ifndef ANNOTATION_H #define ANNOTATION_H class DisplayBase; class Annotation { public: Annotation(); Annotation(const unsigned char color[3]); virtual ~Annotation(); int Width() const { return(width_); }; int Height() const { return(height_); }; virtual void Shift(const int x) = 0; virtual void Draw(DisplayBase *display) = 0; protected: unsigned char color_[3]; int width_, height_; }; #endif xplanet-1.3.0/src/libannotate/Annotation.cpp0000644000175000017500000000040710411344513016011 00000000000000#include using namespace std; #include "Annotation.h" Annotation::Annotation() : width_(0), height_(0) { } Annotation::Annotation(const unsigned char color[3]) : width_(0), height_(0) { memcpy(color_, color, 3); } Annotation::~Annotation() { } xplanet-1.3.0/src/libannotate/drawArc.h0000644000175000017500000000077510423221014014730 00000000000000#ifndef DRAW_ARC_H #define DRAW_ARC_H #include class Annotation; class Planet; class ProjectionBase; class View; extern void drawArc(const double lat1, const double lon1, const double rad1, const double lat2, const double lon2, const double rad2, const unsigned char color[3], const int thickness, const double spacing, const double magnify, Planet *planet, View *view, ProjectionBase *projection, std::multimap &annotationMap); #endif xplanet-1.3.0/src/libannotate/LineSegment.h0000644000175000017500000000076510423221014015556 00000000000000#ifndef LINESEGMENT_H #define LINESEGMENT_H #include "Annotation.h" class LineSegment : public Annotation { public: LineSegment(const unsigned char color[3], const int thickness, const double X0, const double Y0, const double X1, const double Y1); virtual ~LineSegment(); virtual void Shift(const int x) { X0_ += x; X1_ += x; }; virtual void Draw(DisplayBase *display); private: double X0_, Y0_, X1_, Y1_; double thickness_; }; #endif xplanet-1.3.0/src/libannotate/Text.cpp0000644000175000017500000001333211660335126014633 00000000000000#include #include #include #include using namespace std; #include "keywords.h" #include "Options.h" #include "xpUtil.h" #include "Text.h" #include "libdisplay/libdisplay.h" Text::Text(const unsigned char color[3], const int x, const int y, const int iconWidth, const int iconHeight, const int align, const std::string &text) : Annotation(color), align_(align), font_(""), fontSize_(-1), iconHeight_(iconHeight), iconWidth_(iconWidth), needAlign_(true), needBoundingBox_(true), opacity_(1.0), outlined_(true), text_(text), x_(x), y_(y) { if (align_ == AUTO) { fixedAlign_ = false; align_ = RIGHT; } else { fixedAlign_ = true; } } Text::~Text() { } void Text::ComputeBoundingBox(DisplayBase *display) { string saveFont = display->Font(); int saveFontSize = display->FontSize(); if (!font_.empty()) display->Font(font_); if (fontSize_ < 0) display->FontSize(saveFontSize); else display->FontSize(fontSize_); display->setText(text_); display->getTextBox(textWidth_, textHeight_); display->FreeText(); if (!font_.empty()) display->Font(saveFont); if (fontSize_ > 0) display->FontSize(saveFontSize); needBoundingBox_ = false; if (needAlign_) Align(align_); } int Text::Overlap(const int ulx, const int uly, const int lrx, const int lry) { if (ulx_ > lrx || lrx_ < ulx) return(0); if (uly_ > lry || lry_ < uly) return(0); int width, height; if (ulx_ > ulx) width = min(lrx, lrx_) - ulx_; else width = min(lrx, lrx_) - max(ulx, ulx_); if (uly_ > uly) height = min(lry, lry_) - uly_; else height = min(lry, lry_) - max(uly, uly_); return(width * height); } int Text::Overlap(const Text *const t) { // compute the overlap between the label and the other label's icon int ulx = t->x_ - t->iconWidth_/2; int uly = t->y_ - t->iconHeight_/2; int lrx = ulx + t->iconWidth_; int lry = uly + t->iconHeight_; int overlap = Overlap(ulx, uly, lrx, lry); // compute the overlap between the label and the other label's text overlap += Overlap(t->ulx_, t->uly_, t->lrx_, t->lry_); return(overlap); } // compute how much of the text falls off of the screen int Text::Overhang(const int width, const int height) { const int topOverhang = max(0, -uly_); const int bottomOverhang = max(0, lry_ - height); const int rightOverhang = max(0, lrx_ - width); const int leftOverhang = max(0, -ulx_); int returnVal = max(topOverhang, bottomOverhang) * textWidth_; returnVal += max(rightOverhang, leftOverhang) * textHeight_; return(returnVal); } void Text::Align(const int align) { if (needBoundingBox_) align_ = RIGHT; else align_ = align; switch (align_) { case RIGHT: xOffset_ = iconWidth_/2 + 2; yOffset_ = 0; break; case LEFT: xOffset_ = -(iconWidth_/2 + textWidth_ + 2); yOffset_ = 0; break; case ABOVE: xOffset_ = -textWidth_/2; yOffset_ = -(iconHeight_ + textHeight_)/2 - 2; break; case BELOW: xOffset_ = -textWidth_/2; yOffset_ = (iconHeight_ + textHeight_)/2 + 2; break; case CENTER: xOffset_ = -textWidth_/2; yOffset_ = 0; break; default: { ostringstream errStr; errStr << "Unknown alignment for marker " << text_ << ", using RIGHT\n"; xpWarn(errStr.str(), __FILE__, __LINE__); xOffset_ = iconWidth_/2 + 2; yOffset_ = 0; } } // Compute the corners of the text ulx_ = x_ + xOffset_ - 1; uly_ = y_ + yOffset_ - textHeight_/2 - 1; lrx_ = ulx_ + textWidth_ + 1; lry_ = uly_ + textHeight_ + 1; needAlign_ = false; } void Text::Draw(DisplayBase *display) { string saveFont = display->Font(); int saveFontSize = display->FontSize(); if (!font_.empty()) display->Font(font_); if (fontSize_ > 0) display->FontSize(fontSize_); if (needBoundingBox_) ComputeBoundingBox(display); if (needAlign_) Align(align_); Options *options = Options::getInstance(); string markerBounds(options->MarkerBounds()); if (!markerBounds.empty()) { // gcc 2.95 complains about ios_base::app ofstream outfile(markerBounds.c_str(), ios::app); if (outfile.is_open()) { if (x_ < display->Width() && x_ > -(lrx_ - ulx_)) outfile << ulx_ << "," << uly_ << " " << lrx_ << "," << lry_ << "\t" << text_ << endl; outfile.close(); /* for (int i = ulx_; i <= lrx_; i++) { display->setPixel(i, uly_, 255); display->setPixel(i, lry_, 255); } for (int i = uly_; i <= lry_; i++) { display->setPixel(ulx_, i, 255); display->setPixel(lrx_, i, 255); } */ } else { ostringstream errStr; errStr << "Can't open markerbounds file " << markerBounds << " for output\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } if (outlined_) display->DrawOutlinedText(x_ + xOffset_, y_ + yOffset_, text_, color_, opacity_); else display->DrawText(x_ + xOffset_, y_ + yOffset_, text_, color_, opacity_); if (!font_.empty()) display->Font(saveFont); if (fontSize_ > 0) display->FontSize(saveFontSize); } xplanet-1.3.0/src/libannotate/Icon.h0000644000175000017500000000074310411344513014237 00000000000000#ifndef ICON_H #define ICON_H #include #include "Annotation.h" class Image; class Icon : public Annotation { public: Icon(const int x, const int y, const std::string &filename, const unsigned char *transparent); virtual ~Icon(); virtual void Shift(const int x) { x_ += x; }; virtual void Draw(DisplayBase *display); private: int x_; const int y_; std::string filename_; Image *image_; unsigned char *transparent_; }; #endif xplanet-1.3.0/src/body.h0000644000175000017500000000223010411417337012002 00000000000000#ifndef BODY_H #define BODY_H enum body { SUN, MERCURY, VENUS, EARTH, MOON, MARS, PHOBOS, DEIMOS, JUPITER, IO, EUROPA, GANYMEDE, CALLISTO, SATURN, MIMAS, ENCELADUS, TETHYS, DIONE, RHEA, TITAN, HYPERION, IAPETUS, PHOEBE, URANUS, MIRANDA, ARIEL, UMBRIEL, TITANIA, OBERON, NEPTUNE, TRITON, NEREID, PLUTO, CHARON, RANDOM_BODY, // RANDOM_BODY needs to be after the last "real" body ABOVE_ORBIT, ALONG_PATH, BELOW_ORBIT, DEFAULT, MAJOR_PLANET, NAIF, NORAD, SAME_SYSTEM, UNKNOWN_BODY }; const char* const body_string[RANDOM_BODY] = {"sun", "mercury", "venus", "earth", "moon", "mars", "phobos", "deimos", "jupiter", "io", "europa", "ganymede", "callisto", "saturn", "mimas", "enceladus", "tethys", "dione", "rhea", "titan", "hyperion", "iapetus", "phoebe", "uranus", "miranda", "ariel", "umbriel", "titania", "oberon", "neptune", "triton", "nereid", "pluto", "charon"}; const int naif_id[RANDOM_BODY] = { 10, 199, 299, 399, 301, 499, 401, 402, 599, 501, 502, 503, 504, 699, 601, 602, 603, 604, 605, 606, 607, 608, 609, 799, 705, 701, 702, 703, 704, 899, 801, 802, 999, 901 }; #endif xplanet-1.3.0/src/setPositions.h0000644000175000017500000000121510423221014013536 00000000000000#ifndef SETPOSITIONS_H #define SETPOSITIONS_H #include #include struct LBRPoint; class Planet; class PlanetProperties; extern void setOriginXYZFromFile(const std::vector &originVector, const std::vector::iterator &iterOriginVector); extern void setTargetXYZ(PlanetProperties *planetProperties[]); extern void setOriginXYZ(PlanetProperties *planetProperties[]); extern void getObsLatLon(Planet *target, PlanetProperties *planetProperties[]); extern void setUpXYZ(const Planet *target, std::map &planetsFromSunMap, double &upX, double &upY, double &upZ); #endif xplanet-1.3.0/src/findFile.cpp0000644000175000017500000000521411641446021013123 00000000000000#include #include #include #include #include using namespace std; #include #include "Options.h" #include "xpDefines.h" #include "xpUtil.h" static bool fileExists(string &filename) { bool returnVal = false; ostringstream msg; msg << "Looking for " << filename << " ... "; ifstream f(filename.c_str()); if (f.is_open()) { struct stat status; stat(filename.c_str(), &status ); if (status.st_mode & S_IFREG) { msg << "found\n"; f.close(); returnVal = true; } else { msg << "is not a regular file!\n"; returnVal = false; } } else { msg << "not found\n"; returnVal = false; } Options *options = Options::getInstance(); if (options->Verbosity() > 2) { // only say we're looking for a file once static vector searchedFor; bool firstTime = true; for (int i = searchedFor.size()-1; i >= 0; i--) { if (searchedFor[i] == filename) { firstTime = false; break; } } if (firstTime) { searchedFor.push_back(filename); xpMsg(msg.str(), __FILE__, __LINE__); } } return(returnVal); } bool findFile(string &filename, const string &subdir) { // Check if the file exists in the current directory before going // to searchdir if (fileExists(filename)) return(true); Options *options = Options::getInstance(); vector searchdir = options->getSearchDir(); string newname; for (int i = searchdir.size() - 1; i >= 0; i--) { // Check in searchdir itself newname = searchdir[i]; newname += separator; newname += filename; if (fileExists(newname)) { filename = newname; return(true); } // Now look in searchdir + subdir newname = searchdir[i]; newname += separator; if (!subdir.empty()) { newname += subdir; newname += separator; } newname += filename; if (fileExists(newname)) { filename = newname; return(true); } } string errMsg("Can't find "); errMsg += filename; errMsg += " in\n"; for (int i = searchdir.size() - 1; i >= 0; i--) { errMsg += searchdir[i]; errMsg += separator; errMsg += subdir; errMsg += "\n"; } xpWarn(errMsg, __FILE__, __LINE__); return(false); } xplanet-1.3.0/src/readOriginFile.cpp0000644000175000017500000001211210423221014014247 00000000000000#include #include #include #include #include using namespace std; #include "findFile.h" #include "readOriginFile.h" #include "xpUtil.h" static double interpolateCircular(double x0, double x1, const double xMax, const double interpFactor) { const double larger = (x0 > x1 ? x0 : x1); const double smaller = (x0 < x1 ? x0 : x1); if ((larger - smaller) > (smaller - larger + xMax)) { if (x0 < x1) x0 += xMax; else x1 += xMax; } double returnVal = interpFactor * (x1 - x0) + x0; if (returnVal > xMax) returnVal -= xMax; return(returnVal); } void readOriginFile(string filename, vector &originVector) { if (!findFile(filename, "origin")) { ostringstream errStr; errStr << "Can't open origin file " << filename << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } checkLocale(LC_NUMERIC, "C"); ifstream infile(filename.c_str()); char line[256]; while(infile.getline(line, 256)) { if (line[0] == '#') continue; long int yyyymmdd, hhmmss; double r, lat, lon, localTime; int numRead = sscanf(line, "%ld.%ld %lf %lf %lf %lf", &yyyymmdd, &hhmmss, &r, &lat, &lon, &localTime); int yyyymm = yyyymmdd / 100; int year = yyyymm/100; int month = abs(yyyymm - year * 100); int day = abs((int) yyyymmdd - yyyymm * 100); int hhmm = hhmmss / 100; int hour = hhmm / 100; int min = hhmm - hour * 100; int sec = hhmmss - hhmm * 100; const double julian_day = toJulian(year, month, day, hour, min, sec); // If only the date has been specified, set range to 0 if (numRead < 3) r = 0; // If localTime isn't specified, set it to -1 if (numRead < 6) localTime = -1; lat *= deg_to_rad; lon *= deg_to_rad; LBRPoint p = { julian_day, r, lat, lon, localTime }; originVector.push_back(p); } checkLocale(LC_NUMERIC, ""); infile.close(); } void readDynamicOrigin(string filename, LBRPoint &originPoint) { if (!findFile(filename, "origin")) { ostringstream errStr; errStr << "Can't open origin file " << filename << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } checkLocale(LC_NUMERIC, "C"); ifstream infile(filename.c_str()); char line[256]; while(infile.getline(line, 256)) { if (line[0] == '#') continue; long int yyyymmdd, hhmmss; // not used double r, lat, lon, localTime = -1; sscanf(line, "%ld.%ld %lf %lf %lf %lf", &yyyymmdd, &hhmmss, &r, &lat, &lon, &localTime); lat *= deg_to_rad; lon *= deg_to_rad; originPoint.time = 0; originPoint.radius = r; originPoint.latitude = lat; originPoint.longitude = lon; originPoint.localTime = localTime; } checkLocale(LC_NUMERIC, ""); infile.close(); } void interpolateOriginFile(const double julianDay, const vector &originVector, double &rad, double &lat, double &lon, double &localTime) { const int numPoints = originVector.size(); if (julianDay < originVector[0].time) { rad = originVector[0].radius; lat = originVector[0].latitude; lon = originVector[0].longitude; localTime = originVector[0].localTime; } else if (julianDay > originVector[numPoints-1].time) { rad = originVector[numPoints-1].radius; lat = originVector[numPoints-1].latitude; lon = originVector[numPoints-1].longitude; localTime = originVector[numPoints-1].localTime; } else { double interpFactor = 0; for (int i = 1; i < numPoints; i++) { if (julianDay < originVector[i].time) { const double jd0 = originVector[i-1].time; const double jd1 = originVector[i].time; interpFactor = (julianDay - jd0)/(jd1 - jd0); rad = (interpFactor * (originVector[i].radius - originVector[i-1].radius) + originVector[i-1].radius); lat = (interpFactor * (originVector[i].latitude - originVector[i-1].latitude) + originVector[i-1].latitude); lon = interpolateCircular(originVector[i-1].longitude, originVector[i].longitude, TWO_PI, interpFactor); localTime = interpolateCircular(originVector[i-1].localTime, originVector[i].localTime, 24, interpFactor); break; } } } } xplanet-1.3.0/src/PlanetProperties.cpp0000644000175000017500000000735711724306745014727 00000000000000#include #include #include #include #include using namespace std; #include "body.h" #include "Options.h" #include "PlanetProperties.h" #include "xpDefines.h" PlanetProperties::PlanetProperties(const body index) : index_(index), arcThickness_(1), bumpMap_(""), bumpScale_(1), bumpShade_(-1.0), cloudGamma_(1), cloudMap_(""), cloudThreshold_(90), delOrbit_(2), drawOrbit_(false), grid_(false), grid1_(6), grid2_(15), magnify_(1.0), mapBounds_(false), mapUlx_(0), mapUly_(0), mapLrx_(0), mapLry_(0), markerFont_(""), markerFontSize_(-1), minRadiusForLabel_(.01), maxRadiusForLabel_(3.0), minRadiusForMarkers_(40.0), nightMap_(""), randomOrigin_(true), randomTarget_(true), rayleighEmissionWeight_(0.), rayleighFile_(""), rayleighLimbScale_(1.), rayleighScale_(0.), ssecMap_(false), shade_(0.3), specularMap_(""), startOrbit_(-0.5), stopOrbit_(0.5), twilight_(6) { memset(arcColor_, 255, 3); // default arc color is white memset(color_, 255, 3); memset(gridColor_, 255, 3); // default grid color is white memset(markerColor_, 0, 3); memset(orbitColor_, 255, 3); memset(textColor_, 0, 3); markerColor_[0] = 255; // default marker color is red textColor_[0] = 255; // default text color is red arcFiles_.clear(); markerFiles_.clear(); satelliteFiles_.clear(); if (index < RANDOM_BODY) { name_ = body_string[index]; dayMap_ = name_ + defaultMapExt; name_[0] = toupper(name_[0]); } // Everything besides the name and day map gets set to default // values from the config file in readConfig.cpp, so there's no // point in setting them here. } PlanetProperties::~PlanetProperties() { } PlanetProperties & PlanetProperties::operator= (const PlanetProperties &p) { memcpy(arcColor_, p.arcColor_, 3); memcpy(color_, p.color_, 3); memcpy(gridColor_, p.gridColor_, 3); memcpy(markerColor_, p.markerColor_, 3); memcpy(orbitColor_, p.orbitColor_, 3); memcpy(textColor_, p.textColor_, 3); for (unsigned int i = 0; i < p.arcFiles_.size(); i++) arcFiles_.push_back(p.arcFiles_[i]); for (unsigned int i = 0; i < p.markerFiles_.size(); i++) markerFiles_.push_back(p.markerFiles_[i]); for (unsigned int i = 0; i < p.satelliteFiles_.size(); i++) satelliteFiles_.push_back(p.satelliteFiles_[i]); arcThickness_ = p.arcThickness_; bumpMap_ = p.bumpMap_; bumpShade_ = p.bumpShade_; bumpScale_ = p.bumpScale_; cloudGamma_ = p.cloudGamma_; cloudMap_ = p.cloudMap_; cloudThreshold_ = p.cloudThreshold_; delOrbit_ = p.delOrbit_; drawOrbit_ = p.drawOrbit_; grid_ = p.grid_; grid1_ = p.grid1_; grid2_ = p.grid2_; magnify_ = p.magnify_; mapBounds_ = p.mapBounds_; mapUly_ = p.mapUly_; mapUlx_ = p.mapUlx_; mapLry_ = p.mapLry_; mapLrx_ = p.mapLrx_; markerFont_ = p.markerFont_; markerFontSize_ = p.markerFontSize_; minRadiusForLabel_ = p.minRadiusForLabel_; maxRadiusForLabel_ = p.maxRadiusForLabel_; minRadiusForMarkers_ = p.minRadiusForMarkers_; randomOrigin_ = p.randomOrigin_; randomTarget_ = p.randomTarget_; rayleighEmissionWeight_ = p.rayleighEmissionWeight_; rayleighFile_ = p.rayleighFile_; rayleighLimbScale_ = p.rayleighLimbScale_; rayleighScale_ = p.rayleighScale_; ssecMap_ = p.ssecMap_; shade_ = p.shade_; startOrbit_ = p.startOrbit_; stopOrbit_ = p.stopOrbit_; twilight_ = p.twilight_; return(*this); } xplanet-1.3.0/src/satrings.h0000644000175000017500000011356310411344513012706 00000000000000#ifndef SATRINGS_H #define SATRINGS_H /* This is from Bjorn Jonsson's page at http://www.mmedia.is/~bjj/data/saturn/rings.html */ const int LIT = 915; const int TRANSP = 1444; const double inner_radius = 74400; const double outer_radius = 140154; const double saturn_radius = 60368; //const double ring_color[3] = {1.0, 0.88, 0.82}; const unsigned char ring_color[3] = {255, 224, 209}; /* These are brightnesses in the range 0-1. The first value is at the outer radius and the last value is at the inner radius. */ const double ring_brightness[LIT] = { 0.070588235, 0.117647059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.392156863, 0.764705882, 0.784313725, 0.764705882, 0, 0.760784314, 0.760784314, 0.764705882, 0.760784314, 0.756862745, 0.776470588, 0.760784314, 0.760784314, 0.764705882, 0.741176471, 0.760784314, 0.745098039, 0.768627451, 0.752941176, 0.749019608, 0.752941176, 0.737254902, 0.756862745, 0.737254902, 0.725490196, 0.745098039, 0.733333333, 0.729411765, 0.737254902, 0.737254902, 0.709803922, 0.71372549, 0.68627451, 0.662745098, 0.705882353, 0.705882353, 0.701960784, 0.68627451, 0.674509804, 0.682352941, 0, 0, 0, 0, 0.670588235, 0.674509804, 0.674509804, 0.674509804, 0.670588235, 0.694117647, 0.678431373, 0.690196078, 0.678431373, 0.674509804, 0.666666667, 0.694117647, 0.721568627, 0.698039216, 0.643137255, 0.690196078, 0.701960784, 0.698039216, 0.694117647, 0.690196078, 0.682352941, 0.68627451, 0.68627451, 0.670588235, 0.658823529, 0.670588235, 0.678431373, 0.682352941, 0.68627451, 0.674509804, 0.678431373, 0.694117647, 0.682352941, 0.705882353, 0.705882353, 0.674509804, 0.643137255, 0.682352941, 0.694117647, 0.698039216, 0.698039216, 0.690196078, 0.682352941, 0.678431373, 0.682352941, 0.666666667, 0.658823529, 0.68627451, 0.666666667, 0.678431373, 0.678431373, 0.682352941, 0.678431373, 0.674509804, 0.670588235, 0.678431373, 0.682352941, 0.68627451, 0.674509804, 0.68627451, 0.678431373, 0.674509804, 0.678431373, 0.68627451, 0.68627451, 0.694117647, 0.68627451, 0.68627451, 0.701960784, 0.698039216, 0.705882353, 0.698039216, 0.709803922, 0.71372549, 0.709803922, 0.717647059, 0.705882353, 0.717647059, 0.721568627, 0.717647059, 0.721568627, 0.733333333, 0.721568627, 0.752941176, 0.729411765, 0.737254902, 0.737254902, 0.741176471, 0.745098039, 0.741176471, 0.741176471, 0.776470588, 0.741176471, 0.741176471, 0.760784314, 0.737254902, 0.741176471, 0.741176471, 0.760784314, 0.749019608, 0.745098039, 0.752941176, 0.756862745, 0.752941176, 0.760784314, 0.764705882, 0.752941176, 0.760784314, 0.77254902, 0.721568627, 0.670588235, 0.694117647, 0.760784314, 0.756862745, 0.764705882, 0.764705882, 0.768627451, 0.764705882, 0.780392157, 0.784313725, 0.784313725, 0.792156863, 0.796078431, 0.82745098, 0.823529412, 0.847058824, 0.831372549, 0.823529412, 0.823529412, 0.839215686, 0.839215686, 0.854901961, 0.839215686, 0.866666667, 0.862745098, 0.870588235, 0.870588235, 0.874509804, 0.866666667, 0.815686275, 0.807843137, 0.823529412, 0.862745098, 0.870588235, 0.850980392, 0.866666667, 0.866666667, 0.870588235, 0.882352941, 0.882352941, 0.870588235, 0.866666667, 0.862745098, 0.847058824, 0.807843137, 0.788235294, 0.760784314, 0.705882353, 0.62745098, 0.631372549, 0.62745098, 0.615686275, 0.615686275, 0.6, 0.588235294, 0.57254902, 0.57254902, 0.560784314, 0.537254902, 0.51372549, 0.48627451, 0.482352941, 0.454901961, 0.341176471, 0.549019608, 0.705882353, 0.670588235, 0.690196078, 0.678431373, 0.435294118, 0.278431373, 0.247058824, 0.325490196, 0.235294118, 0.411764706, 0.478431373, 0.023529412, 0, 0.082352941, 0.168627451, 0.2, 0.196078431, 0.184313725, 0.188235294, 0.17254902, 0.282352941, 0.352941176, 0.321568627, 0.309803922, 0.349019608, 0, 0.188235294, 0.333333333, 0.321568627, 0.352941176, 0, 0.349019608, 0.345098039, 0.333333333, 0.31372549, 0, 0.42745098, 0.4, 0.411764706, 0, 0, 0, 0, 0, 0.721568627, 0.698039216, 0.803921569, 0.741176471, 0.741176471, 0.847058824, 0.870588235, 0.909803922, 0.917647059, 0.941176471, 0.952941176, 0.960784314, 0.917647059, 0.850980392, 0.898039216, 0.945098039, 0.960784314, 0.976470588, 0.945098039, 0.91372549, 0.917647059, 0.882352941, 0.917647059, 0.894117647, 0.921568627, 0.921568627, 0.949019608, 0.941176471, 0.929411765, 0.929411765, 0.909803922, 0.850980392, 0.819607843, 0.878431373, 0.905882353, 0.909803922, 0.901960784, 0.905882353, 0.91372549, 0.901960784, 0.88627451, 0.870588235, 0.882352941, 0.898039216, 0.88627451, 0.874509804, 0.878431373, 0.870588235, 0.890196078, 0.88627451, 0.88627451, 0.882352941, 0.894117647, 0.890196078, 0.890196078, 0.874509804, 0.874509804, 0.866666667, 0.91372549, 0.882352941, 0.878431373, 0.862745098, 0.882352941, 0.901960784, 0.878431373, 0.88627451, 0.898039216, 0.882352941, 0.88627451, 0.88627451, 0.878431373, 0.870588235, 0.878431373, 0.870588235, 0.878431373, 0.866666667, 0.862745098, 0.870588235, 0.862745098, 0.847058824, 0.850980392, 0.870588235, 0.862745098, 0.835294118, 0.866666667, 0.854901961, 0.835294118, 0.847058824, 0.831372549, 0.803921569, 0.807843137, 0.8, 0.8, 0.8, 0.823529412, 0.796078431, 0.780392157, 0.792156863, 0.807843137, 0.819607843, 0.819607843, 0.8, 0.803921569, 0.764705882, 0.792156863, 0.77254902, 0.780392157, 0.796078431, 0.784313725, 0.776470588, 0.811764706, 0.8, 0.807843137, 0.831372549, 0.82745098, 0.850980392, 0.835294118, 0.823529412, 0.858823529, 0.874509804, 0.862745098, 0.835294118, 0.839215686, 0.854901961, 0.862745098, 0.850980392, 0.835294118, 0.823529412, 0.823529412, 0.815686275, 0.819607843, 0.831372549, 0.815686275, 0.823529412, 0.815686275, 0.831372549, 0.847058824, 0.850980392, 0.854901961, 0.843137255, 0.823529412, 0.831372549, 0.843137255, 0.862745098, 0.858823529, 0.847058824, 0.819607843, 0.823529412, 0.835294118, 0.835294118, 0.819607843, 0.835294118, 0.811764706, 0.835294118, 0.8, 0.807843137, 0.780392157, 0.780392157, 0.776470588, 0.796078431, 0.749019608, 0.780392157, 0.776470588, 0.784313725, 0.780392157, 0.77254902, 0.764705882, 0.768627451, 0.752941176, 0.756862745, 0.77254902, 0.756862745, 0.784313725, 0.768627451, 0.764705882, 0.752941176, 0.784313725, 0.764705882, 0.749019608, 0.768627451, 0.756862745, 0.741176471, 0.768627451, 0.752941176, 0.768627451, 0.745098039, 0.760784314, 0.733333333, 0.768627451, 0.764705882, 0.764705882, 0.752941176, 0.760784314, 0.745098039, 0.77254902, 0.737254902, 0.784313725, 0.77254902, 0.796078431, 0.815686275, 0.8, 0.792156863, 0.839215686, 0.811764706, 0.819607843, 0.796078431, 0.803921569, 0.807843137, 0.82745098, 0.788235294, 0.756862745, 0.803921569, 0.823529412, 0.843137255, 0.858823529, 0.815686275, 0.82745098, 0.803921569, 0.807843137, 0.8, 0.784313725, 0.77254902, 0.784313725, 0.760784314, 0.776470588, 0.756862745, 0.764705882, 0.752941176, 0.839215686, 0.803921569, 0.803921569, 0.768627451, 0.760784314, 0.756862745, 0.784313725, 0.756862745, 0.741176471, 0.764705882, 0.741176471, 0.71372549, 0.71372549, 0.721568627, 0.71372549, 0.741176471, 0.721568627, 0.721568627, 0.721568627, 0.705882353, 0.725490196, 0.780392157, 0.811764706, 0.756862745, 0.760784314, 0.756862745, 0.776470588, 0.792156863, 0.792156863, 0.780392157, 0.77254902, 0.768627451, 0.745098039, 0.788235294, 0.749019608, 0.749019608, 0.776470588, 0.768627451, 0.780392157, 0.780392157, 0.725490196, 0.776470588, 0.760784314, 0.784313725, 0.670588235, 0.768627451, 0.768627451, 0.788235294, 0.729411765, 0.749019608, 0.745098039, 0.745098039, 0.741176471, 0.780392157, 0.717647059, 0.741176471, 0.705882353, 0.733333333, 0.709803922, 0.77254902, 0.71372549, 0.68627451, 0.694117647, 0.690196078, 0.701960784, 0.725490196, 0.705882353, 0.788235294, 0.803921569, 0.796078431, 0.788235294, 0.749019608, 0.690196078, 0.662745098, 0.733333333, 0.776470588, 0.760784314, 0.737254902, 0.745098039, 0.752941176, 0.741176471, 0.725490196, 0.737254902, 0.752941176, 0.752941176, 0.776470588, 0.729411765, 0.690196078, 0.698039216, 0.68627451, 0.68627451, 0.674509804, 0.68627451, 0.670588235, 0.698039216, 0.670588235, 0.690196078, 0.682352941, 0.670588235, 0.705882353, 0.749019608, 0.729411765, 0.752941176, 0.741176471, 0.71372549, 0.717647059, 0.721568627, 0.737254902, 0.756862745, 0.749019608, 0.733333333, 0.721568627, 0.71372549, 0.705882353, 0.733333333, 0.71372549, 0.721568627, 0.749019608, 0.729411765, 0.749019608, 0.760784314, 0.764705882, 0.749019608, 0.752941176, 0.756862745, 0.749019608, 0.764705882, 0.752941176, 0.776470588, 0.756862745, 0.776470588, 0.77254902, 0.768627451, 0.709803922, 0.588235294, 0.549019608, 0.541176471, 0.541176471, 0.517647059, 0.521568627, 0.51372549, 0.494117647, 0.482352941, 0.482352941, 0.462745098, 0.462745098, 0.443137255, 0.435294118, 0.42745098, 0.403921569, 0.4, 0.407843137, 0.407843137, 0.662745098, 0.654901961, 0.658823529, 0.658823529, 0.654901961, 0, 0.37254902, 0.611764706, 0.345098039, 0.258823529, 0.411764706, 0.666666667, 0.541176471, 0.290196078, 0.258823529, 0.270588235, 0.235294118, 0.274509804, 0.215686275, 0.298039216, 0.6, 0.368627451, 0.270588235, 0.266666667, 0.278431373, 0.243137255, 0, 0.294117647, 0.180392157, 0.419607843, 0.525490196, 0.537254902, 0.525490196, 0.380392157, 0.278431373, 0.298039216, 0.282352941, 0.270588235, 0.243137255, 0.219607843, 0.258823529, 0.235294118, 0.192156863, 0.215686275, 0.235294118, 0, 0, 0.294117647, 0.258823529, 0.333333333, 0.270588235, 0.215686275, 0.266666667, 0.258823529, 0.219607843, 0.211764706, 0.141176471, 0.450980392, 0.549019608, 0.568627451, 0.501960784, 0.290196078, 0.274509804, 0.270588235, 0.235294118, 0.250980392, 0.482352941, 0.254901961, 0.156862745, 0.352941176, 0.411764706, 0.254901961, 0.254901961, 0.278431373, 0.270588235, 0.278431373, 0.282352941, 0.278431373, 0.270588235, 0.184313725, 0.352941176, 0.498039216, 0.537254902, 0.42745098, 0.266666667, 0.282352941, 0.282352941, 0.282352941, 0.278431373, 0.282352941, 0.282352941, 0.290196078, 0.282352941, 0.282352941, 0.282352941, 0.278431373, 0.270588235, 0.250980392, 0.258823529, 0.262745098, 0.250980392, 0.254901961, 0.270588235, 0.28627451, 0.274509804, 0.274509804, 0.290196078, 0.305882353, 0.301960784, 0.294117647, 0.298039216, 0.28627451, 0.28627451, 0.282352941, 0.282352941, 0.270588235, 0.254901961, 0.254901961, 0.258823529, 0.262745098, 0.305882353, 0.305882353, 0.266666667, 0.274509804, 0.282352941, 0.282352941, 0.282352941, 0.274509804, 0.262745098, 0.254901961, 0.262745098, 0.247058824, 0.254901961, 0.243137255, 0.258823529, 0.254901961, 0.270588235, 0.266666667, 0.274509804, 0.282352941, 0.270588235, 0.270588235, 0.270588235, 0.262745098, 0.239215686, 0.250980392, 0.254901961, 0.250980392, 0.258823529, 0.258823529, 0.278431373, 0.250980392, 0.274509804, 0.258823529, 0.235294118, 0.235294118, 0.219607843, 0.223529412, 0.223529412, 0.31372549, 0.282352941, 0.243137255, 0.239215686, 0.247058824, 0.239215686, 0.239215686, 0.22745098, 0.239215686, 0.231372549, 0.196078431, 0.196078431, 0.231372549, 0.254901961, 0.239215686, 0.239215686, 0.239215686, 0.250980392, 0.192156863, 0.239215686, 0, 0, 0, 0.160784314, 0.243137255, 0.156862745, 0.247058824, 0.215686275, 0.180392157, 0.223529412, 0.325490196, 0.305882353, 0.184313725, 0.196078431, 0.203921569, 0.196078431, 0.101960784, 0.145098039, 0.137254902, 0.192156863, 0.211764706, 0.192156863, 0.298039216, 0.356862745, 0.207843137, 0.247058824, 0.247058824, 0.243137255, 0, 0.11372549, 0.133333333, 0.152941176, 0.145098039, 0.149019608, 0.160784314, 0.141176471, 0.160784314, 0.141176471, 0.152941176, 0.223529412, 0.223529412, 0.156862745, 0.17254902, 0.203921569, 0.109803922, 0.121568627, 0.121568627}; /* These are transparencies in the range 0-1. The first value is at the outer radius and the last value is at the inner radius. */ const double ring_transparency[TRANSP] = { 0.285714286, 0.619047619, 0.41991342, 0.506493506, 0.251082251, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.341991342, 0.424242424, 0.393939394, 0.415584416, 0.38961039, 0.350649351, 1, 0.367965368, 0.393939394, 0.398268398, 0.415584416, 0.406926407, 0.393939394, 0.415584416, 0.437229437, 0.411255411, 0.441558442, 0.454545455, 0.45021645, 0.432900433, 0.45021645, 0.45021645, 0.437229437, 0.437229437, 0.454545455, 0.441558442, 0.458874459, 0.445887446, 0.428571429, 0.437229437, 0.445887446, 0.493506494, 0.467532468, 0.45021645, 0.45021645, 0.45021645, 0.445887446, 0.463203463, 0.471861472, 0.45021645, 0.441558442, 0.454545455, 0.454545455, 0.45021645, 0.45021645, 0.454545455, 0.454545455, 0.45021645, 0.415584416, 0.424242424, 0.424242424, 0.41991342, 0.385281385, 0.45021645, 0.38961039, 0.333333333, 0.307359307, 0.337662338, 0.367965368, 0.402597403, 0.45021645, 0.367965368, 0.415584416, 0.415584416, 0.41991342, 0.398268398, 0.445887446, 0.458874459, 0.441558442, 0.41991342, 1, 1, 1, 0.5, 1, 1, 1, 0.454545455, 0.346320346, 0.463203463, 0.528138528, 0.510822511, 0.510822511, 0.519480519, 0.519480519, 0.532467532, 0.532467532, 0.536796537, 0.541125541, 0.519480519, 0.523809524, 0.519480519, 0.541125541, 0.536796537, 0.502164502, 0.515151515, 0.515151515, 0.471861472, 0.484848485, 0.463203463, 0.411255411, 0.393939394, 0.380952381, 0.489177489, 0.484848485, 0.467532468, 0.493506494, 0.497835498, 0.489177489, 0.502164502, 0.515151515, 0.554112554, 0.541125541, 0.346320346, 0.341991342, 0.303030303, 0.463203463, 0.541125541, 0.571428571, 0.567099567, 0.554112554, 0.562770563, 0.571428571, 0.571428571, 0.562770563, 0.54978355, 0.545454545, 0.567099567, 0.541125541, 0.532467532, 0.54978355, 0.528138528, 0.484848485, 0.506493506, 0.471861472, 0.476190476, 0.506493506, 0.528138528, 0.437229437, 0.341991342, 0.406926407, 0.463203463, 0.480519481, 0.458874459, 0.445887446, 0.502164502, 0.480519481, 0.502164502, 0.541125541, 0.528138528, 0.558441558, 0.541125541, 0.58008658, 0.597402597, 0.588744589, 0.558441558, 0.567099567, 0.567099567, 0.58008658, 0.614718615, 0.588744589, 0.593073593, 0.58008658, 0.597402597, 0.575757576, 0.58008658, 0.584415584, 0.593073593, 0.593073593, 0.562770563, 0.584415584, 0.588744589, 0.597402597, 0.58008658, 0.575757576, 0.584415584, 0.584415584, 0.571428571, 0.58008658, 0.571428571, 0.558441558, 0.562770563, 0.562770563, 0.558441558, 0.571428571, 0.545454545, 0.571428571, 0.532467532, 0.541125541, 0.54978355, 0.541125541, 0.545454545, 0.558441558, 0.541125541, 0.528138528, 0.536796537, 0.536796537, 0.532467532, 0.523809524, 0.519480519, 0.510822511, 0.515151515, 0.506493506, 0.510822511, 0.510822511, 0.506493506, 0.502164502, 0.523809524, 0.532467532, 0.506493506, 0.502164502, 0.458874459, 0.523809524, 0.463203463, 0.489177489, 0.510822511, 0.489177489, 0.493506494, 0.497835498, 0.471861472, 0.489177489, 0.484848485, 0.445887446, 0.471861472, 0.471861472, 0.476190476, 0.463203463, 0.45021645, 0.454545455, 0.467532468, 0.441558442, 0.458874459, 0.441558442, 0.445887446, 0.445887446, 0.437229437, 0.441558442, 0.445887446, 0.441558442, 0.463203463, 0.458874459, 0.454545455, 0.437229437, 0.458874459, 0.41991342, 0.424242424, 0.411255411, 0.445887446, 0.445887446, 0.441558442, 0.398268398, 0.380952381, 0.38961039, 0.393939394, 0.415584416, 0.428571429, 0.38961039, 0.402597403, 0.406926407, 0.38961039, 0.393939394, 0.38961039, 0.411255411, 0.402597403, 0.376623377, 0.428571429, 0.437229437, 0.393939394, 0.402597403, 0.398268398, 0.398268398, 0.380952381, 0.372294372, 0.385281385, 0.372294372, 0.372294372, 0.376623377, 0.380952381, 0.38961039, 0.393939394, 0.385281385, 0.354978355, 0.341991342, 0.346320346, 0.341991342, 0.333333333, 0.32034632, 0.311688312, 0.32034632, 0.272727273, 0.285714286, 0.303030303, 0.346320346, 0.32034632, 0.324675325, 0.25974026, 0.212121212, 0.281385281, 0.281385281, 0.277056277, 0.277056277, 0.25974026, 0.207792208, 0.203463203, 0.242424242, 0.212121212, 0.155844156, 0.16017316, 0.147186147, 0.155844156, 0.151515152, 0.155844156, 0.164502165, 0.186147186, 0.25974026, 0.272727273, 0.264069264, 0.277056277, 0.207792208, 0.194805195, 0.19047619, 0.181818182, 0.177489177, 0.168831169, 0.186147186, 0.155844156, 0.142857143, 0.147186147, 0.147186147, 0.138528139, 0.142857143, 0.116883117, 0.147186147, 0.125541126, 0.0995671, 0.173160173, 0.207792208, 0.220779221, 0.251082251, 0.307359307, 0.207792208, 0.354978355, 0.683982684, 0.835497835, 0.87012987, 0.887445887, 0.904761905, 0.917748918, 0.930735931, 0.935064935, 0.948051948, 0.956709957, 0.96969697, 0.974025974, 0.96969697, 0.982683983, 0.987012987, 0.991341991, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.995670996, 0.826839827, 0.337662338, 0.294372294, 0.385281385, 0.376623377, 0.333333333, 0.341991342, 0.688311688, 0.796536797, 0.770562771, 0.761904762, 0.640692641, 0.541125541, 0.601731602, 0.688311688, 0.727272727, 0.670995671, 1, 1, 1, 1, 1, 0.45021645, 0.623376623, 0.645021645, 0.640692641, 0.645021645, 0.662337662, 0.658008658, 0.666666667, 0.645021645, 0.658008658, 0.675324675, 0.757575758, 0.774891775, 0.753246753, 0.766233766, 0.766233766, 0.766233766, 0.774891775, 0.826839827, 0.675324675, 1, 0.718614719, 0.792207792, 0.792207792, 0.800865801, 0.787878788, 0.852813853, 0.627705628, 1, 0.67965368, 0.80952381, 0.80952381, 0.813852814, 0.800865801, 0.727272727, 0.510822511, 1, 1, 0.61038961, 0.796536797, 0.800865801, 0.844155844, 0.800865801, 0.532467532, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.311688312, 0.281385281, 0.246753247, 0.268398268, 0.142857143, 0.173160173, 0.164502165, 0.277056277, 0.138528139, 0.121212121, 0.116883117, 0.086580087, 0.064935065, 0.069264069, 0.086580087, 0.077922078, 0.108225108, 0.138528139, 0.168831169, 0.155844156, 0.108225108, 0.069264069, 0.073593074, 0.082251082, 0.082251082, 0.095238095, 0.0995671, 0.0995671, 0.112554113, 0.125541126, 0.108225108, 0.0995671, 0.073593074, 0.060606061, 0.064935065, 0.069264069, 0.073593074, 0.069264069, 0.086580087, 0.073593074, 0.073593074, 0.069264069, 0.086580087, 0.069264069, 0.064935065, 0.073593074, 0.090909091, 0.077922078, 0.073593074, 0.064935065, 0.056277056, 0.056277056, 0.064935065, 0.060606061, 0.064935065, 0.056277056, 0.056277056, 0.060606061, 0.056277056, 0.060606061, 0.060606061, 0.060606061, 0.064935065, 0.069264069, 0.069264069, 0.064935065, 0.073593074, 0.064935065, 0.064935065, 0.069264069, 0.073593074, 0.082251082, 0.056277056, 0.060606061, 0.073593074, 0.090909091, 0.060606061, 0.077922078, 0.056277056, 0.056277056, 0.060606061, 0.056277056, 0.082251082, 0.064935065, 0.056277056, 0.064935065, 0.051948052, 0.060606061, 0.073593074, 0.060606061, 0.047619048, 0.060606061, 0.060606061, 0.056277056, 0.051948052, 0.060606061, 0.064935065, 0.064935065, 0.069264069, 0.060606061, 0.056277056, 0.060606061, 0.060606061, 0.060606061, 0.073593074, 0.064935065, 0.060606061, 0.060606061, 0.047619048, 0.051948052, 0.069264069, 0.064935065, 0.069264069, 0.064935065, 0.064935065, 0.073593074, 0.051948052, 0.060606061, 0.051948052, 0.051948052, 0.043290043, 0.051948052, 0.043290043, 0.060606061, 0.051948052, 0.051948052, 0.060606061, 0.060606061, 0.064935065, 0.047619048, 0.056277056, 0.051948052, 0.060606061, 0.056277056, 0.047619048, 0.056277056, 0.060606061, 0.047619048, 0.051948052, 0.056277056, 0.060606061, 0.056277056, 0.047619048, 0.051948052, 0.051948052, 0.047619048, 0.051948052, 0.051948052, 0.060606061, 0.047619048, 0.051948052, 0.051948052, 0.051948052, 0.056277056, 0.038961039, 0.047619048, 0.051948052, 0.047619048, 0.051948052, 0.060606061, 0.056277056, 0.056277056, 0.060606061, 0.060606061, 0.073593074, 0.056277056, 0.051948052, 0.047619048, 0.047619048, 0.047619048, 0.056277056, 0.060606061, 0.051948052, 0.056277056, 0.069264069, 0.051948052, 0.060606061, 0.064935065, 0.064935065, 0.060606061, 0.064935065, 0.051948052, 0.069264069, 0.069264069, 0.064935065, 0.086580087, 0.069264069, 0.056277056, 0.056277056, 0.064935065, 0.060606061, 0.069264069, 0.060606061, 0.060606061, 0.056277056, 0.043290043, 0.073593074, 0.060606061, 0.047619048, 0.056277056, 0.047619048, 0.051948052, 0.047619048, 0.043290043, 0.060606061, 0.056277056, 0.043290043, 0.051948052, 0.047619048, 0.047619048, 0.064935065, 0.064935065, 0.056277056, 0.064935065, 0.056277056, 0.051948052, 0.064935065, 0.051948052, 0.056277056, 0.056277056, 0.064935065, 0.069264069, 0.077922078, 0.077922078, 0.069264069, 0.069264069, 0.060606061, 0.056277056, 0.051948052, 0.056277056, 0.060606061, 0.060606061, 0.073593074, 0.056277056, 0.060606061, 0.064935065, 0.060606061, 0.060606061, 0.064935065, 0.056277056, 0.051948052, 0.056277056, 0.043290043, 0.043290043, 0.038961039, 0.038961039, 0.056277056, 0.064935065, 0.047619048, 0.051948052, 0.047619048, 0.060606061, 0.056277056, 0.056277056, 0.060606061, 0.056277056, 0.060606061, 0.047619048, 0.060606061, 0.051948052, 0.056277056, 0.060606061, 0.056277056, 0.047619048, 0.043290043, 0.056277056, 0.056277056, 0.056277056, 0.069264069, 0.060606061, 0.051948052, 0.056277056, 0.056277056, 0.064935065, 0.060606061, 0.043290043, 0.056277056, 0.051948052, 0.060606061, 0.064935065, 0.060606061, 0.056277056, 0.051948052, 0.043290043, 0.060606061, 0.060606061, 0.060606061, 0.056277056, 0.056277056, 0.060606061, 0.043290043, 0.047619048, 0.060606061, 0.051948052, 0.056277056, 0.060606061, 0.069264069, 0.060606061, 0.043290043, 0.056277056, 0.047619048, 0.060606061, 0.060606061, 0.056277056, 0.060606061, 0.086580087, 0.073593074, 0.047619048, 0.069264069, 0.073593074, 0.073593074, 0.095238095, 0.069264069, 0.069264069, 0.082251082, 0.082251082, 0.095238095, 0.073593074, 0.077922078, 0.090909091, 0.086580087, 0.069264069, 0.077922078, 0.069264069, 0.086580087, 0.077922078, 0.077922078, 0.103896104, 0.082251082, 0.095238095, 0.077922078, 0.086580087, 0.090909091, 0.090909091, 0.082251082, 0.069264069, 0.082251082, 0.077922078, 0.086580087, 0.069264069, 0.073593074, 0.064935065, 0.073593074, 0.073593074, 0.086580087, 0.064935065, 0.069264069, 0.069264069, 0.069264069, 0.077922078, 0.077922078, 0.095238095, 0.077922078, 0.086580087, 0.086580087, 0.082251082, 0.095238095, 0.086580087, 0.077922078, 0.069264069, 0.056277056, 0.064935065, 0.069264069, 0.069264069, 0.073593074, 0.073593074, 0.077922078, 0.069264069, 0.069264069, 0.073593074, 0.073593074, 0.069264069, 0.056277056, 0.073593074, 0.064935065, 0.060606061, 0.060606061, 0.060606061, 0.069264069, 0.060606061, 0.073593074, 0.069264069, 0.064935065, 0.064935065, 0.064935065, 0.064935065, 0.073593074, 0.064935065, 0.073593074, 0.082251082, 0.090909091, 0.082251082, 0.073593074, 0.069264069, 0.073593074, 0.077922078, 0.095238095, 0.0995671, 0.095238095, 0.086580087, 0.073593074, 0.073593074, 0.082251082, 0.082251082, 0.069264069, 0.060606061, 0.077922078, 0.069264069, 0.073593074, 0.069264069, 0.069264069, 0.064935065, 0.082251082, 0.112554113, 0.108225108, 0.086580087, 0.108225108, 0.121212121, 0.108225108, 0.108225108, 0.108225108, 0.112554113, 0.103896104, 0.12987013, 0.125541126, 0.103896104, 0.090909091, 0.112554113, 0.0995671, 0.116883117, 0.121212121, 0.12987013, 0.121212121, 0.116883117, 0.112554113, 0.121212121, 0.121212121, 0.112554113, 0.0995671, 0.112554113, 0.108225108, 0.103896104, 0.108225108, 0.142857143, 0.121212121, 0.116883117, 0.125541126, 0.112554113, 0.12987013, 0.121212121, 0.116883117, 0.121212121, 0.121212121, 0.116883117, 0.12987013, 0.121212121, 0.112554113, 0.0995671, 0.0995671, 0.082251082, 0.086580087, 0.082251082, 0.086580087, 0.086580087, 0.0995671, 0.12987013, 0.125541126, 0.095238095, 0.095238095, 0.12987013, 0.112554113, 0.090909091, 0.0995671, 0.0995671, 0.116883117, 0.112554113, 0.112554113, 0.103896104, 0.116883117, 0.116883117, 0.103896104, 0.121212121, 0.116883117, 0.103896104, 0.108225108, 0.112554113, 0.090909091, 0.095238095, 0.103896104, 0.112554113, 0.125541126, 0.12987013, 0.12987013, 0.134199134, 0.121212121, 0.125541126, 0.12987013, 0.142857143, 0.134199134, 0.121212121, 0.12987013, 0.125541126, 0.134199134, 0.134199134, 0.116883117, 0.125541126, 0.134199134, 0.134199134, 0.134199134, 0.125541126, 0.095238095, 0.108225108, 0.108225108, 0.0995671, 0.095238095, 0.090909091, 0.147186147, 0.116883117, 0.121212121, 0.116883117, 0.121212121, 0.108225108, 0.0995671, 0.095238095, 0.090909091, 0.095238095, 0.116883117, 0.121212121, 0.112554113, 0.112554113, 0.12987013, 0.12987013, 0.103896104, 0.103896104, 0.108225108, 0.112554113, 0.090909091, 0.090909091, 0.082251082, 0.090909091, 0.069264069, 0.060606061, 0.069264069, 0.060606061, 0.082251082, 0.082251082, 0.064935065, 0.056277056, 0.056277056, 0.060606061, 0.060606061, 0.056277056, 0.056277056, 0.060606061, 0.064935065, 0.051948052, 0.069264069, 0.060606061, 0.051948052, 0.034632035, 0.043290043, 0.380952381, 0.186147186, 0.653679654, 0.735930736, 0.74025974, 0.761904762, 0.792207792, 0.805194805, 0.805194805, 0.831168831, 0.83982684, 0.835497835, 0.844155844, 0.861471861, 0.87012987, 0.878787879, 0.878787879, 0.9004329, 0.9004329, 0.922077922, 0.930735931, 0.935064935, 0.935064935, 0.935064935, 0.939393939, 0.952380952, 0.943722944, 0.935064935, 0.939393939, 0.930735931, 0.922077922, 0.948051948, 0.619047619, 0.316017316, 0.329004329, 0.246753247, 0.307359307, 0.636363636, 0.904761905, 0.891774892, 0.753246753, 1, 1, 0.909090909, 0.783549784, 0.896103896, 0.9004329, 0.766233766, 0.268398268, 0.272727273, 0.567099567, 0.831168831, 0.80952381, 0.779220779, 0.783549784, 0.774891775, 0.757575758, 0.666666667, 0.74025974, 0.731601732, 0.744588745, 0.558441558, 0.411255411, 0.640692641, 0.835497835, 0.826839827, 0.800865801, 0.800865801, 0.800865801, 0.80952381, 0.753246753, 0.731601732, 0.722943723, 0.675324675, 1, 0.649350649, 0.588744589, 0.658008658, 0.411255411, 0.454545455, 0.454545455, 0.467532468, 0.653679654, 0.774891775, 0.792207792, 0.792207792, 0.779220779, 0.792207792, 0.792207792, 0.779220779, 0.753246753, 0.701298701, 0.705627706, 0.757575758, 0.74025974, 0.688311688, 0.70995671, 0.519480519, 0.385281385, 1, 1, 1, 1, 1, 0.506493506, 0.692640693, 0.58008658, 0.675324675, 0.766233766, 0.714285714, 0.727272727, 0.67965368, 0.74025974, 0.761904762, 0.735930736, 0.696969697, 0.653679654, 0.662337662, 0.731601732, 0.588744589, 0.164502165, 0.333333333, 0.164502165, 0.138528139, 0.186147186, 0.588744589, 0.774891775, 0.727272727, 0.722943723, 0.722943723, 0.718614719, 0.701298701, 0.714285714, 0.606060606, 0.38961039, 0.588744589, 0.714285714, 0.632034632, 0.463203463, 0.359307359, 0.670995671, 0.783549784, 0.735930736, 0.727272727, 0.718614719, 0.722943723, 0.722943723, 0.731601732, 0.735930736, 0.722943723, 0.735930736, 0.731601732, 0.718614719, 0.696969697, 0.766233766, 0.632034632, 0.251082251, 0.095238095, 0.108225108, 0.372294372, 0.70995671, 0.744588745, 0.718614719, 0.70995671, 0.714285714, 0.722943723, 0.701298701, 0.701298701, 0.705627706, 0.696969697, 0.701298701, 0.692640693, 0.696969697, 0.701298701, 0.701298701, 0.701298701, 0.701298701, 0.722943723, 0.705627706, 0.718614719, 0.705627706, 0.722943723, 0.718614719, 0.714285714, 0.722943723, 0.70995671, 0.714285714, 0.701298701, 0.692640693, 0.683982684, 0.683982684, 0.67965368, 0.670995671, 0.662337662, 0.653679654, 0.627705628, 0.714285714, 0.675324675, 0.688311688, 0.67965368, 0.67965368, 0.688311688, 0.649350649, 0.645021645, 0.58008658, 0.567099567, 0.636363636, 0.658008658, 0.653679654, 0.658008658, 0.632034632, 0.649350649, 0.636363636, 0.666666667, 0.649350649, 0.640692641, 0.658008658, 0.675324675, 0.658008658, 0.670995671, 0.683982684, 0.662337662, 0.696969697, 0.692640693, 0.67965368, 0.666666667, 0.658008658, 0.666666667, 0.640692641, 0.658008658, 0.662337662, 0.658008658, 0.658008658, 0.662337662, 0.649350649, 0.683982684, 0.683982684, 0.67965368, 0.670995671, 0.688311688, 0.670995671, 0.696969697, 0.666666667, 0.670995671, 0.666666667, 0.658008658, 0.705627706, 0.662337662, 0.662337662, 0.670995671, 0.670995671, 0.67965368, 0.653679654, 0.67965368, 0.666666667, 0.675324675, 0.632034632, 0.653679654, 0.662337662, 0.683982684, 0.688311688, 0.584415584, 0.441558442, 0.588744589, 0.658008658, 0.666666667, 0.653679654, 0.649350649, 0.666666667, 0.662337662, 0.658008658, 0.653679654, 0.653679654, 0.658008658, 0.670995671, 0.653679654, 0.61038961, 0.575757576, 0.623376623, 0.645021645, 0.675324675, 0.658008658, 0.675324675, 0.645021645, 0.662337662, 0.658008658, 0.640692641, 0.649350649, 0.597402597, 1, 1, 1, 1, 0.346320346, 0.398268398, 0.398268398, 0.437229437, 0.536796537, 0.532467532, 0.523809524, 0.541125541, 0.562770563, 0.606060606, 0.627705628, 0.601731602, 0.510822511, 0.510822511, 0.545454545, 0.558441558, 0.554112554, 0.54978355, 0.510822511, 0.523809524, 0.489177489, 0.359307359, 0.380952381, 0.380952381, 0.398268398, 0.437229437, 0.467532468, 0.554112554, 0.597402597, 0.623376623, 0.536796537, 0.515151515, 0.536796537, 0.532467532, 0.54978355, 0.541125541, 0.558441558, 0.519480519, 0.554112554, 0.463203463, 1, 1, 1, 0.398268398, 0.41991342, 0.393939394, 0.437229437, 0.411255411, 0.428571429, 0.432900433, 0.411255411, 0.445887446, 0.424242424, 0.41991342, 0.441558442, 0.445887446, 0.532467532, 0.554112554, 0.515151515, 0.463203463, 0.432900433, 0.45021645, 0.480519481, 0.480519481, 0.346320346, 0.316017316, 0.324675325}; #endif xplanet-1.3.0/src/libprojection/0000755000175000017500000000000011731372545013631 500000000000000xplanet-1.3.0/src/libprojection/ProjectionBonne.h0000644000175000017500000000076310411417715017017 00000000000000#ifndef PROJECTIONBONNE_H #define PROJECTIONBONNE_H #include "ProjectionBase.h" class ProjectionBonne : public ProjectionBase { public: ProjectionBonne(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: bool sfl_; double lat1_, cotLat1_; double Y0_; double scale_, yOffset_; double sign_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionOrthographic.h0000644000175000017500000000105510423221014020366 00000000000000#ifndef PROJECTIONORTHOGRAPHIC_H #define PROJECTIONORTHOGRAPHIC_H #include "ProjectionBase.h" class ProjectionOrthographic : public ProjectionBase { public: ProjectionOrthographic(const int f, const int w, const int h); ~ProjectionOrthographic(); void setRange(const double range); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: double P, Psq, Pm1, Pp1, PPm1, Pm1sq; double dispScale_; }; #endif xplanet-1.3.0/src/libprojection/Makefile.am0000644000175000017500000000213410734563270015604 00000000000000noinst_LIBRARIES = libprojection.a AM_CPPFLAGS = -I@top_srcdir@/src if USE_AR libprojection_a_AR = $(AR) cru else libprojection_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libprojection_a_SOURCES = \ ProjectionAncient.cpp \ ProjectionAncient.h \ ProjectionAzimuthal.cpp \ ProjectionAzimuthal.h \ ProjectionAzimutEqualArea.cpp \ ProjectionAzimutEqualArea.h \ ProjectionBase.cpp \ ProjectionBase.h \ ProjectionBonne.h \ ProjectionBonne.cpp \ ProjectionGnomonic.cpp \ ProjectionGnomonic.h \ ProjectionHemisphere.cpp \ ProjectionHemisphere.h \ ProjectionIcosagnomonic.cpp \ ProjectionIcosagnomonic.h \ ProjectionLambert.cpp \ ProjectionLambert.h \ ProjectionMercator.cpp \ ProjectionMercator.h \ ProjectionMollweide.cpp \ ProjectionMollweide.h \ ProjectionOrthographic.cpp \ ProjectionOrthographic.h \ ProjectionPeters.cpp \ ProjectionPeters.h \ ProjectionPolyconic.cpp \ ProjectionPolyconic.h \ ProjectionRectangular.cpp \ ProjectionRectangular.h \ ProjectionTSC.cpp \ ProjectionTSC.h \ getProjection.cpp \ libprojection.h xplanet-1.3.0/src/libprojection/ProjectionHemisphere.cpp0000644000175000017500000000565610423221014020374 00000000000000// This projection was contributed by Richard Rognlie #include using namespace std; #include "ProjectionHemisphere.h" #include "xpUtil.h" #define VERTICAL 0 ProjectionHemisphere::ProjectionHemisphere(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; #if VERTICAL if (height_/2 < width_) dispScale_ = height_/2; else dispScale_ = width_; #else if (width_/2 < height_) dispScale_ = width_/2; else dispScale_ = height_; #endif radius_ /= 2; dispScale_ *= 2; buildPhotoTable(); } ProjectionHemisphere::~ProjectionHemisphere() { destroyPhotoTable(); } bool ProjectionHemisphere::pixelToSpherical(const double x, const double y, double &lon, double &lat) { double X = (x - centerX_) / dispScale_; double Y = - (y - centerY_) / dispScale_; #if VERTICAL if (Y<0) { Y += 0.25; double arg = Y/radius_; if (fabs(arg) > 1) return(false); lat = asin(arg); arg = -X / (radius_ * cos(lat)); if (fabs(arg) > 1) return(false); lon = acos(arg) - M_PI; } else { Y -= 0.25; double arg = Y/radius_; if (fabs(arg) > 1) return(false); lat = asin(arg); arg = -X / (radius_ * cos(lat)); if (fabs(arg) > 1) return(false); lon = acos(arg); } #else double arg = Y / radius_; if (fabs(arg) > 1) return(false); lat = asin(arg); if (X<0) { X += 0.25; arg = -X / (radius_ * cos(lat)); if (fabs(arg) > 1) return(false); lon = acos(arg) - M_PI; } else { X -= 0.25; arg = -X / (radius_ * cos(lat)); if (fabs(arg) > 1) return(false); lon = acos(arg); } #endif lon -= M_PI/2; darkening_ = getPhotoFunction(fabs(cos(lon) * cos(lat))); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionHemisphere::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); lon += M_PI/2; if (lon > M_PI) lon -= TWO_PI; double Y = radius_ * sin(lat); double X; #if VERTICAL if (lon < 0) { Y -= 0.25; X = radius_ * cos(lat) * sin(lon-3*M_PI/2); } else { Y += 0.25; X = radius_ * cos(lat) * sin(lon-M_PI/2); } #else if (lon < 0) { X = radius_ * cos(lat) * sin(lon-3*M_PI/2) - 0.25; } else { X = radius_ * cos(lat) * sin(lon-M_PI/2) + 0.25; } #endif x = centerX_ + dispScale_ * X; if (x < 0 || x >= width_) return(false); y = centerY_ - dispScale_ * Y; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionMollweide.cpp0000644000175000017500000000356110411352756020234 00000000000000#include using namespace std; #include "ProjectionMollweide.h" #include "xpUtil.h" ProjectionMollweide::ProjectionMollweide(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; // radius is M_SQRT2 * R from Snyder (1987), p 251 } bool ProjectionMollweide::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = 2.0 * (x + width_/2 - centerX_) / width_ - 1; const double Y = 1 - 2.0 * (y + height_/2 - centerY_) / height_; double arg = Y / radius_; if (fabs(arg) > 1) return(false); const double theta = asin(arg); arg = (2 * theta + sin (2*theta)) / M_PI; if (fabs (arg) > 1) return(false); lat = asin(arg); if (fabs(theta) == M_PI) lon = 0; else { lon = M_PI * X / (2 * radius_ * cos(theta)); if (fabs(lon) > M_PI) return(false); } if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionMollweide::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double theta = lat; double del_theta = 1; while (fabs(del_theta) > 1e-5) { del_theta = -((theta + sin(theta) - M_PI * sin(lat)) / (1 + cos(theta))); theta += del_theta; } theta /= 2; while (lon < -M_PI) lon += TWO_PI; while (lon > M_PI) lon -= TWO_PI; const double X = (2 * radius_ / M_PI) * lon * cos(theta); const double Y = radius_ * sin(theta); x = (X + 1) * width_/2 + centerX_ - width_/2; if (x < 0 || x >= width_) return(false); y = height_/2 * (1 - Y) + centerY_ - height_/2; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionAzimutEqualArea.cpp0000644000175000017500000000370211107136206021333 00000000000000/* Contributed from the xplanet forums: http://xplanet.sourceforge.net/FUDforum2/index.php?t=msg&S=8ddea843fc10100539f23a5d8d4d6d4a&th=57&goto=1686#msg_1686 */ #include using namespace std; #include "ProjectionAzimutEqualArea.h" #include "xpUtil.h" ProjectionAzimutEqualArea::ProjectionAzimutEqualArea(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; radius_ = sqrt(2 * radius_); // The rendered globe is contained in a square with sides of length // iside and upper left corner at (istart, jstart). iside_ = (int) (radius_ * height_); } void ProjectionAzimutEqualArea::rot90degree(double &lon, double &lat) { double x = cos(lat) * cos(lon); double y = sin(lat); double r2 = sqrt(1 - x * x); double coslon; if (fabs(y) < r2) coslon = y / r2; else if (y > 0) coslon = 1; else coslon = -1; lat = asin(x); if (sin(lon) < 0) lon = acos(coslon); else lon = -acos(coslon); } bool ProjectionAzimutEqualArea::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = 2.0 * (x - centerX_) / iside_; const double Y = -2.0 * (y - centerY_) / iside_; const double r = sqrt(X*X + Y*Y); if (r > 1) return(false); lat = M_PI_2 - 2 * asin(r); lon = atan2(-X, Y); rot90degree(lon, lat); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionAzimutEqualArea::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); rot90degree(lon, lat); double r = sin((M_PI_2 - lat) / 2); double X = -sin(lon) * r; double Y = cos(lon) * r; x = centerX_ + X * iside_/2; if (x < 0 || x >= width_) return(false); y = centerY_ - Y * iside_/2; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionRectangular.h0000644000175000017500000000125610411351163020215 00000000000000#ifndef PROJECTIONRECTANGULAR_H #define PROJECTIONRECTANGULAR_H #include "ProjectionBase.h" class ProjectionRectangular : public ProjectionBase { public: ProjectionRectangular(const int f, const int w, const int h); ProjectionRectangular(const int f, const int w, const int h, const double startLat, const double startLon, const double mapHeight, const double mapWidth); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: bool mapBounds_; double startLat_, startLon_; double delLat_, delLon_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionMollweide.h0000644000175000017500000000061510411344513017666 00000000000000#ifndef PROJECTIONMOLLWEIDE_H #define PROJECTIONMOLLWEIDE_H #include "ProjectionBase.h" class ProjectionMollweide : public ProjectionBase { public: ProjectionMollweide(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; }; #endif xplanet-1.3.0/src/libprojection/ProjectionPolyconic.cpp0000644000175000017500000001032010411417715020236 00000000000000/* This projection is from Section 5.5.2 of Calabretta and Greisen (2002), "Representations of celestial coordinates in FITS", Astronomy and Astrophysics 395, 1077-1122. The paper is available online at http://www.atnf.csiro.au/~mcalabre/WCS */ #include using namespace std; #include "ProjectionPolyconic.h" #include "xpUtil.h" ProjectionPolyconic::ProjectionPolyconic(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; // find the highest point of the shape and scale the image so that // it fits. double topValue = 0; const double lon = M_PI; for (int i = 0; i < height_; i++) { double lat = i * M_PI / (height_ - 1) - M_PI_2; if (lat == 0) continue; const double E = lon * sin(lat); double Y = lat + (1 - cos(E)) / tan(lat); Y = height_ * (0.5 - Y/M_PI); if (Y < topValue) topValue = Y; } // topValue will be <= 0 scale_ = height_ / (height_ - 2*topValue); scale_ *= (2*radius_); } double ProjectionPolyconic::F(const double X, const double Y, const double theta) { double YmT = Y - theta; double returnVal = X*X + YmT * (YmT - 2 / tan(theta)); return(returnVal); } double ProjectionPolyconic::Fprime(const double X, const double Y, const double theta) { double tanTheta = tan(theta); double returnVal = 2 * (1 + (Y-theta)/tanTheta) / tanTheta; return(returnVal); } double ProjectionPolyconic::rootF(const double X, const double Y) { double delTheta = 0.001; if (fabs(Y) < delTheta) return(0); double returnVal; #if 1 // Newton's method double lat; if (F(X, Y, delTheta) * F(X, Y, M_PI_2) < 0) { lat = delTheta; } else if (F(X, Y, -delTheta) * F(X, Y, -M_PI_2) < 0) { lat = -delTheta; } else { return(0); } double del_lat = 1; while (fabs(del_lat) > 1e-5) { double Fp = Fprime(X, Y, lat); del_lat = -F(X, Y, lat) / Fp; lat += del_lat; if (fabs(lat) > M_PI_2) return(M_PI_2); } returnVal = lat; #else // bisection method double lim0, lim1; if (F(X, Y, delTheta) * F(X, Y, M_PI_2) < 0) { lim0 = delTheta; lim1 = M_PI_2; } else if (F(X, Y, -delTheta) * F(X, Y, -M_PI_2) < 0) { lim0 = -M_PI_2; lim1 = -delTheta; } else { return(0); } while (fabs(lim0 - lim1) > 1e-5) { double mid = 0.5 * (lim0 + lim1); double val = F(X, Y, mid); if (F(X, Y, lim0) * val < 0) { lim1 = mid; } else if (F(X, Y, lim1) * val < 0) { lim0 = mid; } else { return(0); } } returnVal = lim0; #endif return(returnVal); } bool ProjectionPolyconic::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double offsetX = x + width_/2 - centerX_; const double offsetY = y + height_/2 - centerY_; const double X = TWO_PI * (offsetX/width_ - 0.5)/scale_; const double Y = M_PI * (0.5 - offsetY/height_)/scale_; lat = rootF(X, Y); if (fabs(lat) > M_PI_2) return(false); if (sin(lat) == 0) { lon = X; } else { double tanLat = tan(lat); lon = atan2(X * tanLat, 1 - (Y-lat) * tanLat) / sin(lat); } if (fabs(lon) > M_PI) return(false); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionPolyconic::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double X, Y; const double tanLat = tan(lat); if (tanLat == 0) { X = lon; Y = 0; } else { const double E = lon * sin(lat); X = sin(E) / tanLat; Y = lat + (1 - cos(E)) / tanLat; } x = width_ * (X * scale_ / TWO_PI + 0.5); y = height_ * (0.5 - Y * scale_ / M_PI); x += (centerX_ - width_/2); y += (centerY_ - height_/2); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionTSC.cpp0000644000175000017500000001375111251571044016742 00000000000000/* This projection is from Section 5.6.1 of Calabretta and Greisen (2002), "Representations of celestial coordinates in FITS", Astronomy and Astrophysics 395, 1077-1122. The paper is available online at http://www.atnf.csiro.au/~mcalabre/WCS */ #include using namespace std; #include "ProjectionTSC.h" #include "xpUtil.h" ProjectionTSC::ProjectionTSC(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; xScale_ = 1; yScale_ = 2./3.; trueWidth_ = width_; trueHeight_ = static_cast (0.75 * trueWidth_); xOffset_ = trueWidth_/8; yOffset_ = (trueHeight_ - height_)/2; // find the pixel values of the center of each cube face bool rotateSave = rotate_; rotate_ = false; for (int i = 0; i < 6; i++) { double lat_c, lon_c; GetCenterLatLon(i, lat_c, lon_c); sphericalToPixel(lon_c, lat_c, xPixel_[i], yPixel_[i]); xPixel_[i] += xOffset_; yPixel_[i] += yOffset_; } rotate_ = rotateSave; } void ProjectionTSC::GetCenterLatLon(const int face, double &lat_c, double &lon_c) const { switch (face) { case 0: lon_c = 0; lat_c = M_PI_2; break; case 1: lon_c = 0; lat_c = 0; break; case 2: lon_c = M_PI_2; lat_c = 0; break; case 3: lon_c = M_PI; lat_c = 0; break; case 4: lon_c = -M_PI_2; lat_c = 0; break; case 5: lon_c = 0; lat_c = -M_PI_2; break; default: xpExit("Unknown face???", __FILE__, __LINE__); break; } } void ProjectionTSC::GetXiEtaZeta(const int face, const double l, const double m, const double n, double &xi, double &eta, double &zeta) const { switch (face) { case 0: xi = m; eta = -l; zeta = n; break; case 1: xi = m; eta = n; zeta = l; break; case 2: xi = -l; eta = n; zeta = m; break; case 3: xi = -m; eta = n; zeta = -l; break; case 4: xi = l; eta = n; zeta = -m; break; case 5: xi = m; eta = l; zeta = -n; break; default: xpExit("Unknown face???", __FILE__, __LINE__); break; } } void ProjectionTSC::GetLMN(const int face, const double xi, const double eta, const double zeta, double &l, double &m, double &n) const { switch (face) { case 0: m = xi; l = -eta; n = zeta; break; case 1: m = xi; n = eta; l = zeta; break; case 2: l = -xi; n = eta; m = zeta; break; case 3: m = -xi; n = eta; l = -zeta; break; case 4: l = xi; n = eta; m = -zeta; break; case 5: m = xi; l = eta; n = -zeta; break; default: xpExit("Unknown face???", __FILE__, __LINE__); break; } } int ProjectionTSC::GetFace(const double x, const double y) const { int returnVal = -1; double dist = trueWidth_; for (int i = 0; i < 6; i++) { const double dx = x - xPixel_[i]; const double dy = y - yPixel_[i]; const double thisDist = sqrt(dx*dx + dy*dy); if (thisDist < dist) { dist = thisDist; returnVal = i; } } // check that the point is on the cube face if (fabs(x - xPixel_[returnVal]) > trueWidth_/8) return(-1); if (fabs(y - yPixel_[returnVal]) > trueHeight_/6) return(-1); return(returnVal); } bool ProjectionTSC::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double offsetX = x + width_/2 - centerX_ + xOffset_; const double offsetY = y + height_/2 - centerY_ + yOffset_; const double X = TWO_PI * (offsetX/trueWidth_ - 0.5)/xScale_; const double Y = M_PI * (0.5 - offsetY/trueHeight_)/yScale_; const int face = GetFace(offsetX, offsetY); if (face < 0) return(false); double lat_c, lon_c; GetCenterLatLon(face, lat_c, lon_c); const double chi = 4 * (X - lon_c) / M_PI; const double psi = 4 * (Y - lat_c) / M_PI; const double zeta = 1/sqrt(1 + chi*chi + psi*psi); const double xi = chi * zeta; const double eta = psi * zeta; double l, m, n; GetLMN(face, xi, eta, zeta, l, m, n); lat = asin(n); lon = atan2(m, l); if (fabs(lon) > M_PI) return(false); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionTSC::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); const double l = cos(lat) * cos(lon); const double m = cos(lat) * sin(lon); const double n = sin(lat); int face = -1; if (fabs(l) >= fabs(m) && fabs(l) >= fabs(n)) { face = ((l < 0) ? 3 : 1); } else if (fabs(m) >= fabs(l) && fabs(m) >= fabs(n)) { face = ((m < 0) ? 4 : 2); } else if (fabs(n) >= fabs(l) && fabs(n) >= fabs(m)) { face = ((n < 0) ? 5 : 0); } double lon_c, lat_c; GetCenterLatLon(face, lat_c, lon_c); double xi, eta, zeta; GetXiEtaZeta(face, l, m, n, xi, eta, zeta); const double chi = xi/zeta; const double psi = eta/zeta; const double X = lon_c + chi * M_PI / 4; const double Y = lat_c + psi * M_PI / 4; x = trueWidth_ * (X * xScale_ / TWO_PI + 0.5); y = trueHeight_ * (0.5 - Y * yScale_ / M_PI); x += (centerX_ - width_/2 - xOffset_); y += (centerY_ - height_/2 - yOffset_); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionAncient.h0000644000175000017500000000076110411344513017330 00000000000000#ifndef PROJECTIONANCIENT_H #define PROJECTIONANCIENT_H // This projection contributed by Richard Rognlie #include "ProjectionBase.h" class ProjectionAncient : public ProjectionBase { public: ProjectionAncient(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: double dispScale_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionLambert.cpp0000644000175000017500000000230410411417715017670 00000000000000#include using namespace std; #include "ProjectionLambert.h" #include "xpUtil.h" ProjectionLambert::ProjectionLambert(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = true; } bool ProjectionLambert::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = (x - width_/2) * TWO_PI / width_; const double Y = 1 - 2 * y / height_; if (fabs(Y) > 1) { if (Y < 0) lat = -M_PI_2; else lat = M_PI_2; } else { lat = asin(Y); } lon = X; if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionLambert::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double X = lon; const double Y = sin(lat); if (X >= M_PI) X -= TWO_PI; else if (X < -M_PI) X += TWO_PI; x = (width_ * X / TWO_PI) + width_ / 2; y = (1 - Y) * height_ / 2; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/getProjection.cpp0000644000175000017500000001305511107136514017064 00000000000000#include #include #include #include #include using namespace std; #include "keywords.h" #include "xpUtil.h" #include "ProjectionBase.h" #include "ProjectionAncient.h" #include "ProjectionAzimuthal.h" #include "ProjectionAzimutEqualArea.h" #include "ProjectionBonne.h" #include "ProjectionGnomonic.h" #include "ProjectionHemisphere.h" #include "ProjectionIcosagnomonic.h" #include "ProjectionLambert.h" #include "ProjectionMercator.h" #include "ProjectionMollweide.h" #include "ProjectionOrthographic.h" #include "ProjectionPeters.h" #include "ProjectionPolyconic.h" #include "ProjectionRectangular.h" #include "ProjectionTSC.h" static vector projectionTypes; static void setProjectionTypes() { if (projectionTypes.empty()) { projectionTypes.push_back(ANCIENT); projectionTypes.push_back(AZIMUTHAL); projectionTypes.push_back(BONNE); projectionTypes.push_back(EQUAL_AREA); projectionTypes.push_back(GNOMONIC); projectionTypes.push_back(HEMISPHERE); projectionTypes.push_back(ICOSAGNOMONIC); projectionTypes.push_back(LAMBERT); projectionTypes.push_back(MERCATOR); projectionTypes.push_back(MOLLWEIDE); projectionTypes.push_back(ORTHOGRAPHIC); projectionTypes.push_back(PETERS); projectionTypes.push_back(POLYCONIC); projectionTypes.push_back(RECTANGULAR); projectionTypes.push_back(TSC); } } int getRandomProjection() { setProjectionTypes(); int index = static_cast (random() % projectionTypes.size()); return(projectionTypes[index]); } int getProjectionType(char *proj_string) { int projection; char *lowercase = proj_string; char *ptr = proj_string; while (*ptr != '\0') *ptr++ = tolower(*proj_string++); if (strncmp(lowercase, "ancient", 2) == 0) projection = ANCIENT; else if (strncmp(lowercase, "azimuthal", 2) == 0) projection = AZIMUTHAL; else if (strncmp(lowercase, "bonne", 1) == 0) projection = BONNE; else if (strncmp(lowercase, "equal_area", 1) == 0) projection = EQUAL_AREA; else if (strncmp(lowercase, "gnomonic", 1) == 0) projection = GNOMONIC; else if (strncmp(lowercase, "hemisphere", 1) == 0) projection = HEMISPHERE; else if (strncmp(lowercase, "icosagnomonic", 1) == 0) projection = ICOSAGNOMONIC; else if (strncmp(lowercase, "lambert", 1) == 0) projection = LAMBERT; else if (strncmp(lowercase, "mercator", 2) == 0) projection = MERCATOR; else if (strncmp(lowercase, "mollweide", 2) == 0) projection = MOLLWEIDE; else if (strncmp(lowercase, "orthographic", 1) == 0) projection = ORTHOGRAPHIC; else if (strncmp(lowercase, "peters", 2) == 0) projection = PETERS; else if (strncmp(lowercase, "polyconic", 2) == 0) projection = POLYCONIC; else if (strncmp(lowercase, "random", 2) == 0) projection = RANDOM; else if (strncmp(lowercase, "rectangular", 2) == 0) projection = RECTANGULAR; else if (strncmp(lowercase, "tsc", 1) == 0) projection = TSC; else { setProjectionTypes(); ostringstream errMsg; errMsg << "Unknown projection \"" << lowercase << "\"." << " Valid projections are:\n"; for (unsigned int i = 0; i < projectionTypes.size(); i++) errMsg << "\t" << keyWordString[projectionTypes[i]-'?'] << "\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } return(projection); } ProjectionBase * getProjection(const int projection, const int flipped, const int width, const int height) { ProjectionBase *thisProjection = NULL; switch (projection) { case ANCIENT: thisProjection = new ProjectionAncient(flipped, width, height); break; case AZIMUTHAL: thisProjection = new ProjectionAzimuthal(flipped, width, height); break; case BONNE: thisProjection = new ProjectionBonne(flipped, width, height); break; case EQUAL_AREA: thisProjection = new ProjectionAzimutEqualArea(flipped, width, height); break; case GNOMONIC: thisProjection = new ProjectionGnomonic(flipped, width, height); break; case HEMISPHERE: thisProjection = new ProjectionHemisphere(flipped, width, height); break; case ICOSAGNOMONIC: thisProjection = new ProjectionIcosagnomonic(flipped, width, height); break; case LAMBERT: thisProjection = new ProjectionLambert(flipped, width, height); break; case MERCATOR: thisProjection = new ProjectionMercator(flipped, width, height); break; case MOLLWEIDE: thisProjection = new ProjectionMollweide(flipped, width, height); break; case ORTHOGRAPHIC: thisProjection = new ProjectionOrthographic(flipped, width, height); break; case PETERS: thisProjection = new ProjectionPeters(flipped, width, height); break; case POLYCONIC: thisProjection = new ProjectionPolyconic(flipped, width, height); break; case RECTANGULAR: thisProjection = new ProjectionRectangular(flipped, width, height); break; case TSC: thisProjection = new ProjectionTSC(flipped, width, height); break; default: xpWarn("getProjection: Unknown projection type specified\n", __FILE__, __LINE__); thisProjection = new ProjectionRectangular(flipped, width, height); break; } return(thisProjection); } xplanet-1.3.0/src/libprojection/ProjectionMercator.cpp0000644000175000017500000000400010411420230020033 00000000000000#include #include #include using namespace std; #include "Options.h" #include "ProjectionMercator.h" #include "xpUtil.h" ProjectionMercator::ProjectionMercator(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = true; double lat1 = 80 * deg_to_rad; Options *options = Options::getInstance(); vector projParams = options->ProjectionParameters(); if (!projParams.empty()) { if (fabs(projParams[0]) > 0 && fabs(projParams[0]) < M_PI_2) { lat1 = fabs(projParams[0]); } else { char buffer[256]; snprintf(buffer, 256, "%.1f", projParams[0]/deg_to_rad); ostringstream errMsg; errMsg << "Projection latitude of " << buffer << " degrees is out of range for Mercator Projection."; snprintf(buffer, 256, " Using %.1f degrees.\n", lat1/deg_to_rad); errMsg << buffer; xpWarn(errMsg.str(), __FILE__, __LINE__); } } yScale_ = log(tan(M_PI/4 + lat1/2))/M_PI_2; } bool ProjectionMercator::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = ((x - width_/2)) * TWO_PI / width_; const double Y = ((height_/2 - y)) * yScale_ * M_PI / height_; lat = atan(sinh(Y)); lon = X; if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionMercator::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double X = lon; const double Y = log(tan(M_PI/4 + lat/2)); if (X >= M_PI) X -= TWO_PI; else if (X < -M_PI) X += TWO_PI; x = ((width_ * X / TWO_PI) + width_ / 2); y = (height_ / 2 - (height_ * Y / (yScale_ * M_PI))); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionGnomonic.cpp0000644000175000017500000000536410411420230020046 00000000000000/* This projection is from Section 5.5.1 of Calabretta and Greisen (2002), "Representations of celestial coordinates in FITS", Astronomy and Astrophysics 395, 1077-1122. The paper is available online at http://www.atnf.csiro.au/~mcalabre/WCS */ #include #include #include using namespace std; #include "Options.h" #include "ProjectionGnomonic.h" #include "xpUtil.h" ProjectionGnomonic::ProjectionGnomonic(const int f, const int w, const int h) : ProjectionBase(f, w, h) { init(f, w, h, Options::getInstance()); } ProjectionGnomonic::ProjectionGnomonic(const int f, const int w, const int h, const Options* o) : ProjectionBase(f, w, h, o) { init(f, w, h, o); } void ProjectionGnomonic::init(const int f, const int w, const int h, const Options* options) { isWrapAround_ = false; double lat1 = 45 * deg_to_rad; vector projParams = options->ProjectionParameters(); if (!projParams.empty()) { if (fabs(projParams[0]) > 0 && fabs(projParams[0]) < M_PI_2) { lat1 = projParams[0]; } else { char buffer[256]; snprintf(buffer, 256, "%.1f", projParams[0]/deg_to_rad); ostringstream errMsg; errMsg << "Projection latitude of " << buffer << " degrees is out of range for Gnomonic Projection."; snprintf(buffer, 256, " Using %.1f degrees.\n", lat1/deg_to_rad); errMsg << buffer; xpWarn(errMsg.str(), __FILE__, __LINE__); } } scale_ = 1/tan(lat1); } bool ProjectionGnomonic::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double offsetX = x + width_/2 - centerX_; const double offsetY = y + height_/2 - centerY_; const double X = (offsetX/width_ - 0.5); const double Y = (0.5 - offsetY/height_); lon = atan(2*X/scale_); lat = atan(2*Y/scale_ * cos(lon)); if (fabs(lon) > M_PI) return(false); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionGnomonic::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); if (fabs(lon) > M_PI_2) return(false); // X and Y range from -scale/2 to scale/2 double X = 0.5 * scale_ * tan(lon); double Y = 0.5 * scale_ * tan(lat) / cos(lon); x = width_ * (X + 0.5); y = height_ * (0.5 - Y); x += (centerX_ - width_/2); y += (centerY_ - height_/2); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionPolyconic.h0000644000175000017500000000130110411417715017702 00000000000000#ifndef PROJECTIONPOLYCONIC_H #define PROJECTIONPOLYCONIC_H #include "ProjectionBase.h" class ProjectionPolyconic : public ProjectionBase { public: ProjectionPolyconic(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: double scale_; // Used to iteratively find the latitude given pixel coordinates double F(const double X, const double Y, const double theta); double Fprime(const double X, const double Y, const double theta); double rootF(const double X, const double Y); }; #endif xplanet-1.3.0/src/libprojection/ProjectionBase.h0000644000175000017500000000317210423221014016611 00000000000000#ifndef PROJECTIONBASE_H #define PROJECTIONBASE_H class Options; class ProjectionBase { public: ProjectionBase(const int flipped, const int w, const int h); ProjectionBase(const int flipped, const int w, const int h, const Options* o); virtual ~ProjectionBase(); virtual bool pixelToSpherical(const double x, const double y, double &lon, double &lat) = 0; virtual bool sphericalToPixel(const double lon, const double lat, double &x, double &y) const = 0; bool IsWrapAround() const { return(isWrapAround_); }; double Radius() const { return(radius_); }; void RotateXYZ(double &lat, double &lon) const; void RotateZYX(double &lat, double &lon) const; virtual double getDarkening() const { return(darkening_); }; virtual void setRange(const double range); void SetXYZRotationMatrix(const double angle_x, const double angle_y, const double angle_z); void SetZYXRotationMatrix(const double angle_x, const double angle_y, const double angle_z); protected: const int flipped_; const int width_, height_; double radius_; double centerX_, centerY_; bool isWrapAround_; double centerLat_, centerLon_; bool rotate_; double rotXYZ_[3][3]; double rotZYX_[3][3]; // for the photometric function int tableSize_; double darkening_; double *cosAngle_; double *photoFunction_; void buildPhotoTable(); void destroyPhotoTable(); double getPhotoFunction(const double x) const; private: void init(const int flipped, const int w, const int h, const Options* options); }; #endif xplanet-1.3.0/src/libprojection/ProjectionHemisphere.h0000644000175000017500000000104010411344513020027 00000000000000#ifndef PROJECTIONHEMISPHERE_H #define PROJECTIONHEMISPHERE_H // This projection was contributed by Richard Rognlie #include "ProjectionBase.h" class ProjectionHemisphere : public ProjectionBase { public: ProjectionHemisphere(const int f, const int w, const int h); ~ProjectionHemisphere(); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: double dispScale_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionOrthographic.cpp0000644000175000017500000000545610423221014020732 00000000000000#include using namespace std; #include "Options.h" #include "xpUtil.h" #include "ProjectionOrthographic.h" ProjectionOrthographic::ProjectionOrthographic(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; Options *options = Options::getInstance(); dispScale_ = radius_ * height_; setRange(options->Range()); buildPhotoTable(); } ProjectionOrthographic::~ProjectionOrthographic() { destroyPhotoTable(); } void ProjectionOrthographic::setRange(const double range) { P = range; Psq = P*P; Pp1 = (P + 1); Pm1 = (P - 1); PPm1 = P * Pm1; Pm1sq = Pm1 * Pm1; dispScale_ *= sqrt(Pp1/Pm1); } bool ProjectionOrthographic::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = (x - centerX_)/dispScale_; const double Y = (centerY_ - y)/dispScale_; const double rho2 = X*X + Y*Y; if (rho2 > 1) return(false); const double rho = sqrt(rho2); if (rho == 0) { lat = 0; lon = 0; } else { double arg = Pm1*(Pm1 - rho2 * Pp1); if (arg < 0) return(false); const double N = rho * (PPm1 - sqrt(arg)); const double D = (Pm1sq + rho2); const double sinc = N/D; const double cosc = sqrt(1 - sinc*sinc); arg = Y * sinc / rho; if (fabs(arg) > 1) return(false); lat = asin(arg); lon = atan2(X * sinc, rho * cosc); } // This is the cosine of the observer-planet center-normal angle const double cosa = cos(lat) * cos(lon); const double sina_sq = 1 - cosa*cosa; // This is the distance from the observer to the point on the surface const double dist_sq = Psq - 2 * P * cosa + 1; // This is the angle we want: observer-surface-normal const double sinb_sq = Psq / dist_sq * sina_sq; const double cosb = sqrt(1 - sinb_sq); darkening_ = getPhotoFunction(fabs(cosb)); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= 2*M_PI; else if (lon < -M_PI) lon += 2*M_PI; return(true); } bool ProjectionOrthographic::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); const double cosc = cos(lat) * cos(lon); if (cosc < 0) return(false); const double k = (P - 1) / (P - cosc); const double X = k * cos(lat) * sin(lon); const double Y = k * sin(lat); x = X * dispScale_ + centerX_; if (x < 0 || x >= width_) return(false); y = centerY_ - Y * dispScale_; if (y < 0 || y >= height_) return(false); if (P*cosc < 1) { double dist = sqrt(x*x + y*y); if (dist < dispScale_) return(false); } return(true); } xplanet-1.3.0/src/libprojection/ProjectionIcosagnomonic.h0000644000175000017500000001231610411420230020525 00000000000000#ifndef PROJECTIONICOSAGNOMONIC_H #define PROJECTIONICOSAGNOMONIC_H #include "ProjectionBase.h" #include "ProjectionGnomonic.h" #include "xpUtil.h" #define FINDROWS 3 #define FINDCOLS 12 class ProjectionIcosagnomonic : public ProjectionBase { public: ProjectionIcosagnomonic(const int f, const int w, const int h); ~ProjectionIcosagnomonic(); virtual bool pixelToSpherical(const double x, const double y, double &lon, double &lat); virtual bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: ProjectionIcosagnomonic(const ProjectionIcosagnomonic&); class PointXYZ; struct PointXY { PointXY() : x(0), y(0) {}; PointXY(const double _x, const double _y) : x(_x), y(_y) {}; PointXY operator-(const PointXY& p) const { return PointXY(this->x - p.x, this->y - p.y); } PointXY operator+(const PointXY& p) const { return PointXY(this->x + p.x, this->y + p.y); } PointXY operator-=(const PointXY& p) { return *this = *this - p; } PointXY operator+=(const PointXY& p) { return *this = *this + p; } /* Returns true iff p1 and p2 are on the same side of the line * passing through l1 and l2, or if p1 is on same line. */ static bool sameSide(const PointXY& p1, const PointXY& p2, const PointXY& l1, const PointXY& l2); /* Returns true iff *this is in the triangle defined by the three * given points. */ bool inTriangle(const PointXY&, const PointXY&, const PointXY&); double distance(const PointXY& P) const; // Cartesian void rotate(double angle); // For the line including a and b, returns a positive number // if our point is to the left, a negative number if it is to the // right, or zero if it is on the line. We can't just cast because // we might improperly round to zero. int cmpLine(const PointXY& a, const PointXY& b); double x, y; }; class PointLL { public: PointLL() : lat(0), lon(0) {}; PointLL(const double _at, const double _on) : lat(_at), lon(_on) {}; PointLL(const PointXYZ& p) : lat(asin(p.z)), lon(atan2(p.y, p.x)) {}; /* Returns true iff p1 and p2 are on the same side of the * great circle passing through l1 and l2. l1 and l2 must not be * antipodal. Returns true also if p1 is on the great circle. */ static bool sameSide(const PointLL& p1, const PointLL& p2, const PointLL& l1, const PointLL& l2); bool inTriangle(const PointLL&, const PointLL&, const PointLL&); double bearing(const PointLL& P) const; double lat, lon; }; struct PointXYZ { PointXYZ(double a, double b, double c) : x(a), y(b), z(c) {}; PointXYZ(const PointLL& p) : x(cos(p.lon)*cos(p.lat)), y(sin(p.lon)*cos(p.lat)), z(sin(p.lat)) {}; static PointXYZ crossP(const PointXYZ& a, const PointXYZ& b); static double dotP(const PointXYZ&, const PointXYZ&); double x, y, z; }; class Polygon { public: typedef vector PointList; Polygon(const PointList& v) : V(v) { V.push_back(V.front()); }; void scale(double x, double y); bool contains(PointXY p) const; private: PointList V; }; class Triangle { public: Triangle(PointXY a, PointXY b, PointXY c, PointLL la, PointLL lb, PointLL lc); Triangle(const Triangle& T); virtual ~Triangle(); /* x, y are relative to center of triangle. */ bool pixelToSpherical(PointXY p, double &lon, double &lat) const; bool sphericalToPixel(double lon, double lat, double& x, double& y) const; virtual bool contains(PointXY p) const; virtual bool contains(PointLL p) const; private: PointLL sCentroid(PointLL, PointLL, PointLL); PointXY cA, cB, cC; PointLL sA, sB, sC; PointXY centerXY; PointLL centerLL; double rotation; ProjectionGnomonic* P; }; class ClippedTriangle : public Triangle { public: ClippedTriangle(PointXY a, PointXY b, PointXY c, PointLL la, PointLL lb, PointLL lc, Polygon path) : Triangle(a, b, c, la, lb, lc), clip(path) {}; ClippedTriangle(const ClippedTriangle& T) : Triangle(T), clip(T.clip) {}; virtual bool contains(PointXY p) const; virtual bool contains(PointLL p) const; private: Polygon clip; }; void makeTriangles(); Polygon makeClippingPath(unsigned int); double _w, _h, basew, baseh; PointXY offset; typedef Triangle* TriangleRef; typedef vector TList; TList T; /* This array keeps track of what triangles exist in different regions * of the map, which makes looking up triangles in pixelToSpherical much * more efficient. */ TList TFinder[FINDCOLS][FINDROWS]; }; #endif xplanet-1.3.0/src/libprojection/libprojection.h0000644000175000017500000000054610411360232016552 00000000000000#ifndef LIBPROJECTION_H #define LIBPROJECTION_H #include "ProjectionBase.h" extern int getRandomProjection(); extern int getProjectionType(char *proj_string); extern ProjectionBase *getProjection(const int projection, const int flipped, const int width, const int height); #endif xplanet-1.3.0/src/libprojection/ProjectionBase.cpp0000644000175000017500000001365410411420230017150 00000000000000#include using namespace std; #include "Options.h" #include "xpUtil.h" #include "ProjectionBase.h" ProjectionBase::ProjectionBase(const int flipped, const int w, const int h) : flipped_(flipped), width_(w), height_(h) { Options *options = Options::getInstance(); init(flipped, w, h, options); } ProjectionBase::ProjectionBase(const int flipped, const int w, const int h, const Options* o) : flipped_(flipped), width_(w), height_(h) { init(flipped, w, h, o); } void ProjectionBase::init(const int flipped, const int w, const int h, const Options* options) { centerLat_ = options->Latitude(); centerLon_ = options->Longitude() * flipped_; const double rotAngle = options->Rotate(); centerX_ = options->CenterX(); centerY_ = options->CenterY(); radius_ = options->Radius(); rotate_ = (centerLat_ != 0 || centerLon_ != 0 || rotAngle != 0); if (rotate_) { SetXYZRotationMatrix(rotAngle, centerLat_, -centerLon_); // set rotation matrix for grid and markers SetZYXRotationMatrix(-rotAngle, -centerLat_, centerLon_); } // limb darkening_, gets overridden in ORTHOGRAPHIC mode darkening_ = 1.0; } ProjectionBase::~ProjectionBase() { } /* matrix to first rotate reference frame angle_x radians through x axis, then angle_y radians through y axis, and lastly angle_z radians through z axis. Positive rotations are counter-clockwise looking down the axis. */ void ProjectionBase::SetXYZRotationMatrix(const double angle_x, const double angle_y, const double angle_z) { if (angle_x == 0 && angle_y == 0 && angle_z == 0) { for (int j = 0; j < 3; j++) for (int i = 0; i < 3; i++) rotXYZ_[j][i] = (i == j ? 1 : 0 ); return; } const double cosx = cos(angle_x); const double cosy = cos(angle_y); const double cosz = cos(angle_z); const double sinx = sin(angle_x); const double siny = sin(angle_y); const double sinz = sin(angle_z); rotXYZ_[0][0] = cosy * cosz; rotXYZ_[0][1] = sinx * siny * cosz + cosx * sinz; rotXYZ_[0][2] = -cosx * siny * cosz + sinx * sinz; rotXYZ_[1][0] = -cosy * sinz; rotXYZ_[1][1] = -sinx * siny * sinz + cosx * cosz; rotXYZ_[1][2] = cosx * siny * sinz + sinx * cosz; rotXYZ_[2][0] = siny; rotXYZ_[2][1] = -sinx * cosy; rotXYZ_[2][2] = cosx * cosy; } /* matrix to first rotate reference frame angle_z radians through z axis, then angle_y radians through y axis, and lastly angle_x radians through x axis. Positive rotations are counter- clockwise looking down the axis. */ void ProjectionBase::SetZYXRotationMatrix(const double angle_x, const double angle_y, const double angle_z) { if (angle_x == 0 && angle_y == 0 && angle_z == 0) { for (int j = 0; j < 3; j++) for (int i = 0; i < 3; i++) rotZYX_[j][i] = (i == j ? 1 : 0 ); return; } const double cosx = cos(angle_x); const double cosy = cos(angle_y); const double cosz = cos(angle_z); const double sinx = sin(angle_x); const double siny = sin(angle_y); const double sinz = sin(angle_z); rotZYX_[0][0] = cosy * cosz; rotZYX_[0][1] = cosy * sinz; rotZYX_[0][2] = -siny; rotZYX_[1][0] = -cosx * sinz + sinx * siny * cosz; rotZYX_[1][1] = sinx * siny * sinz + cosx * cosz; rotZYX_[1][2] = sinx * cosy; rotZYX_[2][0] = cosx * siny * cosz + sinx * sinz; rotZYX_[2][1] = -sinx * cosz + cosx * siny * sinz; rotZYX_[2][2] = cosx * cosy; } void ProjectionBase::RotateXYZ(double &lat, double &lon) const { const double X0 = cos(lat) * cos(lon); const double Y0 = cos(lat) * sin(lon); const double Z0 = sin(lat); const double X1 = (rotXYZ_[0][0] * X0 + rotXYZ_[0][1] * Y0 + rotXYZ_[0][2] * Z0); const double Y1 = (rotXYZ_[1][0] * X0 + rotXYZ_[1][1] * Y0 + rotXYZ_[1][2] * Z0); const double Z1 = (rotXYZ_[2][0] * X0 + rotXYZ_[2][1] * Y0 + rotXYZ_[2][2] * Z0); lat = asin(Z1); lon = atan2(Y1, X1); } void ProjectionBase::RotateZYX(double &lat, double &lon) const { const double X0 = cos(lat) * cos(lon); const double Y0 = cos(lat) * sin(lon); const double Z0 = sin(lat); const double X1 = (rotZYX_[0][0] * X0 + rotZYX_[0][1] * Y0 + rotZYX_[0][2] * Z0); const double Y1 = (rotZYX_[1][0] * X0 + rotZYX_[1][1] * Y0 + rotZYX_[1][2] * Z0); const double Z1 = (rotZYX_[2][0] * X0 + rotZYX_[2][1] * Y0 + rotZYX_[2][2] * Z0); lat = asin(Z1); lon = atan2(Y1, X1); } void ProjectionBase::buildPhotoTable() { tableSize_ = 10; cosAngle_ = new double[tableSize_]; photoFunction_ = new double[tableSize_]; for (int i = 0; i < tableSize_; i++) { cosAngle_[i] = i / (tableSize_ - 1.); photoFunction_[i] = photoFunction(cosAngle_[i]); } } void ProjectionBase::destroyPhotoTable() { delete [] cosAngle_; delete [] photoFunction_; } double ProjectionBase::getPhotoFunction(const double x) const { if (x < 0) return(0); for (int i = 0; i < tableSize_; i++) { if (cosAngle_[i] > x) { double frac = ((x - cosAngle_[i-1]) /(cosAngle_[i] - cosAngle_[i-1])); double returnval = (photoFunction_[i-1] + frac * (photoFunction_[i] - photoFunction_[i-1])); return(returnval); } } return(1); } void ProjectionBase::setRange(const double range) { } xplanet-1.3.0/src/libprojection/ProjectionPeters.h0000644000175000017500000000075610411344513017215 00000000000000#ifndef PROJECTIONPETERS_H #define PROJECTIONPETERS_H // This projection contributed by Martin Pool #include "ProjectionBase.h" class ProjectionPeters : public ProjectionBase { public: ProjectionPeters(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: int wd_; int ht_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionAzimutEqualArea.h0000644000175000017500000000123310734562770021013 00000000000000/* Contributed from the xplanet forums: http://xplanet.sourceforge.net/FUDforum2/index.php?t=msg&S=8ddea843fc10100539f23a5d8d4d6d4a&th=57&goto=1686#msg_1686 */ #ifndef PROJECTIONAZIMUTEQUALAREA_H #define PROJECTIONAZIMUTEQUALAREA_H #include "ProjectionBase.h" class ProjectionAzimutEqualArea : public ProjectionBase { public: ProjectionAzimutEqualArea(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: int iside_; static void rot90degree(double &lon, double &lat); }; #endif xplanet-1.3.0/src/libprojection/ProjectionLambert.h0000644000175000017500000000063210411352756017342 00000000000000#ifndef PROJECTIONLAMBERT_H #define PROJECTIONLAMBERT_H #include "ProjectionBase.h" class ProjectionLambert : public ProjectionBase { public: ProjectionLambert(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; }; #endif xplanet-1.3.0/src/libprojection/ProjectionPeters.cpp0000644000175000017500000000421610411352756017553 00000000000000// This projection contributed by Martin Pool #include using namespace std; #include "ProjectionPeters.h" #include "xpUtil.h" /* * This class implements the Peters projection, which is an * area-preserving variant of the Mercator projection. I'm not 100% * sure this is the authentic Peters algorithm, but it seems to have * the right properties. * * Lines of latitude run straight across the map, and area is more or * less preserved. So, lines of latitude squish together towards the * poles, and spread out around the Equator. * * Longitude maps directly to X (with a scaling factor). * * Y is proportional to the sin of latitude, adjusted so that 0 is in * the center and +1/-1 at the edges. * * This projection always preserves the aspect ratio, since it already * tends to distort the vertical scale. So if it's not displayed in a * 2:1 window there will be black space. * * This projection cannot rotate vertically because I can't work out * what it should look like in that case. Sorry. */ ProjectionPeters::ProjectionPeters(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = true; wd_ = static_cast (2 * width_ * radius_); ht_ = wd_/2; } bool ProjectionPeters::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = ((x - width_/2)) * TWO_PI / wd_; const double Y = ((height_ - 2*y)) / ht_; if (Y < -1 || Y > +1) return(false); lat = asin(Y); lon = X; if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionPeters::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double X = lon; const double Y = sin(lat); if (X >= M_PI) X -= TWO_PI; else if (X < -M_PI) X += TWO_PI; x = (wd_ * X / TWO_PI) + width_ / 2; y = height_ / 2 - (Y * ht_/2); if (x < 0 || x >= width_) return(false); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionAncient.cpp0000644000175000017500000000471710411352756017700 00000000000000// This projection was contributed by Richard Rognlie #include using namespace std; #include "ProjectionAncient.h" #include "xpUtil.h" ProjectionAncient::ProjectionAncient(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; if (width_/2 < height_) dispScale_ = width_/2; else dispScale_ = height_; } bool ProjectionAncient::pixelToSpherical(const double x, const double y, double &lon, double &lat) { double X = (x - centerX_) / dispScale_; double Y = - (y - centerY_) / dispScale_; double rho,c; if (X<0) { X += radius_; rho = sqrt(X*X + Y*Y); if (rho > radius_) return(0); c = M_PI/2 * rho / radius_; if (rho == 0) { lat = 0; lon = 0; } else { double arg = Y * sin(c) / rho; lat = asin(arg); lon = atan2(X * sin(c), rho * cos(c)) - M_PI/2; } } else { X -= radius_; rho = sqrt(X*X + Y*Y); if (rho > radius_) return(0); c = M_PI/2 * rho / radius_; if (rho == 0) { lat = 0; lon = 0; } else { double arg = Y * sin(c) / rho; lat = asin(arg); lon = atan2(X * sin(c), rho * cos(c)) + M_PI/2; } } lon -= M_PI/2; if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionAncient::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); lon += M_PI/2; if (lon > M_PI) lon -= TWO_PI; double c,X,Y; double k = 2*radius_ / M_PI; if (lon < 0) { lon += M_PI/2; c = acos(cos(lat) * cos(lon)); if (c != 0) k *= c / sin(c); X = -radius_ + k * cos(lat) * sin(lon); Y = k * sin(lat); } else { lon -= M_PI/2; c = acos(cos(lat) * cos(lon)); if (c != 0) k *= c / sin(c); X = radius_ + k * cos(lat) * sin(lon); Y = k * sin(lat); } x = centerX_ + dispScale_ * X; if (x < 0 || x >= width_) return(false); y = centerY_ - dispScale_ * Y; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionBonne.cpp0000644000175000017500000000771410411420230017337 00000000000000/* This projection is from Section 5.5.1 of Calabretta and Greisen (2002), "Representations of celestial coordinates in FITS", Astronomy and Astrophysics 395, 1077-1122. The paper is available online at http://www.atnf.csiro.au/~mcalabre/WCS */ #include #include #include #include using namespace std; #include "Options.h" #include "ProjectionBonne.h" #include "xpUtil.h" ProjectionBonne::ProjectionBonne(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; double lat1_ = 50 * deg_to_rad; Options *options = Options::getInstance(); vector projParams = options->ProjectionParameters(); if (!projParams.empty()) { if (fabs(projParams[0]) < M_PI_2) { lat1_ = projParams[0]; } else { char buffer[256]; snprintf(buffer, 256, "%.1f", projParams[0]/deg_to_rad); ostringstream errMsg; errMsg << "Projection latitude of " << buffer << " degrees is out of range for Bonne Projection. Using "; snprintf(buffer, 256, "%.1f degrees.\n", lat1_/deg_to_rad); errMsg << buffer; xpWarn(errMsg.str(), __FILE__, __LINE__); } } // if lat1_ = 0, this is the Sanson-Flamsteed projection sfl_ = (tan(lat1_) == 0); if (sfl_) { Y0_ = 0; scale_ = 1; yOffset_ = 0; } else { const double cotLat1_ = 1/tan(lat1_); Y0_ = cotLat1_ + lat1_; sign_ = lat1_/fabs(lat1_); // scale the image so that it fits. double topValue = 0; double bottomValue = height_; const double lon = M_PI; for (int i = 0; i < height_; i++) { double lat = i * M_PI / (height_ - 1) - M_PI_2; double R = Y0_ - lat; double A = lon * cos(lat) / R; double Y = height_ * (0.5 - (Y0_ - R * cos(A))/M_PI); if (Y < topValue) topValue = Y; if (Y > bottomValue) bottomValue = Y; } scale_ = height_ / (bottomValue - topValue); yOffset_ = 0.5 * (scale_ * (height_ - bottomValue - topValue)); } scale_ *= (2*radius_); } bool ProjectionBonne::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double offsetX = x + width_/2 - centerX_; const double offsetY = y + height_/2 - centerY_ - yOffset_; const double X = TWO_PI * (offsetX/width_ - 0.5)/scale_; const double Y = Y0_ - M_PI * (0.5 - offsetY/height_)/scale_; if (sfl_) { if (fabs(Y) > M_PI_2) return(false); lat = -Y; if (cos(lat) == 0) lon = 0; else lon = X/cos(lat); } else { const double Rtheta = sign_ * sqrt(X*X + Y*Y); lat = Y0_ - Rtheta; if (fabs(lat) > M_PI_2) return(false); const double Aphi = atan2(X/Rtheta, Y/Rtheta); if (cos(lat) == 0) lon = 0; else lon = Aphi * Rtheta / cos(lat); } if (fabs(lon) > M_PI) return(false); if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionBonne::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); double X, Y; if (sfl_) { X = lon * cos(lat); Y = lat; } else { double Rtheta = Y0_ - lat; double Aphi = lon * cos(lat) / Rtheta; X = Rtheta * sin(Aphi); Y = Y0_ - Rtheta * cos(Aphi); } x = width_ * (X * scale_/TWO_PI + 0.5); y = height_ * (0.5 - Y * scale_/M_PI); x += (centerX_ - width_/2); y += (yOffset_ + centerY_ - height_/2); if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionMercator.h0000644000175000017500000000065010411417715017525 00000000000000#ifndef PROJECTIONMERCATOR_H #define PROJECTIONMERCATOR_H #include "ProjectionBase.h" class ProjectionMercator : public ProjectionBase { public: ProjectionMercator(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: double yScale_; }; #endif xplanet-1.3.0/src/libprojection/Makefile.in0000644000175000017500000004041511731356514015620 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libprojection DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libprojection_a_LIBADD = am_libprojection_a_OBJECTS = ProjectionAncient.$(OBJEXT) \ ProjectionAzimuthal.$(OBJEXT) \ ProjectionAzimutEqualArea.$(OBJEXT) ProjectionBase.$(OBJEXT) \ ProjectionBonne.$(OBJEXT) ProjectionGnomonic.$(OBJEXT) \ ProjectionHemisphere.$(OBJEXT) \ ProjectionIcosagnomonic.$(OBJEXT) ProjectionLambert.$(OBJEXT) \ ProjectionMercator.$(OBJEXT) ProjectionMollweide.$(OBJEXT) \ ProjectionOrthographic.$(OBJEXT) ProjectionPeters.$(OBJEXT) \ ProjectionPolyconic.$(OBJEXT) ProjectionRectangular.$(OBJEXT) \ ProjectionTSC.$(OBJEXT) getProjection.$(OBJEXT) libprojection_a_OBJECTS = $(am_libprojection_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libprojection_a_SOURCES) DIST_SOURCES = $(libprojection_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libprojection.a AM_CPPFLAGS = -I@top_srcdir@/src @USE_AR_FALSE@libprojection_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libprojection_a_AR = $(AR) cru libprojection_a_SOURCES = \ ProjectionAncient.cpp \ ProjectionAncient.h \ ProjectionAzimuthal.cpp \ ProjectionAzimuthal.h \ ProjectionAzimutEqualArea.cpp \ ProjectionAzimutEqualArea.h \ ProjectionBase.cpp \ ProjectionBase.h \ ProjectionBonne.h \ ProjectionBonne.cpp \ ProjectionGnomonic.cpp \ ProjectionGnomonic.h \ ProjectionHemisphere.cpp \ ProjectionHemisphere.h \ ProjectionIcosagnomonic.cpp \ ProjectionIcosagnomonic.h \ ProjectionLambert.cpp \ ProjectionLambert.h \ ProjectionMercator.cpp \ ProjectionMercator.h \ ProjectionMollweide.cpp \ ProjectionMollweide.h \ ProjectionOrthographic.cpp \ ProjectionOrthographic.h \ ProjectionPeters.cpp \ ProjectionPeters.h \ ProjectionPolyconic.cpp \ ProjectionPolyconic.h \ ProjectionRectangular.cpp \ ProjectionRectangular.h \ ProjectionTSC.cpp \ ProjectionTSC.h \ getProjection.cpp \ libprojection.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libprojection/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libprojection/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libprojection.a: $(libprojection_a_OBJECTS) $(libprojection_a_DEPENDENCIES) -rm -f libprojection.a $(libprojection_a_AR) libprojection.a $(libprojection_a_OBJECTS) $(libprojection_a_LIBADD) $(RANLIB) libprojection.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionAncient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionAzimutEqualArea.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionAzimuthal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionBase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionBonne.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionGnomonic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionHemisphere.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionIcosagnomonic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionLambert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionMercator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionMollweide.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionOrthographic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionPeters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionPolyconic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionRectangular.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProjectionTSC.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getProjection.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libprojection/ProjectionAzimuthal.cpp0000644000175000017500000000340210411352756020243 00000000000000#include using namespace std; #include "ProjectionAzimuthal.h" #include "xpUtil.h" ProjectionAzimuthal::ProjectionAzimuthal(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; radius_ = sqrt(2 * radius_); // The rendered globe is contained in a square with sides of length // iside and upper left corner at (istart, jstart). iside_ = (int) (radius_ * height_); } bool ProjectionAzimuthal::pixelToSpherical(const double x, const double y, double &lon, double &lat) { const double X = 2.0 * (x - centerX_) / iside_; const double Y = -2.0 * (y - centerY_) / iside_; const double rho = sqrt(X*X + Y*Y); if (rho > radius_) return(false); const double c = M_PI * rho / radius_; if (rho == 0) { lat = 0; lon = 0; } else { const double arg = Y * sin(c) / rho; lat = asin(arg); lon = atan2 (X * sin(c), rho * cos(c)); } if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return(true); } bool ProjectionAzimuthal::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); const double c = acos(cos(lat) * cos(lon)); if (c == M_PI) return(false); double k = radius_ / M_PI; if (c != 0) k *= c / sin(c); const double X = k * cos(lat) * sin(lon); const double Y = k * sin(lat); x = centerX_ + X * iside_/2; if (x < 0 || x >= width_) return(false); y = centerY_ - Y * iside_/2; if (y < 0 || y >= height_) return(false); return(true); } xplanet-1.3.0/src/libprojection/ProjectionTSC.h0000644000175000017500000000207511251552666016415 00000000000000#ifndef PROJECTIONTSC_H #define PROJECTIONTSC_H #include "ProjectionBase.h" class ProjectionTSC : public ProjectionBase { public: ProjectionTSC(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: int trueWidth_; int trueHeight_; double xOffset_; double yOffset_; double xScale_; double yScale_; double xPixel_[6]; double yPixel_[6]; void GetCenterLatLon(const int face, double &lat_c, double &lon_c) const; void GetXiEtaZeta(const int face, const double l, const double m, const double n, double &xi, double &eta, double &zeta) const; int GetFace(const double x, const double y) const; void GetLMN(const int face, const double xi, const double eta, const double zeta, double &l, double &m, double &n) const; }; #endif xplanet-1.3.0/src/libprojection/ProjectionRectangular.cpp0000644000175000017500000000334311107145321020547 00000000000000#include using namespace std; #include "ProjectionRectangular.h" #include "xpUtil.h" ProjectionRectangular::ProjectionRectangular(const int f, const int w, const int h) : ProjectionBase (f, w, h), mapBounds_(false) { isWrapAround_ = true; startLon_ = -M_PI + centerLon_; startLat_ = M_PI_2; delLat_ = M_PI/height_; delLon_ = TWO_PI/width_; } ProjectionRectangular::ProjectionRectangular(const int f, const int w, const int h, const double startLat, const double startLon, const double mapHeight, const double mapWidth) : ProjectionBase (f, w, h), mapBounds_(true) { startLon_ = startLon * f; startLat_ = startLat; delLat_ = mapHeight/height_; delLon_ = mapWidth/width_ * f; } bool ProjectionRectangular::pixelToSpherical(const double x, const double y, double &lon, double &lat) { lon = x * delLon_ + startLon_; lat = startLat_ - y * delLat_; return(true); } bool ProjectionRectangular::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; x = (lon - startLon_)/delLon_; if (!mapBounds_) { if (x >= width_) x -= width_; else if (x < 0) x += width_; } y = (startLat_ - lat)/delLat_; if (!mapBounds_ && y >= height_) y = height_ - 1; return(true); } xplanet-1.3.0/src/libprojection/ProjectionGnomonic.h0000644000175000017500000000116410411420230017505 00000000000000#ifndef PROJECTIONGNOMONIC_H #define PROJECTIONGNOMONIC_H #include "ProjectionBase.h" class ProjectionGnomonic : public ProjectionBase { public: ProjectionGnomonic(const int f, const int w, const int h); ProjectionGnomonic(const int f, const int w, const int h, const Options* o); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: void init(const int f, const int w, const int h, const Options* options); double scale_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionAzimuthal.h0000644000175000017500000000065010411344513017702 00000000000000#ifndef PROJECTIONAZIMUTHAL_H #define PROJECTIONAZIMUTHAL_H #include "ProjectionBase.h" class ProjectionAzimuthal : public ProjectionBase { public: ProjectionAzimuthal(const int f, const int w, const int h); bool pixelToSpherical(const double x, const double y, double &lon, double &lat); bool sphericalToPixel(double lon, double lat, double &x, double &y) const; private: int iside_; }; #endif xplanet-1.3.0/src/libprojection/ProjectionIcosagnomonic.cpp0000644000175000017500000004037211171645120021076 00000000000000/* This projection contributed by Ian Turner . His comments: I have created a new projection for XPlanet, entitled "icosagnomonic". It is very similar to the Fuller projection, but I have used the gnomonic projection instead of fuller's method to perform the transformation from spherical triangle to planar triangle (since the exact reverse transformation equation for Fuller's method is unknown). I have also changed Fuller's orientation of some of the triangles, so that the antarctic circle is not broken up. */ #include #include #include using namespace std; #include "Options.h" #include "ProjectionIcosagnomonic.h" #include "xpUtil.h" // Aspect ratio of map. #define TWIDE 5.25 #define THIGH 3 #define RATIO (((THIGH)*sqrt(3.0)/2)/(TWIDE)) bool ProjectionIcosagnomonic::PointXY::sameSide(const PointXY& p1, const PointXY& p2, const PointXY& l1, const PointXY& l2) { PointXY linec = l2 - l1; PointXY pointc = p1 - l1; double cp1 = linec.x*pointc.y - linec.y*pointc.x; pointc = p2 - l1; double cp2 = linec.x*pointc.y - linec.y*pointc.x; return ((cp1 < 0 && cp2 < 0) || (cp1 > 0 && cp2 > 0)); } bool ProjectionIcosagnomonic::PointXY::inTriangle(const PointXY& a, const PointXY& b, const PointXY& c) { return (sameSide(*this, a, b, c) && sameSide(*this, b, a, c) && sameSide(*this, c, a, b)); } double ProjectionIcosagnomonic::PointXY::distance(const PointXY& p) const { PointXY q = p-*this; return sqrt(q.x*q.x+q.y*q.y); } // Rotate counterclockwise around the origin by the specified angle. void ProjectionIcosagnomonic::PointXY::rotate(double phi) { // We convert to a vector, add the angle, and go back. double mag = sqrt(x*x + y*y); double theta = atan2(y, x); theta += phi; x = mag * cos(theta); y = mag * sin(theta); } int ProjectionIcosagnomonic::PointXY::cmpLine(const PointXY& a, const PointXY& b) { double v = (b.x - a.x)*(y - a.y) - (x - a.x)*(b.y - a.y); if (v < 0) return -1; if (v > 0) return 1; return 0; } ProjectionIcosagnomonic::PointXYZ ProjectionIcosagnomonic::PointXYZ::crossP(const PointXYZ& a, const PointXYZ& b) { return PointXYZ(a.y*b.z - b.y*a.z, b.x*a.z - a.x*b.z, a.x*b.y - b.x*a.y); } double ProjectionIcosagnomonic::PointXYZ::dotP(const PointXYZ& a, const PointXYZ& b) { return a.x*b.x + a.y*b.y + a.z*b.z; } bool ProjectionIcosagnomonic::PointLL::sameSide(const PointLL& p1, const PointLL& p2, const PointLL& l1, const PointLL& l2) { PointXYZ cp = PointXYZ::crossP(l1, l2); double dp1 = PointXYZ::dotP(cp, p1); double dp2 = PointXYZ::dotP(cp, p2); return (dp1 * dp2 >= 0); } bool ProjectionIcosagnomonic::PointLL::inTriangle(const PointLL& a, const PointLL& b, const PointLL& c) { return (sameSide(*this, a, b, c) && sameSide(*this, b, a, c) && sameSide(*this, c, a, b)); } double ProjectionIcosagnomonic::PointLL::bearing(const PointLL& b) const { const PointLL & a = *this; double y = sin(b.lon-a.lon)*cos(b.lat); double x = cos(a.lat)*sin(b.lat) - sin(a.lat)*cos(b.lat)*cos(b.lon-a.lon); return atan2(y, x); } void ProjectionIcosagnomonic::Polygon::scale(double x, double y) { for (PointList::iterator i = V.begin(); i != V.end(); i ++) { i->x *= x; i->y *= y; } } bool ProjectionIcosagnomonic::Polygon::contains(PointXY p) const { // Winding number algorithm from // http://geometryalgorithms.com/Archive/algorithm_0103/algorithm_0103.htm int wn = 0; // loop through all edges of the polygon for (PointList::const_iterator i = V.begin(); i != V.end(); i ++) { PointList::const_iterator j = i; j ++; if (i->y <= p.y) { // start y <= P.y if (j->y > p.y) // an upward crossing if (p.cmpLine(*i, *j) > 0) // P left of edge ++wn; // have a valid up intersect } else { // start y > P.y (no test needed) if (j->y <= p.y) // a downward crossing if (p.cmpLine(*i, *j) < 0) // P right of edge --wn; // have a valid down intersect } } return wn; } ProjectionIcosagnomonic::Triangle::Triangle(PointXY a, PointXY b, PointXY c, PointLL la, PointLL lb, PointLL lc) : cA(a), cB(b), cC(c), sA(la), sB(lb), sC(lc) { centerXY = PointXY((a.x + b.x + c.x)/3, (a.y + b.y + c.y)/3); centerLL = sCentroid(la, lb, lc); Options o; o.Latitude(centerLL.lat); o.Longitude(centerLL.lon); double dim = cB.distance(cA); o.CenterX(0); o.CenterY(0); // Reversed because (0,0) in upper left. PointXY dA(cA.x-centerXY.x, centerXY.y-cA.y); double d1 = atan2(dA.y, dA.x) - M_PI/2;// Angle to make map N-S. double d2 = centerLL.bearing(la); // Angle to make point A go north. rotation = d1+d2; o.AddProjectionParameter(33.5*deg_to_rad); P = new ProjectionGnomonic(1, (int)dim, (int)dim, &o); } ProjectionIcosagnomonic::Triangle::Triangle(const Triangle& T) : cA(T.cA), cB(T.cB), cC(T.cC),sA(T.sA), sB(T.sB), sC(T.sC), centerXY(T.centerXY), centerLL(T.centerLL), rotation(T.rotation), P(new ProjectionGnomonic(*(T.P))) {} ProjectionIcosagnomonic::Triangle::~Triangle() { delete P; } /* Finds the spherical centroid of the triangle, by converting to Cartesian * coordinates, finding the Cartesian centroid, normalizing to radius 1, * and converting back to lat/lon. * * This algorithm is inexact in general, but I think it works for * equilateral spherical triangles, which is what we're dealing with. */ ProjectionIcosagnomonic::PointLL ProjectionIcosagnomonic::Triangle::sCentroid(PointLL a, PointLL b, PointLL c) { PointXYZ ca(a); PointXYZ cb(b); PointXYZ cc(c); PointXYZ center1 = PointXYZ((ca.x+cb.x+cc.x)/3, (ca.y+cb.y+cc.y)/3, (ca.z+cb.z+cc.z)/3); double scale = sqrt(center1.x*center1.x+ center1.y*center1.y+ center1.z*center1.z); PointXYZ center2 = PointXYZ(center1.x / scale, center1.y / scale, center1.z / scale); return PointLL(center2); } bool ProjectionIcosagnomonic::Triangle::contains(PointXY p) const { return p.inTriangle(cA, cB, cC); } bool ProjectionIcosagnomonic::Triangle::contains(PointLL p) const { return p.inTriangle(sA, sB, sC); } bool ProjectionIcosagnomonic::Triangle::pixelToSpherical(PointXY p, double &lon, double &lat) const { if (!contains(p)) return false; PointXY q(p - centerXY); q.rotate(rotation); return P->pixelToSpherical(q.x, q.y, lon, lat); } bool ProjectionIcosagnomonic::Triangle::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (!Triangle::contains(PointLL(lat, lon))) return false; PointXY p; P->sphericalToPixel(lon, lat, p.x, p.y); p.rotate(-rotation); p += centerXY; x = p.x; y = p.y; return contains(PointXY(x, y)); } bool ProjectionIcosagnomonic::ClippedTriangle::contains(PointXY p) const { return Triangle::contains(p) && clip.contains(p); } bool ProjectionIcosagnomonic::ClippedTriangle::contains(PointLL p) const { double x, y; bool success = Triangle::sphericalToPixel(p.lon, p.lat, x, y); return success && contains(PointXY(x, y)); } ProjectionIcosagnomonic::ProjectionIcosagnomonic(const int f, const int w, const int h) : ProjectionBase(f, w, h) { isWrapAround_ = false; if (w * RATIO > h) { _w = h / RATIO; _h = h; } else { _w = w; _h = w * RATIO; } baseh = _h / THIGH; basew = _w / TWIDE; offset = PointXY(centerX_ - _w/2, centerY_ - _h/2); makeTriangles(); } ProjectionIcosagnomonic::~ProjectionIcosagnomonic() { for (TList::iterator i = T.begin(); i != T.end(); i ++) { delete *i; } } static int posmin(int a, int b, int c) { if (a < b && a < c && a >= 0) { return a; } else if (b < c && b >= 0) { return b; } else if (c >= 0) { return c; } else return 0; } void ProjectionIcosagnomonic::makeTriangles() { // Relates icosahedron vertices to points on the sphere. static const PointLL icosa[] = { PointLL(+64.700000 * deg_to_rad, 10.536200 * deg_to_rad), // 0 PointLL( +2.300882 * deg_to_rad, -5.245390 * deg_to_rad), // 1 PointLL(+10.447378 * deg_to_rad, 58.157710 * deg_to_rad), // 2 PointLL(+39.100000 * deg_to_rad, 122.300000 * deg_to_rad), // 3 PointLL(+50.103201 * deg_to_rad, -143.478490 * deg_to_rad), // 4 PointLL(+23.717925 * deg_to_rad, -67.132330 * deg_to_rad), // 5 PointLL(-39.100000 * deg_to_rad, -57.700000 * deg_to_rad), // 6 PointLL(-50.103200 * deg_to_rad, 36.521500 * deg_to_rad), // 7 PointLL(-23.717925 * deg_to_rad, 112.867670 * deg_to_rad), // 8 PointLL( -2.300900 * deg_to_rad, 174.754600 * deg_to_rad), // 9 PointLL(-10.447345 * deg_to_rad, -121.842290 * deg_to_rad), // 10 PointLL(-64.700000 * deg_to_rad, -169.463800 * deg_to_rad), // 11 PointLL(+70.750433 * deg_to_rad, 26.020416 * deg_to_rad), // 12 PointLL(+60.846374 * deg_to_rad, 43.157248 * deg_to_rad), // 13 PointLL( +0.000000 * deg_to_rad, 0.000000 * deg_to_rad) };// 14 // Relates plane vertices to icosahedron vertices and to map coordinates. static const struct { PointXY p; int v; } rect[] = { { PointXY(0.5, 0), 7 }, // 0 { PointXY(1.5, 0), 1 }, // 1 { PointXY(2.5, 0), 5 }, // 2 { PointXY(3.5, 0), 1 }, // 3 { PointXY(4.5, 0), 1 }, // 4 { PointXY(0 , 1), 7 }, // 5 { PointXY(1 , 1), 2 }, // 6 { PointXY(2 , 1), 0 }, // 7 { PointXY(3 , 1), 5 }, // 8 { PointXY(4 , 1), 6 }, // 9 { PointXY(5 , 1), 7 }, // 10 { PointXY(-.5, 2), 7 }, // 11 { PointXY(0.5, 2), 8 }, // 12 { PointXY(1.5, 2), 3 }, // 13 { PointXY(2.5, 2), 4 }, // 14 { PointXY(3.5, 2), 10 }, // 15 { PointXY(4.5, 2), 11 }, // 16 { PointXY(5.5, 2), 8 }, // 17 { PointXY(0 , 3), 11 }, // 18 { PointXY(1 , 3), 9 }, // 19 { PointXY(2 , 3), 9 }, // 20 { PointXY(3 , 3), 9 }, // 21 { PointXY(4 , 3), 9 }, // 22 { PointXY(5 , 3), 9 }, // 23 { PointXY(1 , 3), 8 } }; // 24 -- special duplicate of 19. // Relates triangles to their planar vertices. const int num_triangles = 23; // clip is clipping polygon number or -1 for whole triangle. static const struct { int v1, v2, v3, clip; } tri[] = { { 0, 1, 6, -1 }, // 0 { 1, 6, 7, -1 }, // 1 { 1, 2, 7, -1 }, // 2 { 3, 8, 9, -1 }, // 3 { 4, 9, 10, -1 }, // 4 { 5, 6, 12, -1 }, // 5 { 6, 12, 13, -1 }, // 6 { 6, 7, 13, -1 }, // 7 { 7, 13, 14, -1 }, // 8 { 7, 8, 14, -1 }, // 9 { 8, 14, 15, -1 }, // 10 { 8, 9, 15, -1 }, // 11 { 9, 10, 16, -1 }, // 12 { 9, 15, 16, -1 }, // 13 { 10, 16, 17, 3 }, // 14 { 11, 12, 18, 2 }, // 15 { 12, 18, 19, 4 }, // 16 { 12, 13, 19, 0 }, // 17 { 13, 14, 20, -1 }, // 18 { 13, 24, 20, 1 }, // 19 { 14, 15, 21, -1 }, // 20 { 15, 16, 22, -1 }, // 21 { 16, 17, 23, 5 } }; // 22 for (int i = 0; i < num_triangles; i ++) { int pv1 = tri[i].v1; int pv2 = tri[i].v2; int pv3 = tri[i].v3; PointXY pp1 = PointXY(rect[pv1].p.x*basew, rect[pv1].p.y*baseh); PointXY pp2 = PointXY(rect[pv2].p.x*basew, rect[pv2].p.y*baseh); PointXY pp3 = PointXY(rect[pv3].p.x*basew, rect[pv3].p.y*baseh); PointLL ip1 = icosa[rect[pv1].v]; PointLL ip2 = icosa[rect[pv2].v]; PointLL ip3 = icosa[rect[pv3].v]; if (tri[i].clip >= 0) { Polygon clip = makeClippingPath(tri[i].clip); clip.scale(basew, baseh); T.push_back(new ClippedTriangle(pp1, pp2, pp3, ip1, ip2, ip3, clip)); } else { T.push_back(new Triangle(pp1, pp2, pp3, ip1, ip2, ip3)); } int findx = posmin((int)(rect[pv1].p.x*2), (int)(rect[pv2].p.x*2), (int)(rect[pv3].p.x*2)); int findy = posmin((int)rect[pv1].p.y, (int)rect[pv2].p.y, (int)rect[pv3].p.y); // Triangles always span exactly two 'x' and one 'y' // (not including clipping). TFinder[findx][findy].push_back(T.back()); TFinder[findx+1][findy].push_back(T.back()); } } ProjectionIcosagnomonic::Polygon ProjectionIcosagnomonic::makeClippingPath(unsigned int n) { Polygon::PointList pp; switch(n) { case 0: pp.push_back(PointXY(0.5, 2)); pp.push_back(PointXY(1, 3)); pp.push_back(PointXY(1, 2 + 1/3.)); pp.push_back(PointXY(1.5, 2)); break; case 1: pp.push_back(PointXY(1.5, 2)); pp.push_back(PointXY(1.5, 2 + 2/3.)); pp.push_back(PointXY(2, 3)); break; case 2: pp.push_back(PointXY(0, 2)); pp.push_back(PointXY(0.25, 2.5)); pp.push_back(PointXY(0.5, 2)); break; case 3: pp.push_back(PointXY(5, 1)); pp.push_back(PointXY(5.25, 1.5)); pp.push_back(PointXY(5, 2)); pp.push_back(PointXY(4.5, 2)); break; case 4: pp.push_back(PointXY(0.5, 2)); pp.push_back(PointXY(0.25, 2.5)); pp.push_back(PointXY(0.3, 3)); pp.push_back(PointXY(1, 3)); break; case 5: pp.push_back(PointXY(4.5, 2)); pp.push_back(PointXY(5, 2)); pp.push_back(PointXY(4.65, 2.3)); break; default: break; } Polygon p(pp); return p; } bool ProjectionIcosagnomonic::pixelToSpherical(const double x, const double y, double &lon, double &lat) { PointXY p(x, y); p -= offset; int fx = (int)(p.x / (basew/2)); int fy = (int)(p.y / baseh); if (fx < 0 || fy < 0 || fx >= FINDCOLS || fy >= FINDROWS) return false; const TList& box = TFinder[fx][fy]; for (TList::const_iterator i = box.begin(); i != box.end(); i ++) { if ((*i)->pixelToSpherical(p, lon, lat)) { if (rotate_) RotateXYZ(lat, lon); if (lon > M_PI) lon -= TWO_PI; else if (lon < -M_PI) lon += TWO_PI; return true; } } return(false); } bool ProjectionIcosagnomonic::sphericalToPixel(double lon, double lat, double &x, double &y) const { if (rotate_) RotateZYX(lat, lon); PointLL p(lat, lon); for (TList::const_iterator i = T.begin(); i != T.end(); i ++) { if ((*i)->contains(p)) { if ((*i)->sphericalToPixel(lon, lat, x, y)) { x += offset.x; y += offset.y; return true; } } } return(false); } xplanet-1.3.0/src/drawProjection.cpp0000644000175000017500000002153411453174475014414 00000000000000#include #include #include #include using namespace std; #include "buildPlanetMap.h" #include "config.h" #include "createMap.h" #include "keywords.h" #include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "Ring.h" #include "satrings.h" #include "sphericalToPixel.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libdisplay/libdisplay.h" #include "libplanet/Planet.h" #include "libprojection/libprojection.h" #include "libprojection/ProjectionRectangular.h" extern void arrangeMarkers(multimap &annotationMap, DisplayBase *display); void drawProjection(DisplayBase *display, Planet *target, const double upX, const double upY, const double upZ, map &planetsFromSunMap, PlanetProperties *planetProperties) { const int height = display->Height(); const int width = display->Width(); // subsolar lat/lon double sLat, sLon; target->XYZToPlanetographic(0, 0, 0, sLat, sLon); // lat/lon of the "up" vector double nLat, nLon; target->XYZToPlanetographic(upX * FAR_DISTANCE, upY * FAR_DISTANCE, upZ * FAR_DISTANCE, nLat, nLon); // Rotate the image so that the "up" vector points to the top of // the screen Options *options = Options::getInstance(); double tc, dist; calcGreatArc(options->Latitude(), options->Longitude() * target->Flipped(), nLat, nLon * target->Flipped(), tc, dist); options->Rotate(-tc); Ring *ring = NULL; if (target->Index() == SATURN) { double X, Y, Z; target->getPosition(X, Y, Z); ring = new Ring(inner_radius/saturn_radius, outer_radius/saturn_radius, ring_brightness, LIT, ring_transparency, TRANSP, sLon, sLat, planetProperties->Shade(), planetsFromSunMap, target); } Map *m = NULL; m = createMap(sLat, sLon, options->Latitude(), options->Longitude(), width, height, options->Radius() * height, target, ring, planetsFromSunMap, planetProperties); if (!options->OutputMapRect().empty()) { if (!m->Write(options->OutputMapRect().c_str())) { ostringstream errStr; errStr << "Can't create " << options->OutputMapRect() << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } if (target->Index() == SATURN) { delete ring; } ProjectionBase *projection = NULL; if (options->ProjectionMode() == RANDOM) options->Projection(getRandomProjection()); else options->Projection(options->ProjectionMode()); if (options->Projection() == RECTANGULAR && planetProperties->MapBounds()) { projection = new ProjectionRectangular(target->Flipped(), width, height, m->StartLat(), m->StartLon(), m->MapHeight(), m->MapWidth()); } else { projection = getProjection(options->Projection(), target->Flipped(), width, height); } multimap annotationMap; #ifdef HAVE_CSPICE if (!options->SpiceFiles().empty()) addSpiceObjects(planetsFromSunMap, NULL, projection, annotationMap); #endif if (planetProperties->DrawArcs()) addArcs(planetProperties, target, NULL, projection, annotationMap); if (planetProperties->DrawMarkers()) addMarkers(planetProperties, target, projection->Radius() * height, 0, 0, 0, NULL, projection, width, height, planetsFromSunMap, annotationMap); if (planetProperties->DrawSatellites()) addSatellites(planetProperties, target, NULL, projection, annotationMap); // add tabs to make a photocube. Lines are black, so -background // white will make them stand out. if (options->Projection() == TSC) { unsigned char black[3] = { 0, 0, 0 }; const int thickness = 3; const double Z = 0; LineSegment *ls = NULL; int blockWidth = width/4; int blockHeight = blockWidth; int hp0 = (height + blockHeight)/2; int hp1 = hp0 + height/30; int hm0 = (height - blockHeight)/2; int hm1 = hm0 - height/30; for (int i = 0; i < 4; i++) { if (i == 1) continue; double X0 = i * blockWidth; ls = new LineSegment(black, thickness, X0, hp0, X0+width/40, hp1); annotationMap.insert(pair(Z, ls)); ls = new LineSegment(black, thickness, X0+width/4, hp0, X0+9*width/40, hp1); annotationMap.insert(pair(Z, ls)); ls = new LineSegment(black, thickness, X0+width/40, hp1, X0+9*width/40, hp1); annotationMap.insert(pair(Z, ls)); ls = new LineSegment(black, thickness, X0, hm0, X0+width/40, hm1); annotationMap.insert(pair(Z, ls)); ls = new LineSegment(black, thickness, X0+width/4, hm0, X0+9*width/40, hm1); annotationMap.insert(pair(Z, ls)); ls = new LineSegment(black, thickness, X0+width/40, hm1, X0+9*width/40, hm1); annotationMap.insert(pair(Z, ls)); } } const bool limbDarkening = (options->Projection() == HEMISPHERE || options->Projection() == ORTHOGRAPHIC); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { double lon, lat; if (projection->pixelToSpherical(i, j, lon, lat)) { unsigned char color[3]; m->GetPixel(lat, lon * target->Flipped(), color); if (limbDarkening) { for (int i = 0; i < 3; i++) color[i] = (unsigned char) (color[i] * projection->getDarkening()); } display->setPixel(i, j, color); } } } if (planetProperties->Grid()) { const double grid1 = planetProperties->Grid1(); const double grid2 = planetProperties->Grid2(); const unsigned char *color = planetProperties->GridColor(); for (double lat = -M_PI_2; lat <= M_PI_2; lat += M_PI_2/grid1) { for (double lon = -M_PI; lon <= M_PI; lon += M_PI_2/(grid1 * grid2)) { double X, Y, Z; if (sphericalToPixel(lat, lon, 1, X, Y, Z, target, NULL, projection)) display->setPixel(X, Y, color); } } for (double lat = -M_PI_2; lat <= M_PI_2; lat += M_PI_2/(grid1 * grid2)) { for (double lon = -M_PI; lon <= M_PI; lon += M_PI_2/grid1) { double X, Y, Z; if (sphericalToPixel(lat, lon, 1, X, Y, Z, target, NULL, projection)) display->setPixel(X, Y, color); } } } if (!annotationMap.empty()) { multimap::iterator annotationIterator; // place markers so that they don't overlap one another, if // possible arrangeMarkers(annotationMap, display); for (annotationIterator = annotationMap.begin(); annotationIterator != annotationMap.end(); annotationIterator++) { Annotation *a = annotationIterator->second; a->Draw(display); // if the projection "wraps around", add annotations on // the either side of the screen. if (projection->IsWrapAround() && !planetProperties->MapBounds()) { a->Shift(-width); a->Draw(display); a->Shift(2*width); a->Draw(display); } delete annotationIterator->second; } } delete m; delete projection; } xplanet-1.3.0/src/Map.cpp0000644000175000017500000010063011660333070012116 00000000000000#include #include #include #include #include using namespace std; #include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "Ring.h" #include "xpUtil.h" #include "libimage/Image.h" #include "libplanet/Planet.h" Map::Map(const int w, const int h) : width_(w), height_(h), area_(w*h), mapData_(NULL), nightData_(NULL), latArray_(NULL), lonArray_(NULL), cosLatArray_(NULL), cosLonArray_(NULL), sinLatArray_(NULL), sinLonArray_(NULL), target_(NULL), targetProperties_(NULL), ring_(NULL), sunLat_(0), sunLon_(0) { SetUpMap(); } Map::Map(const int w, const int h, const double sunLat, const double sunLon, Planet *t, PlanetProperties *tp, Ring *r, map &planetsFromSunMap) : width_(w), height_(h), area_(w*h), latArray_(NULL), lonArray_(NULL), cosLatArray_(NULL), cosLonArray_(NULL), sinLatArray_(NULL), sinLonArray_(NULL), target_(t), targetProperties_(tp), ring_(r), sunLat_(sunLat), sunLon_(sunLon) { SetUpMap(); memcpy(color_, tp->Color(), 3); dayData_ = new unsigned char [3*area_]; for (int i = 0; i < 3*area_; i +=3) memcpy(dayData_ + i, color_, 3); nightData_ = new unsigned char [3*area_]; memcpy(nightData_, dayData_, 3 * area_); const double shade = tp->Shade(); if (shade == 0) { memset(nightData_, 0, 3 * area_); } else if (shade < 1) { for (int i = 0; i < 3 * area_; i++) nightData_[i] = (unsigned char) (shade * nightData_[i]); } AddShadows(planetsFromSunMap); mapData_ = new unsigned char [3*area_]; memcpy(mapData_, dayData_, 3 * area_); CreateMap(); delete [] dayData_; delete [] nightData_; } Map::Map(const int w, const int h, const double sunLat, const double sunLon, const double obsLat, const double obsLon, const unsigned char *day, const unsigned char *night, const unsigned char *bump, const unsigned char *specular, const unsigned char *clouds, Planet *t, PlanetProperties *tp, Ring *r, map &planetsFromSunMap) : width_(w), height_(h), area_(w*h), latArray_(NULL), lonArray_(NULL), cosLatArray_(NULL), cosLonArray_(NULL), sinLatArray_(NULL), sinLonArray_(NULL), target_(t), targetProperties_(tp), ring_(r), sunLat_(sunLat), sunLon_(sunLon) { SetUpMap(); memcpy(color_, tp->Color(), 3); try { dayData_ = new unsigned char [3*area_]; } catch (bad_alloc &e) { xpExit("Can't allocate memory for day map\n", __FILE__, __LINE__); } memcpy(dayData_, day, 3 * area_); nightData_ = new unsigned char [3*area_]; const double shade = tp->Shade(); if (shade == 0) // night side is completely dark (shade is 0%) { memset(nightData_, 0, 3 * area_); } else if (shade == 1) // night side is same as day side (shade is 100%) { memcpy(nightData_, dayData_, 3 * area_); } else { if (night == NULL) // no night image specified, so shade the day map { memcpy(nightData_, dayData_, 3 * area_); for (int i = 0; i < 3 * area_; i++) nightData_[i] = static_cast (shade * nightData_[i]); } else { memcpy(nightData_, night, 3 * area_); } } if (bump != NULL) AddBumpMap(bump); if (specular != NULL) AddSpecularReflection(specular, obsLat, obsLon); if (clouds != NULL) OverlayClouds(clouds); AddShadows(planetsFromSunMap); mapData_ = new unsigned char [3*area_]; memcpy(mapData_, dayData_, 3 * area_); CreateMap(); delete [] dayData_; delete [] nightData_; } Map::~Map() { delete [] latArray_; delete [] lonArray_; delete [] cosLatArray_; delete [] cosLonArray_; delete [] sinLatArray_; delete [] sinLonArray_; delete [] mapData_; } void Map::SetUpMap() { mapWidth_ = TWO_PI * target_->Flipped(); mapHeight_ = M_PI; startLon_ = -M_PI * target_->Flipped(); startLat_ = M_PI_2; if (targetProperties_->MapBounds()) { double uly, ulx, lry, lrx; targetProperties_->MapBounds(uly, ulx, lry, lrx); mapHeight_ = (uly - lry) * deg_to_rad; if (mapHeight_ > M_PI) xpWarn("Map is too high\n", __FILE__, __LINE__); mapWidth_ = (lrx - ulx) * deg_to_rad; if (mapWidth_ > TWO_PI) xpWarn("Map is too wide\n", __FILE__, __LINE__); startLon_ = ulx * deg_to_rad; startLat_ = uly * deg_to_rad; } delLon_ = mapWidth_/width_; delLat_ = mapHeight_/height_; delete [] lonArray_; lonArray_ = new double[width_]; delete [] cosLonArray_; cosLonArray_ = new double[width_]; delete [] sinLonArray_; sinLonArray_ = new double[width_]; for (int i = 0; i < width_; i++) { lonArray_[i] = (i + 0.5) * delLon_ + startLon_; cosLonArray_[i] = cos(lonArray_[i]); sinLonArray_[i] = sin(lonArray_[i]); } delete [] latArray_; latArray_ = new double[height_]; delete [] cosLatArray_; cosLatArray_ = new double[height_]; delete [] sinLatArray_; sinLatArray_ = new double[height_]; for (int i = 0; i < height_; i++) { latArray_[i] = startLat_ - (i + 0.5) * delLat_; cosLatArray_[i] = cos(latArray_[i]); sinLatArray_[i] = sin(latArray_[i]); } } void Map::AddBumpMap(const unsigned char *bump) { double scale = 0.1 * targetProperties_->BumpScale() / 255.; double shade = targetProperties_->BumpShade(); unsigned char shaded[3]; double *height = new double[area_]; for (int i = 0; i < area_; i++) height[i] = bump[3*i] * scale; // Sun's direction double sunloc[3]; sunloc[0] = cos(sunLat_) * cos(sunLon_); sunloc[1] = cos(sunLat_) * sin(sunLon_); sunloc[2] = sin(sunLat_); int ipos = width_; for (int j = 1; j < height_ - 1; j++) { for (int i = 0; i < width_; i++) { double hplat = 1 + height[ipos - width_]; double hmlat = 1 + height[ipos + width_]; double hplon = 1 + height[ipos + 1]; double hmlon = 1 + height[ipos - 1]; double x1 = hplat * cosLatArray_[j-1] * cosLonArray_[i]; double y1 = hplat * cosLatArray_[j-1] * sinLonArray_[i]; double z1 = hplat * sinLatArray_[j-1]; double x0 = hmlat * cosLatArray_[j+1] * cosLonArray_[i]; double y0 = hmlat * cosLatArray_[j+1] * sinLonArray_[i]; double z0 = hmlat * sinLatArray_[j+1]; double dhdlatf[3]; // Finite difference dh/dlat in XYZ dhdlatf[0] = x1 - x0; dhdlatf[1] = y1 - y0; dhdlatf[2] = z1 - z0; int ii = (i + 1) % width_; x1 = hplon * cosLatArray_[j] * cosLonArray_[ii]; y1 = hplon * cosLatArray_[j] * sinLonArray_[ii]; z1 = hplon * sinLatArray_[j]; ii = (i - 1 + width_) % width_; x0 = hmlon * cosLatArray_[j] * cosLonArray_[ii]; y0 = hmlon * cosLatArray_[j] * sinLonArray_[ii]; z0 = hmlon * sinLatArray_[j]; double dhdlonf[3]; // Finite difference dh/dlon in XYZ dhdlonf[0] = x1 - x0; dhdlonf[1] = y1 - y0; dhdlonf[2] = z1 - z0; dhdlonf[0] *= target_->Flipped(); dhdlonf[1] *= target_->Flipped(); // Find the normal to the topography double normt[3]; cross(dhdlonf, dhdlatf, normt); // normalize it double len = sqrt(dot(normt, normt)); if (len > 0) for (int k = 0; k < 3; k++) normt[k] /= len; // Find the shading due to topography and the curvature of // the planet double shadt = 0.5 * (1 + ndot(sunloc, normt)); // This is the normal at the surface of a sphere double normal[3]; normal[0] = cosLatArray_[j] * cosLonArray_[i]; normal[1] = cosLatArray_[j] * sinLonArray_[i]; normal[2] = sinLatArray_[j]; // Find the shading due to the curvature of the planet double shadn = 0.5 * (1 + ndot(sunloc, normal)); // This should be the shading due to topography double shading = shadt/shadn; if (shading < 0) shading = 0; else if (shading > 1) shading = 1; unsigned char *day = dayData_ + 3*ipos; unsigned char *night = nightData_ + 3*ipos; if (shade >= 0 && shade <= 1) { for (int k = 0; k < 3; k++) shaded[k] = static_cast(day[k] * shade); night = shaded; } for (int k = 0; k < 3; k++) day[k] = static_cast((day[k]-night[k]) * shading + night[k]); ipos++; } } delete [] height; } void Map::AddSpecularReflection(const unsigned char *specular, const double obsLat, const double obsLon) { double tc, dist; calcGreatArc(sunLat_, sunLon_, obsLat, obsLon, tc, dist); double sin_lat1 = sin(sunLat_); double cos_lat1 = cos(sunLat_); double sin_tc = sin(tc); double cos_tc = cos(tc); double sin_d2 = sin(dist/2); double cos_d2 = cos(dist/2); double mid_lat = asin(sin_lat1 * cos_d2 + cos_lat1 * sin_d2 * cos_tc); double dlon = atan2(sin_tc * sin_d2 * cos_lat1, cos_d2 - sin_lat1 * sin(mid_lat)); double mid_lon = fmod(sunLon_ - dlon + M_PI, TWO_PI) - M_PI; double midpoint[3]; midpoint[0] = cos(mid_lat) * cos(mid_lon); midpoint[1] = cos(mid_lat) * sin(mid_lon); midpoint[2] = sin(mid_lat); double point[3]; int ipos = 0; for (int j = 0; j < height_; j++) { for (int i = 0; i < width_; i++) { point[0] = cosLatArray_[j] * cosLonArray_[i]; point[1] = cosLatArray_[j] * sinLonArray_[i]; point[2] = sinLatArray_[j]; double x = 0.96 * dot(point, midpoint); if (x > 0.8) { // I just picked these numbers to make it look good (enough) x = pow(x, 24); double brightness = x * specular[ipos]; double b255 = brightness/255; for (int k = 0; k < 3; k++) dayData_[ipos + k] = (unsigned char) (brightness + (1 - b255) * dayData_[ipos + k]); } ipos += 3; } } } void Map::OverlayClouds(const unsigned char *clouds) { unsigned char *new_clouds = new unsigned char [3 * area_]; memcpy(new_clouds, clouds, 3 * area_); const double gamma = targetProperties_->CloudGamma(); if (gamma != 1) { unsigned char *map = new unsigned char[256]; if (gamma > 0) { for (int i = 0; i < 256; i++) { map[i] = ((unsigned char) (pow(((double) i) / 255, 1.0/gamma) * 255)); } } else { memset(map, 0, 256); } for (int i = 0; i < 3 * area_; i++) new_clouds[i] = map[clouds[i]]; delete [] map; } const double shade = targetProperties_->Shade(); int ipos = 0; for (int i = 0; i < area_; i++) { if ((int) new_clouds[ipos] >= targetProperties_->CloudThreshold()) { for (int j = ipos; j < ipos + 3; j++) { const unsigned char cloudVal = new_clouds[j]; const double opacity = ((double) cloudVal) / 255; double color = (opacity * cloudVal + (1-opacity) * dayData_[j]); dayData_[j] = (unsigned char) color; color = (opacity * shade * cloudVal + (1-opacity) * nightData_[j]); nightData_[j] = (unsigned char) color; } } ipos += 3; } Options *options = Options::getInstance(); if (options->MakeCloudMaps()) { string outputDir(options->TmpDir()); string outputFilename = options->OutputBase(); if (outputFilename.empty()) outputFilename.assign("clouds"); outputFilename += options->OutputExtension(); string dayFile = outputDir + "day_" + outputFilename; Image d(width_, height_, dayData_, NULL); d.Quality(options->JPEGQuality()); if (!d.Write(dayFile.c_str())) { ostringstream errStr; errStr << "Can't create " << dayFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } string nightFile = outputDir + "night_" + outputFilename; Image n(width_, height_, nightData_, NULL); n.Quality(options->JPEGQuality()); if (!n.Write(nightFile.c_str())) { ostringstream errStr; errStr << "Can't create " << nightFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } if (options->Verbosity() > 0) { ostringstream msg; msg << "Wrote " << dayFile << " and " << nightFile << ".\n"; xpMsg(msg.str(), __FILE__, __LINE__); } exit(EXIT_SUCCESS); } delete [] new_clouds; } void Map::AddShadows(map &planetsFromSunMap) { double tX, tY, tZ; target_->getPosition(tX, tY, tZ); const double sun_dist = sqrt(tX*tX + tY*tY + tZ*tZ); Planet *Sun = planetsFromSunMap.begin()->second; // The target body's angular radius as seen from the sun const double size = target_->Radius() / sun_dist; // The Sun's angular radius as seen from the target body const double sun_size = Sun->Radius() / sun_dist; Options *options = Options::getInstance(); for (map::iterator it0 = planetsFromSunMap.begin(); it0 != planetsFromSunMap.end(); it0++) { Planet *p = it0->second; if (p->Index() == target_->Index() || p->Index() == SUN) continue; double pX, pY, pZ; p->getPosition(pX, pY, pZ); const double p_sun_dist = it0->first; // If this body is farther from the sun than the target body // we're finished since the map is stored in order of // heliocentric distance if (p_sun_dist > sun_dist) return; // This planet's angular radius as seen from the sun const double p_size = p->Radius() / p_sun_dist; // compute the angular separation of the two bodies as seen // from the Sun double t_vec[3] = { tX/sun_dist, tY/sun_dist, tZ/sun_dist }; double p_vec[3] = { pX/p_sun_dist, pY/p_sun_dist, pZ/p_sun_dist }; const double sep = acos(dot(t_vec, p_vec)); // If the separation is bigger than the sum of the apparent radii, // there's no shadow if (sep > 1.1 * (size + p_size)) continue; if (options->Verbosity() > 1) { ostringstream msg; msg << "separation between " << body_string[p->Index()] << " and " << body_string[target_->Index()] << " is " << sep/deg_to_rad << "\n"; msg << "Computing shadow from " << body_string[p->Index()] << "\n"; xpMsg(msg.str(), __FILE__, __LINE__); } AddShadow(p, sun_size); } } // Add the shadow cast by Planet p on the map void Map::AddShadow(Planet *p, const double sun_size) { double pX, pY, pZ; p->getPosition(pX, pY, pZ); double tX, tY, tZ; target_->getPosition(tX, tY, tZ); const double ratio = 1/(1 - p->Flattening()); double sunX, sunY, sunZ; p->XYZToPlanetaryXYZ(0, 0, 0, sunX, sunY, sunZ); sunZ *= ratio; const double border = sin(targetProperties_->Twilight() * deg_to_rad); for (int j = 0; j < height_; j++) { const double lat = latArray_[j]; const double radius = target_->Radius(lat); for (int i = 0; i < width_; i++) { const double lon = lonArray_[i]; double X, Y, Z; target_->PlanetographicToXYZ(X, Y, Z, lat, lon, radius); // if this point is on the night side, skip it if (ndot(tX - X, tY - Y, tZ - Z, tX, tY, tZ) < -border) continue; const double sun_dist = sqrt(X*X + Y*Y + Z*Z); const double p_dist = sqrt((pX - X) * (pX - X) + (pY - Y) * (pY - Y) + (pZ - Z) * (pZ - Z)); // angular size of the shadowing body seen from this point const double p_size = p->Radius() / p_dist; // compute separation between shadowing body and the Sun // as seen from this spot on the planet's surface const double S[3] = { -X/sun_dist, -Y/sun_dist, -Z/sun_dist }; const double P[3] = { (pX - X)/p_dist, (pY - Y)/p_dist, (pZ - Z)/p_dist }; const double sep = acos(dot(S, P)); // If the separation is bigger than the sum of the // apparent radii, this point isn't in shadow if (sep > (sun_size + p_size)) continue; // compute the covered fraction of the Sun's disk double covered; if ((p->Index() == JUPITER || p->Index() == SATURN) && target_->Primary() == p->Index()) { // if a satellite of Jupiter or Saturn is in its // primary's shadow covered = OverlapEllipse(sep, sun_size, p_size, X, Y, Z, sunX, sunY, sunZ, ratio, p); } else { covered = Overlap(sep, sun_size, p_size); } if (covered >= 0) { int ipos = 3 * (j * width_ + i); for (int k = 0; k < 3; k++) { dayData_[ipos] = (unsigned char) ((1 - covered) * dayData_[ipos] + covered * nightData_[ipos]); ipos++; } } } } } // The Sun's center is at S. The planet's center is at P. The disks // intersect at points A and B. Point I is the intersection of the // lines SP and AB. In order to find the overlap area we need to find // the areas of the triangles ASI and API as well as the areas of the // sectors covered by angles ASI and API. double Map::Overlap(const double elong, const double sun_radius, const double p_radius) { // First consider special cases // The centers are separated by more than the sum of the radii, so // no intersection if (elong > (sun_radius + p_radius)) return(0); // The centers are separated by less than the difference of the // radii, so one circle is contained within the other if (elong < fabs(sun_radius - p_radius)) { // Sun is completely covered if (sun_radius < p_radius) return(1); // Annular eclipse const double ratio = p_radius/sun_radius; return(ratio*ratio); } const double d = elong; const double r0 = sun_radius; const double r1 = p_radius; const double r0sq = r0*r0; const double r1sq = r1*r1; const double cos_ASI = (d*d + r0sq - r1sq) / (2*r0*d); const double ASI = acos(cos_ASI); const double sin_ASI = sin(ASI); const double cos_API = (d*d + r1sq - r0sq) / (2*r1*d); const double API = acos(cos_API); const double sin_API = sin(API); // It's okay if this "area" is negative. In that case angle ASI // is obtuse and we want to add area_ASI to the sector ASI instead // of subtract. const double area_ASI = cos_ASI * sin_ASI; const double sect_ASI = ASI; const double area_API = cos_API * sin_API; const double sect_API = API; double coverage = (r0sq * (sect_ASI - area_ASI) + r1sq * (sect_API - area_API)); coverage /= (M_PI * r0sq); return(coverage); } /* Use for satellites shadowed by Jupiter or Saturn. Assume that the shadowing ellipse is much bigger than the sun. To estimate coverage of the solar disk: treat shadowing planet limb as a straight edge. */ double Map::OverlapEllipse(const double elong, const double sunRadius, const double planetRadius, const double X, const double Y, const double Z, const double sunX, const double sunY, const double sunZ, const double ratio, Planet *planet) { const double p1X = sunX, p1Y = sunY, p1Z = sunZ; double p2X, p2Y, p2Z; // point in shadow double p3X = 0, p3Y = 0, p3Z = 0; // shadowing planet center planet->XYZToPlanetaryXYZ(X, Y, Z, p2X, p2Y, p2Z); p2Z *= ratio; double u = dot(p3X - p1X, p3Y - p1Y, p3Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z); u /= dot(p2X - p1X, p2Y - p1Y, p2Z - p1Z, p2X - p1X, p2Y - p1Y, p2Z - p1Z); // coordinates of the closest point to shadowing planet's limb double iX, iY, iZ; iX = p1X + u * (p2X - p1X); iY = p1Y + u * (p2Y - p1Y); iZ = p1Z + u * (p2Z - p1Z); iZ /= ratio; double lat, lon; planet->PlanetaryXYZToXYZ(iX, iY, iZ, iX, iY, iZ); planet->XYZToPlanetographic(iX, iY, iZ, lat, lon); const double Re = planet->Radius(lat); const double Rs = sunRadius/planetRadius; const double sep = elong/planetRadius; // d ranges from -1 to 1 const double d = (Re - sep) / Rs; double coverage; if (d < -1) { // The centers are separated by more than the sum of the // radii, so no intersection coverage = 0; } else if (d > 1) { // The centers are separated by less than the difference of // the radii, so Sun is completely covered coverage = 1; } else { coverage = (d * sqrt(1 - d*d) + asin(d) + M_PI_2)/M_PI; } return(coverage); } void Map::Reduce(const int factor) { if (factor < 1) return; Options *options = Options::getInstance(); if (options->Verbosity() > 1) { ostringstream msg; msg << "Shrinking map by 2^" << factor << "\n";; xpMsg(msg.str(), __FILE__, __LINE__); } int scale = 1; for (int i = 0; i < factor; i++) scale *= 2; int w = width_ / scale; int h = height_ / scale; int min_width = 16; if (w < min_width) { w = min_width; h = min_width/2; scale = width_/w; } const double scale2 = scale*scale; const int new_area = w * h; unsigned char *new_data = new unsigned char [3 * new_area]; memset(new_data, 0, 3 * new_area); double *average = new double [3 * new_area]; for (int i = 0; i < 3*new_area; i++) average[i] = 0; int ipos = 0; for (int j = 0; j < height_; j++) { const int js = j / scale; for (int i = 0; i < width_; i++) { const int is = i/scale; for (int k = 0; k < 3; k++) average[3*(js*w+is)+k] += (double) (mapData_[3*ipos+k]); ipos++; } } for (int i = 0; i < 3*new_area; i++) new_data[i] = (unsigned char) (average[i]/scale2); delete [] average; delete [] mapData_; mapData_ = new_data; width_ = w; height_ = h; area_ = w * h; SetUpMap(); } void Map::GetPixel(const double lat, double lon, unsigned char pixel[3]) const { lon = fmod(lon, TWO_PI); if (lon > M_PI) lon -= TWO_PI; double x = (lon - startLon_)/delLon_; if (targetProperties_->MapBounds()) { if (x < 0 || x >= width_) { memcpy(pixel, color_, 3); return; } } if (x < -0.5) x = -0.5; if (x >= width_ - 0.5) x = width_ - 0.5; int ix0 = (int) (floor(x)); int ix1 = ix0 + 1; if (ix0 < 0) ix0 = width_ - 1; if (ix1 >= width_) ix1 = 0; double y = (startLat_ - lat)/delLat_; if (targetProperties_->MapBounds()) { if (y < 0 || y >= height_) { memcpy(pixel, color_, 3); return; } } if (y < -0.5) y = -0.5; if (y >= height_ - 0.5) y = height_ - 0.5; int iy0 = (int) (floor(y)); int iy1 = iy0 + 1; if (iy0 < 0) iy0 = 0; if (iy1 >= height_) iy1 = height_ - 1; const double t = x - floor(x); const double u = 1 - (y - floor(y)); double weight[4]; getWeights(t, u, weight); unsigned char *pixels[4]; pixels[0] = mapData_ + 3 * (iy0 * width_ + ix0); pixels[1] = mapData_ + 3 * (iy0 * width_ + ix1); pixels[2] = mapData_ + 3 * (iy1 * width_ + ix0); pixels[3] = mapData_ + 3 * (iy1 * width_ + ix1); memset(pixel, 0, 3); for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) pixel[j] += (unsigned char) (weight[i] * pixels[i][j]); } } void Map::CopyBlock(unsigned char *dest, unsigned char *src, const int x1, const int y1, int x2, int y2) { for (int j = y1; j < y2; j++) { memcpy(dest + 3 * (width_ * j + x1), src + 3 * (width_ * j + x1), 3 * (x2 - x1)); } } bool Map::Write(const char *filename) const { Options *options = Options::getInstance(); Image image(width_, height_, mapData_, NULL); image.Quality(options->JPEGQuality()); const bool success = image.Write(filename); return success; } void Map::CreateMap() { double sunloc[3]; sunloc[0] = cos(sunLat_) * cos(sunLon_); sunloc[1] = cos(sunLat_) * sin(sunLon_); sunloc[2] = sin(sunLat_); double point[3]; const double border = sin(targetProperties_->Twilight() * deg_to_rad); if (border == 0) { // number of rows at top and bottom that are in polar day/night const int ipolar = abs(static_cast(sunLat_/delLat_)); if (sunLat_ < 0) // North pole is dark CopyBlock(mapData_, nightData_, 0, 0, width_, ipolar); else // South pole is dark CopyBlock(mapData_, nightData_, 0, height_ - ipolar, width_, height_); // subsolar longitude pixel column - this is where it's noon int inoon = static_cast (width_/2 * (sunLon_ * target_->Flipped() / M_PI - 1)); while (inoon < 0) inoon += width_; while (inoon >= width_) inoon -= width_; for (int i = ipolar; i < height_ - ipolar; i++) { double length_of_day; /* compute length of daylight as a fraction of the day at the current latitude. Based on Chapter 42 of Astronomical Formulae for Calculators by Meeus. */ double H0 = tan(latArray_[i]) * tan(sunLat_); if (H0 > 1) length_of_day = 1; else if (H0 < -1) length_of_day = 0; else length_of_day = 1 - (acos(H0) / M_PI); // idark = number of pixels that are in darkness at the // current latitude int idark = static_cast (width_ * (1 - length_of_day)); // ilight = number of pixels from noon to the terminator int ilight = (width_ - idark)/2; // start at the evening terminator int start_row = i * width_; int ipos = inoon + ilight; for (int j = 0; j < idark; j++) { if (ipos >= width_) ipos -= width_; memcpy(mapData_ + 3 * (start_row + ipos), nightData_ + 3 * (start_row + ipos), 3); ipos++; } } } else { // break the image up into a 100x100 grid const int sections = 100; int jstep = height_/sections; if (jstep == 0) jstep = 1; int istep = width_/sections; if (istep == 0) istep = 1; for (int j = 0; j < height_; j += jstep) { int uly = j; int lry = uly + jstep; if (lry >= height_) lry = height_ - 1; double cos_lat = cosLatArray_[(uly + lry)/2]; double sin_lat = sinLatArray_[(uly + lry)/2]; for (int i = 0; i < width_; i += istep) { int ulx = i; int lrx = ulx + istep; if (lrx >= width_) lrx = width_ - 1; double cos_lon = cosLonArray_[(ulx + lrx)/2]; double sin_lon = sinLonArray_[(ulx + lrx)/2]; point[0] = cos_lat * cos_lon; point[1] = cos_lat * sin_lon; point[2] = sin_lat; double x = dot(point, sunloc); if (x < -2*border) // NIGHT { CopyBlock(mapData_, nightData_, ulx, uly, lrx+1, lry+1); } else if (x < 2*border ) // TWILIGHT { for (int jj = uly; jj <= lry; jj++) { for (int ii = ulx; ii <= lrx; ii++) { point[0] = cosLatArray_[jj] * cosLonArray_[ii]; point[1] = cosLatArray_[jj] * sinLonArray_[ii]; point[2] = sinLatArray_[jj]; double dayweight = ((border + dot(point, sunloc)) / (2 * border)); int ipos = 3 * (jj * width_ + ii); if (dayweight < 0) { memcpy(mapData_ + ipos, nightData_ + ipos, 3); } else if (dayweight < 1) { dayweight = (1 - cos(dayweight * M_PI)) / 2; for (int k = 0; k < 3; k++) { double color = (dayweight * dayData_[ipos] + ((1 - dayweight) * nightData_[ipos])); mapData_[ipos++] = (unsigned char) color; } } } // for ( ii = ... ) block } // for ( jj = ... ) block } // end TWILIGHT block } } } // end (border > 0) block // draw the shadow of Saturn's rings on the planet if (target_->Index() == SATURN) { for (int j = 0; j < height_; j++) { // If this point is on the same side of the rings as // the sun, there's no shadow. if (sunLat_ * latArray_[j] > 0) continue; const double lat = latArray_[j]; for (int i = 0; i < width_; i++) { const double lon = lonArray_[i]; point[0] = cosLatArray_[j] * cosLonArray_[i]; point[1] = cosLatArray_[j] * sinLonArray_[i]; point[2] = sinLatArray_[j]; // If it's night, skip this one if (dot(point, sunloc) < -2*border) continue; const double ring_radius = ring_->getShadowRadius(lat, lon); const double ring_radius2 = ring_->getShadowRadius(lat + delLat_, lon + delLon_); const double dpp = 2*fabs(ring_radius2 - ring_radius); ring_->setDistPerPixel(dpp); double t = ring_->getTransparency(ring_radius); if (t > 0) { int ipos = 3 * (j * width_ + i); for (int k = 0; k < 3; k++) { double color = (t * mapData_[ipos] + ((1 - t) * nightData_[ipos])); mapData_[ipos++] = (unsigned char) color; } } } } } } xplanet-1.3.0/src/libephemeris/0000755000175000017500000000000011731372544013435 500000000000000xplanet-1.3.0/src/libephemeris/jpleph.h0000644000175000017500000000521511171234650015004 00000000000000/*************************************************************************** ******* JPLEPH.H ********* **************************************************************************** ** This header file is used both by ASC2EPH and TESTEPH programs. ** **************************************************************************** ** Written: May 28, 1997 by PAD ** Last modified: June 23,1997 by PAD ** ** Modified further by Bill Gray, Jun-Aug 2001 ** **************************************************************************** ** PAD: dr. Piotr A. Dybczynski, e-mail: dybol@phys.amu.edu.pl ** ** Astronomical Observatory of the A.Mickiewicz Univ., Poznan, Poland ** ***************************************************************************/ /* By default, in Windoze 32, the JPL ephemeris functions are compiled into a DLL. This is not really all that helpful at present, but may be useful to people who want to use the functions from languages other than C. */ #ifdef _WIN32 #define DLL_FUNC __stdcall #else #define DLL_FUNC #endif #ifdef __cplusplus extern "C" { #endif void * DLL_FUNC jpl_init_ephemeris( const char *ephemeris_filename, char nam[][6], double *val); void DLL_FUNC jpl_close_ephemeris( void *ephem); int DLL_FUNC jpl_state( void *ephem, const double et, const int list[12], double pv[][6], double nut[4], const int bary); int DLL_FUNC jpl_pleph( void *ephem, const double et, const int ntarg, const int ncent, double rrd[], const int calc_velocity); double DLL_FUNC jpl_get_double( const void *ephem, const int value); long DLL_FUNC jpl_get_long( const void *ephem, const int value); int DLL_FUNC make_sub_ephem( void *ephem, const char *sub_filename, const double start_jd, const double end_jd); #ifdef __cplusplus } #endif /* Following are constants used in */ /* jpl_get_double( ) and jpl_get_long( ): */ #define JPL_EPHEM_START_JD 0 #define JPL_EPHEM_END_JD 8 #define JPL_EPHEM_STEP 16 #define JPL_EPHEM_N_CONSTANTS 24 #define JPL_EPHEM_AU_IN_KM 28 #define JPL_EPHEM_EARTH_MOON_RATIO 36 #define JPL_EPHEM_EPHEMERIS_VERSION 200 #define JPL_EPHEM_KERNEL_SIZE 204 #define JPL_EPHEM_KERNEL_RECORD_SIZE 208 #define JPL_EPHEM_KERNEL_NCOEFF 212 #define JPL_EPHEM_KERNEL_SWAP_BYTES 216 #define jpl_get_pvsun( ephem) ((double *)((char *)ephem + 224)) xplanet-1.3.0/src/libephemeris/libmoons/0000755000175000017500000000000011731372544015257 500000000000000xplanet-1.3.0/src/libephemeris/libmoons/Makefile.am0000644000175000017500000000043710411416255017227 00000000000000noinst_LIBRARIES = libmoons.a AM_CPPFLAGS = -I@top_srcdir@/src if USE_AR libmoons_a_AR = $(AR) cru else libmoons_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libmoons_a_SOURCES = elp82b.h earth.cpp mars.cpp jupiter.cpp libmoons.h tass17.h saturn.cpp uranus.cpp neptune.cpp pluto.cpp xplanet-1.3.0/src/libephemeris/libmoons/saturn.cpp0000644000175000017500000002233310411416255017212 00000000000000#include #include using namespace std; #include "body.h" #include "xpUtil.h" #include "tass17.h" /* The TASS theory of motion by Vienne and Duriez is described in (1995, A&A 297, 588-605) for the inner six satellites and Iapetus and in (1997, A&A 324, 366-380) for Hyperion. Much of this code is translated from the TASS17 FORTRAN code which is at ftp://ftp.bdl.fr/pub/ephem/satel/tass17 Orbital elements for Phoebe are from the Explanatory Supplement and originally come from Zadunaisky (1954). */ static void calcLon(const double jd, double lon[]) { const double t = (jd - 2444240)/365.25; for (int is = 0; is < 7; is++) { lon[is] = 0; for (int i = 0; i < ntr[is][4]; i++) lon[is] += series[is][1][i][0] * sin(series[is][1][i][1] + t * series[is][1][i][2]); } } static void calcElem(const double jd, const int is, const double lon[], double elem[6]) { const double t = (jd - 2444240)/365.25; double s = 0; for (int i = 0; i < ntr[is][0]; i++) { double phase = series[is][0][i][1]; for (int j = 0; j < 7; j++) phase += iks[is][0][i][j] * lon[j]; s += series[is][0][i][0] * cos(phase + t*series[is][0][i][2]); } elem[0] = s; s = lon[is] + al0[is]; for (int i = ntr[is][4]; i < ntr[is][1]; i++) { double phase = series[is][1][i][1]; for (int j = 0; j < 7; j++) phase += iks[is][1][i][j] * lon[j]; s += series[is][1][i][0] * sin(phase + t*series[is][1][i][2]); } s += an0[is]*t; elem[1] = atan2(sin(s), cos(s)); double s1 = 0; double s2 = 0; for (int i = 0; i < ntr[is][2]; i++) { double phase = series[is][2][i][1]; for (int j = 0; j < 7; j++) phase += iks[is][2][i][j] * lon[j]; s1 += series[is][2][i][0] * cos(phase + t*series[is][2][i][2]); s2 += series[is][2][i][0] * sin(phase + t*series[is][2][i][2]); } elem[2] = s1; elem[3] = s2; s1 = 0; s2 = 0; for (int i = 0; i < ntr[is][3]; i++) { double phase = series[is][3][i][1]; for (int j = 0; j < 7; j++) phase += iks[is][3][i][j] * lon[j]; s1 += series[is][3][i][0] * cos(phase + t*series[is][3][i][2]); s2 += series[is][3][i][0] * sin(phase + t*series[is][3][i][2]); } elem[4] = s1; elem[5] = s2; } static void elemHyperion(const double jd, double elem[6]) { const double T0 = 2451545.0; const double AMM7 = 0.2953088138695055; const double T = jd - T0; elem[0] = -0.1574686065780747e-02; for (int i = 0; i < NBTP; i++) { const double wt = T*P[i][2] + P[i][1]; elem[0] += P[i][0] * cos(wt); } elem[1] = 0.4348683610500939e+01; for (int i = 0; i < NBTQ; i++) { const double wt = T*Q[i][2] + Q[i][1]; elem[1] += Q[i][0] * sin(wt); } elem[1] += AMM7*T; elem[1] = fmod(elem[1], 2*M_PI); if (elem[1] < 0) elem[1] += 2*M_PI; for (int i = 0; i < NBTZ; i++) { const double wt = T*Z[i][2] + Z[i][1]; elem[2] += Z[i][0] * cos(wt); elem[3] += Z[i][0] * sin(wt); } for (int i = 0; i < NBTZT; i++) { const double wt = T*ZT[i][2] + ZT[i][1]; elem[4] += ZT[i][0] * cos(wt); elem[5] += ZT[i][0] * sin(wt); } } void satsat(const double jd, const body b, double &X, double &Y, double &Z) { double elem[6] = { 0, 0, 0, 0, 0, 0 }; double aam; // mean motion, in radians per day double tmas; // mass, in Saturn masses if (b == PHOEBE) { const double t = jd - 2433282.5; const double T = t/365.25; const double axis = 0.0865752; const double lambda = (277.872 - 0.6541068 * t) * deg_to_rad; const double e = 0.16326; const double lp = (280.165 - 0.19586 * T) * deg_to_rad; const double i = (173.949 - 0.020 * T) * deg_to_rad - M_PI; // retrograde orbit const double omega = (245.998 - 0.41353 * T) * deg_to_rad; const double M = lambda - lp; const double E = kepler(e, M); // rectangular coordinates on the orbit plane, x-axis is toward // pericenter X = axis * (cos(E) - e); Y = axis * sqrt(1 - e*e) * sin(E); Z = 0; // rotate towards ascending node of the orbit on the ecliptic // and equinox of 1950 rotateZ(X, Y, Z, -(lp - omega)); // rotate towards ecliptic rotateX(X, Y, Z, -i); // rotate to vernal equinox rotateZ(X, Y, Z, -omega); // rotate to earth equator B1950 const double eps = 23.4457889 * deg_to_rad; rotateX(X, Y, Z, -eps); // precess to J2000 precessB1950J2000(X, Y, Z); } else if (b == HYPERION) { elemHyperion(jd, elem); aam = 0.2953088138695000E+00 * 365.25; tmas = 1/0.3333333333333000E+08; } else { int index = 0; switch (b) { case MIMAS: index = 0; break; case ENCELADUS: index = 1; break; case TETHYS: index = 2; break; case DIONE: index = 3; break; case RHEA: index = 4; break; case TITAN: index = 5; break; case IAPETUS: index = 6; break; default: xpExit("Unknown Saturn satellite\n", __FILE__, __LINE__); } double lon[7]; calcLon(jd, lon); calcElem(jd, index, lon, elem); aam = am[index] * 365.25; tmas = 1/tam[index]; } if (b != PHOEBE) { const double GK = 0.01720209895; const double TAS = 3498.790; const double GK1 = (GK * 365.25) * (GK * 365.25) / TAS; const double amo = aam * (1 + elem[0]); const double rmu = GK1 * (1 + tmas); const double dga = pow(rmu/(amo*amo), 1./3.); const double rl = elem[1]; const double rk = elem[2]; const double rh = elem[3]; double corf = 1; double fle = rl - rk * sin(rl) + rh * cos(rl); while (fabs(corf) > 1e-14) { const double cf = cos(fle); const double sf = sin(fle); corf = (rl - fle + rk*sf - rh*cf)/(1 - rk*cf - rh*sf); fle += corf; } const double cf = cos(fle); const double sf = sin(fle); const double dlf = -rk * sf + rh * cf; const double rsam1 = -rk * cf - rh * sf; const double asr = 1/(1 + rsam1); const double phi = sqrt(1 - rk*rk - rh*rh); const double psi = 1/(1+phi); const double x1 = dga * (cf - rk - psi * rh * dlf); const double y1 = dga * (sf - rh + psi * rk * dlf); const double vx1 = amo * asr * dga * (-sf - psi * rh * rsam1); const double vy1 = amo * asr * dga * ( cf + psi * rk * rsam1); const double dwho = 2 * sqrt(1 - elem[5] * elem[5] - elem[4] * elem[4]); const double rtp = 1 - 2 * elem[5] * elem[5]; const double rtq = 1 - 2 * elem[4] * elem[4]; const double rdg = 2 * elem[5] * elem[4]; const double X1 = x1 * rtp + y1 * rdg; const double Y1 = x1 * rdg + y1 * rtq; const double Z1 = (-x1 * elem[5] + y1 * elem[4]) * dwho; const double AIA = 28.0512 * deg_to_rad; const double OMA = 169.5291 * deg_to_rad; const double ci = cos(AIA); const double si = sin(AIA); const double co = cos(OMA); const double so = sin(OMA); X = co * X1 - so * ci * Y1 + so * si * Z1; Y = so * X1 + co * ci * Y1 - co * si * Z1; Z = si * Y1 + ci * Z1; // rotate to earth equator J2000 const double eps = 23.4392911 * deg_to_rad; rotateX(X, Y, Z, -eps); /* const double VX1 = vx1 * rtp + vy1 * rdg; const double VY1 = vx1 * rdg + vy1 * rtq; const double VZ1 = (-vx1 * elem[5] + vy1 * elem[4]) * dwho; Vx = co * VX1 - so * ci * VY1 + so * si * VZ1; Vy = so * VX1 + co * ci * VY1 - co * si * VZ1; Vz = si * VY1 + ci * VZ1; */ } } #if 0 int main(int argc, char **argv) { double X, Y, Z; body b; b = MIMAS ; satsat(2421677.4, b, X, Y, Z); satsat(2441692.3, b, X, Y, Z); satsat(2445106.3, b, X, Y, Z); b = ENCELADUS ; satsat(2406147.5, b, X, Y, Z); satsat(2441699.9, b, X, Y, Z); satsat(2444714., b, X, Y, Z); b = TETHYS ; satsat(2409977.4, b, X, Y, Z); satsat(2432270.9, b, X, Y, Z); satsat(2445814., b, X, Y, Z); b = DIONE ; satsat(2406477.5, b, X, Y, Z); satsat(2441257.8, b, X, Y, Z); satsat(2445820.6, b, X, Y, Z); b = RHEA ; satsat(2405824.5, b, X, Y, Z); satsat(2432236.8, b, X, Y, Z); satsat(2445814., b, X, Y, Z); b = TITAN ; satsat(2440512.6, b, X, Y, Z); satsat(2443569.3, b, X, Y, Z); satsat(2445061.3, b, X, Y, Z); b = HYPERION; satsat(2406327.6, b, X, Y, Z); satsat(2443128.7, b, X, Y, Z); satsat(2445720.1, b, X, Y, Z); b = IAPETUS; satsat(2406216.6, b, X, Y, Z); satsat(2443179.7, b, X, Y, Z); satsat(2445815.1, b, X, Y, Z); } #endif xplanet-1.3.0/src/libephemeris/libmoons/libmoons.h0000644000175000017500000000134510411416255017165 00000000000000#ifndef LIBMOONS_H #define LIBMOONS_H extern void moon(const double jd, double &Mx, double &My, double &Mz); extern void marsat(const double jd, const body b, double &X, double &Y, double &Z); extern void jupsat(const double jd, const body b, double &X, double &Y, double &Z); extern void jupsat2(const double jd, const body b, double &X, double &Y, double &Z); extern void satsat(const double jd, const body b, double &X, double &Y, double &Z); extern void urasat(const double jd, const body b, double &X, double &Y, double &Z); extern void nepsat(const double jd, const body b, double &X, double &Y, double &Z); extern void plusat(const double jd, double &X, double &Y, double &Z); #endif xplanet-1.3.0/src/libephemeris/libmoons/tass17.h0000644000175000017500000060171410411416255016473 00000000000000#ifndef TASS17_H #define TASS17_H static double al0[7] = { 0.1822484926062486E+00, 0.7997716657090215E+00, 0.5239109365414447E+01, 0.1994592585279060E+01, 0.6221340947932125E+01, 0.4936792168079816E+01, 0.1661250302251527E+00 }; static double an0[7] = { 0.2435144296437475E+04, 0.1674867298497696E+04, 0.1215663929056177E+04, 0.8385108703595477E+03, 0.5080093197533360E+03, 0.1439240478491399E+03, 0.2892852233006167E+02 }; static double tam[7] = { 0.1577287066246000E+08, 0.6666666666667000E+07, 0.9433962264151000E+06, 0.5094243504840000E+06, 0.2314814814815000E+06, 0.4225863977890000E+04, 0.3225806451613000E+06 }; static double am[7] = { 0.6667061728782000E+01, 0.4585536751534000E+01, 0.3328306445055000E+01, 0.2295717646433000E+01, 0.1390853715957000E+01, 0.3940425676910000E+00, 0.7920197763193000E-01 }; static int ntr[7][5] = { { 8, 35, 38, 32, 29 }, { 3, 12, 13, 5, 3 }, { 4, 40, 23, 34, 28 }, { 10, 19, 21, 9, 3 }, { 11, 27, 21, 9, 11 }, { 7, 36, 35, 22, 18 }, { 100, 241, 184, 80, 22 } }; static double series[7][4][250][3] = { { { { 0.5196910356411064E-02, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.2760763800054540E-04, 0.6863463000141887E+00, 0.8904537688864059E-01 }, { 0.9347313993693880E-05, 0.2209688858348459E+01, 0.1019765304355295E+02 }, { 0.1247132122206555E-03, 0.3384553386830940E+01, 0.2428763081719043E+04 }, { 0.5773002078925660E-04, 0.9293070332553311E+00, 0.2428852127095932E+04 }, { 0.5767710349652186E-04, 0.2698207086816744E+01, 0.2428674036342154E+04 }, { 0.1211438560239529E-04, 0.2011860786802310E+01, 0.2428584990965266E+04 }, { 0.1201719293977645E-04, 0.4757245986859100E+01, 0.2428941172472820E+04 } }, { { 0.7574073228630605E+00, 0.6863463000141887E+00, 0.8904537688864059E-01 }, { 0.1243299165183161E-01, 0.2059038900042566E+01, 0.2671361306659218E+00 }, { 0.2266397525680950E-02, 0.2209688858348459E+01, 0.1019765304355295E+02 }, { 0.1059900648786554E-02, 0.4664935211924063E+01, 0.1010860766666431E+02 }, { 0.1022783782146454E-02, 0.2896035158362648E+01, 0.1028669842044159E+02 }, { 0.7266042399548720E-03, 0.1372692600028377E+01, 0.1780907537772812E+00 }, { 0.5060827138159436E-03, 0.4533623190990083E+01, 0.5765338167707570E-01 }, { 0.3590283311520520E-03, 0.3431731500070944E+01, 0.4452268844432029E+00 }, { 0.2628008938901560E-03, 0.5445714149319756E-01, 0.6492496159975472E-01 }, { 0.2459408712169538E-03, 0.3122254716217880E+01, 0.1204373721002055E+00 }, { 0.2237171274873740E-03, 0.8369962583200818E+00, 0.1001956228977567E+02 }, { 0.2097481794022580E-03, 0.3582381458376836E+01, 0.1037574379733023E+02 }, { 0.1969761970496516E-03, 0.4459828112124973E+01, 0.1131657921775265E+00 }, { 0.1276023939118606E-03, 0.5446831688805226E+01, 0.5021841352532276E+01 }, { 0.1163953693117700E-03, 0.3677931635243811E+01, 0.5199932106309558E+01 }, { 0.9230818991264319E-04, 0.2435908416203692E+01, 0.3139199521156488E-01 }, { 0.7345436389839680E-04, 0.4239927673886392E+01, 0.3866357513424390E-01 }, { 0.4870003920011340E-04, 0.3292242611895686E+01, 0.9930516912887027E+01 }, { 0.4473029935270700E-04, 0.4268727758391025E+01, 0.1046478917421887E+02 }, { 0.2799611810201398E-04, 0.5219969491004272E+01, 0.1466987585657163E+00 }, { 0.1317556115144799E-04, 0.2490365557696890E+01, 0.9631695681131960E-01 }, { 0.1284412109690001E-04, 0.2764723137428667E+01, 0.2357441354543569E+00 }, { 0.1096551493377600E-04, 0.2023919695921281E+01, 0.8177379696596157E-01 }, { 0.9505947727365781E-05, 0.3697269572615722E+01, 0.5079494734209352E+01 }, { 0.9283150504689616E-05, 0.1804019257682701E+01, 0.7271579922679017E-02 }, { 0.9274943256038984E-05, 0.6670083626422765E+00, 0.2094827489888461E+00 }, { 0.8715614709370008E-05, 0.4494947316246257E+01, 0.2985281258774867E+00 }, { 0.5198697062661200E-05, 0.4383615872629911E+01, 0.5168540111097993E+01 }, { 0.3847028724666396E-05, 0.6152515926191327E+01, 0.4990449357320712E+01 }, { 0.1456357118609923E-03, 0.2429607332411430E+00, 0.2428763081719043E+04 }, { 0.6713447572711532E-04, 0.4070899686845125E+01, 0.2428852127095932E+04 }, { 0.6681066992467156E-04, 0.5839799740406537E+01, 0.2428674036342154E+04 }, { 0.1422191153382851E-04, 0.5153453440392031E+01, 0.2428584990965266E+04 }, { 0.1410806846233703E-04, 0.1615653333269246E+01, 0.2428941172472820E+04 }, { 0.8436544361747722E-05, 0.5237122972947232E+01, 0.1479320878997066E+03 } }, { { 0.1598170384010833E-01, 0.6222473066544683E+01, 0.6381214718431950E+01 }, { 0.7314708595483528E-02, 0.2394534112940702E+01, 0.6292169341543310E+01 }, { 0.7111400179101439E-02, 0.6256340593792847E+00, 0.6470260095320591E+01 }, { 0.1511549643267883E-02, 0.4849780466516306E+01, 0.6203123964654669E+01 }, { 0.1462159663847020E-02, 0.1311980359393475E+01, 0.6559305472209232E+01 }, { 0.3336219324045869E-03, 0.1021841512912324E+01, 0.6114078587766029E+01 }, { 0.3306740201503266E-03, 0.1998326659407663E+01, 0.6648350849097872E+01 }, { 0.1607455685492625E-03, 0.4012828055947553E+01, -0.3816438325120998E+01 }, { 0.7741070178691200E-04, 0.1331318296765385E+01, 0.6438868100109027E+01 }, { 0.7462286917233880E-04, 0.2684672959421853E+01, 0.6737396225986513E+01 }, { 0.7291096595471061E-04, 0.3477087866487927E+01, 0.6025033210877388E+01 }, { 0.6027636670891800E-04, 0.3061542475582978E+01, 0.6501652090532156E+01 }, { 0.4732749947219130E-04, 0.1688849875554602E+01, 0.6323561336754874E+01 }, { 0.3701056581056820E-04, 0.2375196175568790E+01, 0.6412606713643515E+01 }, { 0.3214169596116360E-04, 0.6241811003916594E+01, 0.6260777346331746E+01 }, { 0.2716644193630320E-04, 0.4144096229130206E+01, 0.6234515959866234E+01 }, { 0.2628589083368250E-04, 0.2017664596779575E+01, 0.6527913476997668E+01 }, { 0.2051066737888520E-04, 0.6449719967511965E+00, 0.6349822723220386E+01 }, { 0.2018714468805330E-04, 0.3747888775597167E+01, 0.6590697467420797E+01 }, { 0.1733062364950220E-04, 0.2413872050312614E+01, 0.6171731969443105E+01 }, { 0.1650028552141730E-04, 0.4604222971289160E+01, 0.1648982238509626E+02 }, { 0.1636165431356800E-04, 0.3371019259436040E+01, 0.6826441602875153E+01 }, { 0.1620277455112710E-04, 0.2835322917727745E+01, 0.1666791313887354E+02 }, { 0.1578422930662670E-04, 0.5932334220063532E+01, 0.5935987833988747E+01 }, { 0.1155548887648690E-04, 0.2148976617713557E+01, 0.1657886776198490E+02 }, { 0.8915309088647409E-05, 0.3161572755262240E+00, 0.6145470582977594E+01 }, { 0.7716155921462711E-05, 0.7762840176851795E+00, 0.1640077700820762E+02 }, { 0.7443474433517800E-05, 0.3521669217741933E+01, 0.1675695851576218E+02 }, { 0.7427257818452120E-05, 0.2704010896793763E+01, 0.6616958853886308E+01 }, { 0.6793672394573960E-05, 0.4434235075611354E+01, 0.6679742844309437E+01 }, { 0.6526439278535280E-05, 0.4869118403888217E+01, 0.6082686592554465E+01 }, { 0.2602700419616530E-02, 0.1822484926062486E+00, 0.2435144296437475E+04 }, { 0.6248133126576452E-04, 0.4252092258474006E+00, 0.4863907378156518E+04 }, { 0.2892274500639771E-04, 0.4253148179451381E+01, 0.4863996423533407E+04 }, { 0.2889623530439334E-04, 0.6022048233012799E+01, 0.4863818332779630E+04 }, { 0.6069308702586342E-05, 0.5335701932998608E+01, 0.4863729287402741E+04 }, { 0.6020614391923135E-05, 0.1797901825875778E+01, 0.4864085468910296E+04 }, { 0.5322831922763783E-05, 0.5176410732312329E+01, 0.1543133026181386E+03 } }, { { 0.1188963618162444E-01, 0.4087787867376310E+01, -0.6371881689831457E+01 }, { 0.5317666807877856E-02, 0.2598489137723283E+00, -0.6460927066720098E+01 }, { 0.5301694964646620E-02, 0.4774134167390498E+01, -0.6282836312942816E+01 }, { 0.1092196251660480E-02, 0.2715095267347932E+01, -0.6549972443608739E+01 }, { 0.1074089419341231E-02, 0.5460480467404687E+01, -0.6193790936054175E+01 }, { 0.2328430197381575E-03, 0.6146826767418875E+01, -0.6104745559165536E+01 }, { 0.2224213393203463E-03, 0.5170341620923537E+01, -0.6639017820497378E+01 }, { 0.5463249591300440E-04, 0.5479818404776600E+01, -0.6314228308154381E+01 }, { 0.5206791451508880E-04, 0.5499877602534791E+00, -0.6015700182276895E+01 }, { 0.5011145194424460E-04, 0.1342402667319555E+01, -0.6728063197386019E+01 }, { 0.4248311992240600E-04, 0.9268572764146046E+00, -0.6251444317731250E+01 }, { 0.3275262890701040E-04, 0.5837349983565814E+01, -0.6429535071508532E+01 }, { 0.2612362501347000E-04, 0.2405109764004165E+00, -0.6340489694619891E+01 }, { 0.2254194030722800E-04, 0.4107125804748224E+01, -0.6492319061931663E+01 }, { 0.1978445332406060E-04, 0.5019691662617644E+01, -0.1656953473338440E+02 }, { 0.1876210282323130E-04, 0.2009411029961832E+01, -0.6518580448397173E+01 }, { 0.1838941226078010E-04, 0.6166164704790789E+01, -0.6225182931265740E+01 }, { 0.1417196313981720E-04, 0.4793472104762412E+01, -0.6403273685043022E+01 }, { 0.1412387702084000E-04, 0.1613203576428794E+01, -0.6162398940842610E+01 }, { 0.1200955094991380E-04, 0.2791868511442401E+00, -0.6581364438820303E+01 }, { 0.1141748624638240E-04, 0.7006377185593701E+00, 0.3914816730610132E+01 }, { 0.1140613650769890E-04, 0.2469537772120787E+01, 0.3736725976832851E+01 }, { 0.1139717898986310E-04, 0.1236334060267667E+01, -0.5926654805388254E+01 }, { 0.1083732897435760E-04, 0.3797649020895159E+01, -0.6817108574274660E+01 }, { 0.8188197469152401E-05, 0.1429141854518208E-01, 0.3825771353721492E+01 }, { 0.6138904676788960E-05, 0.4464657383537437E+01, -0.6607625825285813E+01 }, { 0.5339008498818640E-05, 0.4924784125696391E+01, 0.3647680599944211E+01 }, { 0.5211706783516070E-05, 0.1386984018573560E+01, 0.4003862107498773E+01 }, { 0.5186530053942100E-05, 0.5693256976253909E+00, -0.6136137554377100E+01 }, { 0.1477125534949241E-04, 0.2559894425015774E+01, 0.4876660474564782E+04 }, { 0.6813829579894155E-05, 0.1873548125001586E+01, 0.4876571429187893E+04 }, { 0.6707536779238787E-05, 0.1046480714401697E+00, 0.4876749519941671E+04 } } }, { { { 0.3147075653259473E-02, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.2265054397578757E-04, 0.7519405621081341E+00, 0.1672712856276297E+04 }, { 0.7116593169805980E-05, 0.5461033287440088E+00, 0.9184067388830385E+03 } }, { { 0.4496393702552367E-02, 0.2342959364982154E+01, 0.5659095156176798E+00 }, { 0.3354575501528797E-02, 0.4597833882505114E+01, 0.1617016547228022E+01 }, { 0.3106536996299520E-04, 0.2912482457830643E+01, 0.3234033094456044E+01 }, { 0.2407327778886120E-04, 0.4985440644756694E+01, 0.4592033694415193E+03 }, { 0.2157848301674358E-04, 0.3893533207807963E+01, 0.1672712856276297E+04 }, { 0.2107499273982886E-04, 0.5461033287440088E+00, 0.9184067388830385E+03 }, { 0.1204571746494518E-04, 0.3481858748969675E+01, 0.1641006214897798E+03 }, { 0.1082902927586888E-04, 0.2389951319910909E+01, 0.1377610108324558E+04 }, { 0.6457229782189520E-05, 0.4233799311077810E+01, 0.1836813477766077E+04 }, { 0.5359800347726300E-05, 0.1150736720732397E+01, 0.3061886502424254E+04 }, { 0.4253124471669380E-05, 0.1946766624913765E+01, 0.8363564281381487E+03 }, { 0.4159628279141040E-05, 0.6077647302244714E+01, 0.2296016847207596E+04 } }, { { 0.4803805197845248E-02, 0.3189423405738944E+01, 0.2154442221398995E+01 }, { 0.1097719996101334E-03, 0.5532383110312554E+01, 0.2720351737016674E+01 }, { 0.7443719437241270E-05, 0.3988057033938039E+01, 0.1588532705781315E+01 }, { 0.6715628349206410E-05, 0.4645664974245721E+01, 0.3771458768627016E+01 }, { 0.6526400221336371E-05, 0.2681979744993624E+01, 0.8933864296234374E-02 }, { 0.5778112672027477E-05, 0.1733182516415079E+01, 0.5374256741709729E+00 }, { 0.1576763094428542E-02, 0.7997716879783442E+00, 0.1674867298497696E+04 }, { 0.2328380239517312E-04, 0.5990750337669914E+01, -0.1619461792683805E+03 }, { 0.1305558563149728E-04, 0.4693005675247022E+01, 0.2972571901731385E+03 }, { 0.1134789737634680E-04, 0.4693304903676271E+01, 0.3347580154773993E+04 }, { 0.5311492417496450E-05, 0.2536683592343353E+00, 0.7564605596146578E+03 }, { 0.5297748739729408E-05, 0.4146902346503011E+01, -0.6211495487099000E+03 }, { 0.4864126392950970E-05, 0.2790627620835740E+01, -0.1387019203926558E+04 } }, { { 0.4833318619528478E-05, 0.3221504590125614E+01, 0.0000000000000000E+00 }, { 0.1280938903343441E-03, 0.1983149608096680E+01, -0.2659196588419094E+01 }, { 0.3085667117081219E-04, 0.3937780549016139E+01, -0.1260994960410540E+01 }, { 0.1421727517964700E-04, 0.4624126849030327E+01, -0.1171949583521899E+01 }, { 0.1420735399816070E-04, 0.1098415954121576E+00, -0.1350040337299180E+01 } } }, { { { 0.2047958691903563E-02, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.9773647178903700E-05, 0.3347429921083522E+01, 0.7543061173932588E+03 }, { 0.8692361446792260E-05, 0.3746226045578181E+01, 0.2143479763541216E+04 }, { 0.6341490354446320E-05, 0.3087559012405942E+00, 0.1131459176089888E+04 } }, { { 0.3597193003482037E-01, 0.3827938953603982E+01, 0.8904537688864059E-01 }, { 0.5891806577851199E-03, 0.5200631553632359E+01, 0.2671361306659218E+00 }, { 0.1049859753280688E-03, 0.5351281511938252E+01, 0.1019765304355295E+02 }, { 0.4944669618681220E-04, 0.1523342558334271E+01, 0.1010860766666431E+02 }, { 0.4772345678736420E-04, 0.6037627811952441E+01, 0.1028669842044159E+02 }, { 0.3432162123697680E-04, 0.4514285253618171E+01, 0.1780907537772812E+00 }, { 0.2555821179926381E-04, 0.1392030537400290E+01, 0.5765338167707570E-01 }, { 0.1717434823483564E-04, 0.2078376837414479E+01, 0.1466987585657163E+00 }, { 0.1697093421514454E-04, 0.2901388464811505E+00, 0.4452268844432029E+00 }, { 0.1323271931613666E-04, 0.1353354662656465E+01, 0.2985281258774867E+00 }, { 0.1267528991884128E-04, 0.3196049795082991E+01, 0.6492496159975472E-01 }, { 0.1266151790256666E-04, 0.5906315791018461E+01, 0.2357441354543569E+00 }, { 0.1157195347749026E-04, 0.5165512349511074E+01, 0.8177379696596157E-01 }, { 0.1080021159829085E-04, 0.5577501069793485E+01, 0.3139199521156488E-01 }, { 0.1052724821924284E-04, 0.3978588911909874E+01, 0.1001956228977567E+02 }, { 0.1001557835312868E-04, 0.6318891585209909E+00, 0.2412041528888587E-01 }, { 0.9867772453097199E-05, 0.4407888047870434E+00, 0.1037574379733023E+02 }, { 0.9845954273310880E-05, 0.5631958211286683E+01, 0.9631695681131960E-01 }, { 0.9815613284418477E-05, 0.6263847369807674E+01, 0.1204373721002055E+00 }, { 0.9194949884833879E-05, 0.1318235458535180E+01, 0.1131657921775265E+00 }, { 0.8037140287447099E-05, 0.5556769190259295E+00, 0.5079494734209352E+01 }, { 0.7218512993756520E-05, 0.3808601016232069E+01, 0.2094827489888461E+00 }, { 0.6001489632871980E-05, 0.2305239035215433E+01, 0.5021841352532276E+01 }, { 0.5489567383712060E-05, 0.5363389816540173E+00, 0.5199932106309558E+01 }, { 0.4021385382444620E-05, 0.4239927673886392E+01, 0.3866357513424390E-01 }, { 0.3767845663771360E-05, 0.3010923272601534E+01, 0.4990449357320712E+01 }, { 0.3600130988680400E-05, 0.1242023219040118E+01, 0.5168540111097993E+01 }, { 0.3094782117290198E-05, 0.1804019257682701E+01, 0.7271579922679017E-02 }, { 0.2857487995253398E-04, 0.1029186337468635E+00, 0.3771530586966294E+03 }, { 0.2612226809076254E-04, 0.3347429921083522E+01, 0.7543061173932588E+03 }, { 0.1309044788609482E-04, 0.3087559012405942E+00, 0.1131459176089888E+04 }, { 0.1086312362376316E-04, 0.3746226045578181E+01, 0.2143479763541216E+04 }, { 0.9634177151388563E-05, 0.3197170586335357E+01, 0.8366732729211768E+02 }, { 0.7589604761197260E-05, 0.3553267188577251E+01, 0.1508612234786518E+04 }, { 0.5706936513245540E-05, 0.1177133183021748E+01, 0.1415309217766697E+04 }, { 0.4749981493034660E-05, 0.5145931687343214E+00, 0.1885765293483147E+04 }, { 0.4252829449661740E-05, 0.2159362918305770E+01, 0.7076546088833486E+03 }, { 0.4209916715651780E-05, 0.1843847991166901E+01, 0.4592033694415193E+03 }, { 0.3381153874922860E-05, 0.3443909349583986E+01, 0.1071739881770608E+04 }, { 0.3367826063379420E-05, 0.3687695982333802E+01, 0.9184067388830385E+03 } }, { { 0.1564767415994558E-03, 0.4568461127222154E+01, 0.1263056409088354E+01 }, { 0.8681007704489939E-04, 0.7405221736181721E+00, 0.1174011032199713E+01 }, { 0.8168879255357250E-04, 0.5941153727250531E+01, 0.1441147162865635E+01 }, { 0.8101165266469901E-04, 0.3195768527193775E+01, 0.1084965655311073E+01 }, { 0.7081435508752854E-04, 0.5254807427236342E+01, 0.1352101785976995E+01 }, { 0.2463670320328344E-04, 0.2681979744993623E+01, 0.8933864296234374E-02 }, { 0.1795872905935810E-04, 0.3443147200851330E+00, 0.1530192539754276E+01 }, { 0.1765915793094640E-04, 0.5651014880769380E+01, 0.9959202784224322E+00 }, { 0.1379536465955919E-04, 0.4874775170004872E+01, 0.5374256741709729E+00 }, { 0.6448693043220393E-05, 0.8713108941844011E+00, -0.3816438325120998E+01 }, { 0.4134187193316490E-05, 0.3483793623207228E-01, 0.1205403027411278E+01 }, { 0.4064250964938940E-05, 0.5960491664622441E+01, 0.1320709790765430E+01 }, { 0.3921367852619880E-05, 0.1030661020099323E+01, 0.1619237916642916E+01 }, { 0.3847793440490170E-05, 0.1823075927165398E+01, 0.9068749015337917E+00 }, { 0.1026432488829525E-02, 0.5239109003991030E+01, 0.1215663929056177E+04 }, { 0.4858676635900159E-04, 0.4930353102750437E+01, 0.8420475296628865E+02 }, { 0.1316230344933185E-04, 0.9203831673794880E+00, -0.1996452887105200E+03 }, { 0.1274174154891934E-04, 0.4827434469003571E+01, -0.2929483057303405E+03 }, { 0.1012648120942390E-04, 0.4634475612002642E+01, -0.9278158344850386E+03 }, { 0.9537957898915770E-05, 0.1891679082907508E+01, 0.4613578116629183E+03 }, { 0.6736048525042149E-05, 0.1795199654407042E+01, 0.1439240472855692E+03 }, { 0.4893120486700722E-05, 0.1582923181666916E+01, -0.6701013644269697E+03 }, { 0.4496122761411780E-05, 0.2849157684080121E+01, -0.1619461792683805E+03 } }, { { 0.1608815757672211E-04, 0.3221506193392377E+01, 0.0000000000000000E+00 }, { 0.7978986672131195E-02, 0.3937780549016139E+01, -0.1260994960410540E+01 }, { 0.3586811056529552E-02, 0.1098415954121576E+00, -0.1350040337299180E+01 }, { 0.3578626570900766E-02, 0.4624126849030327E+01, -0.1171949583521899E+01 }, { 0.7456079964789274E-03, 0.2565087948987761E+01, -0.1439085714187821E+01 }, { 0.7269088792971872E-03, 0.5310473149044516E+01, -0.1082904206633259E+01 }, { 0.1634061837956512E-03, 0.5996819449058704E+01, -0.9938588297446179E+00 }, { 0.1629278673196500E-03, 0.5020334302563366E+01, -0.1528131091076462E+01 }, { 0.3863423686243950E-04, 0.5329811086416426E+01, -0.1203341578733464E+01 }, { 0.3696660017446820E-04, 0.3999804418933084E+00, -0.9048134528559774E+00 }, { 0.3605229442958720E-04, 0.1192395348959384E+01, -0.1617176467965102E+01 }, { 0.3003084312634590E-04, 0.7768499580544321E+00, -0.1140557588310333E+01 }, { 0.2358139037174070E-04, 0.5687342665205642E+01, -0.1318648342087615E+01 }, { 0.1853853482238710E-04, 0.9050365804024403E-01, -0.1229602965198974E+01 }, { 0.1598764340805630E-04, 0.3957118486388051E+01, -0.1381432332510745E+01 }, { 0.1403252488381090E-04, 0.4869684344257474E+01, -0.1145864800396349E+02 }, { 0.1348141163501630E-04, 0.1859403711601660E+01, -0.1407693718976255E+01 }, { 0.1307143245256740E-04, 0.6016157386430616E+01, -0.1114296201844823E+01 }, { 0.1026902134395760E-04, 0.4643464786402239E+01, -0.1292386955622105E+01 }, { 0.1001531421510340E-04, 0.1463196258068622E+01, -0.1051512211421693E+01 }, { 0.8589176280796499E-05, 0.1291795327840677E+00, -0.1470477709399386E+01 }, { 0.8194661069081041E-05, 0.2319530453760617E+01, 0.8847612706253768E+01 }, { 0.8097194747293030E-05, 0.1086326741907496E+01, -0.8157680759673368E+00 }, { 0.8055438816212310E-05, 0.5506304001991995E+00, 0.9025703460031048E+01 }, { 0.7804425391545350E-05, 0.3647641702534988E+01, -0.1706221844853743E+01 }, { 0.6111685892210941E-05, 0.6135349392018898E+01, -0.8931239595284827E-02 }, { 0.5770004540143910E-05, 0.6147469407364597E+01, 0.8936658083142408E+01 }, { 0.4417994658707790E-05, 0.4314650065177265E+01, -0.1496739095864896E+01 }, { 0.4341737854415172E-05, 0.2696600432337302E+01, -0.1754676234867099E+00 }, { 0.3824550961047250E-05, 0.4774776807336220E+01, 0.8758567329365126E+01 }, { 0.3690275690503300E-05, 0.1236976700213389E+01, 0.9114748836919690E+01 }, { 0.3688282109438380E-05, 0.4193183792652183E+00, -0.1025250824956183E+01 }, { 0.3369179308695820E-05, 0.2149542558082810E+01, -0.9624668345330522E+00 }, { 0.4066369173620947E-05, 0.2572521517863344E+00, 0.2432588853072765E+04 } } }, { { { 0.1245046723085128E-02, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.1975589414013096E-04, 0.3540388778084452E+01, 0.1389173646147957E+04 }, { 0.1231028575289072E-04, 0.9712959155280194E+00, 0.6610031003734383E+03 }, { 0.7467512730405980E-05, 0.3027740200086925E+01, 0.9915046505601572E+03 }, { 0.5098846661514180E-05, 0.5981941867419887E+00, 0.2083760469221935E+04 }, { 0.5044474622853420E-05, 0.5198036938148699E+01, 0.3305015501867192E+03 }, { 0.4809588755287700E-05, 0.2058372674937290E+00, 0.7543061173932588E+03 }, { 0.4727673963003260E-05, 0.5084184484645832E+01, 0.1322006200746877E+04 }, { 0.4044589508141894E-05, 0.2614152002392929E+00, 0.8379734446853766E+03 }, { 0.3991422799327240E-05, 0.1029186337468635E+00, 0.3771530586966294E+03 } }, { { 0.1253214092917414E-03, 0.5484552018571947E+01, 0.5659095156176798E+00 }, { 0.9470863297623297E-04, 0.1456241228915321E+01, 0.1617016547228022E+01 }, { 0.2711677399803780E-05, 0.6054075111420435E+01, 0.3234033094456044E+01 }, { 0.2717321774931640E-04, 0.9712959155280194E+00, 0.6610031003734383E+03 }, { 0.2682461086510494E-04, 0.5198036938148699E+01, 0.3305015501867192E+03 }, { 0.2565388997294820E-04, 0.3540388778084452E+01, 0.1389173646147957E+04 }, { 0.1499025754719972E-04, 0.3244511287336658E+01, 0.3771530586966294E+03 }, { 0.1270721017173096E-04, 0.3027740200086925E+01, 0.9915046505601572E+03 }, { 0.1201329949530382E-04, 0.2058372674937290E+00, 0.7543061173932588E+03 }, { 0.1025994897473446E-04, 0.1993980622473295E+00, 0.6945868230739784E+03 }, { 0.6847120194215620E-05, 0.5084184484645832E+01, 0.1322006200746877E+04 }, { 0.6090479694942740E-05, 0.3450348554830387E+01, 0.1131459176089888E+04 }, { 0.5552232090659460E-05, 0.5981941867419887E+00, 0.2083760469221935E+04 }, { 0.4770404124767720E-05, 0.5557793274556413E-01, 0.8366732729211768E+02 }, { 0.4723715451200404E-05, 0.3403007853829086E+01, 0.8379734446853766E+03 }, { 0.4269998249018742E-05, 0.5396405225690409E+01, 0.1439151134212730E+03 }, { 0.3974354213288560E-05, 0.8574434620251531E+00, 0.1652507750933596E+04 }, { 0.3552297626424840E-05, 0.4116745349874580E+00, 0.1508612234786518E+04 }, { 0.3125192040346257E-05, 0.1285576205981393E+01, 0.1245258532726684E+04 } }, { { 0.2203368656279073E-02, 0.4874775170004872E+01, 0.5374256741709729E+00 }, { 0.1172252747692422E-03, 0.2681979734714067E+01, 0.8933864296234374E-02 }, { 0.1886080065709498E-04, 0.3189421946098056E+01, 0.2154442221398995E+01 }, { 0.5709763882914900E-05, 0.9345492278074399E+00, 0.1103335189788653E+01 }, { 0.5709737153001810E-05, 0.5673408458612511E+01, -0.2848384144670679E-01 }, { 0.4177951671700660E-05, 0.3418533941089551E+01, -0.1079590873057049E+01 }, { 0.2618379490210864E-05, 0.1426868473632360E+01, 0.1263056409088354E+01 }, { 0.6245540270289302E-03, 0.1994597716654372E+01, 0.8385108703595477E+03 }, { 0.2859852996917539E-04, 0.1788760449160644E+01, 0.8420475296628865E+02 }, { 0.2669607656360495E-04, 0.2108450170157240E+01, -0.1529937802006098E+03 }, { 0.2594271531157734E-04, 0.1023301801126352E+01, 0.1775077699861093E+03 }, { 0.2527837703075836E-04, 0.1595801592159713E+01, -0.5506627757884092E+03 }, { 0.1288509519128533E-04, 0.1795199654407042E+01, 0.1439240472855692E+03 }, { 0.7799304255363336E-05, 0.1685841815413778E+01, -0.2929483057303405E+03 }, { 0.6968783491136024E-05, 0.5200588559833291E-01, -0.4834953303873287E+03 }, { 0.4309530620212000E-05, 0.4537996183502177E+01, -0.1245249598862388E+04 }, { 0.3787380702785700E-05, 0.5033271736497301E+01, 0.4613578116629183E+03 }, { 0.3539705714890319E-05, 0.3850614164262772E+01, -0.4067476623671363E+03 }, { 0.3368317726971210E-05, 0.3079746085685258E+01, 0.5080093201728285E+03 }, { 0.3304505798253070E-05, 0.4278746908219012E+01, -0.8139968805740482E+03 }, { 0.2969852804959130E-05, 0.4724515835256708E+01, -0.6701013644269697E+03 } }, { { 0.5911557823662097E-04, 0.3221505896904584E+01, 0.0000000000000000E+00 }, { 0.1655363859165119E-03, 0.1556643393089241E+01, -0.5376315279689470E+00 }, { 0.3529922124449878E-04, 0.2632866665182736E+01, -0.1754676234867099E+00 }, { 0.2754688236937855E-04, 0.7961878954263457E+00, -0.1260994960410540E+01 }, { 0.2282739732511724E-04, 0.6135349401370048E+01, -0.8931239595284827E-02 }, { 0.1269228313121738E-04, 0.1482534195440534E+01, -0.1171949583521899E+01 }, { 0.1268342612853373E-04, 0.3251434249001951E+01, -0.1350040337299180E+01 }, { 0.2655183882413472E-05, 0.2168880495454724E+01, -0.1082904206633259E+01 }, { 0.2629764340505144E-05, 0.5706680602577554E+01, -0.1439085714187821E+01 } } }, { { { 0.6263338154589970E-03, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.6497476875291102E-04, 0.5710685516146226E+01, 0.7281705457745186E+03 }, { 0.2344587498942920E-04, 0.7120466402448569E+00, 0.1092255818661778E+04 }, { 0.1460129617898124E-04, 0.4426139084868009E+01, 0.3640852728872593E+03 }, { 0.9207121596242679E-05, 0.5198036938148699E+01, 0.3305015501867192E+03 }, { 0.8875319141540999E-05, 0.1996593071523072E+01, 0.1456341091549037E+04 }, { 0.8448119776705509E-05, 0.3455872944043167E+01, 0.5842554323532455E+03 }, { 0.5977877370825760E-05, 0.2159362918305770E+01, 0.7076546088833486E+03 }, { 0.4621278522602440E-05, 0.4112888569117812E+01, 0.6610031003734383E+03 }, { 0.4000365153622274E-05, 0.4740419375321384E+01, 0.9483407052405049E+03 }, { 0.3452681160707960E-05, 0.3281139502801291E+01, 0.1820426364436296E+04 } }, { { 0.4982624562626507E-03, 0.4765136030335644E+01, 0.1925543592528062E-02 }, { 0.3255047679977468E-03, 0.3303959081334276E+01, 0.8931239595284827E-02 }, { 0.6390530214147782E-04, 0.2864957498258305E+01, 0.4265982401557260E+00 }, { 0.6147405445926997E-04, 0.3666743633441163E+01, 0.1754676234867099E+00 }, { 0.4693769190005650E-04, 0.4409577074506501E+01, 0.2132991200778630E+00 }, { 0.1830753059305353E-04, 0.2440869213255669E+00, 0.1665363838914251E+00 }, { 0.1772508422160692E-04, 0.5196471838140832E+01, 0.1786772859246875E-01 }, { 0.9471405209345812E-05, 0.7450246191142529E+00, 0.3783149659115309E-01 }, { 0.8699581713814392E-05, 0.4133277437711403E+01, 0.6398973602335890E+00 }, { 0.4462723299012653E-05, 0.4222312533161678E+01, 0.6934772211657580E-02 }, { 0.3475126795324123E-05, 0.5905021737251245E+01, 0.3851087185056125E-02 }, { 0.9265555925994737E-04, 0.5710685516146226E+01, 0.7281705457745186E+03 }, { 0.5229341727885530E-04, 0.4426139084868009E+01, 0.3640852728872593E+03 }, { 0.2755180293512720E-04, 0.7120466402448569E+00, 0.1092255818661778E+04 }, { 0.1367398797935688E-04, 0.3455872944043167E+01, 0.5842554323532455E+03 }, { 0.1266911496422784E-04, 0.2056444284558907E+01, 0.3305015501867192E+03 }, { 0.1003942988473349E-04, 0.2171326512764949E+01, 0.2201701594659863E+03 }, { 0.9413368380851320E-05, 0.4112888569117812E+01, 0.6610031003734383E+03 }, { 0.9310491515462421E-05, 0.1996593071523072E+01, 0.1456341091549037E+04 }, { 0.8614402961042187E-05, 0.5396405225692853E+01, 0.1439151134212730E+03 }, { 0.5024449380692616E-05, 0.4740419375321384E+01, 0.9483407052405049E+03 }, { 0.4460853124280260E-05, 0.6169332853676718E+01, 0.9915046505601572E+03 }, { 0.3825560625917272E-05, 0.6199699253192279E+01, 0.7625504604471335E+02 }, { 0.3359851109236900E-05, 0.3281139502801291E+01, 0.1820426364436296E+04 }, { 0.3028875527833520E-05, 0.5300955571895564E+01, 0.7076546088833486E+03 }, { 0.2423482201792380E-05, 0.1942591831056039E+01, 0.1322006200746877E+04 }, { 0.2065629848458831E-05, 0.6024965806599599E+01, 0.1312425978127764E+04 } }, { { 0.9712611923476502E-03, 0.2687921917028628E+01, 0.8933864296234374E-02 }, { 0.1671852669066537E-03, 0.5358703148577743E-01, 0.1755492171961483E+00 }, { 0.7641483476943351E-05, 0.1733182516415079E+01, 0.5374256741709729E+00 }, { 0.6496268041362011E-05, 0.6195159743999218E+00, -0.8933864296234374E-02 }, { 0.2256764766375221E-05, 0.3428726874313563E+00, 0.4176643758594916E+00 }, { 0.3116043009304567E-03, 0.6221338739275052E+01, 0.5080093201728285E+03 }, { 0.1108384911297719E-03, 0.3652245876718619E+01, -0.2201612256016901E+03 }, { 0.3382899984196108E-04, 0.5907058448821680E+01, -0.7624611218041713E+02 }, { 0.3248040932920730E-04, 0.1795199654407042E+01, 0.1439240472855692E+03 }, { 0.2241664081352878E-04, 0.2367699445440403E+01, -0.5842464984889493E+03 }, { 0.1308501254327346E-04, 0.5250042823747033E+01, -0.1529937802006098E+03 }, { 0.6929884985440310E-05, 0.1083153014162185E+01, -0.9483317713762087E+03 }, { 0.6766246868422730E-05, 0.4164894454716146E+01, 0.1775077699861093E+03 }, { 0.5779542899092500E-05, 0.2507246294651899E+01, 0.1236179865947347E+04 }, { 0.4424102595490495E-05, 0.4622512017543462E+01, -0.4403313850676764E+03 }, { 0.3851717115480820E-05, 0.1994597716654372E+01, 0.8385108703595477E+03 }, { 0.3467317924478190E-05, 0.3193598539188126E+01, -0.4834953303873287E+03 }, { 0.2778461053446649E-05, 0.5020278361984143E+01, 0.6766900124085585E+02 }, { 0.2492530233817800E-05, 0.3791792725930115E+01, 0.1600265138834606E+04 }, { 0.2427569664020370E-05, 0.6081791890063556E+01, -0.1312417044263468E+04 }, { 0.2224849328232030E-05, 0.5239109003991030E+01, 0.1215663929056177E+04 } }, { { 0.4206563248738731E-03, 0.3221497379548206E+01, 0.0000000000000000E+00 }, { 0.2970532433280590E-02, 0.2626878648804450E+01, -0.1754676234867099E+00 }, { 0.1787509410723081E-03, 0.6204551285275548E+01, -0.8931239595284827E-02 }, { 0.2723114438070935E-04, 0.6085981723978948E+01, 0.4265982401557260E+00 }, { 0.2414440346500943E-04, 0.5096853638619743E+01, -0.2132991200778630E+00 }, { 0.9525093659923903E-05, 0.5044236237492881E+01, -0.1925543592528062E-02 }, { 0.3807917651740949E-05, 0.1070489829428804E+01, 0.6398973602335890E+00 }, { 0.3291355004303486E-05, 0.4446713203128226E+01, 0.2132991200778630E+00 }, { 0.2944165615658908E-05, 0.3500661322372421E+00, -0.4265982401557260E+00 } } }, { { { 0.1348089930929860E-03, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.2514051816697911E-04, 0.4426139084868009E+01, 0.3640852728872593E+03 }, { 0.1234070873751902E-04, 0.1993980622473295E+00, 0.6945868230739784E+03 }, { 0.7428005944912294E-05, 0.3443909349583986E+01, 0.1071739881770608E+04 }, { 0.5193372353628770E-05, 0.5396405225692853E+01, 0.1439151134212730E+03 }, { 0.4923588320704660E-05, 0.5786945864275197E+00, 0.2874214963438496E+03 }, { 0.1514267591217036E-05, 0.5287757340750888E+01, 0.1530943251212127E+04 } }, { { 0.1489184840960493E-02, 0.4482905304402765E+01, 0.1925543592528062E-02 }, { 0.6277976937099409E-03, 0.1641703069309713E+00, 0.8931239595284827E-02 }, { 0.2064532509871716E-03, 0.2875895084979086E+01, 0.4265982401557260E+00 }, { 0.1839936992682087E-03, 0.4432539236156053E+01, 0.2132991200778630E+00 }, { 0.3205222547434483E-04, 0.2421050292728566E+01, 0.6867993784180930E-02 }, { 0.2910646188137447E-04, 0.4133511734209461E+01, 0.6398973602335890E+00 }, { 0.2782832942434251E-04, 0.2085876834041031E+01, 0.1786772859246875E-01 }, { 0.9861735003619475E-05, 0.5820876772324451E+01, 0.3851087185056125E-02 }, { 0.6328208168488662E-05, 0.1099595805258099E+01, 0.2064679322415834E+00 }, { 0.3918483314907732E-05, 0.3102869921028134E+01, 0.4355294797510108E+00 }, { 0.3898032222540717E-05, 0.2691928895904259E+01, 0.1031868899480124E+00 }, { 0.3675185983863103E-05, 0.3132180625569890E+01, 0.1102063824754091E+00 }, { 0.3340295455803047E-05, 0.3949193776134189E+01, 0.4087305115632572E+00 }, { 0.3080473554041300E-05, 0.5390964128071579E+01, 0.8531964803114520E+00 }, { 0.2919923956899900E-05, 0.2618006049618430E+01, 0.4334294279920056E+00 }, { 0.2671699222038788E-05, 0.1780723999304769E-01, 0.4197670523194464E+00 }, { 0.1807246533364200E-05, 0.5897892147256107E+01, 0.3163918576803169E+00 }, { 0.1012886232301891E-05, 0.3824011892951753E+01, 0.2201303079141426E+00 }, { 0.1208825245395646E-04, 0.1284546431278216E+01, 0.3640852728872593E+03 }, { 0.6461479160208660E-05, 0.3340990715837123E+01, 0.6945868230739784E+03 }, { 0.6059629840959338E-05, 0.2254812572103060E+01, 0.1439151134212730E+03 }, { 0.5747511089543420E-05, 0.5786945864275197E+00, 0.2874214963438496E+03 }, { 0.4165211007064940E-05, 0.3023166959941940E+00, 0.1071739881770608E+04 }, { 0.3317890554439667E-05, 0.5917531821903471E+01, 0.7165405266799226E+00 }, { 0.3240885104844179E-05, 0.1456814599107305E+01, 0.7146149830873946E+00 }, { 0.3183322410669546E-05, 0.3483641352342939E-01, 0.7204899083316938E+00 }, { 0.2439949469786914E-05, 0.4495498981484839E+01, 0.7224154519242219E+00 }, { 0.2229788591597716E-05, 0.3516065572948062E+01, 0.7095813532095739E+00 }, { 0.2177885623014171E-05, 0.5338524981350306E+01, 0.7076558096170459E+00 }, { 0.1583596726276704E-05, 0.1857323310303026E+01, 0.7185643647391657E+00 }, { 0.8515242483441068E-06, 0.4094907555655027E+01, 0.7184660702724507E+00 }, { 0.8331051796244125E-06, 0.2672845480380433E+01, 0.7243409955167499E+00 }, { 0.1119995323971813E-05, 0.5646772130696905E+01, 0.2872081972302052E+03 }, { 0.9999688627568780E-06, 0.2569092862556433E+01, 0.7281705457745186E+03 }, { 0.9325252754097003E-06, 0.1465474667914254E+01, 0.1435063829225766E+03 }, { 0.8903963476562940E-06, 0.2146164687161095E+01, 0.1530943251212127E+04 } }, { { 0.3059204611319566E-05, 0.1991559296541939E+01, 0.0000000000000000E+00 }, { 0.2892653650392732E-01, 0.2687601928257754E+01, 0.8933864296234374E-02 }, { 0.1921261556124706E-03, 0.6049785198226078E+00, -0.8933864296234374E-02 }, { 0.7446564554937326E-04, 0.3484557927409254E+01, 0.4176643758594916E+00 }, { 0.2429402127836536E-04, 0.4497027349870592E+01, 0.7008320703706311E-02 }, { 0.2391668026442592E-04, 0.4004671318127588E+01, 0.1085940788876244E-01 }, { 0.1720731211496869E-04, 0.3423177098527374E+01, 0.1974690825885564E-02 }, { 0.9603481577558545E-05, 0.4751548744302498E+01, 0.6309634959373547E+00 }, { 0.6349090434417589E-05, 0.5278059950506263E+01, 0.2043652557816286E+00 }, { 0.5704537193893060E-05, 0.2441938711199521E+01, -0.1085940788876244E-01 }, { 0.5578526024329263E-05, 0.4763368404218852E+01, 0.3900234418413626E-02 }, { 0.2599144808715373E-05, 0.6100137782540312E+01, -0.4176643758594916E+00 }, { 0.2297673200703965E-05, 0.4851969044359338E+01, -0.3900234418413626E-02 }, { 0.2219325143437113E-05, 0.3927500699309107E+00, -0.1786510389151920E-01 }, { 0.2100942202805606E-05, 0.2406466000093305E+01, 0.4355321044519604E+00 }, { 0.2030439241690526E-05, 0.3465392760946876E+01, -0.1974690825885564E-02 }, { 0.1840440310193102E-05, 0.4554834665120421E+01, -0.2043652557816286E+00 }, { 0.1818913752278572E-05, 0.3943058897661665E+01, 0.2222329843740974E+00 }, { 0.1391334470388962E-05, 0.3792208194559931E+01, 0.1014313781444490E+00 }, { 0.1359141741251292E-05, 0.6222686370138073E+01, 0.2132991200778630E+00 }, { 0.1313668933428861E-05, 0.5635555579481489E+01, -0.2222329843740974E+00 }, { 0.1273579323673662E-05, 0.4271696076744320E+01, -0.1278495148129050E-01 }, { 0.1071090644258225E-05, 0.6019617650063695E+01, 0.8442626160152177E+00 }, { 0.1054968278903017E-05, 0.6106129826283189E+00, 0.4108289309930330E+00 }, { 0.1030286270548740E-05, 0.3243359475417337E+01, 0.4244861425113500E+00 }, { 0.6687871156591785E-04, 0.4936792307996836E+01, 0.1439240472855692E+03 }, { 0.1010084616284730E-04, 0.6221338739275052E+01, 0.5080093201728285E+03 }, { 0.5269296403563900E-05, 0.1994597716654372E+01, 0.8385108703595477E+03 }, { 0.4938696934118670E-05, 0.3652245876718619E+01, -0.2201612256016901E+03 }, { 0.4930907396569310E-05, 0.1216505067979523E+01, -0.1434974490582804E+03 }, { 0.3315192749055180E-05, 0.5239109003991030E+01, 0.1215663929056177E+04 }, { 0.2596686176814385E-05, 0.9084195729203095E+00, 0.2878391607068422E+03 }, { 0.2338446911029510E-05, 0.1595801592159713E+01, -0.5506627757884092E+03 }, { 0.1363323740924180E-05, 0.4634475612002642E+01, -0.9278158344850386E+03 }, { 0.9612769517722884E-06, 0.2431612830889724E+01, -0.1432841499446360E+03 } }, { { 0.5602364095311453E-02, 0.3221498291239513E+01, 0.0000000000000000E+00 }, { 0.2789942947721349E-02, 0.6204694901726296E+01, -0.8931239595284827E-02 }, { 0.1312363309291625E-03, 0.5044269214427242E+01, -0.1925543592528062E-02 }, { 0.1125670790406430E-03, 0.6084205141557698E+01, 0.4265982401557260E+00 }, { 0.1916668518784865E-04, 0.5094974746907165E+01, -0.2132991200778630E+00 }, { 0.1497943297409488E-04, 0.1070503341744811E+01, 0.6398973602335890E+00 }, { 0.1144622908335464E-04, 0.4298020835227772E+01, 0.2132991200778630E+00 }, { 0.1105889373330841E-04, 0.3817225181469991E+01, -0.6831187836279569E-02 }, { 0.9469793088277916E-05, 0.3725645429506557E+01, -0.3851087185056125E-02 }, { 0.6878606841089768E-05, 0.4544829611068419E+01, 0.1925543592528062E-02 }, { 0.6072279735075281E-05, 0.3088021134790829E+00, -0.4265982401557260E+00 }, { 0.3672628251015072E-05, 0.5291779482141999E+01, 0.1786772859246875E-01 }, { 0.3001306766151942E-05, 0.2631624338898295E+00, 0.8931239595284827E-02 }, { 0.2508038681269874E-05, 0.5838193085927095E+01, -0.1754676234867099E+00 }, { 0.2453965972048404E-05, 0.4844097342411929E+01, -0.1085678318781289E-01 }, { 0.1777443612458054E-05, 0.1373143790052677E+00, 0.1102063824754091E+00 }, { 0.1638627359387858E-05, 0.2338023546843110E+01, 0.8531964803114520E+00 }, { 0.1619813827555800E-05, 0.3201683403167966E+01, 0.4197670523194464E+00 }, { 0.1585471208377748E-05, 0.5833093965190200E+01, 0.4334294279920056E+00 }, { 0.1518975368269692E-05, 0.3329608496168708E+01, 0.6831187836279569E-02 }, { 0.1151714556320695E-05, 0.2625783233864042E-01, 0.4355294797510108E+00 }, { 0.8830894877995539E-06, 0.5372467623946739E+01, -0.6398973602335890E+00 } } }, { { { 0.4931880677088688E-03, 0.3141592653589793E+01, 0.0000000000000000E+00 }, { 0.1422582505896866E-02, 0.1629074651441286E+01, 0.1149955249555075E+03 }, { 0.1282760621734726E-04, 0.2948174134620363E+01, 0.1149974504991001E+03 }, { 0.1173808537373678E-04, 0.3099779317070623E+00, 0.1149935994119150E+03 }, { 0.8613770793559659E-06, 0.4998444131476766E+01, 0.1150044561951028E+03 }, { 0.4431013807987148E-06, 0.5376468530544894E+00, 0.1150025306515103E+03 }, { 0.1039093910223160E-03, 0.3603730645243327E+01, 0.5743044643283454E+02 }, { 0.1318221383295526E-04, 0.3603627895388855E+01, 0.5743044643283454E+02 }, { 0.6634921396309160E-05, 0.1781167344645605E+01, 0.5743237197642707E+02 }, { 0.2219668063709623E-05, 0.2284631982621601E+01, 0.5742852088924202E+02 }, { 0.2219668063709623E-05, 0.4922829307865055E+01, 0.5743237197642707E+02 }, { 0.7061098947712363E-06, 0.1781063076666148E+01, 0.5743237197642707E+02 }, { 0.6897439873031985E-06, 0.3603531212414229E+01, 0.5743044643283454E+02 }, { 0.4815890873838023E-04, 0.4857380043863779E+01, 0.8606897731627176E+02 }, { 0.2261000099791683E-05, 0.4144773749632801E+01, 0.8607593648974211E+02 }, { 0.1539010606612464E-05, 0.1349751065508437E+01, 0.8606502793461998E+02 }, { 0.1205192931267955E-05, 0.2446685865249762E-01, 0.8606310239102744E+02 }, { 0.1049405056557275E-05, 0.6205868207753926E+01, 0.8607090285986429E+02 }, { 0.6346855400965112E-06, 0.4208242392372787E+01, 0.8649162617477570E+02 }, { 0.5125234375859194E-06, 0.6347454751688458E+00, 0.8606700262544587E+02 }, { 0.3791140650423246E-04, 0.3877892946988424E+01, 0.2589106383767805E+03 }, { 0.3479701758905445E-04, 0.2913621055460106E+01, 0.4790807978427668E+03 }, { 0.2109797808204992E-04, 0.6169137529926802E+01, 0.2892654763923579E+02 }, { 0.1178034971556374E-04, 0.3767316688774966E+01, 0.2891958846576544E+02 }, { 0.1260892982792229E-05, 0.2865370330929173E+00, 0.2893049702088756E+02 }, { 0.1105411287499222E-05, 0.3428232110024022E+01, 0.2893049702088756E+02 }, { 0.7170812904592723E-06, 0.3420913120960960E+01, 0.2893049702088756E+02 }, { 0.6488168332435312E-06, 0.4747272264327228E+01, 0.2893242256448008E+02 }, { 0.5615646064758847E-06, 0.4746191819098314E+01, 0.2893242256448008E+02 }, { 0.2035144206960700E-04, 0.2388622882333127E+01, 0.5721714731919014E+02 }, { 0.2926604917703857E-05, 0.2388520458991813E+01, 0.5721714731919014E+02 }, { 0.1506081447204865E-05, 0.5660579539606869E+00, 0.5721907286278267E+02 }, { 0.1870537893668915E-04, 0.4970065340019012E+01, 0.8095823480294860E+03 }, { 0.1638556362699022E-04, 0.3120590560712127E+01, 0.1728544951592234E+03 }, { 0.1529823976752019E-04, 0.4943058008729855E+01, 0.1728525696156309E+03 }, { 0.4393561481041129E-05, 0.1297974022507647E+01, 0.1728564207028159E+03 }, { 0.5965719593399348E-06, 0.5170692394242208E+01, 0.1728615008552262E+03 }, { 0.1557003369506093E-04, 0.3258149248363778E+01, 0.2299910499110151E+03 }, { 0.1199902334914149E-05, 0.8563423202419649E+00, 0.2299840907375447E+03 }, { 0.1228186282641710E-04, 0.1724889079832807E+00, 0.5785704466012334E+02 }, { 0.1176258023998037E-04, 0.3314184332779403E+01, 0.5785704466012334E+02 }, { 0.6557351705394024E-05, 0.1491516764202223E+01, 0.5785897020371587E+02 }, { 0.6405368264798522E-05, 0.3313984899950305E+01, 0.5785704466012334E+02 }, { 0.6172682903699512E-05, 0.4633213794765795E+01, 0.5785897020371587E+02 }, { 0.1849113934605446E-05, 0.5952077755114058E+01, 0.5786089574730840E+02 }, { 0.7233685566797959E-06, 0.5117268855773154E+00, 0.5784613610500123E+02 }, { 0.6553814036784504E-06, 0.2913580261178442E+01, 0.5785309527847157E+02 }, { 0.1129835111020686E-04, 0.1931391320176082E+01, 0.1186735406726115E+04 }, { 0.8894451926405188E-05, 0.3717778422487947E+01, 0.2850389879359876E+02 }, { 0.1279765155817002E-05, 0.3717675999146635E+01, 0.2850389879359876E+02 }, { 0.6585278743116177E-06, 0.1895225923201359E+01, 0.2850582433719129E+02 }, { 0.4329731043745186E-05, 0.1745631218955876E+01, 0.3449865748665226E+03 }, { 0.3599154632304914E-05, 0.2775939218332986E+01, 0.7165405266799226E+00 }, { 0.3515734994495499E-05, 0.4598407354081068E+01, 0.7146149830873946E+00 }, { 0.3478141777876746E-05, 0.3176429222382267E+01, 0.7204899083316938E+00 }, { 0.2665836454376912E-05, 0.1353906429920962E+01, 0.7224154519242219E+00 }, { 0.2424687512275475E-05, 0.3741587517563335E+00, 0.7095813532095739E+00 }, { 0.2368323695654563E-05, 0.2196618138085234E+01, 0.7076558096170459E+00 }, { 0.1730312424825915E-05, 0.4998916170228774E+01, 0.7185643647391657E+00 }, { 0.9236794241568811E-06, 0.9533149020652341E+00, 0.7184660702724507E+00 }, { 0.9101734358180643E-06, 0.5814438133970226E+01, 0.7243409955167499E+00 }, { 0.6223980017737441E-06, 0.4834746214664873E+01, 0.7115068968021020E+00 }, { 0.5354701955778437E-06, 0.1796193334454873E+01, 0.7037064279652747E+00 }, { 0.5065090050950890E-06, 0.4255501070028474E+01, 0.7026221797392250E+00 }, { 0.4946872838108632E-06, 0.6077953687111643E+01, 0.7006966361466970E+00 }, { 0.3458158840283551E-05, 0.3480902144089144E+00, 0.8635699407207032E+02 }, { 0.3397716237243428E-05, 0.1677245754563736E+01, 0.5764374554647894E+02 }, { 0.1244982526944973E-05, 0.5240566800117683E+01, 0.5764374554647894E+02 }, { 0.1091462762348523E-05, 0.2099076569869200E+01, 0.5764374554647894E+02 }, { 0.6406895152069824E-06, 0.3418104295086557E+01, 0.5764567109007147E+02 }, { 0.3248586724047530E-05, 0.1173515119422923E+01, 0.5700384820554574E+02 }, { 0.2861462370993798E-05, 0.2306043720186055E+00, 0.2010645022717792E+03 }, { 0.1182264841666031E-05, 0.2632429282009304E+01, 0.2010714614452496E+03 }, { 0.2055029475492061E-05, 0.2502670659577745E+01, 0.2829059967995436E+02 }, { 0.1822472901105999E-05, 0.1375578599796670E+00, 0.5713655475179166E+02 }, { 0.1780232418309521E-05, 0.4598275031411171E+01, 0.5713848029538418E+02 }, { 0.1648047287035982E-05, 0.1857191416947010E+01, 0.5714242967703596E+02 }, { 0.7820099241529981E-06, 0.1117332070337260E+01, 0.5714938885050630E+02 }, { 0.4677155865229010E-06, 0.1960182176247418E+01, 0.5713462920819913E+02 }, { 0.1430384079869284E-05, 0.2331131895479707E+00, 0.4599820998220301E+03 }, { 0.1235836620763296E-05, 0.1387597018758499E+01, 0.5807034377376775E+02 }, { 0.1083444644978050E-05, 0.4529292095689605E+01, 0.5807034377376775E+02 }, { 0.6359828738920669E-06, 0.5848319820906959E+01, 0.5807226931736027E+02 }, { 0.1228324287730070E-05, 0.6138699763037207E+01, 0.4028257517980534E+03 }, { 0.1080732052994442E-05, 0.6169261486294519E+01, 0.4501542502035310E+03 }, { 0.9898839492003675E-06, 0.5001271649790288E+01, 0.3160600272272868E+03 }, { 0.8563952066234920E-06, 0.3157716115970889E+01, 0.2406215774107413E+04 }, { 0.8163925621658264E-06, 0.3775239311342985E+01, 0.1645938776167635E+04 }, { 0.7902043182815145E-06, 0.6166128250563959E+01, 0.5828364288741214E+02 }, { 0.6957733951844473E-06, 0.1201970451738299E+01, 0.5828556843100467E+02 }, { 0.6796470625999134E-06, 0.3024438587486380E+01, 0.5828364288741214E+02 }, { 0.7283955691107278E-06, 0.3393198290814080E+01, 0.2821000711255587E+02 }, { 0.7115131339933769E-06, 0.1570730155065997E+01, 0.2821193265614840E+02 }, { 0.6748302380368017E-06, 0.5416167758678300E+01, 0.8614369495842593E+02 }, { 0.5801464486513693E-06, 0.4405137819662329E+01, 0.5369397680464826E+03 }, { 0.5667000670514980E-06, 0.6227605955410412E+01, 0.5369378425028901E+03 }, { 0.5703165858434648E-06, 0.5375403960487173E+01, 0.3167696085804964E+03 }, { 0.5570980365205931E-06, 0.9146867890556700E+00, 0.3167676830369039E+03 }, { 0.5433130776641635E-06, 0.1942520463673839E+01, 0.7806558003902502E+03 }, { 0.4421327735883800E-06, 0.5003780467319657E+01, 0.5749776247775377E+03 } }, { { 0.1928386916598716E+00, 0.1316743285171985E+01, 0.1925543592528062E-02 }, { 0.1197700127979115E-02, 0.2905816296579413E+01, 0.3851087185056125E-02 }, { 0.1125807495942191E-02, 0.4414124516924016E+01, 0.2132991200778630E+00 }, { 0.7466410913376219E-03, 0.3411600296951643E+01, 0.8931239595284827E-02 }, { 0.3004295676379663E-03, 0.4182760326808072E+01, 0.4285237837482541E+00 }, { 0.2400461005136443E-03, 0.2926349976058209E+01, 0.4265982401557260E+00 }, { 0.1785444267015284E-03, 0.3897159948941672E+01, 0.6919778790613740E-02 }, { 0.7393695567545098E-04, 0.5503253064658139E+01, 0.4304493273407821E+00 }, { 0.5283085924212965E-04, 0.6218635238921890E+01, 0.2113735764853349E+00 }, { 0.4076652529480639E-04, 0.3776409831511328E+01, 0.1083538245527340E-01 }, { 0.4028991254502335E-04, 0.1095989272623461E+01, 0.2064679322415834E+00 }, { 0.3811816549252109E-04, 0.5449835843337831E+01, 0.6418229038261171E+00 }, { 0.3620254646473473E-04, 0.6177614480595389E+00, 0.1282203186788430E-01 }, { 0.3586013723690129E-04, 0.2436062381089369E+01, 0.2152246636703911E+00 }, { 0.3490441837523331E-04, 0.4159104921593594E+01, 0.6398973602335890E+00 }, { 0.2377227624569038E-04, 0.3239254695447169E+01, 0.1031868899480124E+00 }, { 0.2148685811756090E-04, 0.3324109814821024E+01, 0.2002818098055070E-01 }, { 0.2023635272434820E-04, 0.5342652755830533E+01, 0.1786772859246875E-01 }, { 0.1603086203623188E-04, 0.2485710326866144E+01, 0.4226488585039549E+00 }, { 0.1314054216207817E-04, 0.5873663787672587E+01, 0.3163918576803169E+00 }, { 0.9878270828624305E-05, 0.4692950541308903E+00, 0.6437484474186451E+00 }, { 0.7459887995646048E-05, 0.4087393199562610E+01, 0.2201303079141426E+00 }, { 0.7282549735894645E-03, 0.4770667297372782E+01, 0.1149955249555075E+03 }, { 0.3358151723062283E-05, 0.6089767182911175E+01, 0.1149974504991001E+03 }, { 0.2940137697333849E-05, 0.3451571632901731E+01, 0.1149935994119150E+03 }, { 0.3257749851873783E-06, 0.1856841516027055E+01, 0.1150044561951028E+03 }, { 0.1226877582046494E-03, 0.3603730645243328E+01, 0.5743044643283454E+02 }, { 0.1442654202758791E-04, 0.3603627947367320E+01, 0.5743044643283454E+02 }, { 0.7287158009695637E-05, 0.1781167080644662E+01, 0.5743237197642707E+02 }, { 0.2227388462533576E-05, 0.4922829307865055E+01, 0.5743237197642707E+02 }, { 0.2227388462533576E-05, 0.2284631982621601E+01, 0.5742852088924202E+02 }, { 0.7085743939411694E-06, 0.1781063076666148E+01, 0.5743237197642707E+02 }, { 0.6921513653852260E-06, 0.3603531212414229E+01, 0.5743044643283454E+02 }, { 0.1169604863611512E-03, 0.2901894204038109E+01, 0.7165405266799226E+00 }, { 0.1078338305442189E-03, 0.4729254738533461E+01, 0.7146149830873946E+00 }, { 0.8881380857833267E-04, 0.3150761163748690E+01, 0.7204899083316938E+00 }, { 0.8075655730402778E-04, 0.4519505673931613E+00, 0.7095813532095739E+00 }, { 0.7285893683141579E-04, 0.2281556670811775E+01, 0.7076558096170459E+00 }, { 0.7271303455844460E-04, 0.1353835388413780E+01, 0.7224154519242219E+00 }, { 0.3531961223297060E-04, 0.4936014332687674E+01, 0.7185643647391657E+00 }, { 0.3019281277001780E-04, 0.1123239346047937E+01, 0.7184660702724507E+00 }, { 0.2328751291389269E-04, 0.5814424528754509E+01, 0.7243409955167499E+00 }, { 0.2186693735333124E-04, 0.1995274806149824E+01, 0.7037064279652747E+00 }, { 0.1672869957989543E-04, 0.4866436698742614E+01, 0.7115068968021020E+00 }, { 0.1475074400837350E-04, 0.5719796115875051E+01, 0.6967472544949258E+00 }, { 0.1399238708843930E-04, 0.4239759216446882E+01, 0.7026221797392250E+00 }, { 0.1179423115340822E-04, 0.6061718986149902E+01, 0.7006966361466970E+00 }, { 0.8812132213666628E-05, 0.1185788445220376E+01, 0.7185152175058083E+00 }, { 0.8507522187621048E-05, 0.3014198965814164E+01, 0.7165896739132802E+00 }, { 0.6197295348292014E-05, 0.3290476399266866E+01, 0.7294211479269787E+00 }, { 0.5971965491672709E-05, 0.8753490785501354E+00, 0.7057302660245178E+00 }, { 0.5336777443382800E-05, 0.3277820916335360E+01, 0.7126894394948665E+00 }, { 0.3985256112150306E-05, 0.3275634661668579E+01, 0.6897880810245771E+00 }, { 0.3608057298728251E-05, 0.4863591915141639E+01, 0.7235462226826794E+00 }, { 0.3299741975330665E-05, 0.4703710238329596E+01, 0.7115560440354595E+00 }, { 0.3223198173228014E-05, 0.2430574184290058E+00, 0.7096305004429314E+00 }, { 0.2688244928253836E-05, 0.5275014486169524E+01, 0.2919661245834397E+00 }, { 0.2613243661620941E-05, 0.2424238476169638E+01, 0.7165870492123307E+00 }, { 0.2574587837723788E-05, 0.5732598943257583E+01, 0.7116051912688169E+00 }, { 0.2569260340418719E-05, 0.3452633751557773E+01, 0.2938916681759678E+00 }, { 0.2549155479604930E-05, 0.5291014601965657E+01, 0.7204407610983363E+00 }, { 0.2330447358044871E-05, 0.2432875200820899E+01, 0.7045477233317531E+00 }, { 0.2254199615438521E-05, 0.6141816327520342E+01, 0.7056811187911602E+00 }, { 0.2089500807780357E-05, 0.1580270469414437E+01, 0.7313466915195067E+00 }, { 0.2042389544816678E-05, 0.5291730688852117E+01, 0.7274956043344506E+00 }, { 0.1915584168637660E-05, 0.6159110785889812E+01, 0.7134324403946301E+00 }, { 0.1876817015958310E-05, 0.4754449361520011E+00, 0.7017808843727467E+00 }, { 0.1747595341910651E-05, 0.4598506696879712E+01, 0.7146149830873946E+00 }, { 0.1576239906932032E-05, 0.3002295562826074E+01, 0.7254717662752075E+00 }, { 0.1511339171430308E-05, 0.4356355818907831E+01, 0.6948217109023977E+00 }, { 0.1499811815760443E-05, 0.3988002288677764E+01, 0.7262665391092780E+00 }, { 0.1460797854077857E-05, 0.3748973474201665E+01, 0.7293746253945707E+00 }, { 0.1415742853315232E-05, 0.4757124368944763E+01, 0.6987710925541689E+00 }, { 0.1368009711983665E-05, 0.1050560920047950E+01, 0.2869324947056190E+00 }, { 0.1352657464923885E-05, 0.2873044246870902E+01, 0.2850069511130909E+00 }, { 0.1234180648016043E-05, 0.3899910056343316E+01, 0.7135307348613450E+00 }, { 0.1216707168547837E-05, 0.7209469663619112E+00, 0.6986727980874539E+00 }, { 0.1191488030171526E-05, 0.2272066757023249E+01, 0.7203916138649787E+00 }, { 0.1095526621882867E-05, 0.1933069997683063E+01, 0.7313001689870987E+00 }, { 0.1040382661140688E-05, 0.2776032023831034E+01, 0.7165405266799226E+00 }, { 0.1036863039010391E-05, 0.1630081068326518E+01, 0.2958172117684958E+00 }, { 0.9616747267908099E-06, 0.6000060288823683E+00, 0.7185125928048588E+00 }, { 0.9373769411023921E-06, 0.2775839264562756E+01, 0.7165405266799226E+00 }, { 0.9196878775751337E-06, 0.2473094150998370E+01, 0.2810575694613199E+00 }, { 0.8755936386396388E-06, 0.3115210303371935E+01, 0.7056319715578028E+00 }, { 0.8603158836863158E-06, 0.4197919449469832E+01, 0.7106656014356235E+00 }, { 0.6705489554710231E-06, 0.2196721921176780E+01, 0.7076558096170459E+00 }, { 0.6185477101046089E-06, 0.3740148248275139E+00, 0.7095813532095739E+00 }, { 0.6153101453617282E-06, 0.4598315612349802E+01, 0.7146149830873946E+00 }, { 0.6144966414607280E-06, 0.2242399219818416E-01, 0.7096278757419818E+00 }, { 0.5627708927914463E-06, 0.5539620791805293E+01, 0.7274490818020426E+00 }, { 0.5610129338334513E-06, 0.3684122942793509E+01, 0.7166388211466377E+00 }, { 0.5398713831902744E-06, 0.5177746978176391E+01, 0.7234997001502714E+00 }, { 0.5273506284484312E-06, 0.7170338045570530E+00, 0.7215741565577434E+00 }, { 0.5262843436434110E-06, 0.2183142522975625E+01, 0.8059254809810479E-01 }, { 0.5227495470767936E-06, 0.4005663121141773E+01, 0.7866700450557673E-01 }, { 0.5199527236321857E-06, 0.3176522564528122E+01, 0.7204899083316938E+00 }, { 0.4804692875682566E-06, 0.9532931667972451E+00, 0.7184660702724507E+00 }, { 0.4764703494829237E-06, 0.3176626472799736E+01, 0.7204899083316938E+00 }, { 0.4753480849396105E-06, 0.1353820721455883E+01, 0.7224154519242219E+00 }, { 0.4670984240146942E-06, 0.3176334540097546E+01, 0.7204899083316938E+00 }, { 0.4654269273348351E-06, 0.4999094608547819E+01, 0.7185643647391657E+00 }, { 0.4614651554236785E-06, 0.4267748340354923E+01, 0.7134842123289370E+00 }, { 0.4531105084562628E-06, 0.6090353248906123E+01, 0.7115586687364089E+00 }, { 0.4077887373315127E-06, 0.5689822989499520E+01, 0.7076092870846378E+00 }, { 0.4060252228628880E-06, 0.2196491172614561E+01, 0.7076558096170459E+00 }, { 0.3973724314685021E-06, 0.4140593867861234E+00, 0.2860911993391405E+00 }, { 0.3969393749935304E-06, 0.8738771354003039E+00, 0.6828289075542282E+00 }, { 0.3815771898913724E-06, 0.7105474585412466E-01, 0.2740983959909710E+00 }, { 0.3814316630052462E-06, 0.3288005910176154E+01, 0.7006501136142891E+00 }, { 0.3799033641308746E-06, 0.4259130445062984E+01, 0.7255235382095145E+00 }, { 0.3480378535316622E-06, 0.5511199893486148E+01, 0.2888580382981470E+00 }, { 0.3472239690061985E-06, 0.1735637572758064E+01, 0.2880167429316686E+00 }, { 0.3451429900993856E-06, 0.3742836957045070E+00, 0.7095813532095739E+00 }, { 0.3418187177414854E-06, 0.8141915154020281E+00, 0.2900405809909117E+00 }, { 0.3413057991197158E-06, 0.4998998912315168E+01, 0.7185643647391657E+00 }, { 0.3242171175776111E-06, 0.3907553066682691E+01, 0.7255700607419225E+00 }, { 0.3187588107072781E-06, 0.6035967805962264E+01, 0.7332722351120348E+00 }, { 0.3170476726805622E-06, 0.4834654034241590E+01, 0.7115068968021020E+00 }, { 0.3140486507800807E-06, 0.4482050013324328E+01, 0.7115534193345099E+00 }, { 0.3075011314359275E-06, 0.3644290442329441E+01, 0.6987219453208114E+00 }, { 0.3070012836628351E-06, 0.5229794370811791E+01, 0.7154562784538731E+00 }, { 0.3062931422970319E-06, 0.3916284298317819E+01, 0.7135307348613450E+00 }, { 0.3033297996664303E-06, 0.6195403829536804E+01, 0.2899422865241966E+00 }, { 0.2941694888718857E-06, 0.3751626473924576E+01, 0.7064732669242811E+00 }, { 0.2637183491724404E-04, 0.4683474110615003E+01, 0.1439220725947433E+03 }, { 0.8279548593975801E-06, 0.1908398224503419E+01, 0.1439260219763951E+03 }, { 0.6484210285032441E-06, 0.3233671623826318E+01, 0.1439279475199876E+03 }, { 0.3741206194503089E-06, 0.3334420556287444E+01, 0.1439201470511508E+03 }, { 0.3414474608395144E-06, 0.5333092134829300E+01, 0.1434994237362394E+03 }, { 0.2403370419637644E-04, 0.2388622882333125E+01, 0.5721714731919014E+02 }, { 0.3186149545425659E-05, 0.2388520458991813E+01, 0.5721714731919014E+02 }, { 0.1639647596215571E-05, 0.5660579539606869E+00, 0.5721907286278267E+02 }, { 0.4360169268782757E-06, 0.3707721544954854E+01, 0.5721907286278267E+02 }, { 0.4360169268782757E-06, 0.1069524219711398E+01, 0.5721522177559761E+02 }, { 0.2222879678616121E-04, 0.7364334077752746E+00, 0.2589106383767805E+03 }, { 0.2181721459549961E-04, 0.6055213709049899E+01, 0.4790807978427668E+03 }, { 0.2037342614731350E-04, 0.3686574112838511E+01, 0.2850389879359876E+02 }, { 0.2578067662242833E-05, 0.3717675999146635E+01, 0.2850389879359876E+02 }, { 0.1326594499716358E-05, 0.1895225923265205E+01, 0.2850582433719129E+02 }, { 0.8593669702293824E-06, 0.1756009585606166E+00, 0.2849994941194699E+02 }, { 0.8157291503991916E-06, 0.3317091188809099E+01, 0.2849994941194699E+02 }, { 0.8133023485324827E-06, 0.5140435273709099E+01, 0.2849802386835446E+02 }, { 0.8091467686328637E-06, 0.6119791853597793E+01, 0.2851085796706911E+02 }, { 0.6861953263277108E-06, 0.5038406921824529E+01, 0.2850582433719129E+02 }, { 0.5172131934534886E-06, 0.1859239820337615E+00, 0.2849994941194699E+02 }, { 0.4418741307932034E-06, 0.1997951520656880E+01, 0.2849802386835446E+02 }, { 0.3504383346317222E-06, 0.2398679759866219E+01, 0.2850197325000623E+02 }, { 0.3059127278557355E-06, 0.3041311214209734E+01, 0.2892654765210271E+02 }, { 0.1769563612146425E-04, 0.3258149248363778E+01, 0.2299910499110151E+03 }, { 0.6546227444825897E-06, 0.4577247910985506E+01, 0.2299929754546076E+03 }, { 0.6546227444825897E-06, 0.1939050585742052E+01, 0.2299891243674225E+03 }, { 0.1381584330925251E-04, 0.3314184332779403E+01, 0.5785704466012334E+02 }, { 0.1340170537299423E-04, 0.1724889636822213E+00, 0.5785704466012334E+02 }, { 0.6761318001505776E-05, 0.4633213511110228E+01, 0.5785897020371587E+02 }, { 0.3673272656623667E-06, 0.1491416810431993E+01, 0.5785897020371587E+02 }, { 0.1184715424009358E-04, 0.1828472686429220E+01, 0.8095823480294860E+03 }, { 0.1029453478899256E-04, 0.3120590331336322E+01, 0.1728544951592234E+03 }, { 0.9488209354297983E-05, 0.4943057563632108E+01, 0.1728525696156309E+03 }, { 0.2792746040615356E-05, 0.1297967072116361E+01, 0.1728564207028159E+03 }, { 0.4374967901448417E-06, 0.5170827648758129E+01, 0.1728615008552262E+03 }, { 0.7269853312811282E-05, 0.5072983973765877E+01, 0.1186735406726115E+04 }, { 0.6013024933189873E-05, 0.1743122401426509E+01, 0.8606897731627176E+02 }, { 0.4958075120563441E-05, 0.4144929329850513E+01, 0.8607593648974211E+02 }, { 0.4353564226390001E-05, 0.6257381704689877E+00, 0.2891958846576544E+02 }, { 0.2394532800288429E-05, 0.3428232110024023E+01, 0.2893049702088756E+02 }, { 0.2183715272262793E-05, 0.2865370330929173E+00, 0.2893049702088756E+02 }, { 0.2113893307520584E-05, 0.3027544876345173E+01, 0.2892654763923579E+02 }, { 0.1297325525448257E-05, 0.4747272264391551E+01, 0.2893242256448008E+02 }, { 0.8404065818838439E-06, 0.3027647299686485E+01, 0.2892654763923579E+02 }, { 0.8404065818838439E-06, 0.3027442453003861E+01, 0.2892654763923579E+02 }, { 0.6782882728655119E-06, 0.1605564541446842E+01, 0.2893242256448008E+02 }, { 0.6625672028273012E-06, 0.3428032677194925E+01, 0.2893049702088756E+02 }, { 0.4324877449044836E-06, 0.1204979947972735E+01, 0.2892847318282831E+02 }, { 0.4321249719379707E-06, 0.4849997861787055E+01, 0.2892462209564326E+02 }, { 0.3936684188721603E-06, 0.4007371902635274E+01, 0.2893938173795043E+02 }, { 0.3845413058184980E-06, 0.5829842020175415E+01, 0.2893745619435791E+02 }, { 0.3164931584142412E-06, 0.5589825798207451E+01, 0.2891766292217291E+02 }, { 0.3164896582547253E-06, 0.1944834709464376E+01, 0.2892151400935796E+02 }, { 0.2917227235442026E-06, 0.1708446213723446E+01, 0.2892462209564326E+02 }, { 0.2917227235442026E-06, 0.4346643538966901E+01, 0.2892847318282831E+02 }, { 0.4216532478702710E-05, 0.1745631218955876E+01, 0.3449865748665226E+03 }, { 0.4016366955996776E-05, 0.2502670659577745E+01, 0.2829059967995436E+02 }, { 0.5075529621445196E-06, 0.2502568236236433E+01, 0.2829059967995436E+02 }, { 0.3544419270066688E-05, 0.1677245754563736E+01, 0.5764374554647894E+02 }, { 0.1350740909818762E-05, 0.5240566800117683E+01, 0.5764374554647894E+02 }, { 0.1275135226894657E-05, 0.2099076569869200E+01, 0.5764374554647894E+02 }, { 0.6951146059901856E-06, 0.3418104295086557E+01, 0.5764567109007147E+02 }, { 0.4502244058755288E-06, 0.1677143331222423E+01, 0.5764374554647894E+02 }, { 0.3659914666470186E-06, 0.2764090012920215E+00, 0.5764567109007147E+02 }, { 0.3575086759063831E-06, 0.2098877137040104E+01, 0.5764374554647894E+02 }, { 0.3405167226829016E-05, 0.1173515119422923E+01, 0.5700384820554574E+02 }, { 0.4327155481334157E-06, 0.1173412696081610E+01, 0.5700384820554574E+02 }, { 0.2569819239848606E-05, 0.2306043720186055E+00, 0.2010645022717792E+03 }, { 0.1150895741388962E-05, 0.2632411300442608E+01, 0.2010714614452496E+03 }, { 0.2517101053299125E-05, 0.1375551717917236E+00, 0.5713655475179166E+02 }, { 0.2480836668098538E-05, 0.4598277210434070E+01, 0.5713848029538418E+02 }, { 0.1143486543010702E-05, 0.1117389755399236E+01, 0.5714938885050630E+02 }, { 0.7533074112851135E-06, 0.1960182176247418E+01, 0.5713462920819913E+02 }, { 0.2502679246525132E-05, 0.3480902144089144E+00, 0.8635699407207032E+02 }, { 0.1392818914226552E-05, 0.3393198290814080E+01, 0.2821000711255587E+02 }, { 0.1360536764325014E-05, 0.1570730155065997E+01, 0.2821193265614840E+02 }, { 0.4891864753374598E-06, 0.5795005219238083E+01, 0.2821696628602622E+02 }, { 0.4778483243651071E-06, 0.3972537083490000E+01, 0.2821889182961875E+02 }, { 0.3574500970589592E-06, 0.5215822607081832E+01, 0.2820808156896335E+02 }, { 0.1336264182062455E-05, 0.1387597018758499E+01, 0.5807034377376775E+02 }, { 0.1261775459260343E-05, 0.4529292095689605E+01, 0.5807034377376775E+02 }, { 0.6876646318040166E-06, 0.5848319820906959E+01, 0.5807226931736027E+02 }, { 0.3619662493912897E-06, 0.2706624527112425E+01, 0.5807226931736027E+02 }, { 0.3535767533823012E-06, 0.4529092662860506E+01, 0.5807034377376775E+02 }, { 0.1310246341606266E-05, 0.2331131895479707E+00, 0.4599820998220301E+03 }, { 0.8529888489883649E-06, 0.6166128250563959E+01, 0.5828364288741214E+02 }, { 0.6930739384650136E-06, 0.1201970451738299E+01, 0.5828556843100467E+02 }, { 0.6770101727120896E-06, 0.3024438587486380E+01, 0.5828364288741214E+02 }, { 0.4389627969127892E-06, 0.4343665745532833E+01, 0.5828556843100467E+02 }, { 0.4027682153504624E-06, 0.3024638020315478E+01, 0.5828364288741214E+02 }, { 0.3631832770215205E-06, 0.4343463151557861E+01, 0.5828556843100467E+02 }, { 0.8221773615274948E-06, 0.5879488794129729E+01, 0.2935314586652459E+02 }, { 0.7813137857380711E-06, 0.2737998563881249E+01, 0.2935314586652459E+02 }, { 0.4231066732027226E-06, 0.4057026289098603E+01, 0.2935507141011711E+02 }, { 0.8149891095115382E-06, 0.5001271649790290E+01, 0.3160600272272868E+03 }, { 0.3764251887678508E-06, 0.1119909356269040E+01, 0.3160669864007572E+03 }, { 0.7620147658522374E-06, 0.1608073358976210E+01, 0.2878500201147309E+03 }, { 0.7489157248963648E-06, 0.6282589894747257E+00, 0.2878371860160163E+03 }, { 0.7443531196416904E-06, 0.3430541494724291E+01, 0.2878480945711384E+03 }, { 0.7410458807790901E-06, 0.2997108078146744E+01, 0.4028257517980534E+03 }, { 0.2917099551383937E-06, 0.9555532956830555E-01, 0.4028455450702384E+03 }, { 0.7277204919188508E-06, 0.5941165931805280E+01, 0.5080073454820026E+03 }, { 0.6286284677985618E-06, 0.1791293531808356E+01, 0.2871719790724316E+02 }, { 0.4190958483159967E-06, 0.1812437113434972E+01, 0.2871324852559139E+02 }, { 0.6143353968708967E-06, 0.1287562896667545E+01, 0.2807730056630996E+02 }, { 0.5608837306250120E-06, 0.1612346238109583E-01, 0.2406215774107413E+04 }, { 0.5287253161661598E-06, 0.6336466577531914E+00, 0.1645938776167635E+04 }, { 0.4889359735634015E-06, 0.5416167758678300E+01, 0.8614369495842593E+02 }, { 0.4416345379733718E-06, 0.6241592663692312E+01, 0.5679054909190134E+02 }, { 0.4101604037784085E-06, 0.4242652639255375E+01, 0.2913984675288019E+02 }, { 0.3830879278957400E-06, 0.5003780467319657E+01, 0.5749776247775377E+03 }, { 0.3811901873161304E-06, 0.1714424909184600E+01, 0.8385088956687217E+03 }, { 0.3716648744882634E-06, 0.4908225137751350E+01, 0.1721320797072992E+03 }, { 0.3630505879727552E-06, 0.3085757002003267E+01, 0.1721340052508917E+03 }, { 0.3001367588499240E-06, 0.5512961820466838E+01, 0.3739061633322880E+03 } }, { { 0.1016094463287790E-02, 0.5106842617766041E+01, 0.0000000000000000E+00 }, { 0.2935648107313708E-01, 0.3358649794029711E+01, 0.1974690825885564E-02 }, { 0.9953584143544754E-03, 0.5831603333509536E+01, 0.8933864296234374E-02 }, { 0.7357194732163894E-03, 0.6035829207568037E+01, -0.1974690825885564E-02 }, { 0.6699050371985383E-03, 0.4753014210656826E+01, -0.3900234418413626E-02 }, { 0.4151869133102979E-03, 0.4743964405299185E+01, 0.3900234418413626E-02 }, { 0.3789273029962630E-03, 0.2745292826757329E+01, 0.4246235493298404E+00 }, { 0.1991669418726220E-03, 0.4485476749277378E+01, 0.7008320703706311E-02 }, { 0.1899854046059933E-03, 0.3517567007545812E+01, -0.5825778010941689E-02 }, { 0.1234894258008271E-03, 0.8652949986394700E+00, 0.1085940788876244E-01 }, { 0.1011804925675502E-03, 0.3745348713034283E+01, -0.8933864296234374E-02 }, { 0.6928098928797385E-04, 0.5576141930376416E+01, -0.1085940788876244E-01 }, { 0.4889687732101663E-04, 0.4014982830991590E+01, 0.6379226694077035E+00 }, { 0.2082728796332944E-04, 0.1173870037237461E+01, -0.1278495148129050E-01 }, { 0.2039385297517835E-04, 0.4585155128610154E+01, 0.2113244292519774E+00 }, { 0.1799640976047236E-04, 0.2341543068636097E+00, 0.4176643758594916E+00 }, { 0.1595251648310000E-04, 0.6234432051555658E+01, 0.2132991200778630E+00 }, { 0.1343153395169566E-04, 0.4649306306086897E+01, 0.2152738109037486E+00 }, { 0.1287853944279400E-04, 0.5287782933428181E+01, -0.2113244292519774E+00 }, { 0.1130469268372695E-04, 0.4574612374891347E+01, 0.4226488585039549E+00 }, { 0.1065311292483293E-04, 0.3513635458424760E-02, 0.4285237837482541E+00 }, { 0.6594412507279831E-05, 0.1160392236116490E+01, 0.4304984745741396E+00 }, { 0.5041791242559473E-05, 0.5286783389563643E+01, 0.8512217894855665E+00 }, { 0.4598867989379571E-06, 0.1609956090712706E+01, 0.6309634959373547E+00 }, { 0.3040421176914689E-06, 0.2136467296916470E+01, 0.2043652557816286E+00 }, { 0.5937514602713236E-03, 0.4936792335851361E+01, 0.1439240472855692E+03 }, { 0.5590721162724015E-05, 0.6255890970618563E+01, 0.1439259728291617E+03 }, { 0.5121289657996665E-05, 0.3617695571228794E+01, 0.1439221217419767E+03 }, { 0.3508789971395948E-06, 0.2022944114109337E+01, 0.1439329785251645E+03 }, { 0.2738557431501198E-03, 0.1678643034250733E+01, -0.8606700262544587E+02 }, { 0.2085092385794607E-05, 0.3595434709071512E+00, -0.8606892816903840E+02 }, { 0.1891655464023067E-05, 0.2997740360570593E+01, -0.8606507708185333E+02 }, { 0.2532842572772215E-03, 0.1661250302251527E+00, 0.2892852233006167E+02 }, { 0.3961485739301291E-05, 0.3307820706331927E+01, 0.2892852233006167E+02 }, { 0.3961485739301291E-05, 0.3307614661297965E+01, 0.2892852233006167E+02 }, { 0.2209106205222155E-05, 0.1485152755442508E+01, 0.2893044787365420E+02 }, { 0.1956549440210912E-05, 0.5130279568062417E+01, 0.2892659678646914E+02 }, { 0.1058742510185323E-05, 0.1485223692846880E+01, 0.2893044787365420E+02 }, { 0.1058742510185323E-05, 0.5130211674783012E+01, 0.2892659678646914E+02 }, { 0.1049147278699332E-03, 0.5987172345751204E+01, -0.2850192410277287E+02 }, { 0.1328065342396536E-04, 0.5987275095618058E+01, -0.2850192410277287E+02 }, { 0.6684462694404047E-05, 0.1526550339106239E+01, -0.2850384964636540E+02 }, { 0.2236294716863211E-05, 0.1023085701193345E+01, -0.2849999855918034E+02 }, { 0.2236294716863211E-05, 0.4668073683129476E+01, -0.2850384964636540E+02 }, { 0.7114033777681735E-06, 0.1526654607148799E+01, -0.2850384964636540E+02 }, { 0.6949147802577597E-06, 0.5987371778580302E+01, -0.2850192410277287E+02 }, { 0.2058105309919415E-04, 0.9190948014818194E+00, -0.2828862498912847E+02 }, { 0.2722012192785058E-05, 0.9191972248231336E+00, -0.2828862498912847E+02 }, { 0.1400794496660462E-05, 0.2741659729854258E+01, -0.2829055053272100E+02 }, { 0.4386017871369636E-06, 0.5883181446039679E+01, -0.2829055053272100E+02 }, { 0.4386017871369636E-06, 0.2238193464103548E+01, -0.2828669944553594E+02 }, { 0.1721342888159264E-04, 0.9024276128068640E+00, 0.2878391607068422E+03 }, { 0.1645103872537621E-04, 0.6221338739275052E+01, 0.5080093201728285E+03 }, { 0.1295232370537576E-04, 0.4706187935978230E+01, -0.5714045498621007E+02 }, { 0.3074615033071044E-05, 0.5446004958756377E+01, -0.5714741415968042E+02 }, { 0.4210058117501252E-06, 0.1957966659954585E+01, -0.5713650560455830E+02 }, { 0.3297148610970001E-06, 0.3283240059277484E+01, -0.5713458006096577E+02 }, { 0.1246701893241003E-04, 0.3056131321602242E+01, 0.7185152175058083E+00 }, { 0.1141609439284819E-04, 0.4878643124436238E+01, 0.7165896739132802E+00 }, { 0.4622849445770262E-05, 0.6542846935894391E+00, 0.7115560440354595E+00 }, { 0.4097571772366432E-05, 0.2476739673478372E+01, 0.7096305004429314E+00 }, { 0.3059086093929264E-05, 0.2076274581959904E+01, 0.7056811187911602E+00 }, { 0.2869127018959028E-05, 0.1233485437260538E+01, 0.7204407610983363E+00 }, { 0.1580459593848266E-05, 0.5957697356265878E+01, 0.6987219453208114E+00 }, { 0.9865359954273804E-06, 0.5114846914000389E+01, 0.7134815876279875E+00 }, { 0.6577318919877076E-06, 0.3559551940631996E+01, 0.7146641303207522E+00 }, { 0.5913037768933752E-06, 0.5106224293368807E+01, 0.7255209135085651E+00 }, { 0.5346245981429982E-06, 0.2130300142857571E+01, 0.7205390555650513E+00 }, { 0.4098021786747177E-06, 0.4478092318805028E+01, 0.7126402922615090E+00 }, { 0.3023788452701212E-06, 0.3282662154041165E+01, 0.7274464571010931E+00 }, { 0.2905389353328124E-06, 0.1636237329753522E+01, 0.7243901427501074E+00 }, { 0.1228187806589623E-04, 0.3135228775838881E+01, -0.2892852233006167E+02 }, { 0.1176259764714520E-04, 0.6276718658215128E+01, -0.2892852233006167E+02 }, { 0.6172687497060316E-05, 0.4957689196191843E+01, -0.2893044787365420E+02 }, { 0.2961985147767668E-05, 0.1816200919612724E+01, -0.2893044787365420E+02 }, { 0.2893333546637261E-05, 0.6276918091044227E+01, -0.2892852233006167E+02 }, { 0.7601575967574296E-06, 0.3638825235880475E+01, -0.2893237341724673E+02 }, { 0.4008228833174511E-06, 0.1816300873382952E+01, -0.2893044787365420E+02 }, { 0.1154499923706900E-04, 0.6282630218786875E+00, 0.8635896876289621E+02 }, { 0.1660158316268941E-05, 0.6281605985373753E+00, 0.8635896876289621E+02 }, { 0.8543461484774715E-06, 0.5088883400685836E+01, 0.8636089430648875E+02 }, { 0.1050421274404971E-04, 0.1871271231028191E+00, -0.1439259728291617E+03 }, { 0.9807167381341471E-05, 0.4647844982264678E+01, -0.1439240472855692E+03 }, { 0.2816558865567409E-05, 0.2009743661307299E+01, -0.1439278983727543E+03 }, { 0.3824414539954584E-06, 0.4420210596752325E+01, -0.1439329785251645E+03 }, { 0.1048627591564010E-04, 0.4956843545116611E-01, -0.2010625275809534E+03 }, { 0.3279448099865014E-06, 0.2451375363875169E+01, -0.2010555684074830E+03 }, { 0.3126490699275733E-06, 0.1368667098072893E+01, -0.2010606020373608E+03 }, { 0.3126490699275733E-06, 0.5013655080009026E+01, -0.2010644531245459E+03 }, { 0.1034350804286399E-04, 0.1792690836877676E+01, -0.1149935502646816E+03 }, { 0.3660318350154349E-06, 0.4194707709203449E+01, -0.1149865910912113E+03 }, { 0.3362081661163648E-06, 0.4540912112901320E+01, -0.1149974996463334E+03 }, { 0.9029410063641440E-05, 0.1994597716654372E+01, 0.8385108703595477E+03 }, { 0.8024442052834091E-05, 0.3193669906570326E+01, 0.5785506996929746E+02 }, { 0.4262641945379126E-05, 0.7918495104173626E+00, 0.5784811079582711E+02 }, { 0.7066767025578607E-05, 0.5707015564669242E+01, -0.2299821160467188E+03 }, { 0.6251473936893123E-05, 0.3940966283548398E+00, -0.4501522755127052E+03 }, { 0.5659369633167750E-05, 0.5239109003991030E+01, 0.1215663929056177E+04 }, { 0.4290089389673601E-05, 0.4557743275927342E+00, 0.2850192410277287E+02 }, { 0.3827134505848882E-05, 0.3597263996278870E+01, 0.2850192410277287E+02 }, { 0.2332336374925157E-05, 0.2278233679185805E+01, 0.2849999855918034E+02 }, { 0.1476386405746395E-05, 0.5419931564856051E+01, 0.2849999855918034E+02 }, { 0.1442167364939238E-05, 0.3597463429107968E+01, 0.2850192410277287E+02 }, { 0.3788966811408025E-06, 0.9593705739442162E+00, 0.2849807301558782E+02 }, { 0.4165399751611416E-05, 0.6159661040037157E+01, 0.2935512055735047E+02 }, { 0.3715900456157925E-05, 0.3018171371351021E+01, 0.2935512055735047E+02 }, { 0.2264548002233273E-05, 0.4337201688444086E+01, 0.2935704610094300E+02 }, { 0.1433475857771437E-05, 0.1195503802773841E+01, 0.2935704610094300E+02 }, { 0.1400251378947848E-05, 0.3017971938521923E+01, 0.2935512055735047E+02 }, { 0.3678842089652509E-06, 0.5656064793685675E+01, 0.2935897164453553E+02 }, { 0.3500731595844181E-05, 0.1909247431651662E+01, 0.1149974996463334E+03 }, { 0.3207481705138808E-05, 0.4620837650975520E+01, -0.7806538256994243E+03 }, { 0.3045177521748787E-05, 0.1630471929251210E+01, -0.2871522321641727E+02 }, { 0.1249614513454947E-05, 0.4350336190876849E+01, -0.2871522321641727E+02 }, { 0.1095523574996029E-05, 0.1208641113945746E+01, -0.2871522321641727E+02 }, { 0.6430732154817181E-06, 0.6172798695907975E+01, -0.2871714876000980E+02 }, { 0.4165209314501650E-06, 0.1630574352592522E+01, -0.2871522321641727E+02 }, { 0.3667610652854651E-06, 0.3031308682522925E+01, -0.2871714876000980E+02 }, { 0.3582604371229245E-06, 0.1208840546774842E+01, -0.2871522321641727E+02 }, { 0.2944808616906725E-05, 0.2134202564392020E+01, -0.2807532587548407E+02 }, { 0.4028078479881629E-06, 0.2134304987733334E+01, -0.2807532587548407E+02 }, { 0.2918130882538270E-05, 0.1562086464859070E+01, -0.3160580525364609E+03 }, { 0.2652490001043860E-05, 0.5696340566148072E+01, 0.8614566964925181E+02 }, { 0.3239657527107578E-06, 0.5696238142806759E+01, 0.8614566964925181E+02 }, { 0.2223396437049981E-05, 0.4822744530752217E+01, 0.1728505949248050E+03 }, { 0.2144377111729538E-05, 0.3170159823835280E+01, -0.2820803242172999E+02 }, { 0.2094675673402415E-05, 0.4992627959583361E+01, -0.2820995796532252E+02 }, { 0.9711472430656398E-06, 0.2190338602286141E+01, -0.2822086652044464E+02 }, { 0.5503284015527491E-06, 0.1347535507567527E+01, -0.2820610687813746E+02 }, { 0.4509478629698950E-06, 0.1450547484355915E+01, -0.2821390734697429E+02 }, { 0.1980399556792357E-05, 0.1376326363638862E+01, -0.1157806884396054E+04 }, { 0.1962428337898891E-05, 0.4799234448017168E+01, 0.8678749253377755E+02 }, { 0.1651997757838688E-05, 0.3480206939663244E+01, 0.8678556699018502E+02 }, { 0.1630513899533984E-05, 0.3385172765856651E+00, 0.8678556699018502E+02 }, { 0.1448288628265927E-05, 0.3387167094147629E+00, 0.8678556699018502E+02 }, { 0.8501465841371375E-06, 0.1657744434632118E+01, 0.8678749253377755E+02 }, { 0.3039469315779643E-06, 0.2976610131749417E+01, 0.8678941807737007E+02 }, { 0.1948656845764241E-05, 0.1451237650194714E+00, 0.2017830174892851E+03 }, { 0.1903491726480552E-05, 0.1967591900767555E+01, 0.2017810919456925E+03 }, { 0.5000991669041441E-06, 0.4605684755931306E+01, 0.2017849430328776E+03 }, { 0.1831410067152233E-05, 0.3077113311796339E+01, -0.1721359799417176E+03 }, { 0.7115752344230280E-06, 0.6753063833723361E+00, -0.1721429391151880E+03 }, { 0.1733359910757746E-05, 0.7423107991233067E+00, 0.5743242112366043E+02 }, { 0.1242741081493270E-05, 0.2092609920904744E+01, 0.2871522321641727E+02 }, { 0.4165435585729947E-06, 0.2092507497563432E+01, 0.2871522321641727E+02 }, { 0.4165435585729947E-06, 0.2092712344246056E+01, 0.2871522321641727E+02 }, { 0.1231321836921703E-05, 0.1920120665056447E+01, -0.2914182144370607E+02 }, { 0.1079486582646652E-05, 0.5061610895304928E+01, -0.2914182144370607E+02 }, { 0.6336594881351334E-06, 0.3742583170087572E+01, -0.2914374698729860E+02 }, { 0.3613921763521041E-06, 0.6010931567025215E+00, -0.2914374698729860E+02 }, { 0.3530159859578773E-06, 0.5061810328134025E+01, -0.2914182144370607E+02 }, { 0.1224549022763507E-05, 0.4522825446725147E+01, 0.2914182144370607E+02 }, { 0.4104459208639739E-06, 0.4522927870066459E+01, 0.2914182144370607E+02 }, { 0.4104459208639739E-06, 0.4522723023383834E+01, 0.2914182144370607E+02 }, { 0.1155571530124003E-05, 0.2959627469406032E+01, -0.5742847174200866E+02 }, { 0.1093705824191350E-05, 0.2826816249991383E+00, 0.2589195722410767E+03 }, { 0.9865831571531203E-06, 0.5523851310299774E+01, 0.2828862498912847E+02 }, { 0.8649268200054579E-06, 0.2382156233368668E+01, 0.2828862498912847E+02 }, { 0.5077127357111450E-06, 0.1063128508151314E+01, 0.2828669944553594E+02 }, { 0.9438814987601647E-06, 0.1091584057330117E+01, 0.2956841967099487E+02 }, { 0.8274907363514915E-06, 0.4233279134261223E+01, 0.2956841967099487E+02 }, { 0.4857377246389406E-06, 0.5552306859478579E+01, 0.2957034521458740E+02 }, { 0.8343508926599710E-06, 0.3074604494266973E+01, -0.4310535774919684E+03 }, { 0.7844727255827545E-06, 0.3424774740430573E+01, -0.2935512055735047E+02 }, { 0.6907267387443708E-06, 0.2105747232076648E+01, -0.2935704610094300E+02 }, { 0.6747173753638274E-06, 0.2832790963285650E+00, -0.2935512055735047E+02 }, { 0.4037032162050010E-06, 0.5247237245461699E+01, -0.2935704610094300E+02 }, { 0.3949980093220293E-06, 0.5247439839436669E+01, -0.2935704610094300E+02 }, { 0.3438693915458760E-06, 0.2830796634994670E+00, -0.2935512055735047E+02 }, { 0.5831454312634436E-06, 0.4589631341204242E+01, -0.2871315048972251E+03 }, { 0.5756485350981315E-06, 0.3655807898223860E+01, 0.1152855164021320E+03 }, { 0.5754083403713949E-06, 0.3163232139672567E+01, 0.4317542741281151E+03 }, { 0.4595462189000190E-06, 0.5053348902770820E+01, 0.3739150971965843E+03 }, { 0.4231711644426220E-06, 0.1822484926062486E+00, 0.2435144296437475E+04 }, { 0.4105962555389770E-06, 0.5815663679651547E+01, -0.1617010253837573E+04 }, { 0.3999910250873396E-06, 0.7997716879783442E+00, 0.1674867298497696E+04 }, { 0.3827903648104360E-06, 0.3349310327302221E+01, -0.2786202676183967E+02 }, { 0.3770599260080091E-06, 0.4984963438378681E+01, 0.8657226787654062E+02 }, { 0.3591607352372491E-06, 0.4481232803237869E+01, 0.8593237053560742E+02 }, { 0.3386727736182448E-06, 0.5810388343392691E+01, 0.5721912201001602E+02 }, { 0.3140166875052082E-06, 0.4215499030507360E+01, -0.2878410862504347E+03 }, { 0.3067385455485728E-06, 0.2393030894759276E+01, -0.2878391607068422E+03 }, { 0.3076753876071480E-06, 0.5185765171332203E+01, -0.5080112457164210E+03 }, { 0.3005442215364578E-06, 0.3363297035584122E+01, -0.5080093201728285E+03 } }, { { 0.1320165332695350E+00, 0.3221523573692266E+01, 0.0000000000000000E+00 }, { 0.6794549145709775E-01, 0.5047886356662284E+01, -0.1925543592528062E-02 }, { 0.6892434301339112E-03, 0.1398038368144667E+01, 0.1925543592528062E-02 }, { 0.2730634121085477E-03, 0.3074026406224565E+01, -0.8931239595284827E-02 }, { 0.2641112196820165E-03, 0.6085250961969193E+01, 0.4265982401557260E+00 }, { 0.1816919041955310E-03, 0.1123018507358733E+01, 0.4285237837482541E+00 }, { 0.4570393856724005E-04, 0.3663028182224427E+01, -0.3851087185056125E-02 }, { 0.4494417792607357E-04, 0.5092981879591376E+01, -0.2132991200778630E+00 }, { 0.3374620641006819E-04, 0.1072212121537805E+01, 0.6398973602335890E+00 }, { 0.3010291742672222E-04, 0.4323389769715201E+01, 0.2132991200778630E+00 }, { 0.2873148969672351E-04, 0.1130417841604620E+01, 0.3900234418413626E-02 }, { 0.2832841674512957E-04, 0.3775418852980096E+01, -0.2152246636703911E+00 }, { 0.2829811667283325E-04, 0.3179813769687029E+01, 0.2113735764853349E+00 }, { 0.2348785638862567E-04, 0.2392069283444719E+01, 0.6418229038261171E+00 }, { 0.1915644482319336E-04, 0.1666983826523547E+01, 0.5874925244299190E-02 }, { 0.1388791091408471E-04, 0.6199545784892948E+01, -0.6831187836279569E-02 }, { 0.1363049113672050E-04, 0.1573081241951383E+01, -0.1085678318781289E-01 }, { 0.1115402869499410E-04, 0.2124370914205684E+01, 0.1786772859246875E-01 }, { 0.9901282214730337E-05, 0.3022565890567675E+01, 0.2152246636703911E+00 }, { 0.9851993483313069E-05, 0.3568018055505390E+01, 0.8931239595284827E-02 }, { 0.6564159971602750E-05, 0.5899199575040269E+01, 0.1090855512211994E-01 }, { 0.5927925628073686E-05, 0.2236765758751786E+01, -0.5924072477656691E-02 }, { 0.5075828846612914E-05, 0.3331278759394790E+00, 0.1979327218499681E-01 }, { 0.5003929435494984E-05, 0.5249025520673378E+01, -0.4285237837482541E+00 }, { 0.4700210983954140E-05, 0.3997089887831509E+01, -0.4304493273407821E+00 }, { 0.3932389676076612E-05, 0.5902900444967474E+01, 0.4334294279920056E+00 }, { 0.3855202341799354E-05, 0.3260409788853447E+01, 0.4197670523194464E+00 }, { 0.3494901083668216E-05, 0.2384257843599439E+01, 0.8531964803114520E+00 }, { 0.6779699256950095E-06, 0.3450394767068876E+01, -0.4265982401557260E+00 }, { 0.2987819907657320E-04, 0.1592450553501527E+01, -0.1149955249555075E+03 }, { 0.1598538661690393E-04, 0.3414911760531445E+01, -0.1149974504991001E+03 }, { 0.5196347763201437E-06, 0.1364682192599308E+01, -0.1150044561951028E+03 }, { 0.2011086466288782E-04, 0.5022984906438330E+01, 0.1728525696156309E+03 }, { 0.1081178008232983E-04, 0.3200523219219202E+01, 0.1728544951592234E+03 }, { 0.3781314342005297E-06, 0.5250621987578875E+01, 0.1728615008552262E+03 }, { 0.4023273549659016E-05, 0.3393911100068438E+01, 0.5785704466012334E+02 }, { 0.3549114063300533E-05, 0.2524208698199577E+00, 0.5785704466012334E+02 }, { 0.1832371513844348E-05, 0.1571448595037313E+01, 0.5785897020371587E+02 }, { 0.3828678448728374E-05, 0.3683559835873675E+01, 0.5743044643283454E+02 }, { 0.2697300374723224E-05, 0.5420696056251947E+00, 0.5743044643283454E+02 }, { 0.1388077368193791E-05, 0.2364532110656320E+01, 0.5742852088924202E+02 }, { 0.4332348469960449E-06, 0.3683457412532363E+01, 0.5743044643283454E+02 }, { 0.1310815780246894E-05, 0.3256355709659855E+01, 0.7204899083316938E+00 }, { 0.8833068155471169E-06, 0.4678333554199201E+01, 0.7146149830873946E+00 }, { 0.8604417421849733E-06, 0.5078832057446901E+01, 0.7185643647391657E+00 }, { 0.6718820321393613E-06, 0.1433809611894344E+01, 0.7224154519242219E+00 }, { 0.5950685735865521E-06, 0.2276553135246288E+01, 0.7076558096170459E+00 }, { 0.4545649462411443E-06, 0.2855871049168076E+01, 0.7165405266799226E+00 }, { 0.3062968607914330E-06, 0.4541169170095360E+00, 0.7095813532095739E+00 }, { 0.1141957796039554E-05, 0.5137033501494948E+01, 0.1439260219763951E+03 }, { 0.5876712089500302E-06, 0.3314570996463822E+01, 0.1439279475199876E+03 }, { 0.1141957796039554E-05, 0.1706497420624183E+01, -0.1439220725947433E+03 }, { 0.5876712089500301E-06, 0.3528959925655309E+01, -0.1439239981383359E+03 }, { 0.9240554014049475E-06, 0.2468452072963474E+01, 0.5721714731919014E+02 }, { 0.5270142364742109E-06, 0.5610147149894579E+01, 0.5721714731919014E+02 }, { 0.8562203475402176E-06, 0.5620822378456090E+01, -0.2589106383767805E+03 }, { 0.4406257818911077E-06, 0.1160099576307630E+01, -0.2589125639203730E+03 }, { 0.8081541157870830E-06, 0.3797607613118295E+01, 0.2850389879359876E+02 }, { 0.4609125422972075E-06, 0.6561173828698139E+00, 0.2850389879359876E+02 }, { 0.7978736105198133E-06, 0.3079032121013479E+00, -0.4790807978427668E+03 }, { 0.4105995430914010E-06, 0.2130365717132474E+01, -0.4790827233863593E+03 }, { 0.7962365977686471E-06, 0.3664686470645773E+00, 0.2893049702088756E+02 }, { 0.4541156536587076E-06, 0.3507958877313058E+01, 0.2893049702088756E+02 }, { 0.3695428746936740E-06, 0.7056695618928304E+00, 0.2891958846576544E+02 }, { 0.3695428746936740E-06, 0.2768173152147268E+01, 0.2893745619435791E+02 }, { 0.7454540946216246E-06, 0.1764836475886549E+01, -0.5713848029538418E+02 }, { 0.3836235546728265E-06, 0.6225559278035010E+01, -0.5713655475179166E+02 }, { 0.7118995492853203E-06, 0.2434684834895837E-01, 0.5369378425028901E+03 }, { 0.3663558059942478E-06, 0.4485069650497419E+01, 0.5369397680464826E+03 }, { 0.6998372934208747E-06, 0.9946129891738023E+00, 0.3167676830369039E+03 }, { 0.3601483607531824E-06, 0.5455335791322262E+01, 0.3167696085804964E+03 }, { 0.4754237067161859E-06, 0.4619994519724736E+01, -0.8606897731627176E+02 }, { 0.4385541576256689E-06, 0.6246560326377261E+01, -0.2299910499110151E+03 }, { 0.4268928712637706E-06, 0.3104364787604514E+01, 0.5828364288741214E+02 }, { 0.4090821761277136E-06, 0.4534644234722027E+01, -0.8095823480294860E+03 }, { 0.3930946817313776E-06, 0.5320498414089342E+01, 0.5764374554647894E+02 }, { 0.3902069246730890E-06, 0.1467528632730159E+01, 0.5807034377376775E+02 }, { 0.3817968724121190E-06, 0.2080791132907865E+01, 0.8674393926896093E+03 }, { 0.3730666308347880E-06, 0.3531492325926554E+01, 0.1149935994119150E+03 }, { 0.3504051883832708E-06, 0.3688750412526320E+00, 0.2878480945711384E+03 } } } }; static int iks[7][4][250][7] = { { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { 2, 0, -2, 0, 0, 0, 0 }, { -1, 3, -2, 0, 0, 0, 0 } }, { { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { -2, 3, 0, 0, 0, 0, 0 } }, { { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 }, { 3, 0, -2, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 2, 0, -2, 0, 0, 0 }, { 0, 2, -2, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, -1, 0, 0, 0, 0 }, { 0, 2, 0, -2, 0, 0, 0 }, { 0, 2, -2, 0, 0, 0, 0 }, { 0, 2, -4, 2, 0, 0, 0 }, { 0, 3, -3, 0, 0, 0, 0 }, { 0, 4, -4, 0, 0, 0, 0 }, { 0, 2, 0, 0, 0, -2, 0 }, { 0, 1, 0, -1, 0, 0, 0 }, { 0, 5, -5, 0, 0, 0, 0 } }, { { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0 }, { 0, -3, 4, 0, 0, 0, 0 }, { 0, -2, 3, 0, 0, 0, 0 }, { 0, 3, 0, -2, 0, 0, 0 }, { 0, -1, 2, 0, 0, 0, 0 }, { 0, -4, 5, 0, 0, 0, 0 }, { 0, -1, 0, 0, 0, 2, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 2, -2, 0, 0, 0 }, { 0, 0, 2, 0, 0, -2, 0 }, { 0, 0, 3, -3, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, -1, 0, 0, 0 }, { 0, 0, 2, -2, 0, 0, 0 }, { 0, 0, 3, -3, 0, 0, 0 }, { 0, 0, 2, 0, 0, -2, 0 }, { 0, 1, -2, 1, 0, 0, 0 }, { 0, 0, 4, -4, 0, 0, 0 }, { 0, 0, 2, 0, -2, 0, 0 }, { 0, 0, 5, -5, 0, 0, 0 }, { 0, 0, 1, 0, -1, 0, 0 }, { 0, 1, -1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, -1, 0 }, { 0, 2, -2, 0, 0, 0, 0 } }, { { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, -2, 3, 0, 0, 0 }, { 0, 0, -1, 0, 2, 0, 0 }, { 0, 0, -3, 4, 0, 0, 0 }, { 0, 0, -1, 0, 0, 2, 0 }, { 0, 0, -1, 2, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, -4, 5, 0, 0, 0 }, { 0, -3, 4, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 2, 0, -2, 0 }, { 0, 0, 0, 2, -2, 0, 0 }, { 0, 0, 0, 3, -3, 0, 0 }, { 0, 0, 0, 3, 0, -3, 0 }, { 0, 0, 0, 1, -1, 0, 0 }, { 0, 0, 2, -2, 0, 0, 0 }, { 0, 0, 0, 4, -4, 0, 0 }, { 0, 1, 0, -1, 0, 0, 0 }, { 0, 0, 1, -1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 2, -2, 0, 0 }, { 0, 0, 0, 1, -1, 0, 0 }, { 0, 0, 0, 2, 0, -2, 0 }, { 0, 0, 1, -1, 0, 0, 0 }, { 0, 0, 0, 3, -3, 0, 0 }, { 0, 0, 2, -2, 0, 0, 0 }, { 0, 0, 0, 1, 0, -1, 0 }, { 0, 0, 0, 4, -4, 0, 0 }, { 0, 0, 3, -3, 0, 0, 0 }, { 0, 0, 0, 3, 0, -3, 0 }, { 0, 1, -2, 1, 0, 0, 0 }, { 0, 1, 0, -1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 5, -5, 0, 0 }, { 0, 0, 4, -4, 0, 0, 0 }, { 0, 0, 0, 2, 0, -3, 0 } }, { { 0, -1, 0, 2, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, -2, 3, 0, 0, 0 }, { 0, 0, 0, -2, 3, 0, 0 }, { 0, 0, 0, -1, 2, 0, 0 }, { 0, 0, 0, -1, 0, 2, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, -3, 4, 0, 0, 0 }, { 0, 0, 0, -3, 4, 0, 0 }, { 0, 0, 0, -2, 0, 3, 0 }, { 0, 0, -1, 2, 0, 0, 0 }, { 0, 0, 0, -1, 0, 3, 0 }, { 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, -4, 5, 0, 0 }, { 0, 0, -4, 5, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 }, { -1, 0, 2, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 2, -2, 0 }, { 0, 0, 0, 0, 3, -3, 0 }, { 0, 0, 0, 0, 1, -1, 0 }, { 0, 0, 0, 1, -1, 0, 0 }, { 0, 0, 0, 0, 4, -4, 0 }, { 0, 0, 0, 0, 2, -3, 0 }, { 0, 0, 1, 0, -1, 0, 0 }, { 0, 0, 0, 2, -2, 0, 0 }, { 0, 0, 0, 0, 3, -4, 0 }, { 0, 0, 0, 0, 5, -5, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 2, -2, 0 }, { 0, 0, 0, 0, 1, -1, 0 }, { 0, 0, 0, 0, 3, -3, 0 }, { 0, 0, 0, 0, 2, -3, 0 }, { 0, 0, 0, 1, -1, 0, 0 }, { 0, 0, 0, 0, 1, -2, 0 }, { 0, 0, 0, 2, -2, 0, 0 }, { 0, 0, 0, 0, 4, -4, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 3, -4, 0 }, { 0, 0, 0, 3, -3, 0, 0 }, { 0, 0, 0, 0, 1, -3, 0 }, { 0, 0, 0, 0, 5, -5, 0 }, { 0, 0, 1, 0, -1, 0, 0 }, { 0, 0, 0, 4, -4, 0, 0 }, { 0, 0, 0, 0, 4, -5, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 2, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, -1, 2, 0 }, { 0, 0, 0, 0, -1, 3, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, -2, 3, 0 }, { 0, 0, 0, -2, 3, 0, 0 }, { 0, 0, 0, 0, -3, 4, 0 }, { 0, 0, 0, -1, 2, 0, 0 }, { 0, 0, 0, 0, 3, -2, 0 }, { 0, 0, 0, 0, -2, 4, 0 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, -3, 4, 0, 0 }, { 0, 0, 0, 0, -1, 4, 0 }, { 0, 0, 0, 0, 4, -3, 0 }, { 0, 0, 0, 0, -4, 5, 0 }, { 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, -1, 0 }, { 0, 0, 0, 1, 0, -1, 0 }, { 0, 0, 1, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 1, 0, 0, 0, -1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, -1, 0 }, { 0, 0, 0, 1, 0, -1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 1, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, 0, 2, -2, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 1, 0, 0, 0, -1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, -1, 2, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, -1, 0, 2, 0 }, { 0, 0, -1, 0, 0, 2, 0 }, { 0, 0, 0, 0, 0, -1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 2, -1 }, { 0, 0, 0, 0, 1, 0, -1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 1, 0, 0, -1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 2, -2 }, { 0, 0, 0, 0, 0, 2, -2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 1, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 3, -3 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 2, -3 }, { 0, 0, 0, 0, 0, 2, -3 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 4, -4 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 3, -1 }, { 0, 0, 0, 0, 1, 0, -2 }, { 0, 0, 0, 0, 0, 3, -4 }, { 1, 0, 0, 0, 0, 0, -1 }, { 0, 1, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 1, 0, 1 }, { 0, 0, 0, 0, 1, 0, 1 }, { 0, 0, 0, 0, 0, 2, 1 }, { 0, 0, 0, 0, 0, 2, 1 }, { 0, 0, 0, 1, 0, 0, -2 }, { 0, 0, 0, 0, 0, 5, -5 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 2, -1 }, { 0, 0, 0, 0, 1, 0, -1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 2, -2 }, { 0, 0, 0, 0, 0, 2, -2 }, { 0, 0, 0, 0, 0, 2, -2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 1, 0, 0, -1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 1, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 1, -2 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 3, -3 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 2, -3 }, { 0, 0, 0, 0, 0, 2, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 1, -3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 1, -4 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 4, -4 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 3, -4 }, { 0, 0, 0, 0, 0, 3, -4 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, 0, 0, 3, -1 }, { 0, 0, 0, 0, 0, 3, -1 }, { 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, -1 }, { 0, 1, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 5, -5 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 2, -4 }, { 0, 0, 0, 0, 0, 2, -4 }, { 0, 0, 0, 0, 0, 3, -2 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, -1, 2 }, { 0, 0, 0, 0, 0, -1, 2 }, { 0, 0, 0, 0, 0, -1, 2 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 2, 0 }, { 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -2, 3 }, { 0, 0, 0, 0, 0, -2, 3 }, { 0, 0, 0, 0, 0, -2, 3 }, { 0, 0, 0, 0, 0, -2, 3 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, -2, 2 }, { 0, 0, 0, 0, -1, 0, 2 }, { 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, -1, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, -3, 4 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, -1, 4 }, { 0, 0, 0, 0, 0, -1, 4 }, { 0, 0, 0, 0, 0, -1, 4 }, { 0, 0, 0, 0, 0, -1, 4 }, { 0, 0, 0, 0, 0, -1, 4 }, { 0, 0, -1, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 1, 2 }, { 0, 0, 0, 0, 0, 1, 2 }, { 0, 0, 0, 0, 0, 1, 2 }, { 0, 0, 0, 0, 0, -2, 4 }, { 0, 0, 0, 0, 0, -2, 4 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, -2 }, { 0, 0, 0, 0, 0, 2, -1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, -4, 5 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, -3, 5 }, { 0, 0, 0, 0, 0, 0, 4 }, { 0, 0, 0, 0, 0, 3, 0 }, { 0, 0, 0, 0, 0, 3, -2 }, { 1, 0, 0, 0, 0, 0, 0 }, { 0, -1, 0, 0, 0, 0, 2 }, { 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, -1 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 3 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, -2, 0 }, { 0, 0, 0, 0, 0, -2, 0 }, { 0, 0, 0, 0, -1, 0, 0 }, { 0, 0, 0, 0, -1, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 0, 0, -1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, -1, 5 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, -1, 0 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, -2, 1 }, { 0, 0, 0, 0, 0, -2, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, -1, 0, 1 }, { 0, 0, 0, 0, -1, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 0, -1, 3 }, { 0, 0, 0, 0, 1, 0, 1 }, { 0, 0, 0, 0, 1, 0, 1 }, { 0, 0, 0, 0, 0, 2, 1 }, { 0, 0, 0, 0, 0, 2, 1 }, { 0, 0, 0, 0, 0, -1, 2 }, { 0, 0, 0, 0, 0, -2, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, -1, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 0, 0, 0, 2 }, { 0, 0, 0, 1, 0, 0, 1 }, { 0, 0, 0, 0, 0, 1, -1 }, { 0, 0, 0, 0, 0, 2, 0 } } } }; const int NBTP = 109; static double P[NBTP][3] = { { 0.5269198501828300e-02, 0.1803677252541800e+01, 0.9810539955099672e-02 }, { -0.9447929974549504e-03, 0.1379026805952163e+01, 0.9873376502713178e-01 }, { -0.6016015548174626e-03, 0.5858534860589942e+01, 0.8892322507203211e-01 }, { 0.5148150044366294e-03, 0.3182704058493963e+01, 0.1085443049822315e+00 }, { -0.1309800881858535e-03, 0.1281528868939203e+01, 0.1072766731000612e-01 }, { 0.1186076675279319e-03, 0.2325825636144398e+01, 0.8893412600193221e-02 }, { -0.7587557241443920e-04, 0.4054857608048142e+01, 0.7911268511693244e-01 }, { -0.4394073687298339e-04, 0.4986381311035763e+01, 0.1183548449373311e+00 }, { -0.2986485373026291e-04, 0.5411031757625401e+01, 0.2943161986529901e-01 }, { 0.2422130320267833e-04, 0.3607354505083601e+01, 0.1962107991019934e-01 }, { 0.1721156885182891e-04, 0.9749793701295940e-01, 0.8800609771712566e-01 }, { -0.1338883184199104e-04, 0.5336386476987345e+01, 0.8984035242693857e-01 }, { -0.1302898520468604e-04, 0.2660555674891366e+01, 0.1094614323371379e+00 }, { 0.1289973076525889e-04, 0.1160724111900345e+01, 0.9924156005528160e-02 }, { -0.1276260623147002e-04, 0.2446630393183256e+01, 0.9696923904671184e-02 }, { -0.1206158887296372e-04, 0.1901175189554760e+01, 0.9781663767222532e-01 }, { 0.1012836012521588e-04, 0.3704852442096560e+01, 0.1076271776273250e+00 }, { -0.9589777592386616e-05, 0.5761036923576983e+01, 0.9171273549064512e-03 }, { 0.7719706043802130e-05, 0.2251180355506342e+01, 0.6930214516183278e-01 }, { -0.5031578459421872e-05, 0.5068732563979834e+00, 0.1281653848924308e+00 }, { -0.4727461773298300e-05, 0.2767316284539162e+01, 0.1136827010127225e-01 }, { -0.4490169397561938e-05, 0.4080979669446074e+01, 0.9899519638809918e-02 }, { 0.4445857119863126e-05, 0.5809560142817107e+01, 0.9721560271389426e-02 }, { 0.3929644136581539e-05, 0.8400382205444394e+00, 0.8252809808927092e-02 }, { 0.3847298333647876e-05, 0.4577005991650739e+01, 0.7819555776202598e-01 }, { -0.3502084178980730e-05, 0.3532709224445545e+01, 0.8002981247183889e-01 }, { 0.2811429184555117e-05, 0.7593804853366057e+00, 0.1164479466491257e-01 }, { 0.2625536042038141e-05, 0.8568784223495651e+00, 0.9965089238203824e-01 }, { 0.2165574780684495e-05, 0.4888883374022804e+01, 0.3034874722020547e-01 }, { 0.2190398167707681e-05, 0.4464232927433166e+01, 0.1192719722922376e+00 }, { -0.2173672397129618e-05, 0.5933180141227998e+01, 0.2851449251039256e-01 }, { -0.2086152830538867e-05, 0.5508529694638360e+01, 0.1174377175824247e+00 }, { 0.1758820758802031e-05, 0.5166607002175651e+01, 0.9835176321817914e-02 }, { -0.1729303956187257e-05, 0.4723932810087529e+01, 0.9785903588381428e-02 }, { 0.1628729863936739e-05, 0.4475031029645411e+00, 0.5949160520673310e-01 }, { -0.1424540056085036e-05, 0.2183026940518178e+00, 0.8880960902160362e-01 }, { 0.1386736928659767e-05, 0.5215581719948487e+01, 0.8903684112246060e-01 }, { 0.1373772890937228e-05, 0.2539750917852507e+01, 0.1086579210326600e+00 }, { -0.1342309573473890e-05, 0.3825657199135419e+01, 0.1084306889318030e+00 }, { 0.9845757121969750e-03, 0.2758053611904325e+01, 0.1974675300542636e+00 }, { 0.5722146672387600e-03, 0.4137080417856488e+01, 0.2962012950813954e+00 }, { 0.3064232824160758e-03, 0.5516107223808650e+01, 0.3949350601085272e+00 }, { 0.2328679324996273e-03, 0.6119487225812321e+00, 0.4936688251356589e+00 }, { 0.1830222466848013e-03, 0.1990975528533395e+01, 0.5924025901627907e+00 }, { 0.1428121183641368e-03, 0.3370002334485558e+01, 0.6911363551899224e+00 }, { 0.1030589558021878e-03, 0.4749029140437719e+01, 0.7898701202170543e+00 }, { 0.9162128151198170e-04, 0.2333403165314687e+01, 0.2863907551262957e+00 }, { 0.8420360344777332e-04, 0.3712429971266850e+01, 0.3851245201534275e+00 }, { 0.7477636779983881e-04, 0.6128055946389881e+01, 0.8886038852441861e+00 }, { 0.6245968777723361e-04, 0.5091456777219012e+01, 0.4838582851805592e+00 }, { -0.5925277975412419e-04, 0.5940757670398288e+01, 0.3060118350364951e+00 }, { -0.5866195836719566e-04, 0.3280201995506922e+01, 0.1965504026993571e+00 }, { -0.5838551971068579e-04, 0.1036599169170870e+01, 0.4047456000636268e+00 }, { 0.5517120904542451e-04, 0.1223897445162464e+01, 0.9873376502713178e+00 }, { 0.5291804011662172e-04, 0.1872982759915942e+00, 0.5825920502076911e+00 }, { 0.4785477163890776e-04, 0.1566325081943758e+01, 0.6813258152348228e+00 }, { 0.4648293960962418e-04, 0.9543763593625246e+00, 0.1876569900991639e+00 }, { -0.4509683939781330e-04, 0.2415625975123033e+01, 0.5034793650907585e+00 }, { 0.4393229670558661e-04, 0.2945351887895920e+01, 0.7800595802619547e+00 }, { 0.4272829406941570e-04, 0.1134097106183830e+01, 0.4927516977807525e+00 }, { 0.4154122350033837e-04, 0.2602924251114628e+01, 0.1086071415298450e+01 }, { -0.4056750796467554e-04, 0.3794652781075196e+01, 0.6022131301178903e+00 }, { -0.3857616137051121e-04, 0.5173679587027357e+01, 0.7009468951450221e+00 }, { 0.3815083219130052e-04, 0.4324378693848082e+01, 0.8787933452890865e+00 }, { -0.3615550506243641e-04, 0.5433884414000304e+01, 0.1778464501440642e+00 }, { -0.3619913197295652e-04, 0.2695210857999389e+00, 0.7996806601721539e+00 }, { 0.3211045925583688e-04, 0.5703405499800243e+01, 0.9775271103162182e+00 }, { -0.3191646069822739e-04, 0.1648547891752100e+01, 0.8984144251992857e+00 }, { 0.3106998351274690e-04, 0.3981951057066789e+01, 0.1184805180325582e+01 }, { -0.2797299420355516e-04, 0.8222280980834551e-01, 0.2170886099644629e+00 }, { -0.2722632461441940e-04, 0.3027574697704266e+01, 0.9971481902264174e+00 }, { 0.2670876942507434e-04, 0.7992469985728281e+00, 0.1076260875343350e+01 }, { -0.2297557612018265e-04, 0.4406601503656427e+01, 0.1095881955253549e+01 }, { 0.2299675108056304e-04, 0.5360977863018951e+01, 0.1283538945352713e+01 }, { 0.2232369387111974e-04, 0.2178273804524990e+01, 0.1174994640370482e+01 }, { -0.1940722128323030e-04, 0.5785628309608589e+01, 0.1194615720280681e+01 }, { 0.1861668359762009e-04, 0.3557300610477151e+01, 0.1273728405397614e+01 }, { 0.1683393793859745e-04, 0.4568193617915357e+00, 0.1382272710379845e+01 }, { -0.1635856648806699e-04, 0.8814698083811701e+00, 0.1293349485307813e+01 }, { 0.1543735278843180e-04, 0.4936327416429316e+01, 0.1372462170424745e+01 }, { -0.1367379954537092e-04, 0.2260496614333335e+01, 0.1392083250334945e+01 }, { -0.1336950395903937e-04, 0.1461249615760508e+01, 0.3158223749915947e+00 }, { -0.1320526200861202e-04, 0.5297259127728866e+00, 0.2765802151711960e+00 }, { 0.1271138964892950e-04, 0.3216891520189780e-01, 0.1471195935451877e+01 }, { 0.1223977806847720e-04, 0.1835846167743697e+01, 0.1481006475406977e+01 }, { -0.1131018256569493e-04, 0.3639523420285497e+01, 0.1490817015362076e+01 }, { -0.1089636645498038e-04, 0.4659228801459085e+01, 0.2952841677264889e+00 }, { 0.1039179172259797e-04, 0.1411195721154059e+01, 0.1569929700479009e+01 }, { -0.9298418091702524e-05, 0.5018550226237658e+01, 0.1589550780389208e+01 }, { 0.8847111426033778e-05, 0.3214872973695859e+01, 0.1579740240434109e+01 }, { 0.8461716341891088e-05, 0.2790222527106221e+01, 0.1668663465506141e+01 }, { -0.7901292288839958e-05, 0.4561730864446125e+01, 0.2072780700093633e+00 }, { -0.7609973567682646e-05, 0.1143917250102398e+00, 0.1688284545416340e+01 }, { 0.7430427565196998e-05, 0.3899728247258444e+01, 0.9677165703611184e+00 }, { 0.7356833812577206e-05, 0.2520701441306281e+01, 0.8689828053339868e+00 }, { 0.7165256187015007e-05, 0.5278755053210607e+01, 0.1066450335388250e+01 }, { 0.6955885415513037e-05, 0.1141674635354119e+01, 0.7702490403068549e+00 }, { 0.6885291075415051e-05, 0.4169249333058383e+01, 0.1767397230533273e+01 }, { 0.6614895521474710e-05, 0.6045833136581537e+01, 0.6715152752797231e+00 }, { 0.6331562819397564e-05, 0.4593899779648020e+01, 0.1678474005461240e+01 }, { -0.6179612339504240e-05, 0.1493418530962401e+01, 0.1787018310443472e+01 }, { 0.6131629134251356e-05, 0.1753623357935350e+01, 0.1263917865442514e+01 }, { 0.5583256693630428e-05, 0.3132650163887515e+01, 0.1362651630469646e+01 }, { 0.5538856606051041e-05, 0.5548276139010548e+01, 0.1866130995560404e+01 }, { -0.2676900656082160e-04, 0.2148463129341690e+01, 0.1095544904247980e+01 }, { -0.1308495447734650e-04, 0.4324969183604490e+01, 0.2000408834733950e+01 }, { -0.1249786948042500e-04, 0.9654256497292940e+00, 0.2962012605910000e+00 }, { -0.2961456426220440e-05, 0.1488360573553680e+01, 0.2952841654680000e+00 }, { -0.8783581973124320e-05, 0.2826260933757870e+00, 0.5894496611094870e+00 } }; static const int NBTQ = 230; static double Q[NBTQ][3] = { { 0.1591300460227652e+00, 0.1803677252541800e+01, 0.9810539955099672e-02 }, { 0.4042489669732959e-02, 0.2325825636144398e+01, 0.8893412600193221e-02 }, { -0.3674456394728999e-02, 0.1281528868939203e+01, 0.1072766731000612e-01 }, { 0.1876329764520020e-02, 0.1379026805952163e+01, 0.9873376502713178e-01 }, { -0.1559041896665946e-02, 0.5858534860589942e+01, 0.8892322507203211e-01 }, { 0.1534084173919484e-02, 0.5761036923576983e+01, 0.9171273549064512e-03 }, { 0.1132234522571428e-02, 0.3182704058493963e+01, 0.1085443049822315e+00 }, { -0.3898971540977004e-03, 0.2446630393183256e+01, 0.9696923904671184e-02 }, { 0.3851351224149008e-03, 0.1160724111900345e+01, 0.9924156005528160e-02 }, { -0.3602762810400590e-03, 0.5640232166538125e+01, 0.1136160504284885e-03 }, { -0.3108861291415183e-03, 0.4054857608048142e+01, 0.7911268511693244e-01 }, { -0.3036800061325884e-03, 0.5411031757625401e+01, 0.2943161986529901e-01 }, { -0.1967051700749114e-03, 0.3362929749633851e+01, 0.2463636671824243e-04 }, { 0.1584700380869004e-03, 0.3607354505083601e+01, 0.1962107991019934e-01 }, { 0.1443751571550919e-03, 0.8400382205444394e+00, 0.8252809808927092e-02 }, { -0.1336552626452528e-03, 0.4986381311035763e+01, 0.1183548449373311e+00 }, { 0.1354323755526581e-03, 0.5809560142817107e+01, 0.9721560271389426e-02 }, { -0.1344254972843197e-03, 0.4080979669446074e+01, 0.9899519638809918e-02 }, { -0.1248289604761352e-03, 0.2767316284539162e+01, 0.1136827010127225e-01 }, { -0.9343384687595748e-04, 0.9636390319973618e+00, 0.1557730146172579e-02 }, { 0.8558910102815169e-04, 0.2277302416904274e+01, 0.8897968371024604e-04 }, { 0.7224202068094286e-04, 0.7593804853366057e+00, 0.1164479466491257e-01 }, { 0.5296941292250232e-04, 0.5166607002175651e+01, 0.9835176321817914e-02 }, { -0.5247540827620734e-04, 0.4723932810087529e+01, 0.9785903588381428e-02 }, { 0.4189085863844754e-04, 0.8568784223495651e+00, 0.9965089238203824e-01 }, { 0.4098739653872672e-04, 0.9749793701295940e-01, 0.8800609771712566e-01 }, { 0.3764144636960646e-04, 0.5238888539974385e+01, 0.1834254709812902e-02 }, { -0.3531748699358457e-04, 0.2660555674891366e+01, 0.1094614323371379e+00 }, { -0.2947898798731622e-04, 0.1482991361185895e+01, 0.8139193758498604e-02 }, { 0.2841090381393687e-04, 0.3704852442096560e+01, 0.1076271776273250e+00 }, { 0.2676761780821079e-04, 0.2251180355506342e+01, 0.6930214516183278e-01 }, { 0.2465038854019734e-04, 0.2124363143897707e+01, 0.1148188615170074e-01 }, { 0.2383157781622512e-04, 0.3206858913559061e+00, 0.1671346196601068e-02 }, { -0.2358765186013457e-04, 0.5336386476987345e+01, 0.8984035242693857e-01 }, { -0.2308684467527070e-04, 0.5933180141227998e+01, 0.2851449251039256e-01 }, { 0.2173788459895790e-04, 0.4888883374022804e+01, 0.3034874722020547e-01 }, { 0.1642710507186450e-04, 0.2847974019746996e+01, 0.7976285245286770e-02 }, { 0.1553609418389716e-04, 0.4577005991650739e+01, 0.7819555776202598e-01 }, { -0.1337650472587841e-04, 0.3532709224445545e+01, 0.8002981247183889e-01 }, { -0.1132855895484880e-04, 0.6385757282977473e+00, 0.1084128336043461e-01 }, { 0.1088679752730659e-04, 0.1924482009580659e+01, 0.1061405125957763e-01 }, { -0.1000802392783223e-04, 0.5068732563979834e+00, 0.1281653848924308e+00 }, { 0.8798422861268053e-05, 0.4475031029645411e+00, 0.5949160520673310e-01 }, { 0.8204317973862647e-05, 0.4845921110819746e+01, 0.8163830125216846e-02 }, { 0.7724851326708509e-05, 0.1682872495502942e+01, 0.9007028650621710e-02 }, { -0.7215481275780168e-05, 0.2968778776785854e+01, 0.8779796549764733e-02 }, { -0.6984482201975051e-05, 0.3289464668141760e+01, 0.1045114274636580e-01 }, { -0.6882066002549454e-05, 0.5044618701443436e+01, 0.1145724978498250e-01 }, { 0.6650438793970224e-05, 0.4464232927433166e+01, 0.1192719722922376e+00 }, { -0.6296309881986443e-05, 0.5508529694638360e+01, 0.1174377175824247e+00 }, { 0.6110229923833445e-05, 0.1901175189554760e+01, 0.9781663767222532e-01 }, { 0.6015743140846809e-05, 0.1485787415599959e+01, 0.6406027912661278e-03 }, { 0.5443666713560605e-05, 0.2245167900936563e+01, 0.1228539745617870e-01 }, { -0.5558326355997969e-05, 0.3240941448901636e+01, 0.1646709829882825e-02 }, { -0.3958927857591537e-05, 0.2643715473086239e+01, 0.1806334976402677e-01 }, { 0.3941866401660965e-05, 0.3558831285843477e+01, 0.1081664699371637e-01 }, { -0.3779778844595939e-05, 0.5287411759214510e+01, 0.1063868762629588e-01 }, { -0.3613554557427136e-05, 0.2183026940518178e+00, 0.8880960902160362e-01 }, { 0.3510914428131760e-05, 0.5215581719948487e+01, 0.8903684112246060e-01 }, { 0.2958781539525876e-05, 0.2539750917852507e+01, 0.1086579210326600e+00 }, { -0.2877066321058344e-05, 0.3825657199135419e+01, 0.1084306889318030e+00 }, { -0.2684534114394913e-05, 0.4603128053048671e+01, 0.8982392283903467e-02 }, { 0.2527885180883367e-05, 0.4852321924012415e-01, 0.8804432916482976e-02 }, { -0.2228949169524294e-05, 0.4768078616983946e+01, 0.2954523591572750e-01 }, { 0.2203418048212828e-05, 0.6053984898266856e+01, 0.2931800381487053e-01 }, { 0.2084495541017897e-05, 0.2735200955529421e+01, 0.4905269977549836e-01 }, { -0.2078328653497296e-05, 0.2773328739108939e+01, 0.6838501780692632e-01 }, { 0.2053262782839373e-05, 0.4414906483947636e+00, 0.2474857501079031e-02 }, { 0.1926895597615764e-05, 0.1729031971903744e+01, 0.7021927251673923e-01 }, { 0.1866581488955838e-05, 0.4651651272288795e+01, 0.1778682520038644e-01 }, { 0.1793161742446505e-05, 0.4894895828592580e+01, 0.8736549492585954e-01 }, { 0.1728658611291661e-05, 0.2310550508939783e+01, 0.1379759248475305e+00 }, { 0.1676857763913550e-05, 0.4570993537080962e+01, 0.2117881005637192e-01 }, { 0.1535772080970505e-05, 0.2125944501827351e+01, 0.8025577708070115e-02 }, { -0.1522980567370601e-05, 0.4697810748689598e+01, 0.7899906906650395e-01 }, { -0.1495199523539624e-05, 0.5960918057894030e+01, 0.1784962247029556e-02 }, { -0.1524956909904084e-05, 0.4644458618573054e+01, 0.1075230367672436e-01 }, { 0.1476058477371991e-05, 0.3411904467406686e+01, 0.7922630116736093e-01 }, { 0.1450002439077977e-05, 0.2646511527500304e+01, 0.1056475879679429e-01 }, { 0.1487447331838316e-05, 0.4201784426484933e+01, 0.1070303094328788e-01 }, { -0.1242111402697583e-05, 0.1481410003256251e+01, 0.1159550220212923e-01 }, { -0.1224261037265257e-05, 0.2372321017340067e+00, 0.1256192201981903e-01 }, { 0.1240886283959093e-05, 0.3581232443685669e+01, 0.8883424538832187e-01 }, { -0.1221915897644608e-05, 0.1852651970314636e+01, 0.8901220475574236e-01 }, { -0.1186953182299199e-05, 0.2563057737878406e+01, 0.2145533462001224e-01 }, { -0.1201215374450881e-05, 0.4146343090491325e+01, 0.1101020351284040e+00 }, { -0.1129771140532139e-05, 0.6196463206155567e+00, 0.8708897036221921e-01 }, { -0.1097793441792323e-05, 0.1602214760295107e+01, 0.1239901350660719e-01 }, { 0.1028753109593422e-05, 0.5688755385778249e+01, 0.8918048966911464e-02 }, { -0.1020891709037016e-05, 0.5460006475398236e+01, 0.1086332846659417e+00 }, { -0.1012670463985482e-05, 0.5246081193690127e+01, 0.8868776233474979e-02 }, { 0.1000328987513614e-05, 0.9054016415896892e+00, 0.1084553252985212e+00 }, { -0.1056701003062998e-05, 0.4927011157602322e+01, 0.4968106525163343e-01 }, { 0.9414415383367402e-06, 0.3286668613727695e+01, 0.1794973371359828e-01 }, { -0.9256226899654040e-06, 0.4366734990420207e+01, 0.3126587457511192e-01 }, { -0.8873327693660700e-06, 0.9696514865671384e+00, 0.5857447785182665e-01 }, { -0.8578646315557892e-06, 0.4447392725628039e+01, 0.2787388971912643e-01 }, { 0.8458120789255400e-06, 0.2964401364442145e+01, 0.1973469596062783e-01 }, { -0.8599515368071076e-06, 0.5488874251461201e+01, 0.8050214074788358e-02 }, { -0.8217941676205146e-06, 0.5389885854077239e+00, 0.9048095521820468e-01 }, { 0.7998618448176001e-06, 0.3178898369418413e+00, 0.9169937163833544e-02 }, { -0.7833211544506204e-06, 0.1029021640000580e+01, 0.1272482575375243e+00 }, { 0.7924651953382082e-06, 0.6208540026541524e+01, 0.6040873256163955e-01 }, { 0.7948809078699551e-06, 0.9148548244318278e-01, 0.3098935001147160e-01 }, { 0.7622712310485859e-06, 0.2138407291288768e+01, 0.1103785596920444e+00 }, { 0.7575143203880983e-06, 0.2219065026496601e+01, 0.1069865748360589e+00 }, { 0.7730107483777507e-06, 0.1405148867350095e+01, 0.2952059954900926e-01 }, { -0.7622738839419112e-06, 0.3133729340721127e+01, 0.2934264018158877e-01 }, { -0.7315354488166669e-06, 0.4250307645725057e+01, 0.1950746385977086e-01 }, { 0.7005448425844999e-06, 0.8428342749585034e+00, 0.7542188416946162e-03 }, { -0.6870417571431780e-06, 0.4343428170394308e+01, 0.1184684609877596e+00 }, { 0.2477704948047725e-02, 0.2758053611904325e+01, 0.1974675300542636e+00 }, { 0.1177430869304958e-02, 0.4137080417856488e+01, 0.2962012950813954e+00 }, { 0.7097516189849207e-03, 0.5516107223808650e+01, 0.3949350601085272e+00 }, { 0.4276809299095375e-03, 0.6119487225812321e+00, 0.4936688251356589e+00 }, { 0.2883086646474427e-03, 0.1990975528533395e+01, 0.5924025901627907e+00 }, { 0.2445211406069563e-03, 0.9543763593625246e+00, 0.1876569900991639e+00 }, { 0.2079619720142985e-03, 0.2333403165314687e+01, 0.2863907551262957e+00 }, { 0.1997665368454137e-03, 0.3370002334485558e+01, 0.6911363551899224e+00 }, { 0.1532039999508838e-03, 0.3712429971266850e+01, 0.3851245201534275e+00 }, { 0.1391797303858132e-03, 0.4749029140437719e+01, 0.7898701202170543e+00 }, { -0.1347079373955693e-03, 0.5940757670398288e+01, 0.3060118350364951e+00 }, { -0.1168617638452060e-03, 0.4561730864446125e+01, 0.2072780700093633e+00 }, { 0.1158407408725238e-03, 0.5091456777219012e+01, 0.4838582851805592e+00 }, { -0.1110204610592649e-03, 0.1036599169170870e+01, 0.4047456000636268e+00 }, { 0.9876297087120832e-04, 0.6128055946389881e+01, 0.8886038852441861e+00 }, { 0.9360835142429720e-04, 0.1872982759915942e+00, 0.5825920502076911e+00 }, { -0.8787340150688395e-04, 0.2415625975123033e+01, 0.5034793650907585e+00 }, { 0.7626783708559587e-04, 0.1566325081943758e+01, 0.6813258152348228e+00 }, { -0.7423412446912493e-04, 0.3794652781075196e+01, 0.6022131301178903e+00 }, { 0.7068861066099871e-04, 0.1223897445162464e+01, 0.9873376502713178e+00 }, { -0.6947176438271949e-04, 0.3280201995506922e+01, 0.1965504026993571e+00 }, { -0.6514978275214879e-04, 0.5433884414000304e+01, 0.1778464501440642e+00 }, { -0.6245521353308536e-04, 0.5173679587027357e+01, 0.7009468951450221e+00 }, { 0.6236351497568400e-04, 0.2945351887895920e+01, 0.7800595802619547e+00 }, { -0.5211914123734037e-04, 0.2695210857999389e+00, 0.7996806601721539e+00 }, { 0.5087526477014214e-04, 0.2602924251114628e+01, 0.1086071415298450e+01 }, { 0.5058590687048317e-04, 0.4324378693848082e+01, 0.8787933452890865e+00 }, { -0.4813389965573155e-04, 0.8222280980834551e-01, 0.2170886099644629e+00 }, { -0.4301007833478336e-04, 0.1648547891752100e+01, 0.8984144251992857e+00 }, { 0.4104292740965665e-04, 0.5703405499800243e+01, 0.9775271103162182e+00 }, { 0.3665390355309391e-04, 0.3981951057066789e+01, 0.1184805180325582e+01 }, { -0.3538628961664771e-04, 0.3027574697704266e+01, 0.9971481902264174e+00 }, { 0.3326628366799721e-04, 0.7992469985728281e+00, 0.1076260875343350e+01 }, { -0.2902403206479552e-04, 0.4406601503656427e+01, 0.1095881955253549e+01 }, { 0.2693554901487583e-04, 0.2178273804524990e+01, 0.1174994640370482e+01 }, { 0.2669007886238697e-04, 0.6038255607411246e+01, 0.3940179327536207e+00 }, { 0.2640617243698899e-04, 0.5360977863018951e+01, 0.1283538945352713e+01 }, { -0.2373722745643357e-04, 0.5785628309608589e+01, 0.1194615720280681e+01 }, { 0.2176062809432465e-04, 0.3557300610477151e+01, 0.1273728405397614e+01 }, { -0.1934646504415605e-04, 0.8814698083811701e+00, 0.1293349485307813e+01 }, { 0.1897373895483440e-04, 0.4568193617915357e+00, 0.1382272710379845e+01 }, { 0.1754329413716687e-04, 0.4936327416429316e+01, 0.1372462170424745e+01 }, { 0.1572430747504168e-04, 0.2235905228301728e+01, 0.1983846574091700e+00 }, { -0.1571827863857085e-04, 0.2260496614333335e+01, 0.1392083250334945e+01 }, { -0.1539945531353985e-04, 0.1461249615760508e+01, 0.3158223749915947e+00 }, { 0.1410585893877412e-04, 0.3216891520189780e-01, 0.1471195935451877e+01 }, { 0.1357189445488529e-04, 0.1835846167743697e+01, 0.1481006475406977e+01 }, { -0.1273330553828309e-04, 0.3639523420285497e+01, 0.1490817015362076e+01 }, { 0.1163556995976533e-04, 0.6045833136581537e+01, 0.6715152752797231e+00 }, { 0.1139577901854967e-04, 0.4666806330629374e+01, 0.5727815102525914e+00 }, { 0.1139366110710306e-04, 0.1141674635354119e+01, 0.7702490403068549e+00 }, { 0.1135306132914049e-04, 0.4659228801459085e+01, 0.2952841677264889e+00 }, { 0.1131587409293219e-04, 0.1411195721154059e+01, 0.1569929700479009e+01 }, { 0.1085425461534599e-04, 0.2520701441306281e+01, 0.8689828053339868e+00 }, { -0.1056787968358008e-04, 0.5297259127728866e+00, 0.2765802151711960e+00 }, { 0.1037117124427068e-04, 0.3287779524677212e+01, 0.4740477452254596e+00 }, { -0.1027660284731680e-04, 0.5018550226237658e+01, 0.1589550780389208e+01 }, { 0.1027273355964679e-04, 0.4322279757599272e+00, 0.1885741174540704e+00 }, { 0.1006767559393374e-04, 0.3899728247258444e+01, 0.9677165703611184e+00 }, { 0.9633989740567134e-05, 0.3214872973695859e+01, 0.1579740240434109e+01 }, { 0.9178075378506732e-05, 0.5278755053210607e+01, 0.1066450335388250e+01 }, { 0.9065206170156284e-05, 0.2790222527106221e+01, 0.1668663465506141e+01 }, { 0.8851132878153258e-05, 0.3614932034253890e+01, 0.2971184224363018e+00 }, { 0.8253549910000110e-05, 0.3745965519831884e+00, 0.1165184100415382e+01 }, { -0.8257707350863237e-05, 0.1143917250102398e+00, 0.1688284545416340e+01 }, { 0.7905521775023910e-05, 0.1811254781712090e+01, 0.2873078824812022e+00 }, { -0.7853735166683912e-05, 0.5083879248048722e+01, 0.2063609426544568e+00 }, { 0.7341396041786271e-05, 0.1753623357935350e+01, 0.1263917865442514e+01 }, { 0.7228880718926971e-05, 0.4169249333058383e+01, 0.1767397230533273e+01 }, { 0.6764635964795921e-05, 0.4593899779648020e+01, 0.1678474005461240e+01 }, { -0.6615254376434763e-05, 0.1493418530962401e+01, 0.1787018310443472e+01 }, { 0.6543758079294575e-05, 0.3452225144293904e+01, 0.9082249651543854e+00 }, { 0.6469301087553129e-05, 0.3132650163887515e+01, 0.1362651630469646e+01 }, { 0.6431124552019571e-05, 0.4831251950246065e+01, 0.1006958730181517e+01 }, { 0.6326716714869053e-05, 0.2073198338341740e+01, 0.8094912001272536e+00 }, { -0.6344479273710200e-05, 0.2855551548917284e+01, 0.2854736277713893e+00 }, { 0.6126061421202252e-05, 0.6210278756198226e+01, 0.1105692495208649e+01 }, { 0.5748353093941175e-05, 0.5548276139010548e+01, 0.1866130995560404e+01 }, { 0.5708428891129938e-05, 0.1306120254970812e+01, 0.1204426260235781e+01 }, { 0.5753474696726435e-05, 0.3190281587664252e+01, 0.3860416475083339e+00 }, { 0.5648928770703093e-05, 0.6941715323895785e+00, 0.7107574351001218e+00 }, { 0.5649105509135010e-05, 0.4511676969839675e+01, 0.1461385395496778e+01 }, { 0.5432340482357107e-05, 0.1908752718725049e+01, 0.3753139801983278e+00 }, { 0.5352373966360052e-05, 0.4993958840206052e+01, 0.3958521874634336e+00 }, { 0.5250152718378343e-05, 0.1134097106183830e+01, 0.4927516977807525e+00 }, { -0.5276359293355092e-05, 0.2872445336914567e+01, 0.1885752075470604e+01 }, { 0.5229887464078713e-05, 0.2685147060922970e+01, 0.1303160025262913e+01 }, { 0.4890118052517932e-05, 0.5890703775791840e+01, 0.1560119160523909e+01 }, { 0.4723632226316384e-05, 0.4064173866875135e+01, 0.1401893790290044e+01 }, { 0.4693369092482988e-05, 0.5972926585600182e+01, 0.1777207770488372e+01 }, { 0.4561946954009516e-05, 0.6441176377831290e+00, 0.1964864760587536e+01 }, { -0.4420710568728507e-05, 0.5009233967410666e+01, 0.2667696752160964e+00 }, { 0.4337634584565960e-05, 0.5598330033616995e+01, 0.6120236700729901e+00 }, { -0.4380976601809811e-05, 0.3630207161458504e+01, 0.1680359101889646e+00 }, { 0.4260384871171156e-05, 0.9865452745644178e+00, 0.1658852925551041e+01 }, { 0.4289012976116846e-05, 0.4569308393616414e+01, 0.4847754125354657e+00 }, { 0.4220548662286636e-05, 0.5443200672827300e+01, 0.1500627555317176e+01 }, { -0.4199363160735397e-05, 0.4251472142866728e+01, 0.1984485840497735e+01 }, { 0.3732023312137390e-05, 0.5390421715998777e+00, 0.1599361320344308e+01 }, { 0.3635875031439811e-05, 0.2023144443735291e+01, 0.2063598525614668e+01 }, { 0.3406532781873487e-05, 0.8980033897863482e-01, 0.4945859524905654e+00 }, { -0.3500526370624341e-05, 0.4234578354869447e+01, 0.3842073927985210e+00 }, { 0.3455891490801950e-05, 0.5948335199568577e+01, 0.5835091775625976e+00 }, { -0.2230818670346390e-03, 0.5533048146779580e+01, 0.5839811452565560e-03 }, { 0.1753962398021800e-04, 0.2721579555220420e+01, 0.5839811452565560e-03 }, { -0.2328181620162680e-04, 0.1648225206082800e+01, 0.2952860072513110e-02 }, { -0.1600410709697660e-04, 0.2171160129907190e+01, 0.2035764949513110e-02 }, { -0.3450615143245680e-05, 0.2694095053731580e+01, 0.1118669826513110e-02 }, { -0.2988889508569460e-03, 0.1971442394820420e+01, 0.1167962290513110e-02 }, { -0.1367821711727360e-04, 0.4782910986379580e+01, 0.1167962290513110e-02 }, { 0.1184653210332360e-04, 0.1971481213000000e+01, 0.1167962290513110e-02 }, { 0.1288836483864210e-04, 0.1337860308957420e+01, 0.1281578356513110e-02 }, { 0.3704937010630530e-05, 0.5359801191509000e+01, 0.1192598652513110e-02 }, { -0.4092616660610000e-04, 0.1221305234420420e+01, 0.1751943435769670e-02 }, { 0.1339823501057820e-04, 0.2148463129341690e+01, 0.1095544904247980e+01 }, { 0.7254032016403240e-05, 0.4324969183604490e+01, 0.2000408834733950e+01 }, { 0.1460196299297440e-04, 0.9654256497292940e+00, 0.2962012605910000e+00 }, { 0.3460035905216260e-05, 0.1488360573553680e+01, 0.2952841654680000e+00 }, { -0.1024878235180840e-04, 0.2826260933757870e+00, 0.5894496611094870e+00 } }; static const int NBTZ = 195; static double Z[NBTZ][3] = { { 0.1030661479148230e+00, 0.3382691062696734e+01, -0.8924811235147779e-03 }, { 0.2448184191185018e-01, 0.2860542679094136e+01, 0.2464623139167320e-04 }, { -0.2500610695618523e-02, 0.5186368315238534e+01, 0.8918058831584894e-02 }, { -0.1653120911968409e-02, 0.1579013810154933e+01, -0.1070302107861445e-01 }, { -0.1121964769453605e-02, 0.4761717868648896e+01, 0.9784128390361700e-01 }, { 0.7518101576911162e-03, 0.2003664256744571e+01, -0.9962624615064656e-01 }, { 0.2580134073493171e-03, 0.3807341509286372e+01, -0.8981570619554689e-01 }, { -0.1702244907149874e-03, 0.1999870042027707e+00, -0.1094367861057462e+00 }, { -0.1630491456609473e-03, 0.2822098140111162e+00, 0.1076518238587167e+00 }, { 0.1502092233208532e-03, 0.2958040616107096e+01, 0.8803074394851733e-01 }, { 0.1080722389283692e-03, 0.4664219931635937e+01, 0.9835186186491344e-02 }, { 0.8563197359093362e-04, 0.3904839446299331e+01, -0.1809608478421229e-02 }, { -0.7641879996400636e-04, 0.5708516698841132e+01, 0.8000931476678443e-02 }, { 0.6410167941575658e-04, 0.4025644203338189e+01, -0.1006097173943266e-02 }, { -0.6379700394998453e-04, 0.2739737922055278e+01, -0.7788650730862894e-03 }, { -0.3738690787954837e-04, 0.7068602606007541e+00, 0.1872859878668457e-01 }, { 0.3177451875567787e-04, 0.4239569485046299e+01, 0.9875841125852346e-01 }, { 0.3067833613233151e-04, 0.2101162193757531e+01, -0.1162014843352090e-01 }, { 0.2732958451060629e-04, 0.4346330094694096e+01, 0.6652490226578010e-03 }, { 0.2559468055750869e-04, 0.5611018761828172e+01, -0.8000516624044722e-01 }, { 0.2024562165367701e-04, 0.1154363363565295e+01, 0.7822020399341766e-01 }, { -0.2019380769983444e-04, 0.1105388645792460e+01, -0.9814608072250240e-03 }, { 0.2008621003222866e-04, 0.5659993479601007e+01, -0.8035014398045319e-03 }, { -0.1811127409136190e-04, 0.6058521864792713e+01, -0.2051356103371412e-01 }, { 0.1235958412008419e-04, 0.1056865426552336e+01, -0.9785893723707998e-02 }, { 0.1166603449799361e-04, 0.2510537513142555e+01, 0.2853913874178424e-01 }, { 0.1086995985899863e-04, 0.4254844612250913e+01, -0.3032410098881379e-01 }, { -0.1043068210990957e-04, 0.3285193125683774e+01, -0.8889857884064044e-01 }, { 0.8240909734627314e-05, 0.1976131306288398e-01, -0.9171174902330204e-03 }, { -0.8205019885615929e-05, 0.4624355051510043e+00, -0.8678447567965355e-03 }, { 0.7999837192197997e-05, 0.1481515873141974e+01, -0.9870911879574012e-01 }, { 0.7964077512935541e-05, 0.2085887066552917e+01, 0.1174623638138164e+00 }, { 0.7236960740797404e-05, 0.6043246737588099e+01, 0.1085689512136231e+00 }, { 0.7270826776415052e-05, 0.2419052030699373e+01, -0.2450211269687357e-02 }, { 0.6716695065274547e-05, 0.4329489892888969e+01, -0.9073283355045334e-01 }, { 0.6736625416531154e-05, 0.4868478478296693e+01, -0.2518783322486501e-03 }, { 0.5204438871550596e-05, 0.4679495058840550e+01, -0.1192473260608459e+00 }, { -0.5207388474970705e-05, 0.3703376954052640e+01, 0.7788650730862894e-03 }, { 0.5046334690770730e-05, 0.9360606695134774e+00, -0.1058940502818596e-01 }, { -0.5035619025711394e-05, 0.2221966950796389e+01, -0.1081663712904294e-01 }, { -0.4835154150013290e-05, 0.8043581976137135e+00, 0.1067346965038102e+00 }, { -0.4611548111165785e-05, 0.4543415174597078e+01, 0.9031674882013382e-02 }, { 0.4448389546383381e-05, 0.5829321455879990e+01, 0.8804442781156406e-02 }, { -0.4153052701221075e-05, 0.4222729283241172e+01, 0.7360328685412315e-02 }, { -0.3876996622725754e-05, 0.5633871418203075e+01, 0.6840966403831800e-01 }, { 0.3608611557983843e-05, 0.7221353878053680e+00, -0.1103539134606527e+00 }, { -0.3113267226101596e-05, 0.1131510707190392e+01, -0.7019462628534756e-01 }, { -0.2683799905115401e-05, 0.3480188999709693e+01, 0.8711361659361089e-01 }, { 0.2540204369555767e-05, 0.3889564319094716e+01, 0.1272729037689160e+00 }, { -0.2530442498805404e-05, 0.5283866252251494e+01, 0.9692415654871056e-01 }, { 0.2471798836623408e-05, 0.1847118769981568e+00, 0.1964572614159102e-01 }, { -0.2393809826972641e-05, 0.1229008644203352e+01, 0.1781147143177812e-01 }, { 0.2322013871583706e-05, 0.2875817806298750e+01, -0.1290578660159456e+00 }, { -0.2252919673323646e-05, 0.4142071548033339e+01, 0.1075231354139779e-01 }, { -0.2040203000028772e-05, 0.5088870378225574e+01, -0.7908803888554077e-01 }, { 0.1978250600690922e-05, 0.6150007347235896e+01, 0.1047578897775747e-01 }, { -0.1817067803131338e-05, 0.3062005171340829e+01, -0.2563827320115845e-02 }, { -0.1760241959810971e-05, 0.4426987829901929e+01, -0.2726735833327680e-02 }, { 0.1708248552006820e-05, 0.5584896700430240e+01, -0.1079200076232469e-01 }, { -0.1707373996050395e-05, 0.3856316227059207e+01, -0.1061404139490420e-01 }, { 0.1638819397704571e-05, 0.1180485424963227e+01, 0.9007038515295140e-02 }, { -0.1549153538011889e-05, 0.5536373481190116e+01, -0.1959643367880767e-01 }, { -0.1594635824936384e-05, 0.2909065898334261e+01, 0.8829079147874648e-02 }, { 0.1506189225615625e-05, 0.3404472044187888e+00, 0.7542287063680470e-03 }, { 0.1387762233686380e-05, 0.3503495819735592e+01, -0.8896981903681528e-04 }, { -0.1337929891212176e-05, 0.2542652842152295e+01, -0.9145290932441870e-02 }, { 0.1284796105929756e-05, 0.6133167145430770e+01, -0.8092229359535366e-01 }, { 0.1274183971113668e-05, 0.5347170429497385e+00, -0.8868766368801548e-02 }, { -0.1082213439029503e-05, 0.1988389129539956e+01, 0.2945626609669069e-01 }, { -0.1083761451668346e-05, 0.1676511747167893e+01, 0.7730307663851121e-01 }, { 0.1074660210279234e-05, 0.2974849412157301e+00, -0.2143068838862057e-01 }, { -0.1060143973086585e-05, 0.4225525337655237e+01, -0.1382622818201617e-03 }, { -0.1050457836219505e-05, 0.1896903647096775e+01, -0.1533083914780906e-02 }, { 0.1016870649805557e-05, 0.2525812640347169e+01, -0.1005433735055530e+00 }, { 0.9272030248231280e-06, 0.4865682423882628e+01, 0.7246712634983826e-02 }, { 0.8522968078631408e-06, 0.3032685896745151e+01, 0.2762201138687778e-01 }, { -0.7513552848257232e-06, 0.4776992995853510e+01, -0.3124122834372025e-01 }, { -0.7452690477984808e-06, 0.2935187959732193e+01, -0.6038408633024787e-01 }, { -0.6901926058355343e-06, 0.2435892232504499e+01, 0.8894787130342378e-01 }, { 0.3778282825702326e-03, 0.6246374507924086e+00, -0.1983600111777784e+00 }, { -0.3775434250722031e-03, 0.6140744674601058e+01, 0.1965750489307488e+00 }, { -0.3597821116452316e-03, 0.2615612979325803e+01, 0.3940425789850124e+00 }, { -0.2927952161795262e-03, 0.1236586173373641e+01, 0.2953088139578806e+00 }, { 0.2216814079711899e-03, 0.5528795952019826e+01, -0.2970937762049101e+00 }, { 0.1403880753848180e-03, 0.4149769146067664e+01, -0.3958275412320419e+00 }, { 0.1282680047161120e-03, 0.2428314703334209e+01, -0.1885494712226787e+00 }, { -0.9843461962138636e-04, 0.5104145505430188e+01, -0.2081705511328780e+00 }, { 0.9302812855413870e-04, 0.2770742340115502e+01, -0.4945613062591737e+00 }, { 0.8608901766955960e-04, 0.1049287897382047e+01, -0.2872832362498105e+00 }, { -0.6976234551437248e-04, 0.3725118699478026e+01, -0.3069043161600098e+00 }, { 0.6394074317345045e-04, 0.5953446398609464e+01, -0.3860170012769422e+00 }, { 0.6387046194265387e-04, 0.1391715534163339e+01, -0.5932950712863055e+00 }, { -0.5338815029861825e-04, 0.2346091893525864e+01, -0.4056380811871416e+00 }, { 0.4908475624063901e-04, 0.4574419592657302e+01, -0.4847507663040740e+00 }, { 0.4811302148563021e-04, 0.3994639785277966e+01, 0.4927763440121442e+00 }, { 0.4486679433374308e-04, 0.1268872821117562e-01, -0.6920288363134373e+00 }, { -0.4178177074434045e-04, 0.9670650875737010e+00, -0.5043718462142733e+00 }, { -0.3880672848400252e-04, 0.8119357267840028e+00, 0.3842320390299127e+00 }, { 0.3819239194924841e-04, 0.3195392786705140e+01, -0.5834845313312059e+00 }, { -0.3553990230264197e-04, 0.5716094228011420e+01, 0.2854982740027810e+00 }, { 0.3415645857185234e-04, 0.5373666591230129e+01, 0.5915101090392759e+00 }, { 0.3339668674029588e-04, 0.4419290231867604e+01, 0.4038531189401121e+00 }, { -0.3301162776329309e-04, 0.5871223588801118e+01, -0.6031056112414052e+00 }, { 0.3180628253542403e-04, 0.4916847229438594e+01, -0.7907626013405691e+00 }, { 0.3003432659990370e-04, 0.1816365980752976e+01, -0.6822182963583376e+00 }, { 0.2729633446248457e-04, 0.1024890671898113e+00, -0.1974428838228719e+00 }, { -0.2629885713884026e-04, 0.4492196782848956e+01, -0.7018393762685369e+00 }, { 0.2473774782254921e-04, 0.3040263425915440e+01, 0.3051193539129803e+00 }, { -0.2417336169407593e-04, 0.4337067422059258e+01, 0.1867645089756491e+00 }, { 0.2384156418867662e-04, 0.4373391748008135e+00, -0.7809520613854695e+00 }, { 0.2259673699575893e-04, 0.3537820423486432e+01, -0.8894963663677009e+00 }, { -0.2109852115260203e-04, 0.3113169976896794e+01, -0.8005731412956687e+00 }, { 0.1902408812662748e-04, 0.5341497676028232e+01, -0.8796858264126013e+00 }, { 0.1706204149397460e-04, 0.4231991955876010e+01, -0.1787389312675790e+00 }, { -0.1698064243423227e-04, 0.1734143170944632e+01, -0.8993069063228005e+00 }, { 0.1679462249970688e-04, 0.2533390169517458e+01, 0.1769539690205495e+00 }, { 0.1603779600347512e-04, 0.2158793617534270e+01, -0.9882301313948326e+00 }, { 0.1519891681318009e-04, 0.3962470870076070e+01, -0.9784195914397330e+00 }, { 0.1379512640799549e-04, 0.2852965149923847e+01, -0.2774726962947108e+00 }, { -0.1366561535006994e-04, 0.3551163649924672e+00, -0.9980406713499322e+00 }, { 0.1279090832954947e-04, 0.4606588507859199e+01, 0.9864451691478030e+00 }, { 0.1243806749353366e-04, 0.3464913872505078e+01, 0.2161961288409481e+00 }, { 0.1225216491402911e-04, 0.3227561701907034e+01, 0.8877114041206713e+00 }, { 0.1225443721836814e-04, 0.2370683279557469e+01, 0.7880605117386331e+00 }, { -0.1221520345313342e-04, 0.2190962532736164e+01, 0.4829658040570445e+00 }, { 0.1213225148001182e-04, 0.2583444064123905e+01, -0.1077153356466865e+01 }, { 0.1198327722769453e-04, 0.1473938343971685e+01, -0.3762064613218426e+00 }, { 0.1135648805958188e-04, 0.7797668115821050e+00, -0.1086963896421964e+01 }, { -0.1098010740280340e-04, 0.5259274866219886e+01, -0.1096774436377064e+01 }, { 0.1069580937462716e-04, 0.9491153801952202e-01, -0.4749402263489743e+00 }, { 0.1067386083025773e-04, 0.5798317037819767e+01, 0.5025868839672437e+00 }, { 0.9693581297810074e-05, 0.5985615313811360e+01, 0.1085178934174935e+01 }, { 0.9678835539512692e-05, 0.1204417258171743e+01, -0.1175887121493997e+01 }, { 0.9562800946711422e-05, 0.4999070039246940e+01, -0.5736739913761062e+00 }, { 0.9468784690060410e-05, 0.1848534895954872e+01, 0.7889776390935395e+00 }, { -0.8797753682670658e-05, 0.3880248060267724e+01, -0.1195508201404196e+01 }, { 0.8599214007703230e-05, 0.5618596290998461e+01, 0.1974921762856553e+00 }, { 0.8485093197565512e-05, 0.3620043233294777e+01, -0.6724077564032379e+00 }, { 0.7994800633732257e-05, 0.5683925312809524e+01, -0.1185697661449096e+01 }, { 0.7702743188457386e-05, 0.6108575759399161e+01, -0.1274620886521128e+01 }, { 0.7473079103968928e-05, 0.2241016427342615e+01, -0.7711415214303697e+00 }, { 0.7388692911769633e-05, 0.3912416975469620e+01, 0.2756877340476813e+00 }, { 0.7144251731442444e-05, 0.1081456812583942e+01, 0.1183912699202067e+01 }, { -0.7043838984557596e-05, 0.2501221254315563e+01, -0.1294241966431328e+01 }, { 0.6782083637837408e-05, 0.1921441446936226e+01, -0.3167148561151095e+00 }, { 0.6750671838792509e-05, 0.5424146409840631e+00, -0.4154486211422413e+00 }, { 0.6651880335792781e-05, 0.3300468252888388e+01, -0.2179810910879777e+00 }, { 0.6570135525528793e-05, 0.5446573142211480e+01, -0.5141823861693731e+00 }, { 0.6551076448609189e-05, 0.8619896213904532e+00, -0.8698752864575016e+00 }, { 0.6445693456193227e-05, 0.4843940678457241e+01, 0.3149298938680800e+00 }, { 0.6221700343295405e-05, 0.4067546336259318e+01, -0.6129161511965049e+00 }, { -0.6210141308502555e-05, 0.4516788168880564e+01, 0.4918592166572376e+00 }, { 0.6128034935351225e-05, 0.4729548953446996e+01, -0.1373354651548260e+01 }, { 0.5752222076851271e-05, 0.2688519530307156e+01, -0.7116499162236366e+00 }, { 0.5720920731236437e-05, 0.5766148122617870e+01, -0.9686090514846332e+00 }, { 0.5708438487292833e-05, 0.4949016144640491e+01, 0.6804333341113080e+00 }, { -0.5618758010321190e-05, 0.1122194448363397e+01, -0.1392975731458459e+01 }, { 0.5586433308293342e-05, 0.4304898506857362e+01, -0.1284431426476228e+01 }, { 0.5455429436394752e-05, 0.2460483618536103e+01, 0.1282646464229199e+01 }, { 0.5234563142340540e-05, 0.1309492724354994e+01, -0.8103836812507684e+00 }, { 0.4976902542853610e-05, 0.4387121316665708e+01, -0.1067342816511765e+01 }, { 0.4951970227904307e-05, 0.1661236619963279e+01, 0.2063855888858485e+00 }, { -0.4950572722250481e-05, 0.4581997121827591e+01, -0.2072534237779716e+00 }, { 0.4864691847876214e-05, 0.3350522147494835e+01, -0.1472088416575392e+01 }, { 0.4711996026340074e-05, 0.6213651225582409e+01, -0.9091174462779002e+00 }, { 0.4647700174472706e-05, 0.5006647568417229e+01, -0.2961766488500037e+00 }, { -0.4463536929701217e-05, 0.6026352949590816e+01, -0.1491709496485591e+01 }, { 0.4423835447429758e-05, 0.3839510424488269e+01, 0.1381380229256330e+01 }, { 0.4297419749912965e-05, 0.3008094510713546e+01, -0.1166076581538897e+01 }, { 0.4206030088019200e-05, 0.4834624419630248e+01, -0.1007851211305032e+01 }, { -0.4097668847161432e-05, 0.2273185342544510e+01, 0.7000544140215073e+00 }, { 0.3894866749084315e-05, 0.4695080900027104e+00, 0.6902438740664076e+00 }, { 0.3842326107820616e-05, 0.1971495341542673e+01, -0.1570822181602524e+01 }, { 0.3843534248051829e-05, 0.2925871700905197e+01, -0.1383165191503360e+01 }, { 0.3724216491694377e-05, 0.3455597613678086e+01, -0.1106584976332164e+01 }, { 0.3699201962974299e-05, 0.1629067704761385e+01, -0.1264810346566029e+01 }, { -0.3538397263248576e-05, 0.4647326143638654e+01, -0.1590443261512723e+01 }, { 0.3531502882337352e-05, 0.5218537230440430e+01, 0.1480113994283462e+01 }, { 0.3397352921611207e-05, 0.7144377897710434e+00, 0.2962259413127871e+00 }, { -0.6917942470086600e-05, 0.1411763016727970e+01, -0.2060411181513110e-02 }, { -0.2954159247722890e-05, 0.8888280929035790e+00, -0.1143316058513110e-02 }, { 0.1283396500574140e-04, 0.3810125383210770e+01, 0.3084677457434440e-03 }, { -0.1541304650138550e-05, 0.4333060307035160e+01, -0.6086273772565560e-03 }, { -0.1632299947318510e-04, 0.2633068251148390e+01, -0.3084677457434440e-03 }, { 0.2885109484385860e-05, 0.2110133327324000e+01, 0.6086273772565560e-03 }, { -0.8365240462865090e-05, 0.5781567778031190e+01, 0.1476430036256560e-02 }, { 0.1927636081642950e-03, 0.5031430617631190e+01, 0.2060411181513110e-02 }, { 0.8231557260635240e-04, 0.5554365541455580e+01, 0.1143316058513110e-02 }, { 0.5173543661985320e-04, 0.5354647806368810e+01, 0.2755133995131110e-03 }, { 0.2832059006428450e-05, 0.4831712882544420e+01, 0.1192608522513110e-02 }, { 0.3269372364602020e-04, 0.4281293457231190e+01, 0.2644392326769670e-02 }, { 0.1186021515881310e-04, 0.4804228381055580e+01, 0.1727297203769670e-02 }, { 0.4042027917523730e-04, 0.4348631061277680e+01, 0.2953088117000000e+00 }, { 0.1108533869996140e-04, 0.2139088834397980e+00, 0.1390853715947980e+01 }, { 0.8801022040147010e-05, 0.4066004967901901e+01, -0.2941408494094870e+00 } }; static const int NBTZT = 61; static double ZT[NBTZT][3] = { { 0.4955243850983661e-02, 0.3221557438053959e+01, 0.0000000000000000e+00 }, { 0.5948511882002843e-02, 0.3864510578695415e+01, -0.1136160504284885e-03 }, { 0.1535891024624297e-02, 0.6141812995599688e+01, -0.2463636671824243e-04 }, { -0.1497345442720214e-03, 0.2900871546698053e+01, -0.1671346196601068e-02 }, { -0.4911846033201391e-04, 0.2378723163095456e+01, -0.7542188416946162e-03 }, { 0.2189031408512060e-04, 0.4386658962298012e+01, -0.1030743405334940e-02 }, { 0.1496627946379793e-04, 0.3543824687339509e+01, -0.1784962247029556e-02 }, { 0.1404188064697451e-04, 0.4704548799239854e+01, 0.8139193758498604e-02 }, { -0.1314294835383983e-04, 0.3342362195092817e+01, 0.8035113044779626e-03 }, { 0.8389523097875214e-05, 0.1097194294156252e+01, -0.1148188615170074e-01 }, { 0.7467530692297956e-05, 0.1856574779492858e+01, 0.1629085132118349e-03 }, { -0.4916203322979170e-05, 0.5243537384647577e+01, 0.9862014897670330e-01 }, { 0.4509531977488889e-05, 0.3021676303736911e+01, -0.8678348921231047e-03 }, { -0.4145588215282021e-05, 0.6235691297937791e+00, -0.1760325880311314e-02 }, { 0.3839542395242535e-05, 0.2485483772743252e+01, -0.9884738107756028e-01 }, { 0.3566024262476873e-05, 0.2060833326153614e+01, -0.9924156005528160e-02 }, { 0.3030592492776347e-05, 0.4279898352650216e+01, 0.9706241883053072e-01 }, { -0.2682452719829683e-05, 0.3743705821656556e+01, -0.9171273549064512e-03 }, { -0.2004460730134680e-05, 0.1521844740745890e+01, -0.1004051112237328e+00 }, { -0.1562250771899869e-05, 0.5347501939881310e+01, 0.8025577708070115e-02 }, { -0.1398643272650284e-05, 0.2499527920134314e+01, 0.4929246278334639e-04 }, { 0.1255563077270305e-05, 0.2699409054451362e+01, 0.9171273549064512e-03 }, { -0.1272802367749216e-05, 0.1014207461911818e+00, -0.8431985254048623e-03 }, { 0.1221711462471724e-05, 0.2250407446020733e+00, 0.1794973371359828e-01 }, { -0.1189056338328650e-05, 0.3325521993287691e+01, -0.9059457126863318e-01 }, { -0.1121833101144503e-05, 0.2476221100108415e+01, 0.8725187887543105e-01 }, { 0.1116583047991100e-05, 0.6083575605192015e+01, 0.1068729587856304e+00 }, { -0.8876506818660424e-06, 0.1740147434797708e+01, -0.1159550220212923e-01 }, { 0.8288384247459950e-06, 0.6001352795383670e+01, -0.1102156511788325e+00 }, { 0.8308837128254335e-06, 0.5750459105536549e+00, -0.1056475879679429e-01 }, { 0.7816180007614254e-06, 0.4507463719336871e+01, -0.2272321008569770e-03 }, { -0.7628434629767395e-06, 0.3439860132105777e+01, 0.8880960902160362e-01 }, { 0.7436509468905391e-06, 0.1188679776599435e+01, 0.1950746385977086e-01 }, { -0.7276927363562636e-06, 0.2571560736118137e+00, -0.1973469596062783e-01 }, { 0.7144299265706248e-06, 0.3807760720227052e+00, -0.9417637216246936e-03 }, { 0.6925549696724206e-06, 0.4182400415637256e+01, 0.9056321113405056e-02 }, { 0.6584378044173228e-06, 0.3423019930300651e+01, -0.2588473551507519e-02 }, { -0.6290271131270627e-06, 0.6190336214839812e+01, 0.8779796549764733e-02 }, { -0.5558619276909469e-06, 0.5576702348794032e+01, -0.2129242610680041e-01 }, { 0.5420684261778156e-06, 0.4600584244006122e+01, 0.9873376502713178e-01 }, { -0.4533375266393237e-06, 0.2582981709756212e+01, -0.1084128336043461e-01 }, { -0.4241248416918695e-06, 0.1842530632101796e+01, -0.9873376502713178e-01 }, { 0.4217192739334928e-06, 0.3757749969047618e+01, 0.9797954618543716e-01 }, { 0.4270467112203478e-06, 0.2427246382335581e+01, 0.8050214074788358e-02 }, { -0.4111285058745586e-06, 0.1417880185512158e+01, -0.9810539955099672e-02 }, { 0.3911603306295834e-06, 0.1538684942551017e+01, -0.9007028650621710e-02 }, { 0.3588448340600037e-06, 0.4289161025285053e+01, -0.8903684112246060e-01 }, { -0.3517973623230076e-06, 0.5619664611997091e+01, 0.8924909881882087e-03 }, { 0.3148398194156444e-05, 0.1106456966791090e+01, -0.1975811461046921e+00 }, { -0.2169784851229061e-05, 0.3393788834201592e+00, 0.1973539140038351e+00 }, { 0.1834573960516513e-05, 0.5658925158602377e+01, 0.1957961838576625e+00 }, { 0.1780425037193046e-05, 0.6010615468018507e+01, -0.2963149111318239e+00 }, { -0.9122789187630200e-05, 0.1250154422359160e+01, -0.1167962290513110e-02 }, { -0.2465654101797190e-04, 0.3971733977579580e+01, -0.5839811452565560e-03 }, { 0.2465654101797190e-04, 0.2471459656779580e+01, 0.5839811452565560e-03 }, { 0.9485688859717310e-05, 0.5943176372400000e+01, 0.5839811452565560e-03 }, { 0.3982965022125390e-05, 0.4559457126137000e+01, 0.1281578356513110e-02 }, { 0.3661001499550570e-05, 0.5193078030179580e+01, 0.1167962290513110e-02 }, { 0.1144957852083430e-05, 0.2298212701509000e+01, 0.1192598652513110e-02 }, { -0.1609132692775700e-03, 0.5193039212000000e+01, 0.1167962290513110e-02 }, { -0.2213337603547740e-04, 0.4442902051600000e+01, 0.1751943435769670e-02 } }; #endif xplanet-1.3.0/src/libephemeris/libmoons/earth.cpp0000644000175000017500000002030610411416255016777 00000000000000#include #include #include using namespace std; #include "elp82b.h" #include "xpUtil.h" void moon(const double jd, double &X, double &Y, double &Z) { const double sec_to_rad = deg_to_rad / 3600; double R[3] = { 0, 0, 0 }; // w[0] is the mean mean longitude of the moon // w[1] is the mean longitude of the lunar perigee // w[2] is the mean longitude of the lunar ascending node // Units are seconds of arc double w[3][5]; w[0][0] = (3600 * 218. + 60 * 18. + 59.95571); w[1][0] = (3600 * 83. + 60 * 21. + 11.67475); w[2][0] = (3600 * 125. + 60 * 2. + 40.39816); w[0][1] = 1732559343.73604; w[1][1] = 14643420.2632; w[2][1] = -6967919.3622; w[0][2] = -5.8883; w[1][2] = -38.2776; w[2][2] = 6.3622; w[0][3] = 0.6604e-2; w[1][3] = -0.45047e-1; w[2][3] = 0.7625e-2; w[0][4] = -0.3169e-4; w[1][4] = 0.21301e-3; w[2][4] = -0.3586e-4; // T and omega are angles of the inertial mean ecliptic of J2000 // referred to the inertial mean equinox of J2000 double T[5]; T[0] = (3600 * 100. + 60 * 27. + 59.22059); T[1] = 129597742.2758; T[2] = -0.0202; T[3] = 0.9e-5; T[4] = 0.15e-6; double omega[5]; omega[0] = (3600 * 102. + 60 * 56. + 14.42753); omega[1] = 1161.2283; omega[2] = 0.5327; omega[3] = -0.138e-3; omega[4] = 0; // precession between J2000 and the date double preces[5]; preces[0] = 0; preces[1] = 5029.0966; preces[2] = 1.1120; preces[3] = .77e-4; preces[4] = -.2353e-4; // planetary longitudes in J2000 double plon[8][2]; plon[0][0] = (3600 * 252. + 60 * 15. + 3.25986); plon[1][0] = (3600 * 181. + 60 * 58. + 47.28305); plon[2][0] = T[0]; plon[3][0] = (3600 * 355. + 60 * 25. + 59.78866); plon[4][0] = (3600 * 34. + 60 * 21. + 5.34212); plon[5][0] = (3600 * 50. + 60 * 4. + 38.89694); plon[6][0] = (3600 * 314. + 60 * 3. + 18.01841); plon[7][0] = (3600 * 304. + 60 * 20. + 55.19575); plon[0][1] = 538101628.68898; plon[1][1] = 210664136.43355; plon[2][1] = T[1]; plon[3][1] = 68905077.59284; plon[4][1] = 10925660.42861; plon[5][1] = 4399609.65932; plon[6][1] = 1542481.19393; plon[7][1] = 786550.32074; // Convert to radians for (int i = 0; i < 8; i++) { plon[i][0] *= sec_to_rad; plon[i][1] *= sec_to_rad; } // Corrections of the constants (fit to DE200/LE200) double delnu = 0.55604 / w[0][1]; double dele = 0.01789 * sec_to_rad; double delg = -0.08066 * sec_to_rad; double delnp = -0.06424 / w[0][1]; double delep = -0.12879 * sec_to_rad; // Delaunay's arguments double del[4][5]; for (int i = 0; i < 5; i++) { del[0][i] = w[0][i] - T[i]; del[1][i] = T[i] - omega[i]; del[2][i] = w[0][i] - w[1][i]; del[3][i] = w[0][i] - w[2][i]; for (int j = 0; j < 4; j++) del[j][i] *= sec_to_rad; } del[0][0] += M_PI; double zeta[2]; zeta[0] = w[0][0] * sec_to_rad; zeta[1] = (w[0][1] + preces[1]) * sec_to_rad; // precession matrix double p[5], q[5]; p[0] = 0.10180391e-4; p[1] = 0.47020439e-6; p[2] = -0.5417367e-9; p[3] = -0.2507948e-11; p[4] = 0.463486e-14; q[0] = -0.113469002e-3; q[1] = 0.12372674e-6; q[2] = 0.1265417e-8; q[3] = -0.1371808e-11; q[4] = -0.320334e-14; double t[5]; t[0] = 1; t[1] = (jd - 2451545.0) / 36525; t[2] = t[1] * t[1]; t[3] = t[2] * t[1]; t[4] = t[2] * t[2]; double ath = 384747.9806743165; double a0 = 384747.9806448954; double am = 0.074801329518; double alfa = 0.002571881335; double dtasm = 2 * alfa / (3 * am); // Main problem for (int i = 1; i < 4; i++) { int iv = ((i - 1) % 3); const int *ilu = ILU[i-1]; const double *p_coef = COEF[i-1]; for (int ii = 0; ii < NUM[i-1]; ii++) { if (ii > 0) { ilu += 4; p_coef += 7; } double coef[7]; for (int j = 0; j < 7; j++) coef[j] = p_coef[j]; double x = coef[0]; double tgv = coef[1] + dtasm * coef[5]; if (i == 3) coef[0] -= 2 * coef[0] * delnu / 3; x = (coef[0] + tgv * (delnp - am * delnu) + coef[2] * delg + coef[3] * dele + coef[4] * delep); double y = 0; for (int k = 0; k < 5; k++) { for (int j = 0; j < 4; j++) { y += ilu[j] * del[j][k] * t[k]; } } if (i == 3) y += M_PI_2; y = fmod(y, 2 * M_PI); R[iv] += x * sin(y); } } // Figures - Tides - Relativity - Solar eccentricity for (int i = 4; i < 37; i++) { if (i > 9 && i < 22) continue; int iv = ((i - 1) % 3); const int *ilu = ILU[i-1]; const int *p_iz = IZ[i-1]; const double *p_pha = PHA[i-1]; const double *p_x = XX[i-1]; for (int ii = 0; ii < NUM[i-1]; ii++) { if (ii > 0) { ilu += 4; p_iz++; p_pha++; p_x++; } int iz = *p_iz; double pha = *p_pha; double x = *p_x; if ((i > 6 && i < 10) || (i > 24 && i < 28)) x *= t[1]; if (i > 33 && i < 37) x *= t[2]; double y = pha * deg_to_rad; for (int k = 0; k < 2; k++) { y += iz * zeta[k] * t[k]; for (int l = 0; l < 4; l++) { y += ilu[l] * del[l][k] * t[k]; } } y = fmod(y, 2*M_PI); R[iv] += x * sin(y); } } // Planetary perturbations for (int i = 10; i < 22; i++) { int iv = ((i - 1) % 3); const int *ipla = IPLA[i-1]; const double *p_pha = PHA[i-1]; const double *p_x = XX[i-1]; for (int ii = 0; ii < NUM[i-1]; ii++) { if (ii > 0) { ipla += 11; p_pha++; p_x++; } double pha = *p_pha; double x = *p_x; if ((i > 12 && i < 16) || (i > 18 && i < 22)) x *= t[1]; double y = pha * deg_to_rad; if (i < 16) { for (int k = 0; k < 2; k++) { y += (ipla[8] * del[0][k] + ipla[9] * del[2][k] + ipla[10] * del[3][k]) * t[k]; for (int l = 0; l < 8; l++) { y += ipla[l] * plon[l][k] * t[k]; } } } else { for (int k = 0; k < 2; k++) { for (int l = 0; l < 4; l++) y += ipla[l+7] * del[l][k] * t[k]; for (int l = 0; l < 7; l++) { y += ipla[l] * plon[l][k] * t[k]; } } } y = fmod(y, 2*M_PI); R[iv] += x * sin(y); } } // Change of coordinates for (int i = 0; i < 5; i++) R[0] += w[0][i] * t[i]; R[0] *= sec_to_rad; R[1] *= sec_to_rad; R[2] *= a0/ath; double x1 = R[2] * cos(R[1]); double x2 = x1 * sin(R[0]); x1 *= cos(R[0]); double x3 = R[2] * sin(R[1]); double pw = 0; double qw = 0; for (int i = 0; i < 5; i++) { pw += p[i] * t[i]; qw += q[i] * t[i]; } pw *= t[1]; qw *= t[1]; double ra = 2 * sqrt(1 - pw * pw - qw * qw); double pwqw = 2 * pw * qw; double pw2 = 1 - 2 * pw * pw; double qw2 = 1 - 2 * qw * qw; pw *= ra; qw *= ra; R[0] = pw2*x1+pwqw*x2+pw*x3; R[1] = pwqw*x1+qw2*x2-qw*x3; R[2] = -pw*x1+qw*x2+(pw2+qw2-1)*x3; X = R[0] / AU_to_km; Y = R[1] / AU_to_km; Z = R[2] / AU_to_km; // rotate to earth equator J2000 const double eps = 23.4392911 * deg_to_rad; rotateX(X, Y, Z, -eps); } xplanet-1.3.0/src/libephemeris/libmoons/pluto.cpp0000644000175000017500000000215410411416255017040 00000000000000#include #include #include using namespace std; /* Ephemeris for Charon is from Tholen, D.J. (1985) Astron. J., 90, 2353-2359 */ #include "body.h" #include "xpUtil.h" void plusat(const double jd, double &X, double &Y, double &Z) { double td = jd - 2445000.5; // Julian days from // reference date const double a = 19130 / AU_to_km; // semimajor axis (km) const double n = 360 / 6.38723; // mean motion (degrees/day) const double E = (78.6 + n * td) * deg_to_rad; // eccentric anomaly const double i = 94.3 * deg_to_rad; // inclination of orbit const double o = 223.7 * deg_to_rad; // longitude of ascending node // rectangular coordinates on the orbit plane, x-axis is toward // pericenter X = a * cos(E); Y = a * sin(E); Z = 0; // rotate towards Earth equator B1950 rotateX(X, Y, Z, -i); // rotate to vernal equinox rotateZ(X, Y, Z, -o); // precess to J2000 precessB1950J2000(X, Y, Z); } xplanet-1.3.0/src/libephemeris/libmoons/Makefile.in0000644000175000017500000003417611731356514017256 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libephemeris/libmoons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libmoons_a_LIBADD = am_libmoons_a_OBJECTS = earth.$(OBJEXT) mars.$(OBJEXT) \ jupiter.$(OBJEXT) saturn.$(OBJEXT) uranus.$(OBJEXT) \ neptune.$(OBJEXT) pluto.$(OBJEXT) libmoons_a_OBJECTS = $(am_libmoons_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libmoons_a_SOURCES) DIST_SOURCES = $(libmoons_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libmoons.a AM_CPPFLAGS = -I@top_srcdir@/src @USE_AR_FALSE@libmoons_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libmoons_a_AR = $(AR) cru libmoons_a_SOURCES = elp82b.h earth.cpp mars.cpp jupiter.cpp libmoons.h tass17.h saturn.cpp uranus.cpp neptune.cpp pluto.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libephemeris/libmoons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libephemeris/libmoons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmoons.a: $(libmoons_a_OBJECTS) $(libmoons_a_DEPENDENCIES) -rm -f libmoons.a $(libmoons_a_AR) libmoons.a $(libmoons_a_OBJECTS) $(libmoons_a_LIBADD) $(RANLIB) libmoons.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jupiter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/neptune.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pluto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saturn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uranus.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libephemeris/libmoons/uranus.cpp0000644000175000017500000003765410411416255017227 00000000000000#include using namespace std; #include "body.h" #include "xpUtil.h" /* GUST86 ephemeris is described in Laskar & Jacobson, Astron. Astrophys. 188, 212-224 (1987) Much of this code is translated from the GUST86 FORTRAN code which is at ftp://ftp.bdl.fr/pub/ephem/satel/gust86 */ static double solveKepler(const double L, const double K, const double H) { if (L == 0) return(0); double F = L; double E; double F0 = L; double E0 = fabs(L); const double eps = 1e-16; for (int i = 0; i < 20; i++) { const double SF = sin(F0); const double CF = cos(F0); const double FF0 = F0 - K*SF + H*CF - L; const double FPF0 = 1 - K*CF - H*SF; double SDIR = FF0/FPF0; double denom = 1; while (1) { F = F0 - SDIR / denom; E = fabs(F-F0); if (E <= E0) break; denom *= 2; } if (denom == 1 && E <= eps && FF0 <= eps) return(F); F0 = F; E0 = E; } return(F); } static void calcRectangular(const double N, const double L, const double K, const double H, const double Q, const double P, const double GMS, double &X, double &Y, double &Z) { // Calculate the semi-major axis const double A = pow(GMS/(N*N), 1./3.) / AU_to_km; const double PHI = sqrt(1 - K*K - H*H); const double PSI = 1/(1+PHI); const double RKI = sqrt(1 - Q*Q - P*P); const double F = solveKepler(L, K, H); const double SF = sin(F); const double CF = cos(F); const double RLMF = -K*SF + H*CF; double rot[3][2]; rot[0][0] = 1 - 2*P*P; rot[0][1] = 2*P*Q; rot[1][0] = 2*P*Q; rot[1][1] = 1 - 2*Q*Q; rot[2][0] = -2*P*RKI; rot[2][1] = 2*Q*RKI; double TX[2]; TX[0] = A*(CF - PSI * H * RLMF - K); TX[1] = A*(SF + PSI * K * RLMF - H); X = rot[0][0] * TX[0] + rot[0][1] * TX[1]; Y = rot[1][0] * TX[0] + rot[1][1] * TX[1]; Z = rot[2][0] * TX[0] + rot[2][1] * TX[1]; } // convert UME50* coordinates to EME50 static void UranicentricToGeocentricEquatorial(double &X, double &Y, double &Z) { const double alpha0 = 76.6067 * deg_to_rad; const double delta0 = 15.0322 * deg_to_rad; const double sa = sin(alpha0); const double sd = sin(delta0); const double ca = cos(alpha0); const double cd = cos(delta0); const double oldX = X; const double oldY = Y; const double oldZ = Z; X = sa * oldX + ca * sd * oldY + ca * cd * oldZ; Y = -ca * oldX + sa * sd * oldY + sa * cd * oldZ; Z = -cd * oldY + sd * oldZ; } void urasat(const double jd, const body b, double &X, double &Y, double &Z) { const double t = jd - 2444239.5; const double tcen = t/365.25; const double N1 = fmod(4.445190550 * t - 0.238051, TWO_PI); const double N2 = fmod(2.492952519 * t + 3.098046, TWO_PI); const double N3 = fmod(1.516148111 * t + 2.285402, TWO_PI); const double N4 = fmod(0.721718509 * t + 0.856359, TWO_PI); const double N5 = fmod(0.466692120 * t - 0.915592, TWO_PI); const double E1 = (20.082 * deg_to_rad * tcen + 0.611392); const double E2 = ( 6.217 * deg_to_rad * tcen + 2.408974); const double E3 = ( 2.865 * deg_to_rad * tcen + 2.067774); const double E4 = ( 2.078 * deg_to_rad * tcen + 0.735131); const double E5 = ( 0.386 * deg_to_rad * tcen + 0.426767); const double I1 = (-20.309 * deg_to_rad * tcen + 5.702313); const double I2 = ( -6.288 * deg_to_rad * tcen + 0.395757); const double I3 = ( -2.836 * deg_to_rad * tcen + 0.589326); const double I4 = ( -1.843 * deg_to_rad * tcen + 1.746237); const double I5 = ( -0.259 * deg_to_rad * tcen + 4.206896); const double GM1 = 4.4; const double GM2 = 86.1; const double GM3 = 84.0; const double GM4 = 230.0; const double GM5 = 200.0; const double GMU = 5794554.5 - (GM1 + GM2 + GM3 + GM4 + GM5); double N = 0, L = 0, K = 0, H = 0, Q = 0, P = 0, GMS = 0; switch (b) { case MIRANDA: N = (4443522.67 - 34.92 * cos(N1 - 3*N2 + 2*N3) + 8.47 * cos(2*N1 - 6*N2 + 4*N3) + 1.31 * cos(3*N1 - 9*N2 + 6*N3) - 52.28 * cos(N1 - N2) -136.65 * cos(2*N1 - 2*N2)) * 1e-6; L = (-238051.58 + 4445190.55 * t + 25472.17 * sin(N1 - 3*N2 + 2*N3) - 3088.31 * sin(2*N1 - 6*N2 + 4*N3) - 318.10 * sin(3*N1 - 9*N2 + 6*N3) - 37.49 * sin(4*N1 - 12*N2 + 8*N3) - 57.85 * sin(N1 - N2) - 62.32 * sin(2*N1 - 2*N2) - 27.95 * sin(3*N1 - 3*N2)) * 1e-6; K = (1312.38 * cos(E1) + 71.81 * cos(E2) + 69.77 * cos(E3) + 6.75 * cos(E4) + 6.27 * cos(E5) - 123.31 * cos(-N1 + 2*N2) + 39.52 * cos(-2*N1 + 3*N2) + 194.10 * cos(N1)) * 1e-6; H = (1312.38 * sin(E1) + 71.81 * sin(E2) + 69.77 * sin(E3) + 6.75 * sin(E4) + 6.27 * sin(E5) - 123.31 * sin(-N1 + 2*N2) + 39.52 * sin(-2*N1 + 3*N2) + 194.10 * sin(N1)) * 1e-6; Q = (37871.71 * cos(I1) + 27.01 * cos(I2) + 30.76 * cos(I3) + 12.18 * cos(I4) + 5.37 * cos(I5)) * 1e-6; P = (37871.71 * sin(I1) + 27.01 * sin(I2) + 30.76 * sin(I3) + 12.18 * sin(I4) + 5.37 * sin(I5)) * 1e-6; GMS = GMU + GM1; break; case ARIEL: N = (2492542.57 + 2.55 * cos(N1 - 3*N2 + 2*N3) - 42.16 * cos(N2 - N3) - 102.56 * cos(2*N2 - 2*N3)) * 1e-6; L = (3098046.41 + 2492952.52 * t - 1860.50 * sin(N1 - 3*N2 + 2*N3) + 219.99 * sin(2*N1 - 6*N2 + 4*N3) + 23.10 * sin(3*N1 - 9*N2 + 6*N3) + 4.30 * sin(4*N1 - 12*N2 + 8*N3) - 90.11 * sin(N2 - N3) - 91.07 * sin(2*(N2 - N3)) - 42.75 * sin(3*(N2 - N3)) - 16.49 * sin(2*(N2 - N4))) * 1e-6; K = (- 3.35 * cos(E1) + 1187.63 * cos(E2) + 861.59 * cos(E3) + 71.50 * cos(E4) + 55.59 * cos(E5) - 84.60 * cos(-N2 + 2*N3) + 91.81 * cos(-2*N2 + 3*N3) + 20.03 * cos(-N2 + 2*N4) + 89.77 * cos(N2)) * 1e-6; H = (- 3.35 * sin(E1) + 1187.63 * sin(E2) + 861.59 * sin(E3) + 71.50 * sin(E4) + 55.59 * sin(E5) - 84.60 * sin(-N2 + 2*N3) + 91.81 * sin(-2*N2 + 3*N3) + 20.03 * sin(-N2 + 2*N4) + 89.77 * sin(N2)) * 1e-6; Q = (- 121.75 * cos(I1) + 358.25 * cos(I2) + 290.08 * cos(I3) + 97.78 * cos(I4) + 33.97 * cos(I5)) * 1e-6; P = (- 121.75 * sin(I1) + 358.25 * sin(I2) + 290.08 * sin(I3) + 97.78 * sin(I4) + 33.97 * sin(I5)) * 1e-6; GMS = GMU + GM2; break; case UMBRIEL: N = (1515954.90 + 9.74 * cos(N3 - 2*N4 + E3) - 106.00 * cos(N2 - N3) + 54.16 * cos(2*(N2 - N3)) - 23.59 * cos(N3 - N4) - 70.70 * cos(2*(N3 - N4)) - 36.28 * cos(3*(N3 - N4))) * 1e-6; L = (2285401.69 + 1516148.11 * t + 660.57 * sin( N1 - 3*N2 + 2*N3) - 76.51 * sin(2*N1 - 6*N2 + 4*N3) - 8.96 * sin(3*N1 - 9*N2 + 6*N3) - 2.53 * sin(4*N1 - 12*N2 + 8*N3) - 52.91 * sin(N3 - 4*N4 + 3*N5) - 7.34 * sin(N3 - 2*N4 + E5) - 1.83 * sin(N3 - 2*N4 + E4) + 147.91 * sin(N3 - 2*N4 + E3) - 7.77 * sin(N3 - 2*N4 + E2) + 97.76 * sin(N2 - N3) + 73.13 * sin(2*(N2 - N3)) + 34.71 * sin(3*(N2 - N3)) + 18.89 * sin(4*(N2 - N3)) - 67.89 * sin(N3 - N4) - 82.86 * sin(2*(N3 - N4)) - 33.81 * sin(3*(N3 - N4)) - 15.79 * sin(4*(N3 - N4)) - 10.21 * sin(N3 - N5) - 17.08 * sin(2*(N3 - N5))) * 1e-6; K = (- 0.21 * cos(E1) - 227.95 * cos(E2) + 3904.69 * cos(E3) + 309.17 * cos(E4) + 221.92 * cos(E5) + 29.34 * cos(N2) + 26.20 * cos(N3) + 51.19 * cos(-N2+2*N3) - 103.86 * cos(-2*N2+3*N3) - 27.16 * cos(-3*N2+4*N3) - 16.22 * cos(N4) + 549.23 * cos(-N3 + 2*N4) + 34.70 * cos(-2*N3 + 3*N4) + 12.81 * cos(-3*N3 + 4*N4) + 21.81 * cos(-N3 + 2*N5) + 46.25 * cos(N3)) * 1e-6; H = (- 0.21 * sin(E1) - 227.95 * sin(E2) + 3904.69 * sin(E3) + 309.17 * sin(E4) + 221.92 * sin(E5) + 29.34 * sin(N2) + 26.20 * sin(N3) + 51.19 * sin(-N2+2*N3) - 103.86 * sin(-2*N2+3*N3) - 27.16 * sin(-3*N2+4*N3) - 16.22 * sin(N4) + 549.23 * sin(-N3 + 2*N4) + 34.70 * sin(-2*N3 + 3*N4) + 12.81 * sin(-3*N3 + 4*N4) + 21.81 * sin(-N3 + 2*N5) + 46.25 * sin(N3)) * 1e-6; Q = (- 10.86 * cos(I1) - 81.51 * cos(I2) + 1113.36 * cos(I3) + 350.14 * cos(I4) + 106.50 * cos(I5)) * 1e-6; P = (- 10.86 * sin(I1) - 81.51 * sin(I2) + 1113.36 * sin(I3) + 350.14 * sin(I4) + 106.50 * sin(I5)) * 1e-6; GMS = GMU + GM3; break; case TITANIA: N = (721663.16 - 2.64 * cos(N3 - 2*N4 + E3) - 2.16 * cos(2*N4 - 3*N5 + E5) + 6.45 * cos(2*N4 - 3*N5 + E4) - 1.11 * cos(2*N4 - 3*N5 + E3) - 62.23 * cos(N2 - N4) - 56.13 * cos(N3 - N4) - 39.94 * cos(N4 - N5) - 91.85 * cos(2*(N4 - N5)) - 58.31 * cos(3*(N4 - N5)) - 38.60 * cos(4*(N4 - N5)) - 26.18 * cos(5*(N4 - N5)) - 18.06 * cos(6*(N4 - N5))) * 1e-6; L = (856358.79 + 721718.51 * t + 20.61 * sin(N3 - 4*N4 + 3*N5) - 2.07 * sin(N3 - 2*N4 + E5) - 2.88 * sin(N3 - 2*N4 + E4) - 40.79 * sin(N3 - 2*N4 + E3) + 2.11 * sin(N3 - 2*N4 + E2) - 51.83 * sin(2*N4 - 3*N5 + E5) + 159.87 * sin(2*N4 - 3*N5 + E4) - 35.05 * sin(2*N4 - 3*N5 + E3) - 1.56 * sin(3*N4 - 4*N5 + E5) + 40.54 * sin(N2 - N4) + 46.17 * sin(N3 - N4) - 317.76 * sin(N4 - N5) - 305.59 * sin(2*(N4 - N5)) - 148.36 * sin(3*(N4 - N5)) - 82.92 * sin(4*(N4 - N5)) - 49.98 * sin(5*(N4 - N5)) - 31.56 * sin(6*(N4 - N5)) - 20.56 * sin(7*(N4 - N5)) - 13.69 * sin(8*(N4 - N5))) * 1e-6; K = (- 0.02 * cos(E1) - 1.29 * cos(E2) - 324.51 * cos(E3) + 932.81 * cos(E4) + 1120.89 * cos(E5) + 33.86 * cos(N2) + 17.46 * cos(N4) + 16.58 * cos(-N2 + 2*N4) + 28.89 * cos(N3) - 35.86 * cos(-N3 + 2*N4) - 17.86 * cos(N4) - 32.10 * cos(N5) - 177.83 * cos(-N4 + 2*N5) + 793.43 * cos(-2*N4 + 3*N5) + 99.48 * cos(-3*N4 + 4*N5) + 44.83 * cos(-4*N4 + 5*N5) + 25.13 * cos(-5*N4 + 6*N5) + 15.43 * cos(-6*N4 + 7*N5)) * 1e-6; H = (- 0.02 * sin(E1) - 1.29 * sin(E2) - 324.51 * sin(E3) + 932.81 * sin(E4) + 1120.89 * sin(E5) + 33.86 * sin(N2) + 17.46 * sin(N4) + 16.58 * sin(-N2 + 2*N4) + 28.89 * sin(N3) - 35.86 * sin(-N3 + 2*N4) - 17.86 * sin(N4) - 32.10 * sin(N5) - 177.83 * sin(-N4 + 2*N5) + 793.43 * sin(-2*N4 + 3*N5) + 99.48 * sin(-3*N4 + 4*N5) + 44.83 * sin(-4*N4 + 5*N5) + 25.13 * sin(-5*N4 + 6*N5) + 15.43 * sin(-6*N4 + 7*N5)) * 1e-6; Q = (- 1.43 * cos(I1) - 1.06 * cos(I2) - 140.13 * cos(I3) + 685.72 * cos(I4) + 378.32 * cos(I5)) * 1e-6; P = (- 1.43 * sin(I1) - 1.06 * sin(I2) - 140.13 * sin(I3) + 685.72 * sin(I4) + 378.32 * sin(I5)) * 1e-6; GMS = GMU + GM4; break; case OBERON: N = (466580.54 + 2.08 * cos(2*N4 - 3*N5 + E5) - 6.22 * cos(2*N4 - 3*N5 + E4) + 1.07 * cos(2*N4 - 3*N5 + E3) - 43.10 * cos(N2 - N5) - 38.94 * cos(N3 - N5) - 80.11 * cos(N4 - N5) + 59.06 * cos(2*(N4 - N5)) + 37.49 * cos(3*(N4 - N5)) + 24.82 * cos(4*(N4 - N5)) + 16.84 * cos(5*(N4 - N5))) * 1e-6; L = (-915591.80 + 466692.12 * t - 7.82 * sin(N3 - 4*N4 + 3*N5) + 51.29 * sin(2*N4 - 3*N5 + E5) - 158.24 * sin(2*N4 - 3*N5 + E4) + 34.51 * sin(2*N4 - 3*N5 + E3) + 47.51 * sin(N2 - N5) + 38.96 * sin(N3 - N5) + 359.73 * sin(N4 - N5) + 282.78 * sin(2*(N4 - N5)) + 138.60 * sin(3*(N4 - N5)) + 78.03 * sin(4*(N4 - N5)) + 47.29 * sin(5*(N4 - N5)) + 30.00 * sin(6*(N4 - N5)) + 19.62 * sin(7*(N4 - N5)) + 13.11 * sin(8*(N4 - N5))) * 1e-6; K = ( 0 * cos(E1) - 0.35 * cos(E2) + 74.53 * cos(E3) - 758.68 * cos(E4) + 1397.34 * cos(E5) + 39.00 * cos(N2) + 17.66 * cos(-N2 + 2*N5) + 32.42 * cos(N3) + 79.75 * cos(N4) + 75.66 * cos(N5) + 134.04 * cos(-N4 + 2*N5) - 987.26 * cos(-2*N4 + 3*N5) - 126.09 * cos(-3*N4 + 4*N5) - 57.42 * cos(-4*N4 + 5*N5) - 32.41 * cos(-5*N4 + 6*N5) - 19.99 * cos(-6*N4 + 7*N5) - 12.94 * cos(-7*N4 + 8*N5)) * 1e-6; H = (0 * sin(E1) - 0.35 * sin(E2) + 74.53 * sin(E3) - 758.68 * sin(E4) + 1397.34 * sin(E5) + 39.00 * sin(N2) + 17.66 * sin(-N2 + 2*N5) + 32.42 * sin(N3) + 79.75 * sin(N4) + 75.66 * sin(N5) + 134.04 * sin(-N4 + 2*N5) - 987.26 * sin(-2*N4 + 3*N5) - 126.09 * sin(-3*N4 + 4*N5) - 57.42 * sin(-4*N4 + 5*N5) - 32.41 * sin(-5*N4 + 6*N5) - 19.99 * sin(-6*N4 + 7*N5) - 12.94 * sin(-7*N4 + 8*N5)) * 1e-6; Q = (- 0.44 * cos(I1) - 0.31 * cos(I2) + 36.89 * cos(I3) - 596.33 * cos(I4) + 451.69 * cos(I5)) * 1e-6; P = (- 0.44 * sin(I1) - 0.31 * sin(I2) + 36.89 * sin(I3) - 596.33 * sin(I4) + 451.69 * sin(I5)) * 1e-6; GMS = GMU + GM5; break; default: xpExit("Unknown Uranus satellite\n", __FILE__, __LINE__); } X = 0; Y = 0; Z = 0; N /= 86400; L = fmod(L, TWO_PI); calcRectangular(N, L, K, H, Q, P, GMS, X, Y, Z); UranicentricToGeocentricEquatorial(X, Y, Z); // precess to J2000 precessB1950J2000(X, Y, Z); } xplanet-1.3.0/src/libephemeris/libmoons/mars.cpp0000644000175000017500000000531610411416255016642 00000000000000#include #include #include using namespace std; /* Ephemerides for Phobos and Deimos are described in Sinclair, Astron. Astrophys. 220, 321-328 (1989) */ #include "body.h" #include "xpUtil.h" void marsat(const double jd, const body b, double &X, double &Y, double &Z) { const double td = jd - 2441266.5; const double ty = td/365.25; double a; // semimajor axis double e; // eccentricity double I; // inclination of orbit to Laplacian plane double L; // mean longitude double P; // longitude of pericenter double K; // longitude of node of orbit on Laplacian plane double N; // node of the Laplacian plane on the Earth // equator B1950 double J; // inclination of Laplacian plane with respect to // the Earth equator B1950 switch (b) { case PHOBOS: a = 9379.40; e = 0.014979; I = 1.1029 * deg_to_rad; L = (232.412 + 1128.8445566 * td + 0.001237 * ty * ty) * deg_to_rad; P = (278.96 + 0.435258 * td) * deg_to_rad; K = (327.90 - 0.435330 * td) * deg_to_rad; N = (47.386 - 0.00140 * ty) * deg_to_rad; J = (37.271 + 0.00080 * ty) * deg_to_rad; break; case DEIMOS: { a = 23461.13; e = 0.000391; I = 1.7901 * deg_to_rad; P = (111.7 + 0.017985 * td) * deg_to_rad; L = (28.963 + 285.1618875 * td) * deg_to_rad; K = (240.38 - 0.018008 * td) * deg_to_rad; N = (46.367 - 0.00138 * ty) * deg_to_rad; J = (36.623 + 0.00079 * ty) * deg_to_rad; double dL = -0.274 * sin(K - 43.83 * deg_to_rad) * deg_to_rad; L += dL; } break; default: xpExit("Unknown Mars satellite\n", __FILE__, __LINE__); } double ma = L - P; double E = kepler(e, ma); // convert semi major axis from km to AU a /= AU_to_km; // rectangular coordinates on the orbit plane, x-axis is toward // pericenter X = a * (cos(E) - e); Y = a * sqrt(1 - e*e) * sin(E); Z = 0; // longitude of pericenter measured from ascending node of the // orbit on the Laplacian plane const double omega = P - (K + N); // rotate towards ascending node of the orbit on the Laplacian // plane rotateZ(X, Y, Z, -omega); // rotate towards Laplacian plane rotateX(X, Y, Z, -I); // rotate towards ascending node of the Laplacian plane on the // Earth equator B1950 rotateZ(X, Y, Z, -K); // rotate towards Earth equator B1950 rotateX(X, Y, Z, -J); // rotate to vernal equinox rotateZ(X, Y, Z, -N); // precess to J2000 precessB1950J2000(X, Y, Z); } xplanet-1.3.0/src/libephemeris/libmoons/jupiter.cpp0000644000175000017500000005630510411416255017366 00000000000000#include #include using namespace std; #include "body.h" #include "xpUtil.h" /* The Galilean satellite ephemerides E5 are described in Lieske, Astron. Astrophys. Suppl. Ser., 129, 205-217 (1998) */ static void computeArguments(const double t, double &l1, double &l2, double &l3, double &l4, double &om1, double &om2, double &om3, double &om4, double &psi, double &Gp, double &G) { // mean longitudes l1 = (106.077187 + 203.48895579033 * t) * deg_to_rad; l2 = (175.731615 + 101.37472473479 * t) * deg_to_rad; l3 = (120.558829 + 50.31760920702 * t) * deg_to_rad; l4 = ( 84.444587 + 21.57107117668 * t) * deg_to_rad; // proper nodes om1 = (312.334566 - 0.13279385940 * t) * deg_to_rad; om2 = (100.441116 - 0.03263063731 * t) * deg_to_rad; om3 = (119.194241 - 0.00717703155 * t) * deg_to_rad; om4 = (322.618633 - 0.00175933880 * t) * deg_to_rad; // longitude of origin of coordingate (Jupiter's pole) psi = (316.518203 - 2.08362E-06 * t) * deg_to_rad; // mean anomaly of Saturn Gp = (31.978528 + 0.03345973390 * t) * deg_to_rad; // mean anomaly of Jupiter G = (30.237557 + 0.08309257010 * t) * deg_to_rad; } void jupsat(const double jd, const body b, double &X, double &Y, double &Z) { const double t = jd - 2443000.5; // mean longitudes double l1, l2, l3, l4; // proper nodes double om1, om2, om3, om4; // longitude of origin of coordinates (Jupiter's pole) double psi; // mean anomaly of Saturn double Gp; // mean anomaly of Jupiter double G; computeArguments(t, l1, l2, l3, l4, om1, om2, om3, om4, psi, Gp, G); // free libration const double phi = (199.676608 + 0.17379190461 * t) * deg_to_rad; // periapse longitudes const double pi1 = ( 97.088086 + 0.16138586144 * t) * deg_to_rad; const double pi2 = (154.866335 + 0.04726306609 * t) * deg_to_rad; const double pi3 = (188.184037 + 0.00712733949 * t) * deg_to_rad; const double pi4 = (335.286807 + 0.00183999637 * t) * deg_to_rad; // longitude of perihelion of jupiter const double PIj = 13.469942 * deg_to_rad; // phase angles const double phi1 = 188.374346 * deg_to_rad; const double phi2 = 52.224824 * deg_to_rad; const double phi3 = 257.184000 * deg_to_rad; const double phi4 = 149.152605 * deg_to_rad; // semimajor axes, in AU const double axis1 = 2.819353E-3; const double axis2 = 4.485883E-3; const double axis3 = 7.155366E-3; const double axis4 = 12.585464E-3; // common factors const double PIG2 = (PIj + G) * 2; double xi = 0; double upsilon = 0; double zeta = 0; double radius, lon; switch (b) { case IO: { lon = l1; const int NXI = 10; double XI[NXI][2] = { { 170, l1 - l2 }, { 106, l1 - l3 }, { -2, l1 - pi1 }, { -2, l1 - pi2 }, { -387, l1 - pi3 }, { -214, l1 - pi4 }, { -66, l1 + pi3 - PIG2 }, { -41339, 2*(l1 - l2) }, { 3, 2*(l1 - l3) }, { -131, 4*(l1-l2) } }; for (int i = 0; i < NXI; i++) xi += XI[i][0] * cos(XI[i][1]); xi *= 1e-7; radius = axis1 * (1 + xi); const int NU = 41; double U[NU][2] = { { -26, 2 * psi - PIG2 }, { -553, 2*(psi - PIj) }, { -240, om3 + psi - PIG2 }, { 92, psi - om2 }, { -72, psi - om3 }, { -49, psi - om4 }, { -325, G }, { 65, 2*G }, { -33, 5*Gp - 2*G + phi2 }, { -27, om3 - om4 }, { 145, om2 - om3 }, { 30, om2 - om4 }, { -38, pi4 - PIj }, { -6071, pi3 - pi4 }, { 282, pi2 - pi3 }, { 156, pi2 - pi4 }, { -38, pi1 - pi3 }, { -25, pi1 - pi4 }, { -27, pi1 + pi4 - PIG2 }, { -1176, pi1 + pi3 - PIG2 }, { 1288, phi }, { 39, 3*l3 - 7*l4 + 4*pi4 }, { -32, 3*l3 - 7*l4 + pi3 + 3*pi4 }, { -1162, l1 - 2*l2 + pi4 }, { -1887, l1 - 2*l2 + pi3 }, { -1244, l1 - 2*l2 + pi2 }, { 38, l1 - 2*l2 + pi1 }, { -617, l1 - l2 }, { -270, l1 - l3 }, { -26, l1 - l4 }, { 4, l1 - pi1 }, { 5, l1 - pi2 }, { 776, l1 - pi3 }, { 462, l1 - pi4 }, { 149, l1 + pi3 - PIG2 }, { 21, 2*l1 - 4*l2 + om2 + om3 }, { -200, 2*l1 - 4*l2 + 2*om2 }, { 82483, 2*(l1 - l2) }, { -35, 2*(l1 - l3) }, { -3, 3*l1 - 4*l2 + pi3 }, { 276, 4*(l1 - l2) } }; for (int i = 0; i < NU; i++) upsilon += U[i][0] * sin(U[i][1]); upsilon *= 1e-7; // now use the "time completed" series const double n = 203.48895579033 * deg_to_rad; computeArguments(t + upsilon/n, l1, l2, l3, l4, om1, om2, om3, om4, psi, Gp, G); const int NZ = 7; double Z[NZ][2] = { { 46, l1 + psi - 2*PIj - 2*G}, { 6393, l1 - om1 }, { 1825, l1 - om2 }, { 329, l1 - om3 }, { 93, l1 - om4 }, { -311, l1 - psi }, { 75, 3*l1 - 4*l2 + om2 } }; for (int i = 0; i < NZ; i++) zeta += Z[i][0] * sin(Z[i][1]); zeta *= 1e-7; } break; case EUROPA: { lon = l2; const int NXI = 24; double XI[NXI][2] = { { -18, om2 - om3 }, { -27, 2*l3 - PIG2 }, { 553, l2 - l3 }, { 45, l2 - l4 }, { -102, l2 - pi1 }, { -1442, l2 - pi2 }, { -3116, l2 - pi3 }, { -1744, l2 - pi4 }, { -15, l2 - PIj - G }, { -64, 2*(l2 - l4) }, { 164, 2*(l2 - om2) }, { 18, 2*l2 - om2 - om3 }, { -54, 5*(l2 - l3) }, { -30, l1 - 2*l2 + pi4 }, { -67, l1 - 2*l2 + pi3 }, { 93848, l1 - l2 }, { 48, l1 - 2*l3 + pi4 }, { 107, l1 - 2*l3 + pi3 }, { -19, l1 - 2*l3 + pi2 }, { 523, l1 - l3 }, { 30, l1 - pi3 }, { -290, 2*(l1 - l2) }, { -91, 2*(l1 - l3) }, { 22, 4*(l1 - l2) } }; for (int i = 0; i < NXI; i++) xi += XI[i][0] * cos(XI[i][1]); xi *= 1e-7; radius = axis2 * (1 + xi); const int NU = 66; double U[NU][2] = { { 98, 2*psi - PIG2 }, { -1353, 2*(psi - PIj) }, { 551, psi + om3 - PIG2 }, { 26, psi + om2 - PIG2 }, { 31, psi - om2 }, { 255, psi - om3 }, { 218, psi - om4 }, { -1845, G}, { -253, 2*G }, { 18, 2*(Gp - G) + phi4 }, { 19, 2*Gp - G + phi1 }, { -15, 5*Gp - 3*G + phi1 }, { -150, 5*G - 2*G + phi2 }, { 102, om3 - om4 }, { 56, om2 - om3 }, { 72, pi4 - PIj }, { 2259, pi3 - pi4 }, { -24, pi3 - pi4 + om3 - om4 }, { -23, pi2 - pi3 }, { -36, pi2 - pi4 }, { -31, pi1 - pi2 }, { 4, pi1 - pi3 }, { 111, pi1 - pi4 }, { -354, pi1 + pi3 - PIG2 }, { -3103, phi }, { 55, 2*l3 - PIG2 }, { -111, 3*l3 - 7*l4 + 4*pi4 }, { 91, 3*l3 - 7*l4 + pi3 + 3*pi4 }, { -25, 3*l3 - 7*l4 + 2*pi3 + 2*pi4 }, { -1994, l2 - l3 }, { -137, l2 - l4 }, { 1, l2 - pi1 }, { 2886, l2 - pi2 }, { 6250, l2 - pi3 }, { 3463, l2 - pi4 }, { 30, l2 - PIj - G }, { -18, 2*l2 - 3*l3 + pi4 }, { -39, 2*l2 - 3*l3 + pi3 }, { 98, 2*(l2 - l4) }, { -164, 2*(l2 - om2) }, { -18, 2*l2 - om2 - om3 }, { 72, 5*(l2 - l3) }, { 30, l1 - 2*l2 - pi3 + PIG2 }, { 4180, l1 - 2*l2 + pi4, }, { 7428, l1 - 2*l2 + pi3, }, { -2329, l1 - 2*l2 + pi2, }, { -19, l1 - 2*l2 + pi1, }, { -185835, l1 - l2 }, { -110, l1 - 2*l3 + pi4, }, { -200, l1 - 2*l3 + pi3, }, { 39, l1 - 2*l3 + pi2, }, { -16, l1 - 2*l3 + pi1, }, { -803, l1 - l3 }, { -19, l1 - pi2 }, { -75, l1 - pi3 }, { -31, l1 - pi4 }, { -9, 2*l1 - 4*l2 + om3 + psi }, { 4, 2*l1 - 4*l2 + 2*om3 }, { -14, 2*l1 - 4*l2 + om2 + om3 }, { 150, 2*l1 - 4*l2 + 2*om2 }, { -11, 2*l1 - 4*l2 + PIG2 }, { -9, 2*l1 - 4*l2 + pi3 + pi4, }, { -8, 2*l1 - 4*l2 + 2*pi3 }, { 915, 2*(l1 - l2) }, { 96, 2*(l1 - l3) }, { -18, 4*(l1 - l2) } }; for (int i = 0; i < NU; i++) upsilon += U[i][0] * sin(U[i][1]); upsilon *= 1e-7; // now use the "time completed" series const double n = 101.37472473479 * deg_to_rad; computeArguments(t + upsilon/n, l1, l2, l3, l4, om1, om2, om3, om4, psi, Gp, G); const int NZ = 11; double Z[NZ][2] = { { 17, l2 + psi - 2*(PIj - G) - G }, { 143, l2 + psi - 2*(PIj - G) }, { -144, l2 - om1 }, { 81004, l2 - om2 }, { 4512, l2 - om3 }, { 1160, l2 - om4 }, { -19, l2 - psi - G }, { -3284, l2 - psi }, { 35, l2 - psi + G }, { -28, l1 - 2*l3 + om3 }, { 272, l1 - 2*l3 + om2 } }; for (int i = 0; i < NZ; i++) zeta += Z[i][0] * sin(Z[i][1]); zeta *= 1e-7; } break; case GANYMEDE: { lon = l3; const int NXI = 31; double XI[NXI][2] = { { 24, psi - om3 }, { -9, om3 - om4 }, { 10, pi3 - pi4 }, { 294, l3 - l4 }, { 18, l3 - pi2 }, { -14388, l3 - pi3 }, { -7919, l3 - pi4 }, { -23, l3 - PIj - G }, { -20, l3 + pi4 - PIG2 }, { -51, l3 + pi3 - PIG2 }, { 39, 2*l3 - 3*l4 + pi4 }, { -1761, 2*(l3 - l4) }, { -11, 2*(l3 - pi3) }, { -10, 2*(l3 - pi3 - pi4) }, { -27, 2*l3 - PIG2 }, { 24, 2*(l3 - om3) }, { 9, 2 * l3 - om3 - om4 }, { -24, 2 * l3 - om3 - psi }, { -16, 3*l3 - 4*l4 + pi4 }, { -156, 3*(l3 - l4) }, { -42, 4*(l3 - l4) }, { -11, 5*(l3 - l4) }, { 6342, l2 - l3 }, { 9, l2 - pi3 }, { 39, 2*l2 - 3*l3 + pi4 }, { 70, 2*l2 - 3*l3 + pi3 }, { 10, l1 - 2*l2 + pi4 }, { 20, l1 - 2*l2 + pi3 }, { -153, l1 - l2 }, { 156, l1 - l3 }, { 11, 2*(l1 - l2) } }; for (int i = 0; i < NXI; i++) xi += XI[i][0] * cos(XI[i][1]); xi *= 1e-7; radius = axis3 * (1 + xi); const int NU = 75; double U[NU][2] = { { 10, psi - pi3 + pi4 - om3 }, { 28, 2*psi - PIG2 }, { -1770, 2*(psi - PIj) }, { -48, psi + om3 - PIG2 }, { 14, psi - om2 }, { 411, psi - om3 }, { 345, psi - om4 }, { -2338, G }, { -66, 2*G }, { 10, Gp - G + phi3 }, { 22, 2*(Gp - G) + phi4 }, { 26, 2*Gp - G + phi1 }, { 11, 3*Gp - 2*G + phi2 + phi3 }, { 9, 3*Gp - G + phi1 - phi2 }, { -19, 5*Gp - 3*G + phi1 }, { -208, 5*Gp - 2*G + phi2 }, { 159, om3 - om4 }, { 21, om2 - om3 }, { 121, pi4 - PIj }, { 6604, pi3 - pi4 }, { -65, pi3 - pi4 + om3 - om4 }, { -88, pi2 - pi3 }, { -72, pi2 - pi4 }, { -26, pi1 - pi3 }, { -9, pi1 - pi4 }, { 16, pi1 + pi4 - PIG2 }, { 125, pi1 + pi3 - PIG2 }, { 307, phi }, { -10, l4 - pi4 }, { -100, l3 - 2*l4 + pi4 }, { 83, l3 - 2*l4 + pi3 }, { -944, l3 - l4 }, { -37, l3 - pi2 }, { 28780, l3 - pi3 }, { 15849, l3 - pi4 }, { 7, l3 - pi4 + om3 - om4 }, { 46, l3 - PIj - G }, { 51, l3 + pi4 - PIG2 }, { 11, l3 + pi3 - PIG2 - G }, { 97, l3 + pi3 - PIG2 }, { 1, l3 + pi1 - PIG2 }, { -101, 2*l3 - 3*l4 + pi4 }, { 13, 2*l3 - 3*l4 + pi3 }, { 3222, 2*(l3 - l4) }, { 29, 2*(l3 - pi3) }, { 25, 2*l3 - pi3 - pi4 }, { 37, 2*l3 - PIG2 }, { -24, 2*(l3 - om3) }, { -9, 2*l3 - om3 - om4 }, { 24, 2*l3 - om3 - psi }, { -174, 3*l3 - 7*l4 + 4*pi4 }, { 140, 3*l3 - 7*l4 + pi3 + 3*pi4 }, { -55, 3*l3 - 7*l4 + 2*pi3 + 2*pi4 }, { 27, 3*l3 - 4*l4 + pi4 }, { 227, 3*(l3 - l4) }, { 53, 4*(l3 - l4) }, { 13, 5*(l3 - l4) }, { 42, l2 - 3*l3 + 2*l4 }, { -12055, l2 - l3 }, { -24, l2 - pi3 }, { -10, l2 - pi4 }, { -79, 2*l2 - 3*l3 + pi4 }, { -131, 2*l2 - 3*l3 + pi3 }, { -665, l1 - 2*l2 + pi4 }, { -1228, l1 - 2*l2 + pi3 }, { 1082, l1 - 2*l2 + pi2 }, { 90, l1 - 2*l2 + pi1 }, { 190, l1 - l2 }, { 218, l1 - l3 }, { 2, 2*l1 - 4*l2 + om3 + psi }, { -4, 2*l1 - 4*l2 + 2*om3 }, { 3, 2*l1 - 4*l2 + 2*om2 }, { 2, 2*l1 - 4*l2 + pi3 + pi4 }, { 2, 2*l1 - 4*l2 + 2*pi3 }, { -13, 2*(l1 - l2) } }; for (int i = 0; i < NU; i++) upsilon += U[i][0] * sin(U[i][1]); upsilon *= 1e-7; // now use the "time completed" series const double n = 50.31760920702 * deg_to_rad; computeArguments(t + upsilon/n, l1, l2, l3, l4, om1, om2, om3, om4, psi, Gp, G); const int NZ = 13; double Z[NZ][2] = { { 37, l2 + psi - 2*(PIj - G) - G }, { 321, l2 + psi - 2*(PIj - G) }, { -15, l2 + psi - 2*PIj - G }, { -45, l3 - 2*PIj + psi }, { -2797, l3 - om2 }, { 32402, l3 - om3 }, { 6847, l3 - om4 }, { -45, l3 - psi - G }, { -16911, l3 - psi }, { 51, l3 - psi + G }, { 10, 2*l2 - 3*l3 + psi }, { -21, 2*l2 - 3*l3 + om3 }, { 30, 2*l2 - 3*l3 + om2 } }; for (int i = 0; i < NZ; i++) zeta += Z[i][0] * sin(Z[i][1]); zeta *= 1e-7; } break; case CALLISTO: { lon = l4; const int NXI = 43; double XI[NXI][2] = { { -19, psi - om3 }, { 167, psi - om4 }, { 11, G }, { 12, om3 - om4 }, { -13, pi3 - pi4 }, { 1621, l4 - pi3 }, { -24, l4 - pi4 + 2*(psi - PIj) }, { -17, l4 - pi4 - G }, { -73546, l4 - pi4 }, { 15, l4 - pi4 + G }, { 30, l4 - pi4 + 2*(PIj - psi) }, { -5, l4 - PIj + 2*G }, { -89, l4 - PIj - G }, { 182, l4 - PIj }, { -6, l4 + pi4 - 2*PIj - 4*G }, { -62, l4 + pi4 - 2*PIj - 3*G }, { -543, l4 + pi4 - 2*PIj - 2*G }, { 27, l4 + pi4 - 2*PIj - G }, { 6, l4 + pi4 - 2*PIj }, { 6, l4 + pi4 - om4 - psi }, { -9, l4 + pi3 - 2*pi4 }, { 14, l4 + pi3 - PIG2 }, { 13, 2*l4 - pi3 - pi4 }, { -271, 2*(l4 - pi4) }, { -25, 2*l4 - PIG2 - G }, { -155, 2*l4 - PIG2 }, { -12, 2*l4 - om3 - om4 }, { 19, 2*l4 - om3 - psi }, { 48, 2*(l4 - om4) }, { -167, 2*l4 - om4 - psi }, { 142, 2*(l4 - psi) }, { -22, l3 - 2*l4 + pi4 }, { 20, l3 - 2*l4 + pi3 }, { 974, l3 - l4 }, { 24, 2*l3 - 3*l4 + pi4 }, { 177, 2*(l3 - l4) }, { 4, 3*l3 - 4*l4 + pi4 }, { 42, 3*(l3 - l4) }, { 14, 4*(l3 - l4) }, { 5, 5*(l3 - l4) }, { -8, l2 - 3*l3 + 2*l4 }, { 92, l2 - l4 }, { 105, l1 - l4 } }; for (int i = 0; i < NXI; i++) xi += XI[i][0] * cos(XI[i][1]); xi *= 1e-7; radius = axis4 * (1 + xi); const int NU = 86; double U[NU][2] = { { 8, 2*psi - pi3 - pi4 }, { -9, psi - pi3 - pi4 + om4 }, { 27, psi - pi3 + pi4 - om4 }, { -409, 2*(psi - pi4) }, { 310, psi - 2*pi4 + om4 }, { -19, psi - 2*pi4 + om3 }, { 8, 2*psi - pi4 - PIj }, { -5, psi - pi4 - PIj + om4 }, { 63, psi - pi4 + PIj - om4 }, { 8, 2*psi - PIG2 - G }, { 73, 2*psi - PIG2 }, { -5768, 2*(psi - PIj) }, { 16, psi + om4 - PIG2 }, { -97, psi - om3 }, { 152, 2*(psi - om4) }, { 2070, psi - om4 }, { -5604, G }, { -204, 2*G }, { -10, 3*G }, { 24, Gp - G + phi3 }, { 11, Gp + phi1 - 2*phi2 }, { 52, 2*(Gp - G) + phi4 }, { 61, 2*Gp - G + phi1 }, { 25, 3*Gp - 2*G + phi2 + phi3 }, { 21, 3*Gp - G + phi1 - phi2 }, { -45, 5*Gp - 3*G + phi1 }, { -495, 5*Gp - 3*G + phi2 }, { -44, om3 - om4 }, { 5, pi4 - PIj - G }, { 234, pi4 - PIj }, { 11, 2*pi4 - PIG2 }, { -10, 2*pi4 - om3 - om4 }, { 68, 2*(pi4 - om4) }, { -13, pi3 - pi4 - om4 + psi }, { -5988, pi3 - pi4 }, { -47, pi3 - pi4 + om3 - om4 }, { -3249, l4 - pi3 }, { 48, l4 - pi4 + 2*(psi - PIj) }, { 10, l4 - pi4 - om4 + psi }, { 33, l4 - pi4 - G }, { 147108, l4 - pi4 }, { -31, l4 - pi4 + G }, { -6, l4 - pi4 + om4 - psi }, { -61, l4 - pi4 + 2*(PIj - psi) }, { 10, l4 - PIj - 2*G }, { 178, l4 - PIj - G }, { -363, l4 - PIj }, { 5, l4 + pi4 - 2*PIj - 5*Gp + 2*G - phi1 }, { 12, l4 + pi4 - 2*PIj - 4*G }, { 124, l4 + pi4 - 2*PIj - 3*G }, { 1088, l4 + pi4 - 2*PIj - 2*G }, { -55, l4 + pi4 - 2*PIj - G }, { -12, l4 + pi4 - 2*PIj }, { -13, l4 + pi4 - om4 - psi }, { 6, l4 + pi4 - 2*psi }, { 17, l4 + pi3 - 2*pi4 }, { -28, l4 + pi3 - PIG2 }, { -33, 2*l4 - pi3 - pi4 }, { 676, 2*(l4 - pi4) }, { 36, 2*(l4 - PIj - G) - G }, { 218, 2*(l4 - PIj - G) }, { -5, 2*(l4 - PIj) - G }, { 12, 2*l4 - om3 - om4 }, { -19, 2*l4 - om3 - psi }, { -48, 2*(l4 - om4) }, { 167, 2*l4 - om4 - psi }, { -142, 2*(l4 - psi) }, { 148, l3 - 2*l4 + pi4 }, { -94, l3 - 2*l4 + pi3 }, { -390, l3 - l4 }, { 9, 2*l3 - 4*l4 + 2*pi4 }, { -37, 2*l3 - 3*l4 + pi4 }, { 6, 2*l3 - 3*l4 + pi3 }, { -195, 2*(l3 - l4) }, { 6, 3*l3 - 7*l4 + 2*pi4 + om4 + psi }, { 187, 3*l3 - 7*l4 + 4*pi4 }, { -149, 3*l3 - 7*l4 + pi3 + 3*pi4 }, { 51, 3*l3 - 7*l4 + 2*(pi3 + pi4) }, { -10, 3*l3 - 7*l4 + 3*pi3 + pi4 }, { 6, 3*(l3 - 2*l4 + pi4) }, { -8, 3*l3 - 4*l4 + pi4 }, { -41, 3*(l3 - l4) }, { -13, 4*(l3 - l4) }, { -44, l2 - 3*l3 + 2*l4 }, { 89, l2 - l4 }, { 106, l1 - l4 } }; for (int i = 0; i < NU; i++) upsilon += U[i][0] * sin(U[i][1]); upsilon *= 1e-7; // now use the "time completed" series const double n = 21.57107117668 * deg_to_rad; computeArguments(t + upsilon/n, l1, l2, l3, l4, om1, om2, om3, om4, psi, Gp, G); const int NZ = 18; double Z[NZ][2] = { { 8, l4 - 2*PIj - om4 - 2*psi }, { 8, l4 - 2*PIj + psi - 4*G }, { 88, l4 - 2*PIj + psi - 3*G }, { 773, l4 - 2*PIj + psi - 2*G }, { -38, l4 - 2*PIj + psi - G }, { 5, l4 - 2*PIj + psi }, { 9, l4 - om1 }, { -17, l4 - om2 }, { -5112, l4 - om3 }, { -7, l4 - om4 - G }, { 44134, l4 - om4 }, { 7, l4 - om4 + G }, { -102, l4 - psi - G }, { -76579, l4 - psi }, { 104, l4 - psi + G }, { -10, l4 - psi + 5*Gp - 2*G + phi2 }, { -11, l3 - 2*l4 + psi }, { 7, l3 - 2*l4 + om4 } }; for (int i = 0; i < NZ; i++) zeta += Z[i][0] * sin(Z[i][1]); zeta *= 1e-7; } break; default: xpExit("Unknown Jupiter satellite\n", __FILE__, __LINE__); } // Jupiter equatorial coordinates X = radius * cos(lon - psi + upsilon); Y = radius * sin(lon - psi + upsilon); Z = radius * zeta; // rotate to Jupiter's orbital plane const double I = 3.10401 * deg_to_rad; rotateX(X, Y, Z, -I); // rotate towards ascending node of Jupiter's equator on its // orbital plane const double OM = 99.95326 * deg_to_rad; rotateZ(X, Y, Z, OM - psi); // rotate to ecliptic const double J = 1.30691 * deg_to_rad; rotateX(X, Y, Z, -J); // rotate towards ascending node of Jupiter's orbit on ecliptic rotateZ(X, Y, Z, -OM); // rotate to earth equator B1950 const double eps = 23.4457889 * deg_to_rad; rotateX(X, Y, Z, -eps); // precess to J2000 precessB1950J2000(X, Y, Z); } xplanet-1.3.0/src/libephemeris/libmoons/elp82b.h0000644000175000017500000006120310411416255016436 00000000000000#ifndef ELP82B_H #define ELP82B_H /* This is an abbreviated version of the full ELP82B theory, where all terms with amplitudes greater than 1 arcsec or 1 km have been discarded. */ static const int NUM01 = 59; static const int ilu01[NUM01 * 4] = { 0, 0, 0, 2, 0, 0, 1, -2, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 2, -2, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 3, 0, 0, 0, 4, 0, 0, 1, -2, 0, 0, 1, -1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, -1, 0, 0, 2, 0, 0, 0, 2, 1, 0, 1, 0, -2, 0, 1, 0, -1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, -1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 2, -2, -1, 0, 2, -2, 0, 0, 2, -1, -2, 0, 2, -1, -1, 0, 2, -1, 0, -2, 2, -1, 0, 0, 2, -1, 1, 0, 2, -1, 2, 0, 2, 0, -3, 0, 2, 0, -2, 0, 2, 0, -1, 0, 2, 0, -1, 2, 2, 0, 0, -2, 2, 0, 0, 0, 2, 0, 0, 2, 2, 0, 1, -2, 2, 0, 1, 0, 2, 0, 2, 0, 2, 0, 3, 0, 2, 1, -2, 0, 2, 1, -1, 0, 2, 1, 0, -2, 2, 1, 0, 0, 2, 1, 1, 0, 2, 2, -1, 0, 3, 0, -2, 0, 3, 0, -1, 0, 4, -1, -2, 0, 4, -1, -1, 0, 4, -1, 0, 0, 4, 0, -3, 0, 4, 0, -2, 0, 4, 0, -1, 0, 4, 0, 0, 0, 4, 0, 1, 0 }; static const double coef01[NUM01 * 7] = { -411.60287, 168.48, -18433.81, -121.62, 0.40, -0.18, 0.00, 39.53393, -395.24, 1788.33, 720.91, -2.60, 0.90, 0.00, 22639.55000, 0.00, 0.00, 412529.61, 0.00, 0.00, 0.00, -45.10032, 17.41, -2019.78, -830.20, 0.09, -0.02, 0.00, -1.37259, -7.58, -62.49, -50.12, -0.07, 0.00, 0.00, 769.02326, -257.51, -47.39, 28008.99, -6.83, -0.56, 0.00, -3.99767, 2.40, -178.94, -146.18, 0.05, 0.00, 0.00, 36.12364, -28.42, -5.10, 1972.74, -0.93, -0.08, 0.00, 1.93367, -2.65, -0.44, 140.75, -0.10, 0.00, 0.00, -9.67938, -235.29, 4.90, -352.52, -579.94, -0.15, 0.00, -147.32654, -3778.62, 68.68, -2688.53, -8829.17, -0.76, 0.00, -666.44186, -5206.84, 258.79, -555.98, -39887.79, 1.73, 0.00, -109.38419, -2193.78, 51.64, -2018.13, -6556.10, 0.54, 0.00, -7.63041, -156.07, 4.09, -279.89, -457.41, 0.12, 0.00, -2.56813, -81.06, 1.44, -46.94, -307.62, 0.00, 0.00, -7.44804, -12.64, 2.98, -9.32, -891.27, 0.03, 0.00, -1.16177, -19.75, 0.43, -21.52, -139.13, 0.00, 0.00, -1.75296, -48.87, 1.67, -64.28, -0.51, -681.60, 3.59, -18.58467, -437.66, 18.91, -346.51, -1.00, -7226.22, 38.10, -124.98806, -2831.88, 136.18, -86.60, -2.68, -48598.15, 256.21, -8.45308, -187.78, 10.10, -158.62, 0.77, -3286.75, 17.33, 1.07773, 9.38, -1.15, 21.49, 64.24, 418.88, -2.21, 17.95512, 6.59, -11.64, 21.84, 1074.24, 6981.34, -36.80, 1.26186, 1.83, -0.90, 24.50, 75.50, 490.64, -2.59, 7.37173, 165.38, -1.06, 134.79, 881.89, -0.04, 0.00, 8.05076, 289.14, -3.14, 21.09, 962.91, -0.06, 0.00, 8.60582, 187.04, -1.14, 313.85, 515.03, 0.02, 0.00, 205.44315, 4157.78, -32.99, 3751.43, 12284.72, -0.13, 0.00, 2.14619, 18.77, 95.81, -0.84, 128.22, 0.05, 0.00, 164.73458, 5378.28, -77.43, 545.71, 9844.15, -0.18, 0.00, 14.53078, 497.46, -9.38, 307.25, 867.99, 0.00, 0.00, 1.17704, 41.72, -0.96, 46.23, 70.28, 0.00, 0.00, 13.19400, 279.87, -3.19, 721.29, 0.65, 0.14, 0.00, 211.65487, 4685.54, -42.06, 7715.64, 7.86, 2.12, -0.01, 4586.43061, 87132.46, -842.12, 83586.18, -191.17, 20.31, -0.17, -9.36601, -173.58, -417.66, -173.70, 0.48, -0.06, 0.00, 55.17801, 530.97, 2463.55, -15.35, -6.96, 1.20, 0.00, 2369.91227, 69551.14, -1472.50, 10817.07, -255.36, 22.07, -0.15, -5.74170, -155.85, -254.00, -59.77, 0.64, -0.10, 0.00, -6.38325, -72.70, -288.51, -117.47, 1.16, 0.00, 0.00, 191.95575, 5619.27, -153.09, 4250.55, -30.10, 2.78, -0.02, 14.37964, 417.80, -13.71, 577.47, -3.08, 0.28, 0.00, 1.05949, 30.46, -1.16, 61.74, -0.30, 0.03, 0.00, 2.48897, 257.30, -3.72, 89.71, 150.19, 0.26, 0.00, -28.39810, 915.46, -16.70, -528.73, -1693.30, -0.38, 0.00, -1.43724, -23.32, -64.11, -0.16, -86.03, -0.04, 0.00, -24.35910, -661.00, 29.13, -128.06, -1457.61, -5.21, 0.03, -2.91464, -100.96, 4.26, -66.13, -174.49, -0.75, 0.00, -2.52138, -84.66, 0.74, -46.07, -302.13, 0.07, 0.00, -1.22412, -28.10, 0.42, -44.73, -0.15, -475.97, 2.51, -3.20968, -121.62, 3.09, -62.39, 1.61, -1248.01, 6.58, 2.73198, 106.73, -1.04, 99.83, 163.20, 0.11, 0.00, 4.37416, 221.00, -3.71, 93.87, 260.99, -0.05, 0.00, 1.87083, 111.80, -2.35, 25.65, 111.49, 0.16, 0.00, 1.18682, 52.89, -0.50, 64.88, 0.22, 0.25, 0.00, 30.77247, 1164.74, -12.42, 1123.35, -4.25, 1.18, 0.00, 38.42974, 1853.28, -37.86, 849.77, -9.84, 0.08, 0.00, 13.89903, 782.37, -19.88, 215.74, -5.22, 1.37, 0.00, 1.97772, 113.34, -3.31, 59.21, -0.94, 0.18, 0.00 }; static const int NUM02 = 45; static const int ilu02[NUM02 * 4] = { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, -3, 0, 0, 1, -1, 0, 0, 1, 1, 0, 0, 1, 3, 0, 0, 2, -1, 0, 0, 2, 1, 0, 0, 3, -1, 0, 0, 3, 1, 0, 1, -1, -1, 0, 1, -1, 1, 0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 1, -1, 0, 1, 1, 1, 1, 0, 0, -1, 1, 0, 0, 1, 2, -2, 0, -1, 2, -1, -1, -1, 2, -1, -1, 1, 2, -1, 0, -1, 2, -1, 0, 1, 2, -1, 1, -1, 2, -1, 1, 1, 2, 0, -3, -1, 2, 0, -2, -1, 2, 0, -2, 1, 2, 0, -1, -1, 2, 0, -1, 1, 2, 0, 0, -3, 2, 0, 0, -1, 2, 0, 0, 1, 2, 0, 1, -1, 2, 0, 1, 1, 2, 0, 2, -1, 2, 0, 2, 1, 2, 1, -1, 1, 2, 1, 0, -1, 2, 1, 0, 1, 4, 0, -2, 1, 4, 0, -1, -1, 4, 0, -1, 1, 4, 0, 0, -1, 4, 0, 0, 1 }; static const double coef02[NUM02 * 7] = { 18461.40000, 0.00, 412529.61, 0.00, 0.00, 0.00, 0.00, -6.29664, 7.68, -422.65, -13.21, 0.02, -0.02, 0.00, 2.79871, -17.13, 188.68, 50.78, -0.11, 0.04, 0.00, 999.70079, -563.82, 22508.54, 18298.82, -0.92, -0.21, 0.00, 1010.17430, -93.16, 22571.83, 18386.36, -0.76, -0.17, 0.00, -1.01941, 0.95, -68.42, -19.88, 0.00, 0.00, 0.00, 31.75985, -167.64, 723.95, 1159.97, -1.09, 0.22, 0.00, 61.91229, -23.73, 1382.40, 2253.18, -0.62, -0.06, 0.00, 1.58131, -10.25, 36.06, 86.53, -0.08, 0.00, 0.00, 3.98407, -3.30, 88.86, 217.43, -0.11, -0.01, 0.00, -6.73173, -159.36, -146.94, -122.89, -403.36, -0.03, 0.00, -5.63260, -148.81, -123.96, -102.80, -337.62, -0.04, 0.00, -4.83983, 70.86, -100.97, -8.74, -289.05, 0.02, 0.00, -6.46036, 28.14, -136.25, -20.21, -386.09, 0.29, 0.00, -5.07614, -113.16, -112.23, -93.12, -304.28, 0.00, 0.00, -5.31151, -99.03, -115.96, -99.19, -318.30, 0.06, 0.00, -4.80578, -102.50, -103.39, -3.12, -0.09, -1868.59, 9.85, -5.36844, -119.82, -113.86, -3.16, -0.08, -2087.37, 11.00, 1.08587, 23.51, 24.25, 0.47, 129.87, 0.00, 0.00, 7.43488, 154.99, 165.14, 135.90, 444.61, -0.02, 0.00, 8.86853, 174.25, 196.33, 161.68, 530.29, -0.01, 0.00, 29.57794, 553.39, 661.64, 12.43, 1767.42, 0.16, 0.00, 7.95891, 253.11, 175.21, 44.35, 475.60, 0.00, 0.00, 1.76606, 35.98, 38.73, 33.43, 105.50, 0.02, 0.00, 1.13466, 38.36, 24.88, 25.43, 67.78, 0.00, 0.00, 1.51564, 31.76, 33.59, 82.84, 0.07, 0.00, 0.00, 15.56635, 330.35, 344.99, 567.47, 0.23, 0.03, 0.00, -1.62443, -20.88, -36.38, -59.20, 0.18, -0.02, 0.00, 166.57528, 3219.29, 3695.90, 3042.80, -5.99, 0.39, 0.00, 199.48515, 3726.28, 4413.25, 3627.39, -8.68, 0.73, 0.00, 2.18637, 23.85, 146.45, -2.38, -0.27, 0.03, 0.00, 623.65783, 9963.62, 13978.19, 245.16, -70.26, 5.00, -0.03, 117.26161, 3313.25, 2575.66, 874.52, -12.65, 1.79, -0.01, 33.35743, 512.77, 735.76, 630.31, -5.21, 0.43, 0.00, 15.12165, 433.44, 331.25, 359.20, -2.40, 0.31, 0.00, 2.14618, 33.22, 46.62, 80.12, -0.45, 0.04, 0.00, 1.51976, 43.48, 33.21, 62.71, -0.33, 0.04, 0.00, -1.31788, 39.71, -29.98, -24.58, -78.59, 0.00, 0.00, -12.09470, -205.76, -271.06, -3.14, -723.84, -0.31, 0.00, -1.26433, -30.65, -27.38, -10.59, -75.65, -0.41, 0.00, 2.41389, 90.53, 52.84, 87.95, -0.35, 0.07, 0.00, 6.57962, 223.57, 146.75, 123.07, -1.94, 0.26, 0.00, 2.99850, 142.57, 65.02, 71.12, -0.78, 0.06, 0.00, 3.67449, 157.55, 81.63, 29.57, -1.61, 0.06, 0.00, 1.19188, 65.39, 25.66, 23.11, -0.45, 0.08, 0.00 }; static const int NUM03 = 49; static const int ilu03[NUM03 * 4] = { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, -2, 0, 0, 1, 0, 0, 0, 2, -2, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 1, -2, 0, 0, 1, -1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, -1, 0, 0, 2, 0, 0, 0, 2, 1, 0, 1, 0, -2, 0, 1, 0, -1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 2, -2, -1, 0, 2, -2, 0, 0, 2, -1, -2, 0, 2, -1, -1, 0, 2, -1, 0, 0, 2, -1, 1, 0, 2, 0, -3, 0, 2, 0, -2, 0, 2, 0, -1, -2, 2, 0, -1, 0, 2, 0, 0, -2, 2, 0, 0, 0, 2, 0, 1, -2, 2, 0, 1, 0, 2, 0, 2, 0, 2, 1, -1, 0, 2, 1, 0, 0, 2, 1, 1, 0, 2, 2, -1, 0, 3, 0, -1, 0, 3, 0, 0, 0, 4, -1, -2, 0, 4, -1, -1, 0, 4, -1, 0, 0, 4, 0, -2, 0, 4, 0, -1, 0, 4, 0, 0, 0, 4, 0, 1, 0 }; static const double coef03[NUM03 * 7] = { 385000.52719, -7992.63, -11.06, 21578.08, -4.53, 11.39, -0.06, -3.14837, -204.48, -138.94, 159.64, -0.39, 0.12, 0.00, 79.66183, -359.45, 3583.79, 1454.02, -2.37, 0.85, 0.00, -20905.32206, 6888.23, -35.83, -380331.74, 22.31, 1.77, 0.00, -4.42124, 18.29, -198.91, -161.90, 0.14, -0.04, 0.00, -569.92332, 374.44, -1.99, -20737.33, 5.79, 0.44, 0.00, -23.21032, 26.49, -0.14, -1266.64, 0.63, 0.05, 0.00, -1.11693, 1.98, 0.00, -81.26, 0.06, 0.00, 0.00, -7.00293, -161.63, 3.29, -254.78, -419.55, -0.12, 0.00, -129.62476, -3122.77, 61.80, -2362.46, -7767.84, -0.74, 0.00, 48.89010, 1082.40, -25.99, 156.78, 2926.50, -3.76, 0.02, 104.75896, 2165.07, -47.62, 1929.10, 6279.07, -0.60, 0.00, 5.75105, 119.47, -2.62, 210.76, 344.76, -0.09, 0.00, -2.11728, -59.78, 1.22, -38.70, -253.61, 0.00, 0.00, 1.06575, 16.47, -0.60, 3.28, 127.54, 0.00, 0.00, 1.16562, 22.20, -0.39, 21.49, 139.60, 0.00, 0.00, -1.73852, -48.13, 1.59, -63.71, -0.50, -675.99, 3.56, -8.37909, -219.27, 9.53, -156.07, -0.84, -3257.99, 17.18, 108.74265, 2351.06, -120.48, 69.82, 2.01, 42281.56, -222.90, 6.32199, 138.54, -6.74, 118.10, -0.56, 2458.13, -12.96, -16.67533, -4.78, 10.81, -19.36, -997.67, -6483.73, 34.18, -4.95049, -84.90, 0.91, -90.35, -592.24, 0.03, 0.00, -9.88519, -346.35, 1.99, -14.48, -1182.31, 0.07, 0.00, 10.05654, 188.87, -1.29, 366.36, 601.57, -0.03, 0.00, -152.14314, -2564.20, 30.40, -2771.74, -9097.84, 0.06, 0.00, -204.59357, -6583.80, 38.79, -377.95, -12225.82, 0.27, 0.00, -12.83185, -434.14, 2.98, -260.02, -766.51, 0.02, 0.00, 14.40262, 282.85, -2.35, 786.99, 0.58, 0.14, 0.00, 246.15768, 4806.36, -51.78, 8962.91, -0.43, 1.11, 0.00, 8.75170, 133.45, 390.01, 155.98, -0.28, 0.20, 0.00, -3699.10468, -63127.05, 818.00, -67236.74, 147.86, -15.95, 0.14, 10.32129, 282.08, 460.16, -60.76, -1.29, 0.06, 0.00, -2955.96651, -86674.51, 507.99, -7597.69, 323.54, -19.09, 0.14, 4.13118, 20.86, 186.87, 75.09, -0.76, 0.00, 0.00, -170.73274, -4963.30, 29.72, -3579.16, 26.82, -1.82, 0.00, -10.44472, -300.48, 1.81, -410.75, 2.24, -0.17, 0.00, 24.20935, -837.26, 13.30, 449.34, 1443.45, 0.26, 0.00, 30.82498, 873.36, -8.40, 94.40, 1844.57, 3.86, -0.02, 2.61650, 90.88, -1.01, 56.02, 156.64, 0.49, 0.00, 2.35380, 79.52, -0.72, 42.86, 282.05, -0.06, 0.00, 3.25823, 117.77, -2.27, 61.91, -1.34, 1266.88, -6.68, -1.41893, -19.43, -0.69, 10.76, -0.63, -551.71, 2.91, -1.89710, -73.13, 0.79, -69.17, -113.34, -0.12, 0.00, -3.95812, -199.78, 1.54, -80.75, -236.16, 0.15, 0.00, -1.57145, -94.02, 0.59, -18.48, -93.65, -0.26, 0.00, -21.63627, -808.81, 9.47, -788.01, 2.77, -1.21, 0.00, -34.78245, -1678.73, 13.50, -725.23, 8.97, 0.88, 0.00, -11.64993, -657.42, 4.13, -155.60, 4.42, -2.17, 0.00, -1.42255, -81.30, 0.50, -40.47, 0.68, -0.21, 0.00 }; static const int NUM04 = 1; static const int iz04[NUM04] = { 1 }; static const int ilu04[NUM04 * 4] = { 0, 0, 0, -1 }; static const double pha04[NUM04] = { 0.00094 }; static const double x04[NUM04] = { 7.06304 }; static const int NUM05 = 1; static const int iz05[NUM05] = { 1 }; static const int ilu05[NUM05 * 4] = { 0, 0, 0, 0 }; static const double pha05[NUM05] = { 180.00071 }; static const double x05[NUM05] = { 8.04508 }; static const int NUM06 = 0; static const int *iz06 = NULL; static const int *ilu06 = NULL; static const double *pha06 = NULL; static const double *x06 = NULL; static const int NUM07 = 0; static const int *iz07 = NULL; static const int *ilu07 = NULL; static const double *pha07 = NULL; static const double *x07 = NULL; static const int NUM08 = 0; static const int *iz08 = NULL; static const int *ilu08 = NULL; static const double *pha08 = NULL; static const double *x08 = NULL; static const int NUM09 = 0; static const int *iz09 = NULL; static const int *ilu09 = NULL; static const double *pha09 = NULL; static const double *x09 = NULL; static const int NUM22 = 0; static const int *iz22 = NULL; static const int *ilu22 = NULL; static const double *pha22 = NULL; static const double *x22 = NULL; static const int NUM23 = 0; static const int *iz23 = NULL; static const int *ilu23 = NULL; static const double *pha23 = NULL; static const double *x23 = NULL; static const int NUM24 = 0; static const int *iz24 = NULL; static const int *ilu24 = NULL; static const double *pha24 = NULL; static const double *x24 = NULL; static const int NUM25 = 0; static const int *iz25 = NULL; static const int *ilu25 = NULL; static const double *pha25 = NULL; static const double *x25 = NULL; static const int NUM26 = 0; static const int *iz26 = NULL; static const int *ilu26 = NULL; static const double *pha26 = NULL; static const double *x26 = NULL; static const int NUM27 = 0; static const int *iz27 = NULL; static const int *ilu27 = NULL; static const double *pha27 = NULL; static const double *x27 = NULL; static const int NUM28 = 0; static const int *iz28 = NULL; static const int *ilu28 = NULL; static const double *pha28 = NULL; static const double *x28 = NULL; static const int NUM29 = 0; static const int *iz29 = NULL; static const int *ilu29 = NULL; static const double *pha29 = NULL; static const double *x29 = NULL; static const int NUM30 = 0; static const int *iz30 = NULL; static const int *ilu30 = NULL; static const double *pha30 = NULL; static const double *x30 = NULL; static const int NUM31 = 0; static const int *iz31 = NULL; static const int *ilu31 = NULL; static const double *pha31 = NULL; static const double *x31 = NULL; static const int NUM32 = 0; static const int *iz32 = NULL; static const int *ilu32 = NULL; static const double *pha32 = NULL; static const double *x32 = NULL; static const int NUM33 = 0; static const int *iz33 = NULL; static const int *ilu33 = NULL; static const double *pha33 = NULL; static const double *x33 = NULL; static const int NUM34 = 0; static const int *iz34 = NULL; static const int *ilu34 = NULL; static const double *pha34 = NULL; static const double *x34 = NULL; static const int NUM35 = 0; static const int *iz35 = NULL; static const int *ilu35 = NULL; static const double *pha35 = NULL; static const double *x35 = NULL; static const int NUM36 = 0; static const int *iz36 = NULL; static const int *ilu36 = NULL; static const double *pha36 = NULL; static const double *x36 = NULL; static const int NUM10 = 2; static const int ipla10[NUM10 * 11] = { 0, 0, 2, 0, -2, 0, 0, 0, 2, -1, 0, 0, 18,-16, 0, 0, 0, 0, 0, 0, -1, 0 }; static const double pha10[NUM10] = { 180.11977, 26.54261 }; static const double x10[NUM10] = { 1.14307, 14.24883 }; static const int NUM11 = 0; static const int *ipla11 = NULL; static const double *pha11 = NULL; static const double *x11 = NULL; static const int NUM12 = 1; static const int ipla12[NUM12 * 11] = { 0, 0, 2, 0, -2, 0, 0, 0, 2, -1, 0 }; static const double pha12[NUM12] = { 90.11969 }; static const double x12[NUM12] = { 1.05870 }; static const int NUM13 = 0; static const int *ipla13 = NULL; static const double *pha13 = NULL; static const double *x13 = NULL; static const int NUM14 = 0; static const int *ipla14 = NULL; static const double *pha14 = NULL; static const double *x14 = NULL; static const int NUM15 = 0; static const int *ipla15 = NULL; static const double *pha15 = NULL; static const double *x15 = NULL; static const int NUM16 = 0; static const int *ipla16 = NULL; static const double *pha16 = NULL; static const double *x16 = NULL; static const int NUM17 = 1; static const int ipla17[NUM17 * 11] = { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }; static const double pha17[NUM17] = { 275.13226 }; static const double x17[NUM17] = { 1.37497 }; static const int NUM18 = 0; static const int *ipla18 = NULL; static const double *pha18 = NULL; static const double *x18 = NULL; static const int NUM19 = 1; static const int ipla19[NUM19 * 11] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }; static const double pha19[NUM19] = { 0.00000 }; static const double x19[NUM19] = { 1.67680 }; static const int NUM20 = 0; static const int *ipla20 = NULL; static const double *pha20 = NULL; static const double *x20 = NULL; static const int NUM21 = 0; static const int *ipla21 = NULL; static const double *pha21 = NULL; static const double *x21 = NULL; static const int NUM[36] = { NUM01, NUM02, NUM03, NUM04, NUM05, NUM06, NUM07, NUM08, NUM09, NUM10, NUM11, NUM12, NUM13, NUM14, NUM15, NUM16, NUM17, NUM18, NUM19, NUM20, NUM21, NUM22, NUM23, NUM24, NUM25, NUM26, NUM27, NUM28, NUM29, NUM30, NUM31, NUM32, NUM33, NUM34, NUM35, NUM36 }; static const int *ILU[36] = { ilu01, ilu02, ilu03, ilu04, ilu05, ilu06, ilu07, ilu08, ilu09, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ilu22, ilu23, ilu24, ilu25, ilu26, ilu27, ilu28, ilu29, ilu30, ilu31, ilu32, ilu33, ilu34, ilu35, ilu36 }; static const double *COEF[3] = { coef01, coef02, coef03 }; static const int *IZ[36] = { NULL, NULL, NULL, iz04, iz05, iz06, iz07, iz08, iz09, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, iz22, iz23, iz24, iz25, iz26, iz27, iz28, iz29, iz30, iz31, iz32, iz33, iz34, iz35, iz36 }; static const double *PHA[36] = { NULL, NULL, NULL, pha04, pha05, pha06, pha07, pha08, pha09, pha10, pha11, pha12, pha13, pha14, pha15, pha16, pha17, pha18, pha19, pha20, pha21, pha22, pha23, pha24, pha25, pha26, pha27, pha28, pha29, pha30, pha31, pha32, pha33, pha34, pha35, pha36 }; static const double *XX[36] = { NULL, NULL, NULL, x04, x05, x06, x07, x08, x09, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36 }; static const int *IPLA[21] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ipla10, ipla11, ipla12, ipla13, ipla14, ipla15, ipla16, ipla17, ipla18, ipla19, ipla20, ipla21 }; #endif xplanet-1.3.0/src/libephemeris/libmoons/neptune.cpp0000644000175000017500000000567210411416255017363 00000000000000#include #include #include using namespace std; /* Ephemerides for Triton and Nereid are described in Jacobson, Astron. Astrophys. 231, 241-250 (1990) */ #include "body.h" #include "xpUtil.h" void nepsat(const double jd, const body b, double &X, double &Y, double &Z) { double td; // Julian days from reference date double ty; // Julian years from reference date double tc; // Julian centuries from reference date double a; // semimajor axis double L; // mean longitude double e; // eccentricity double w; // longitude of periapse double i; // inclination of orbit double o; // longitude of ascending node double ma; // mean anomaly double N; // node of the orbital reference plane on the // Earth equator B1950 double J; // inclination of orbital reference plane with // respect to the Earth equator B1950 switch (b) { case TRITON: td = jd - 2433282.5; ty = td/365.25; tc = ty/100; a = 354611.773; L = (49.85334766 + 61.25726751 * td) * deg_to_rad; e = 0.0004102259410; i = 157.6852321 * deg_to_rad; o = (151.7973992 + 0.5430763965 * ty) * deg_to_rad; w = (236.7318362 + 0.5295275852 * ty) * deg_to_rad; ma = L - w; w += o; // inclination and node of the invariable plane on the Earth // equator of 1950 J = (90 - 42.51071244) * deg_to_rad; N = (90 + 298.3065940) * deg_to_rad; break; case NEREID: td = jd - 2433680.5; tc = td/36525; a = 5511233.255; L = (251.14984688 + 0.9996465329 * td) * deg_to_rad; e = 0.750876291; i = 6.748231850 * deg_to_rad; o = (315.9958928 - 3.650272562 * tc) * deg_to_rad; w = (251.7242240 + 0.8696048083 * tc) * deg_to_rad; ma = L - w; w -= o; // inclination and node of Neptune's orbit on the Earth // equator of 1950 J = 22.313 * deg_to_rad; N = 3.522 * deg_to_rad; break; default: xpExit("Unknown Neptune satellite\n", __FILE__, __LINE__); } double E = kepler(e, ma); // convert semi major axis from km to AU a /= AU_to_km; // rectangular coordinates on the orbit plane, x-axis is toward // pericenter X = a * (cos(E) - e); Y = a * sqrt(1 - e*e) * sin(E); Z = 0; // rotate towards ascending node of the orbit rotateZ(X, Y, Z, -w); // rotate towards orbital reference plane rotateX(X, Y, Z, -i); // rotate towards ascending node of the orbital reference plane on // the Earth equator B1950 rotateZ(X, Y, Z, -o); // rotate towards Earth equator B1950 rotateX(X, Y, Z, -J); // rotate to vernal equinox rotateZ(X, Y, Z, -N); // precess to J2000 precessB1950J2000(X, Y, Z); } xplanet-1.3.0/src/libephemeris/Makefile.am0000644000175000017500000000114710411416255015404 00000000000000SUBDIRS = libmoons noinst_LIBRARIES = libephemeris.a AM_CPPFLAGS = -I@top_srcdir@/src if USE_AR libephemeris_a_AR = $(AR) cru else libephemeris_a_AR = $(CXX) @xplanet_ARFLAGS@ endif if HAVE_CSPICE spiceFiles = EphemerisSpice.cpp EphemerisSpice.h endif EXTRA_libephemeris_a_SOURCES = EphemerisSpice.cpp EphemerisSpice.h libephemeris_a_SOURCES = \ Ephemeris.cpp \ Ephemeris.h \ EphemerisHigh.cpp \ EphemerisHigh.h \ EphemerisLow.cpp \ EphemerisLow.h \ ephemerisWrapper.h \ ephemerisWrapper.cpp \ jpl_int.h \ jpleph.cpp \ jpleph.h \ pluto.cpp \ $(spiceFiles) xplanet-1.3.0/src/libephemeris/Ephemeris.cpp0000644000175000017500000000012110411416255015764 00000000000000#include "Ephemeris.h" Ephemeris::Ephemeris() { } Ephemeris::~Ephemeris() { } xplanet-1.3.0/src/libephemeris/EphemerisHigh.cpp0000644000175000017500000000447310411416255016602 00000000000000#include "jpleph.h" #include "xpUtil.h" #include "EphemerisHigh.h" #include using namespace std; EphemerisHigh::EphemerisHigh(const string &ephemerisFile) : Ephemeris() { ephem_ = jpl_init_ephemeris(ephemerisFile.c_str(), NULL, NULL); if (ephem_ == NULL) { ostringstream errMsg; errMsg << "Can't initialize ephemeris from " << ephemerisFile << "\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } } EphemerisHigh::~EphemerisHigh() { jpl_close_ephemeris(ephem_); } void EphemerisHigh::GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz) { int target = -1; switch (b) { case MERCURY: target = 1; break; case VENUS: target = 2; break; case EARTH: target = 3; break; case MARS: target = 4; break; case JUPITER: target = 5; break; case SATURN: target = 6; break; case URANUS: target = 7; break; case NEPTUNE: target = 8; break; case PLUTO: target = 9; break; case MOON: target = 10; break; case SUN: Px = 0; Py = 0; Pz = 0; target = 11; return; break; default: xpExit("Invalid body in ephemeris()\n", __FILE__, __LINE__); break; } jpl_get_long(ephem_, JPL_EPHEM_N_CONSTANTS); const double start = jpl_get_double(ephem_, JPL_EPHEM_START_JD); const double end = jpl_get_double(ephem_, JPL_EPHEM_END_JD); if (tjd < start || tjd > end) { ostringstream errMsg; errMsg << "Date (" << fromJulian(tjd) << ") out of range of file (" << fromJulian(start) << " to " << fromJulian(end) << ")\n"; xpExit(errMsg.str(), __FILE__, __LINE__); } double r[6] = { 0, 0, 0, 0, 0, 0 }; const int origin = 11; // 11 = sun, 12 = solar system barycenter const int calcVelocity = 0; // calculates velocities if nonzero if (jpl_pleph(ephem_, tjd, target, origin, r, calcVelocity)) xpWarn("Error in jpl_pleph\n", __FILE__, __LINE__); Px = r[0]; Py = r[1]; Pz = r[2]; double Vx = 0, Vy = 0, Vz = 0; Vx = r[3]; Vy = r[4]; Vz = r[5]; } xplanet-1.3.0/src/libephemeris/jpleph.cpp0000644000175000017500000007767211363603660015363 00000000000000/***************************************************************************** * ***** jpl planetary and lunar ephemerides ***** C ver.1.2 * ****************************************************************************** * * * This program was written in standard fortran-77 and it was manually * * translated to C language by Piotr A. Dybczynski (dybol@phys.amu.edu.pl), * * subsequently revised heavily by Bill J Gray (pluto@gwi.net), just short * * of a total re-write. * * * ****************************************************************************** * Last modified: July 23, 1997 by PAD * ****************************************************************************** 21 Apr 2010: Revised by Bill J. Gray. The code now determines the kernel size, then allocates memory accordingly. This should 'future-proof' us in case JPL (or someone else) creates kernels that are larger than the previously arbitrary MAX_KERNEL_SIZE parameter. 'swap_long' and 'swap_double' have been replaced with 'swap_32_bit_val' and 'swap_64_bit_val'. It also works on 64-bit compiles now. 16 Mar 2001: Revised by Bill J. Gray. You can now use binary ephemerides with either byte order ('big-endian' or 'small-endian'); the code checks to see if the data is in the "wrong" order for the current platform, and swaps bytes on-the-fly if needed. (Yes, this can result in a slowdown... sometimes as much as 1%. The function is so mathematically intensive that the byte-swapping is the least of our troubles.) You can also use DE-200, 403, 404, 405, or 406 without recompiling (the constan( ) function now determines which ephemeris is in use and its byte order). Also, I did some minor optimization of the interp( ) (Chebyshev interpolation) function, resulting in a bit of a speedup. The code has been modified to be a separately linkable component, with details of the implementation encapsulated. *****************************************************************************/ #include #include #include #include #ifdef _MSC_VER /* Microsoft Visual C/C++ lacks a 'stdint.h'; */ #include "stdintvc.h" /* 'stdintvc.h' is a replacement version */ #else #include #endif /**** include variable and type definitions, specific for this C version */ #include "jpleph.h" #include "jpl_int.h" #define TRUE 1 #define FALSE 0 double DLL_FUNC jpl_get_double( const void *ephem, const int value) { return( *(double *)( (char *)ephem + value)); } long DLL_FUNC jpl_get_long( const void *ephem, const int value) { return( *(int32_t *)( (char *)ephem + value)); } /***************************************************************************** ** jpl_pleph( ephem,et,ntar,ncent,rrd,calc_velocity) ** ****************************************************************************** ** ** ** This subroutine reads the jpl planetary ephemeris ** ** and gives the position and velocity of the point 'ntarg' ** ** with respect to 'ncent'. ** ** ** ** Calling sequence parameters: ** ** ** ** et = (double) julian ephemeris date at which interpolation ** ** is wanted. ** ** ** ** ntarg = integer number of 'target' point. ** ** ** ** ncent = integer number of center point. ** ** ** ** The numbering convention for 'ntarg' and 'ncent' is: ** ** ** ** 1 = mercury 8 = neptune ** ** 2 = venus 9 = pluto ** ** 3 = earth 10 = moon ** ** 4 = mars 11 = sun ** ** 5 = jupiter 12 = solar-system barycenter ** ** 6 = saturn 13 = earth-moon barycenter ** ** 7 = uranus 14 = nutations (longitude and obliq) ** ** 15 = librations, if on eph. file ** ** ** ** (If nutations are wanted, set ntarg = 14. ** ** For librations, set ntarg = 15. set ncent= 0) ** ** ** ** rrd = output 6-element, double array of position and velocity ** ** of point 'ntarg' relative to 'ncent'. The units are au and ** ** au/day. For librations the units are radians and radians ** ** per day. In the case of nutations the first four words of ** ** rrd will be set to nutations and rates, having units of ** ** radians and radians/day. ** ** ** ** The option is available to have the units in km and km/sec. ** ** for this, set km=TRUE at the begining of the program. ** ** ** ** calc_velocity = integer flag; if nonzero, velocities will be ** ** computed, otherwise not. ** ** ** *****************************************************************************/ int DLL_FUNC jpl_pleph( void *ephem, const double et, const int ntarg, const int ncent, double rrd[], const int calc_velocity) { struct jpl_eph_data *eph = (struct jpl_eph_data *)ephem; double pv[13][6];/* pv is the position/velocity array NUMBERED FROM ZERO: 0=Mercury,1=Venus,... 8=Pluto,9=Moon,10=Sun,11=SSBary,12=EMBary First 10 elements (0-9) are affected by jpl_state(), all are adjusted here. */ int rval = 0, list_val = (calc_velocity ? 2 : 1); int i, k, list[12]; /* list is a vector denoting, for which "body" ephemeris values should be calculated by jpl_state(): 0=Mercury,1=Venus,2=EMBary,..., 8=Pluto, 9=geocentric Moon, 10=nutations in long. & obliq. 11= lunar librations */ for( i = 0; i < 6; ++i) rrd[i] = 0.0; if( ntarg == ncent) return( 0); for( i = 0; i < 12; i++) list[i] = 0; /* check for nutation call */ if( ntarg == 14) { if( eph->ipt[11][1] > 0) /* there is nutation on ephemeris */ { list[10] = list_val; if( jpl_state( ephem, et, list, pv, rrd, 0)) rval = -1; } else /* no nutations on the ephemeris file */ rval = -2; return( rval); } /* check for librations */ if( ntarg == 15) { if( eph->ipt[12][1] > 0) /* there are librations on ephemeris file */ { list[11] = list_val; if( jpl_state( eph, et, list, pv, rrd, 0)) rval = -3; for( i = 0; i < 6; ++i) rrd[i] = pv[10][i]; /* librations */ } else /* no librations on the ephemeris file */ rval = -4; return( rval); } /* force barycentric output by 'state' */ /* set up proper entries in 'list' array for state call */ for( i = 0; i < 2; i++) /* list[] IS NUMBERED FROM ZERO ! */ { k = ntarg-1; if( i == 1) k=ncent-1; /* same for ntarg & ncent */ if( k <= 9) list[k] = list_val; /* Major planets */ if( k == 9) list[2] = list_val; /* for moon, earth state is needed */ if( k == 2) list[9] = list_val; /* for earth, moon state is needed */ if( k == 12) list[2] = list_val; /* EMBary state additionaly */ } /* make call to state */ if( jpl_state( eph, et, list, pv, rrd, 1)) rval = -5; /* Solar System barycentric Sun state goes to pv[10][] */ if( ntarg == 11 || ncent == 11) for( i = 0; i < 6; i++) pv[10][i] = eph->pvsun[i]; /* Solar System Barycenter coordinates & velocities equal to zero */ if( ntarg == 12 || ncent == 12) for( i = 0; i < 6; i++) pv[11][i] = 0.0; /* Solar System barycentric EMBary state: */ if( ntarg == 13 || ncent == 13) for( i = 0; i < 6; i++) pv[12][i] = pv[2][i]; /* if moon from earth or earth from moon ..... */ if( (ntarg*ncent) == 30 && (ntarg+ncent) == 13) for( i = 0; i < 6; ++i) pv[2][i]=0.0; else { if( list[2]) /* calculate earth state from EMBary */ for( i = 0; i < list[2] * 3; ++i) pv[2][i] -= pv[9][i]/(1.0+eph->emrat); if(list[9]) /* calculate Solar System barycentric moon state */ for( i = 0; i < list[9] * 3; ++i) pv[9][i] += pv[2][i]; } for( i = 0; i < list_val * 3; ++i) rrd[i] = pv[ntarg-1][i] - pv[ncent-1][i]; return( rval); } /***************************************************************************** ** interp(buf,t,ncf,ncm,na,ifl,pv) ** ****************************************************************************** ** ** ** this subroutine differentiates and interpolates a ** ** set of chebyshev coefficients to give position and velocity ** ** ** ** calling sequence parameters: ** ** ** ** input: ** ** ** ** iinfo stores certain chunks of interpolation info, in hopes ** ** that if you call again with similar parameters, the ** ** function won't have to re-compute all coefficients/data. ** ** ** ** coef 1st location of array of d.p. chebyshev coefficients ** ** of position ** ** ** ** t t[0] is double fractional time in interval covered by ** ** coefficients at which interpolation is wanted ** ** (0 <= t[0] <= 1). t[1] is dp length of whole ** ** interval in input time units. ** ** ** ** ncf # of coefficients per component ** ** ** ** ncm # of components per set of coefficients ** ** ** ** na # of sets of coefficients in full array ** ** (i.e., # of sub-intervals in full interval) ** ** ** ** ifl integer flag: =1 for positions only ** ** =2 for pos and vel ** ** ** ** ** ** output: ** ** ** ** posvel interpolated quantities requested. dimension ** ** expected is posvel[ncm*ifl], double precision. ** ** ** *****************************************************************************/ static void interp( struct interpolation_info *iinfo, const double coef[], const double t[2], const int ncf, const int ncm, const int na, const int ifl, double posvel[]) { double dna, dt1, temp, tc, vfac, temp1; int l, i, j; /* entry point. get correct sub-interval number for this set of coefficients and then get normalized chebyshev time within that subinterval. */ dna = (double)na; modf( t[0], &dt1); temp = dna * t[0]; l = (int)(temp - dt1); /* tc is the normalized chebyshev time (-1 <= tc <= 1) */ tc = 2.0 * (modf( temp, &temp1) + dt1) - 1.0; /* check to see whether chebyshev time has changed, and compute new polynomial values if it has. (the element iinfo->pc[1] is the value of t1[tc] and hence contains the value of tc on the previous call.) */ if(tc != iinfo->pc[1]) { iinfo->np = 2; iinfo->nv = 3; iinfo->pc[1] = tc; iinfo->twot = tc+tc; } /* be sure that at least 'ncf' polynomials have been evaluated and are stored in the array 'iinfo->pc'. */ if(iinfo->np < ncf) { double *pc_ptr = iinfo->pc + iinfo->np; for(i=ncf - iinfo->np; i; i--, pc_ptr++) *pc_ptr = iinfo->twot * pc_ptr[-1] - pc_ptr[-2]; iinfo->np=ncf; } /* interpolate to get position for each component */ for( i = 0; i < ncm; ++i) /* ncm is a number of coordinates */ { const double *coeff_ptr = coef + ncf * (i + l * ncm + 1); const double *pc_ptr = iinfo->pc + ncf; posvel[i]=0.0; for( j = ncf; j; j--) posvel[i] += (*--pc_ptr) * (*--coeff_ptr); } if(ifl <= 1) return; /* if velocity interpolation is wanted, be sure enough derivative polynomials have been generated and stored. */ vfac=(dna+dna)/t[1]; iinfo->vc[2] = iinfo->twot + iinfo->twot; if( iinfo->nv < ncf) { double *vc_ptr = iinfo->vc + iinfo->nv; const double *pc_ptr = iinfo->pc + iinfo->nv - 1; for( i = ncf - iinfo->nv; i; i--, vc_ptr++, pc_ptr++) *vc_ptr = iinfo->twot * vc_ptr[-1] + *pc_ptr + *pc_ptr - vc_ptr[-2]; iinfo->nv = ncf; } /* interpolate to get velocity for each component */ for( i = 0; i < ncm; ++i) { double tval = 0.; const double *coeff_ptr = coef + ncf * (i + l * ncm + 1); const double *vc_ptr = iinfo->vc + ncf; for( j = ncf; j; j--) tval += (*--vc_ptr) * (*--coeff_ptr); posvel[ i + ncm] = tval * vfac; } return; } /* swap_32_bit_val() and swap_64_bit_val() are used when reading a binary ephemeris that was created on a machine with 'opposite' byte order to the currently-used machine (signalled by the 'swap_bytes' flag in the jpl_eph_data structure). In such cases, every double and integer value read from the ephemeris must be byte-swapped by these two functions. */ #define SWAP_MACRO( A, B, TEMP) { TEMP = A; A = B; B = TEMP; } static void swap_32_bit_val( void *ptr) { char *tptr = (char *)ptr, tchar; SWAP_MACRO( tptr[0], tptr[3], tchar); SWAP_MACRO( tptr[1], tptr[2], tchar); } static void swap_64_bit_val( void *ptr, long count) { char *tptr = (char *)ptr, tchar; while( count--) { SWAP_MACRO( tptr[0], tptr[7], tchar); SWAP_MACRO( tptr[1], tptr[6], tchar); SWAP_MACRO( tptr[2], tptr[5], tchar); SWAP_MACRO( tptr[3], tptr[4], tchar); tptr += 8; } } /***************************************************************************** ** jpl_state(ephem,et2,list,pv,nut,bary) ** ****************************************************************************** ** This subroutine reads and interpolates the jpl planetary ephemeris file ** ** ** ** Calling sequence parameters: ** ** ** ** Input: ** ** ** ** et2[] double, 2-element JED epoch at which interpolation ** ** is wanted. Any combination of et2[0]+et2[1] which falls ** ** within the time span on the file is a permissible epoch. ** ** ** ** a. for ease in programming, the user may put the ** ** entire epoch in et2[0] and set et2[1]=0.0 ** ** ** ** b. for maximum interpolation accuracy, set et2[0] = ** ** the most recent midnight at or before interpolation ** ** epoch and set et2[1] = fractional part of a day ** ** elapsed between et2[0] and epoch. ** ** ** ** c. as an alternative, it may prove convenient to set ** ** et2[0] = some fixed epoch, such as start of integration,** ** and et2[1] = elapsed interval between then and epoch. ** ** ** ** list 12-element integer array specifying what interpolation ** ** is wanted for each of the "bodies" on the file. ** ** ** ** list[i]=0, no interpolation for body i ** ** =1, position only ** ** =2, position and velocity ** ** ** ** the designation of the astronomical bodies by i is: ** ** ** ** i = 0: mercury ** ** = 1: venus ** ** = 2: earth-moon barycenter ** ** = 3: mars ** ** = 4: jupiter ** ** = 5: saturn ** ** = 6: uranus ** ** = 7: neptune ** ** = 8: pluto ** ** = 9: geocentric moon ** ** =10: nutations in longitude and obliquity ** ** =11: lunar librations (if on file) ** ** ** ** output: ** ** ** ** pv[][6] double array that will contain requested interpolated ** ** quantities. The body specified by list[i] will have its ** ** state in the array starting at pv[i][0] (on any given ** ** call, only those words in 'pv' which are affected by the ** ** first 10 'list' entries (and by list(11) if librations are ** ** on the file) are set. The rest of the 'pv' array ** ** is untouched.) The order of components in pv[][] is: ** ** pv[][0]=x,....pv[][5]=dz. ** ** ** ** All output vectors are referenced to the earth mean ** ** equator and equinox of epoch. The moon state is always ** ** geocentric; the other nine states are either heliocentric ** ** or solar-system barycentric, depending on the setting of ** ** global variables (see below). ** ** ** ** Lunar librations, if on file, are put into pv[10][k] if ** ** list[11] is 1 or 2. ** ** ** ** nut dp 4-word array that will contain nutations and rates, ** ** depending on the setting of list[10]. the order of ** ** quantities in nut is: ** ** ** ** d psi (nutation in longitude) ** ** d epsilon (nutation in obliquity) ** ** d psi dot ** ** d epsilon dot ** ** ** *****************************************************************************/ int DLL_FUNC jpl_state( void *ephem, const double et, const int list[12], double pv[][6], double nut[4], const int bary) { struct jpl_eph_data *eph = (struct jpl_eph_data *)ephem; int i,j, n_intervals; long int nr; double prev_midnight, time_of_day; double *buf = eph->cache; double s,t[2],aufac; struct interpolation_info *iinfo = (struct interpolation_info *)eph->iinfo; /* ********** main entry point ********** */ s=et - 0.5; prev_midnight = floor( s); time_of_day = s - prev_midnight; prev_midnight += 0.5; /* here prev_midnight contains last midnight before epoch desired (in JED: *.5) and time_of_day contains the remaining, fractional part of the epoch */ /* error return for epoch out of range */ if( et < eph->ephem_start || et > eph->ephem_end) return( -1); /* calculate record # and relative time in interval */ nr = (long)((prev_midnight-eph->ephem_start)/eph->ephem_step)+2; /* add 2 to adjus for the first two records containing header data */ if( prev_midnight == eph->ephem_end) nr--; t[0]=( prev_midnight-( (1.0*nr-2.0)*eph->ephem_step+eph->ephem_start) + time_of_day )/eph->ephem_step; /* read correct record if not in core (static vector buf[]) */ if( nr != eph->curr_cache_loc) { eph->curr_cache_loc = nr; fseek( eph->ifile, nr * eph->recsize, SEEK_SET); if( fread( buf, sizeof( double), (size_t)eph->ncoeff, eph->ifile) != (size_t)eph->ncoeff) return( -2); if( eph->swap_bytes) swap_64_bit_val( buf, eph->ncoeff); } t[1] = eph->ephem_step; aufac = 1.0 / eph->au; for( n_intervals = 1; n_intervals <= 8; n_intervals *= 2) for( i = 0; i < 11; i++) if( n_intervals == eph->ipt[i][2] && (list[i] || i == 10)) { int flag = ((i == 10) ? 2 : list[i]); double *dest = ((i == 10) ? eph->pvsun : pv[i]); interp( iinfo, &buf[eph->ipt[i][0]-1], t, (int)eph->ipt[i][1], 3, n_intervals, flag, dest); /* gotta convert units */ for( j = 0; j < flag * 3; j++) dest[j] *= aufac; } if( !bary) /* gotta correct everybody for */ for( i = 0; i < 9; i++) /* the solar system barycenter */ for( j = 0; j < list[i] * 3; j++) pv[i][j] -= eph->pvsun[j]; /* do nutations if requested (and if on file) */ if(list[10] > 0 && eph->ipt[11][1] > 0) interp( iinfo, &buf[eph->ipt[11][0]-1], t, (int)eph->ipt[11][1], 2, (int)eph->ipt[11][2], list[10], nut); /* get librations if requested (and if on file) */ if(list[11] > 0 && eph->ipt[12][1] > 0) { double pefau[6]; interp( iinfo, &buf[eph->ipt[12][0]-1], t, (int)eph->ipt[12][1], 3, (int)eph->ipt[12][2], list[11], pefau); for( j = 0; j < 6; ++j) pv[10][j]=pefau[j]; } return( 0); } /**************************************************************************** ** jpl_init_ephemeris( ephemeris_filename, nam, val, n_constants) ** ***************************************************************************** ** ** ** this function does the initial prep work for use of binary JPL ** ** ephemerides. ** ** const char *ephemeris_filename = full path/filename of the binary ** ** ephemeris (on the Willmann-Bell CDs, this is UNIX.200, 405, ** ** or 406) ** char nam[][6] = array of constant names (max 6 characters each) ** ** You can pass nam=NULL if you don't care about the names ** ** double *val = array of values of constants ** ** You can pass val=NULL if you don't care about the constants ** ** Return value is a pointer to the jpl_eph_data structure ** ** NULL is returned if the file isn't opened or memory isn't alloced ** ****************************************************************************/ int jpl_init_err_code = 0; void * DLL_FUNC jpl_init_ephemeris( const char *ephemeris_filename, char nam[][6], double *val) { int i, j; long de_version; char title[84]; FILE *ifile = fopen( ephemeris_filename, "rb"); struct jpl_eph_data *rval; struct jpl_eph_data temp_data; struct interpolation_info *iinfo; jpl_init_err_code = 0; if( !ifile) { jpl_init_err_code = -1; return( NULL); } temp_data.ifile = ifile; if( fread( title, 84, 1, ifile) != 1) jpl_init_err_code = -3; fseek( ifile, 2652L, SEEK_SET); /* skip title & constant name data */ if( fread( &temp_data, JPL_HEADER_SIZE, 1, ifile) != 1) jpl_init_err_code = -4; if( jpl_init_err_code) { fclose( ifile); return( NULL); } de_version = atoi( title + 26); /* A small piece of trickery: in the binary file, data is stored */ /* for ipt[0...11], then the ephemeris version, then the */ /* remaining ipt[12] data. A little switching is required to get */ /* the correct order. */ temp_data.ipt[12][0] = temp_data.ipt[12][1]; temp_data.ipt[12][1] = temp_data.ipt[12][2]; temp_data.ipt[12][2] = temp_data.ephemeris_version; temp_data.ephemeris_version = de_version; temp_data.swap_bytes = ( temp_data.ncon < 0 || temp_data.ncon > 65536L); if( temp_data.swap_bytes) /* byte order is wrong for current platform */ { swap_64_bit_val( &temp_data.ephem_start, 1); swap_64_bit_val( &temp_data.ephem_end, 1); swap_64_bit_val( &temp_data.ephem_step, 1); swap_32_bit_val( &temp_data.ncon); swap_64_bit_val( &temp_data.au, 1); swap_64_bit_val( &temp_data.emrat, 1); for( j = 0; j < 3; j++) for( i = 0; i < 13; i++) swap_32_bit_val( &temp_data.ipt[i][j]); } /* Once upon a time, the kernel size was determined from the */ /* DE version. This was not a terrible idea, except that it */ /* meant that when the code faced a new version, it broke. */ /* Now we use some logic to compute the kernel size. */ temp_data.kernel_size = 4; for( i = 0; i < 13; i++) temp_data.kernel_size += temp_data.ipt[i][1] * temp_data.ipt[i][2] * ((i == 11) ? 4 : 6); temp_data.recsize = temp_data.kernel_size * 4L; temp_data.ncoeff = temp_data.kernel_size / 2L; /* Rather than do three separate allocations, everything */ /* we need is allocated in _one_ chunk, then parceled out. */ /* This looks a little weird, but it does simplify error */ /* handling and cleanup. */ rval = (struct jpl_eph_data *)calloc( sizeof( struct jpl_eph_data) + sizeof( struct interpolation_info) + temp_data.recsize, 1); if( !rval) { jpl_init_err_code = -2; fclose( ifile); return( NULL); } memcpy( rval, &temp_data, sizeof( struct jpl_eph_data)); /* The 'iinfo' struct is right after the 'jpl_eph_data' struct: */ iinfo = (struct interpolation_info *)(rval + 1); rval->iinfo = (void *)iinfo; iinfo->np = 2; iinfo->nv = 3; iinfo->pc[0] = 1.0; iinfo->pc[1] = 0.0; iinfo->vc[1] = 1.0; rval->curr_cache_loc = -1L; /* The 'cache' data is right after the 'iinfo' struct: */ rval->cache = (double *)( iinfo + 1); if( val) { fseek( ifile, rval->recsize, SEEK_SET); if( fread( val, sizeof( double), (size_t)rval->ncon, ifile) != (size_t)rval->ncon) jpl_init_err_code = -5; if( rval->swap_bytes) /* gotta swap the constants, too */ swap_64_bit_val( val, rval->ncon); } if( nam) { fseek( ifile, 84L * 3L, SEEK_SET); /* just after the 3 'title' lines */ for( i = 0; i < (int)rval->ncon; i++) if( fread( nam[i], 6, 1, ifile) != 1) jpl_init_err_code = -6; } return( rval); } /**************************************************************************** ** jpl_close_ephemeris( ephem) ** ***************************************************************************** ** ** ** this function closes files and frees up memory allocated by the ** ** jpl_init_ephemeris( ) function. ** ****************************************************************************/ void DLL_FUNC jpl_close_ephemeris( void *ephem) { struct jpl_eph_data *eph = (struct jpl_eph_data *)ephem; fclose( eph->ifile); free( ephem); } /*************************** THE END ***************************************/ xplanet-1.3.0/src/libephemeris/EphemerisLow.h0000644000175000017500000000227410411416255016126 00000000000000#ifndef EPHEMLOW_H #define EPHEMLOW_H #include #include #include "Ephemeris.h" class EphemerisLow : public Ephemeris { public: EphemerisLow(); ~EphemerisLow(); void GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz); private: void kepler(const double al, const std::complex &z, const double u, std::complex &zto, double &r); void ellipx(const double a, const double dlm, const double e, const double p, const double dia, const double omega, const double dmas, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz); void calcHeliocentricXYZ(const double tjd, const double dmas, double *a, double *dlm, double *e, double *pi, double *dinc, double *omega, int *kp, double *ca, double *sa, int *kq, double *cl, double *sl, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz); }; #endif xplanet-1.3.0/src/libephemeris/EphemerisSpice.cpp0000644000175000017500000000157510411416255016766 00000000000000#include #include "xpUtil.h" #include "EphemerisSpice.h" using namespace std; EphemerisSpice::EphemerisSpice() : Ephemeris() { } EphemerisSpice::~EphemerisSpice() { } void EphemerisSpice::GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz) { // seconds past J2000 const SpiceDouble et = ((tjd - 2451545.0) * 86400); SpiceDouble pos[3]; SpiceDouble lt; SpiceInt SUN = 10; SpiceInt target = naif_id[static_cast (b)]; spkgps_c(target, et, "J2000", SUN, pos, <); if (return_c()) // true if spkgps_c fails { reset_c(); // reset the SPICE error flags Px = 0; Py = 0; Pz = 0; return; } // convert from km to AU for (int i = 0; i < 3; i++) pos[i] /= AU_to_km; Px = pos[0]; Py = pos[1]; Pz = pos[2]; } xplanet-1.3.0/src/libephemeris/ephemerisWrapper.h0000644000175000017500000000066410411416255017046 00000000000000#ifndef EPHEMERISWRAPPER #define EPHEMERISWRAPPER extern void setUpEphemeris(); extern void cleanUpEphemeris(); extern void GetHeliocentricXYZ(const body index, const body primary, const double julianDay, const bool relativeToSun, double &X, double &Y, double &Z); #endif xplanet-1.3.0/src/libephemeris/ephemerisWrapper.cpp0000644000175000017500000000721410411417337017401 00000000000000#include using namespace std; #include "config.h" #include "body.h" #include "findFile.h" #include "Options.h" #include "xpUtil.h" #include "EphemerisHigh.h" #include "EphemerisLow.h" #ifdef HAVE_CSPICE #include "EphemerisSpice.h" #endif #include "libmoons/libmoons.h" static Ephemeris *ephemHigh = NULL; static Ephemeris *ephemLow = NULL; static Ephemeris *ephemSpice = NULL; void setUpEphemeris() { Options *options = Options::getInstance(); string ephemerisFile(options->JPLFile()); if (!ephemerisFile.empty()) { bool foundFile = findFile(ephemerisFile, "ephemeris"); if (foundFile) { ephemHigh = new EphemerisHigh(ephemerisFile.c_str()); } else { ostringstream errStr; errStr << "Can't load ephemeris file " << ephemerisFile << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } } else { ephemLow = new EphemerisLow(); } #ifdef HAVE_CSPICE ephemSpice = new EphemerisSpice(); #endif } void cleanUpEphemeris() { delete ephemHigh; delete ephemLow; delete ephemSpice; ephemHigh = NULL; ephemLow = NULL; ephemSpice = NULL; } void GetHeliocentricXYZ(const body index, const body primary, const double julianDay, const bool relativeToSun, double &X, double &Y, double &Z) { #ifdef HAVE_CSPICE Options *options = Options::getInstance(); vector spiceList = options->SpiceEphemeris(); for (unsigned int i = 0; i < spiceList.size(); i++) { if (naif_id[index] == spiceList[i]) { ephemSpice->GetHeliocentricXYZ(index, julianDay, X, Y, Z); if (!relativeToSun && primary != SUN) { double Prx, Pry, Prz; GetHeliocentricXYZ(primary, SUN, julianDay, true, Prx, Pry, Prz); X -= Prx; Y -= Pry; Z -= Prz; } return; } } #endif Ephemeris *thisEphem = NULL; if (ephemHigh != NULL) thisEphem = ephemHigh; else thisEphem = ephemLow; if (primary == SUN) { thisEphem->GetHeliocentricXYZ(index, julianDay, X, Y, Z); } else if (primary == EARTH && thisEphem == ephemHigh) { // Lunar ephemeris is part of JPL's Digital Ephemeris thisEphem->GetHeliocentricXYZ(index, julianDay, X, Y, Z); if (!relativeToSun) { double Prx, Pry, Prz; GetHeliocentricXYZ(EARTH, SUN, julianDay, true, Prx, Pry, Prz); X -= Prx; Y -= Pry; Z -= Prz; } } else { switch(primary) { case EARTH: moon(julianDay, X, Y, Z); break; case MARS: marsat(julianDay, index, X, Y, Z); break; case JUPITER: jupsat(julianDay, index, X, Y, Z); break; case SATURN: satsat(julianDay, index, X, Y, Z); break; case URANUS: urasat(julianDay, index, X, Y, Z); break; case NEPTUNE: nepsat(julianDay, index, X, Y, Z); break; case PLUTO: plusat(julianDay, X, Y, Z); break; default: break; } if (relativeToSun) { double Prx, Pry, Prz; GetHeliocentricXYZ(primary, SUN, julianDay, true, Prx, Pry, Prz); X += Prx; Y += Pry; Z += Prz; } } } xplanet-1.3.0/src/libephemeris/pluto.cpp0000644000175000017500000003751410411416255015226 00000000000000/* This Pluto ephemeris is based on Chapront J., 1995, A&AS 109, 181 (1995A&AS..109..181C) The code is translated from the FORTRAN code at http://adc.gsfc.nasa.gov/adc-cgi/cat.pl?/catalogs/6/6088/ */ #include #include using namespace std; void pluto(const double JD, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz) { const double x = 2*(JD-2341972.5)/146120 - 1; const double Fx = x*73060; // number of frequencies per coordinate static int nf[] = { 82, 19, 5 }; // Secular Series static double ax[] = { 98083308510., -1465718392., 11528487809., 55397965917. }; static double ay[] = { 101846243715., 57789., -5487929294., 8520205290. }; static double az[] = { 2183700004., 433209785., -4911803413., -14029741184. }; // Frequencies static double fq[] = { 0.0000645003954767,0.0001083248054773,0.0001302772403167, 0.0001647868659960,0.0001935009111902,0.0002223740247147, 0.0003032575201026,0.0003259246239385,0.0003564763034914, 0.0004265811293132,0.0004503959517513,0.0004638675148284, 0.0005009272733421,0.0005163593863414,0.0005578826828210, 0.0005882795362847,0.0006450023602974,0.0007097635821639, 0.0007630643253588,0.0007740033551209,0.0008385031396726, 0.0008950591609720,0.0009545118163938,0.0010255417569600, 0.0010826728325744,0.0011680358909203,0.0012405125052369, 0.0012931805883876,0.0013460706181008,0.0014190059530383, 0.0014394705053002,0.0014502634075377,0.0014992014575181, 0.0015434430430867,0.0016000710611098,0.0016562809940875, 0.0017275924266291,0.0017454042542465,0.0018215079641428, 0.0018694826929211,0.0019274630193251,0.0020276790928706, 0.0021822818660433,0.0022885289854970,0.0023167646379420, 0.0023445464874575,0.0024069306189938,0.0024473146628449, 0.0024778027974419,0.0025244208011161,0.0025682157855485, 0.0026028617439482,0.0026544444009919,0.0026987455959123, 0.0027308225916697,0.0027735113723168,0.0028728385464030, 0.0029001725379479,0.0029379670182566,0.0029750359447782, 0.0031326820696785,0.0031822107498712,0.0031931048857857, 0.0032268922327691,0.0034657232066225,0.0037838581645670, 0.0038055149432355,0.0038631344783149,0.0039129259467328, 0.0040311445462510,0.0040607542008930,0.0041490103414206, 0.0043500678052272,0.0046321937641054,0.0058000376725240, 0.0091460971544658,0.0091560629947357,0.0172021239411871, 0.0182919855069063,0.0279624510118796,0.0344040996177640, 0.0714245719830324,0.0001083248054773,0.0001647868659960, 0.0003032575201026,0.0003259246239385,0.0003564763034914, 0.0005009272733421,0.0005882795362847,0.0007097635821639, 0.0007630643253588,0.0008950591609720,0.0011680358909203, 0.0014502634075377,0.0017454042542465,0.0029001725379479, 0.0031822107498712,0.0040607542008930,0.0043500678052272, 0.0091460971544658,0.0279624510118796,0.0001083248054773, 0.0003032575201026,0.0011680358909203,0.0043500678052272, 0.0279624510118796 }; // Coefficients X (cosine) static double cx[] = { -16338582222., -5995086437., 23663880362., 10304632056., -3996936944., -4136465568., 1188702881., -621434363., 566898160., -75880391., 576146406., -659684298., 451962774., -153724334., -603163280., 364764379., 193062130., 161493959., 1167349082., -1417467887., 15325240., -3624391., -587306., 132022., -106501., 228373., -95106., 56299., -48339., 803937., -6172744., -18962749., 133022., -25964., 7111., -4998., 32034., -29666., -1983., 114., 191., -1063., 419., 346., 5059., -81., 1408., 2964., -5364., 1509., -4924., 2954., 2034., -5199., 604., -1247., 4576., -350741., -4023., 1147., -38., -99., -11686., 1129., 582., -83., -97., 431., -134., -323., -292., 195., 39068., 523., -1747., 3135., -619., -12095., 6., 18476., -130., -438., 102345278799., -9329130892., 1484339404., 472660593., -581239444., 1016663241., -1054199614., 99039105., -52190030., -3394173., -16529., 3102430., 2286., -10955., -5293., -654., 124., -85., 29., 418209651., -1191875710., -823081., -558., -1091. }; // Coefficients X (sine) static double sx[] = { -308294137468.,-68820910480., 28346466257., -1755658975., 7818660837., -1098895702., -1192462299., -772129982., 1061702581., -639572722., 1128327488., -423570428., -175317704., 251601606., -869448807., 551228298., 87807522., -11540541., -103236703., 92638954., -3624991., 1004975., 304396., -56532., 55554., -799096., 56947., -48016., 50599., -680660., 5858452., 38125648., -109460., 18684., -5269., 2771., -6814., 47130., 1192., -1387., 379., -612., -52., 813., -4354., -2275., 685., -1352., 4681., -1908., -6530., 8667., 1675., 874., 898., 965., -7124., -1145389., 2931., -618., -34., -6562., 8038., -697., -8., 12., -267., -131., 304., -756., -103., -250., 19816., -596., 576., 4122., 65., -27900., 217., -137., -269., 531., -24338350765., 11210995713., 2793567155., -776019789., 1528323591., -249354416., 1127608109., -667692329., -1570766679., -9724425., 26552., 3332520., -27607., -11696., -7297., -104., -184., -455., -16., 39813894679., 3633087275., 522728., -320., -1401. }; // Coefficients Y (cosine) static double cy[] = { 299584895562., 75951634908., -36135662843., 18125610071., -20398008415., 6125780503., -162559485., 4352425804., -3819676998., 1168107376., -5041323701., 4093828501., -1727274544., 134214260., 5033950069., -3071449401., -1190419055., -775881742., -5524713888., 6803228005., -65675611., 15155413., 2009509., -389682., 275571., 474366., 132163., -81550., 69996., -706470., 4777898., -44002785., -58735., 7624., -1922., -729., -1733., -35642., -586., -258., -368., 1286., -136., 883., 2673., 331., 50., 178., 2901., -654., -8972., 3034., 1113., 570., -72., 1950., 8550., 1047593., -2348., 313., 432., 6765., -8240., 335., 140., -833., 252., -210., 366., -920., 1215., -217., -17780., 581., -560., -4131., 390., 25613., -206., 1850., 171., -471., 26437625772.,-12674907683., -1067899665., -2082744., -43195632., 211912497., -108307161., -63033809., -203850703., -1672332., 7136., 803655., -10985., 9126., 3317., -151., 160., 138., -27.,-36463065062., -5816560445., 1576292., -21., -295. }; // Coefficients Y (sine) static double sy[] = { -53545027809., -8838029861., 23553788174., 13775798112., -6068121593., -2853107588., 750355551., -82067770., 230091832., -259838942., 197944074., 27141006., -105334544., 95175918., -139461973., 80593104., -5126842., -21953793., -163767784., 192436228., -2479113., 561687., 121909., -30275., 16333., 68105., 24081., -11228., 667., -73047., 1007089., -22814549., 434., 1013., 710., 1100., -4598., 1990., 564., 828., -1119., -1249., -597., 227., 5467., 801., -2029., -1892., 4713., -459., 1757., -9303., -2357., 7679., -2953., 629., 5011., -333905., -2388., 415., 139., -5726., -4583., 310., 681., -107., 301., -525., 198., -379., -230., -64., 36069., 459., -1596., 2509., -146., -11081., 4., 15764., -147., -362., 117449924600., -7691661502., -4771148239., 3733883366., -7081845126., 3502526523., -8115570206., 3607883959., 7690328772., 37384011., -164319., -2859257., 1593., -11997., -6476., 1419., 34., 232., 32., 2752753498., -672124207., 154239., -400., 372. }; // Coefficients Z (cosine) static double cz[] = { 98425296138., 25475793908., -18424386574., 2645968636., -5282207967., 3278235471., -425422632., 1526641086., -1323182752., 235873266., -1617466723., 1557465867., -848586296., 218182986., 1636044515., -1001334243., -455739370., -348173978., -2511254281., 3062521470., -32079379., 7597939., 1138566., -238849., 192377., 83169., 148694., -92489., 87116., -1281070., 9950106., -25105642., -171749., 31035., -8648., 5360., -30345., 11482., 1322., -467., 96., 894., -381., -583., 2525., -569., 226., -2039., 3728., -1540., 42., -3144., 658., 220., 1848., 678., -7289., 463291., 3945., -1141., -26., -10607., 11458., -1005., 120., -301., 135., -186., 118., 30., 197., -182., -8585., 240., -226., -2049., 283., 11109., -100., -842., 71., -181., -22591501373., -1138977908., -782718600., -141483824., 159033355., -246222739., 287284767., -48002332., -41114335., 578004., -8420., -766779., 957., 5780., 4141., 417., -8., 65., -22.,-11656050047., -1186276469., 1388681., 201., 561. }; // Coefficients Z (sine) static double sz[] = { 76159403805., 17987340882., -1193982379., 4828308190., -4248985438., -559147671., 593594960., 208799497., -249913200., 115051024., -282588988., 135883560., 23091693., -49187976., 223956575., -137344299., -28188872., -2636274., -14202661., 25488216., 419837., -150966., -64906., 3719., -2226., 86321., -15970., 16609., -15782., 200300., -1500491., -9161491., 37481., -4616., 224., -1027., 5220., -6976., -267., 556., -23., -711., -122., -97., 2440., 786., -806., -167., -156., 572., 2532., -4582., -1178., 875., -558., 781., 3230., -116132., -1440., 438., 176., 1072., -5850., 418., 267., 60., 134., -85., -59., 112., -168., -89., 14986., 190., -685., 1018., -48., -4807., 0., 7066., -54., -229., 44126663549., -5626220823., -2536450838., 1536292657., -2916144530., 949074586., -2842935040., 1500396857., 3415136438., 19702076., -46995., -5801645., 33470., 17674., 7355., 199., 11., 205., 33.,-11127973411., -1310869292., -164753., -107., 284. }; // Compute the positions (secular terms) Px = 0; Py = 0; Pz = 0; double wx = 1; for (int i = 0; i < 4; i++) { Px += ax[i] * wx; Py += ay[i] * wx; Pz += az[i] * wx; wx *= x; } // Compute the positions (periodic and Poisson terms) int imax = 0; wx = 1; double w[3]; for (int m = 0; m < 3; m++) { for (int iv = 0; iv < 3; iv++) w[iv] = 0; int imin = imax; imax += nf[m]; for (int i = imin; i < imax; i++) { double f = fq[i] * Fx; double cf = cos(f); double sf = sin(f); w[0] += cx[i] * cf + sx[i] * sf; w[1] += cy[i] * cf + sy[i] * sf; w[2] += cz[i] * cf + sz[i] * sf; } Px += w[0] * wx; Py += w[1] * wx; Pz += w[2] * wx; wx *= x; } Px /= 1e10; Py /= 1e10; Pz /= 1e10; // Compute the velocities (secular terms) double wt = 1./73060.; wx = 1; for (int i = 1; i < 4; i++) { Vx += i * ax[i] * wx; Vy += i * ay[i] * wx; Vz += i * az[i] * wx; wx *= x; } Vx *= wt; Vy *= wt; Vz *= wt; // Compute the velocities (periodic and Poisson terms) imax = 0; wx = 1; double wy; for (int m = 0; m < 3; m++) { int imin = imax; imax += nf[m]; for (int i = imin; i < imax; i++) { double fw = fq[i]; double f = fw * Fx; double cf = cos(f); double sf = sin(f); Vx += fw * (sx[i] * cf - cx[i] * sf) * wx; Vy += fw * (sy[i] * cf - cy[i] * sf) * wx; Vz += fw * (sz[i] * cf - cz[i] * sf) * wx; if (m > 0) { Vx += m * wt * (cx[i] * cf + sx[i] * sf) * wy; Vy += m * wt * (cy[i] * cf + sy[i] * sf) * wy; Vz += m * wt * (cz[i] * cf + sz[i] * sf) * wy; } } wy = wx; wx *= x; } Vx /= 1e10; Vy /= 1e10; Vz /= 1e10; } #if 0 /* Test values: Date: Jan 01 1700 H : 00h 00m 00s (TDB) JD: 2341972.5000000 X :-25.48366603086599 Y : 22.25190224179014 Z : 14.61666566142614 au X': -0.00140296544832 Y': -0.00253543942176 Z': -0.00036577359317 au/d Date: Jan 02 1800 H : 06h 00m 00s (TDB) JD: 2378497.7500000 X : 36.33316699469712 Y :-11.84871881208418 Z :-14.64079073464049 au X': 0.00151098228705 Y': 0.00214812030172 Z': 0.00021249511616 au/d Date: Jan 03 1900 H : 12h 00m 00s (TDB) JD: 2415023.0000000 X : 10.29158303131287 Y : 44.52906466047693 Z : 10.79081191605171 au X': -0.00216104614307 Y': -0.00004877516272 Z': 0.00063748726618 au/d Date: Jan 04 2000 H : 18h 00m 00s (TDB) JD: 2451548.2500000 X : -9.86615874601937 Y :-27.98285304568784 Z : -5.75779357947923 au X': 0.00302900782509 Y': -0.00112671144850 Z': -0.00126494662037 au/d Date: Jan 05 2100 H : 00h 00m 00s (TDB) JD: 2488073.5000000 X : 39.67448463874504 Y : 28.47968765660414 Z : -3.06796133066342 au X': -0.00097971861494 Y': 0.00171018575529 Z': 0.00082844820875 au/d */ int main(int argc, char **argv) { double Px, Py, Pz; double Vx, Vy, Vz; pluto(2341972.5, Px, Py, Pz, Vx, Vy, Vz); pluto(2378497.75, Px, Py, Pz, Vx, Vy, Vz); pluto(2415023., Px, Py, Pz, Vx, Vy, Vz); pluto(2451548.25, Px, Py, Pz, Vx, Vy, Vz); pluto(2488073.5, Px, Py, Pz, Vx, Vy, Vz); printf("JD %20.8f:\n%20.16f%20.16f%20.16f\n%20.16f%20.16f%20.16f\n", JD, Px, Py, Pz, Vx, Vy, Vz); } #endif xplanet-1.3.0/src/libephemeris/jpl_int.h0000644000175000017500000000152211363605454015165 00000000000000 /* A JPL binary ephemeris header contains five doubles and */ /* (up to) 41 int32_t integers, so: */ #define JPL_HEADER_SIZE (5 * sizeof( double) + 41 * sizeof( int32_t)) #pragma pack(1) struct jpl_eph_data { double ephem_start, ephem_end, ephem_step; int32_t ncon; double au; double emrat; int32_t ipt[13][3]; int32_t ephemeris_version; /* This is the end of the file header. Following are */ /* items computed within my code. */ int32_t kernel_size, recsize, ncoeff; int32_t swap_bytes; int32_t curr_cache_loc; double pvsun[6]; double *cache; void *iinfo; FILE *ifile; }; #pragma pack() struct interpolation_info { double pc[18],vc[18], twot; int np, nv; }; xplanet-1.3.0/src/libephemeris/Makefile.in0000644000175000017500000005037311731356514015431 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libephemeris DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libephemeris_a_LIBADD = am__libephemeris_a_SOURCES_DIST = Ephemeris.cpp Ephemeris.h \ EphemerisHigh.cpp EphemerisHigh.h EphemerisLow.cpp \ EphemerisLow.h ephemerisWrapper.h ephemerisWrapper.cpp \ jpl_int.h jpleph.cpp jpleph.h pluto.cpp EphemerisSpice.cpp \ EphemerisSpice.h @HAVE_CSPICE_TRUE@am__objects_1 = EphemerisSpice.$(OBJEXT) am_libephemeris_a_OBJECTS = Ephemeris.$(OBJEXT) \ EphemerisHigh.$(OBJEXT) EphemerisLow.$(OBJEXT) \ ephemerisWrapper.$(OBJEXT) jpleph.$(OBJEXT) pluto.$(OBJEXT) \ $(am__objects_1) libephemeris_a_OBJECTS = $(am_libephemeris_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libephemeris_a_SOURCES) $(EXTRA_libephemeris_a_SOURCES) DIST_SOURCES = $(am__libephemeris_a_SOURCES_DIST) \ $(EXTRA_libephemeris_a_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ SUBDIRS = libmoons noinst_LIBRARIES = libephemeris.a AM_CPPFLAGS = -I@top_srcdir@/src @USE_AR_FALSE@libephemeris_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libephemeris_a_AR = $(AR) cru @HAVE_CSPICE_TRUE@spiceFiles = EphemerisSpice.cpp EphemerisSpice.h EXTRA_libephemeris_a_SOURCES = EphemerisSpice.cpp EphemerisSpice.h libephemeris_a_SOURCES = \ Ephemeris.cpp \ Ephemeris.h \ EphemerisHigh.cpp \ EphemerisHigh.h \ EphemerisLow.cpp \ EphemerisLow.h \ ephemerisWrapper.h \ ephemerisWrapper.cpp \ jpl_int.h \ jpleph.cpp \ jpleph.h \ pluto.cpp \ $(spiceFiles) all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libephemeris/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libephemeris/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libephemeris.a: $(libephemeris_a_OBJECTS) $(libephemeris_a_DEPENDENCIES) -rm -f libephemeris.a $(libephemeris_a_AR) libephemeris.a $(libephemeris_a_OBJECTS) $(libephemeris_a_LIBADD) $(RANLIB) libephemeris.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ephemeris.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EphemerisHigh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EphemerisLow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EphemerisSpice.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ephemerisWrapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpleph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pluto.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libephemeris/Ephemeris.h0000644000175000017500000000037310411416255015442 00000000000000#ifndef EPHEM_H #define EPHEM_H #include "body.h" class Ephemeris { public: Ephemeris(); virtual ~Ephemeris(); virtual void GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz) = 0; }; #endif xplanet-1.3.0/src/libephemeris/EphemerisLow.cpp0000644000175000017500000003413210411416255016457 00000000000000/* This code is adapted from the Fortran code "planetap.for" at http://adc.gsfc.nasa.gov/adc-cgi/cat.pl?/catalogs/6/6066/ The algorithms are from Numerical expressions for precession formulae and mean elements for the Moon and the planets. Simon J.L., Bretagnon P., Chapront J., Chapront-Touze M., Francou G., Laskar J. Precision : Over the interval 1800-2200, the precision is : for the longitude of Mercury 4" for the longitude of Venus 5" for the longitude of E-M barycenter 6" for the longitude of Mars 17" for the longitude of Jupiter 71" for the longitude of Saturn 81" for the longitude of Uranus 86" for the longitude of Neptune 11" Over the interval 1000-3000, the precision is better than 1.5 times the precision over 1800-2200. */ #include "xpUtil.h" #include "EphemerisLow.h" using namespace std; extern void pluto(const double JD, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz); EphemerisLow::EphemerisLow() : Ephemeris() { } EphemerisLow::~EphemerisLow() { } void EphemerisLow::GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz) { double a[8][3] = { { 0.3870983098, 0., 0. }, { 0.7233298200, 0., 0. }, { 1.0000010178, 0., 0. }, { 1.5236793419, 3.e-10, 0. }, { 5.2026032092, 19132.e-10, -39.e-10 }, { 9.5549091915, -0.0000213896, 444.e-10 }, { 19.2184460618, -3716.e-10, 979.e-10 }, { 30.1103868694, -16635.e-10, 686.e-10} }; double dlm[8][3] = { { 252.25090552, 5381016286.88982, -1.92789 }, { 181.97980085, 2106641364.33548, 0.59381 }, { 100.46645683, 1295977422.83429, -2.04411 }, { 355.43299958, 689050774.93988, 0.94264 }, { 34.35151874, 109256603.77991, -30.60378 }, { 50.07744430, 43996098.55732, 75.61614 }, { 314.05500511, 15424811.93933, -1.75083 }, { 304.34866548, 7865503.20744, 0.21103 } }; double e[8][3] = { { 0.2056317526, 0.0002040653, -28349.e-10 }, { 0.0067719164, -0.0004776521, 98127.e-10 }, { 0.0167086342, -0.0004203654, -0.0000126734 }, { 0.0934006477, 0.0009048438, -80641.e-10 }, { 0.0484979255, 0.0016322542, -0.0000471366 }, { 0.0555481426, -0.0034664062, -0.0000643639 }, { 0.0463812221, -0.0002729293, 0.0000078913 }, { 0.0094557470, 0.0000603263, 0. } }; double pi[8][3] = { { 77.45611904, 5719.11590, -4.83016 }, { 131.56370300, 175.48640, -498.48184 }, { 102.93734808, 11612.35290, 53.27577 }, { 336.06023395, 15980.45908, -62.32800 }, { 14.33120687, 7758.75163, 259.95938 }, { 93.05723748, 20395.49439, 190.25952 }, { 173.00529106, 3215.56238, -34.09288 }, { 48.12027554, 1050.71912, 27.39717 } }; double dinc[8][3] = { { 7.00498625, -214.25629, 0.28977 }, { 3.39466189, -30.84437, -11.67836 }, { 0., 469.97289, -3.35053 }, { 1.84972648, -293.31722, -8.11830 }, { 1.30326698, -71.55890, 11.95297 }, { 2.48887878, 91.85195, -17.66225 }, { 0.77319689, -60.72723, 1.25759 }, { 1.76995259, 8.12333, 0.08135 } }; double omega[8][3] = { { 48.33089304, -4515.21727, -31.79892 }, { 76.67992019, -10008.48154, -51.32614 }, { 174.87317577, -8679.27034, 15.34191 }, { 49.55809321, -10620.90088, -230.57416 }, { 100.46440702, 6362.03561, 326.52178 }, { 113.66550252, -9240.19942, -66.23743 }, { 74.00595701, 2669.15033, 145.93964 }, { 131.78405702, -221.94322 , -0.78728} }; int kp[8][9] = { { 69613, 75645, 88306, 59899, 15746, 71087, 142173, 3086, 0 }, { 21863, 32794, 26934, 10931, 26250, 43725, 53867, 28939, 0 }, { 16002, 21863, 32004, 10931, 14529, 16368, 15318, 32794, 0 }, { 6345, 7818, 15636, 7077, 8184, 14163, 1107, 4872, 0 }, { 1760, 1454, 1167, 880, 287, 2640, 19, 2047, 1454 }, { 574, 0, 880, 287, 19, 1760, 1167, 306, 574 }, { 204, 0, 177, 1265, 4, 385, 200, 208, 204 }, { 0, 102, 106, 4, 98, 1367, 487, 204, 0} }; double ca[8][9] = { { 4, -13, 11, -9, -9, -3, -1, 4, 0 }, { -156, 59, -42, 6, 19, -20, -10, -12, 0 }, { 64, -152, 62, -8, 32, -41, 19, -11, 0 }, { 124, 621, -145, 208, 54, -57, 30, 15, 0 }, { -23437, -2634, 6601, 6259, -1507, -1821, 2620, -2115,-1489 }, { 62911,-119919, 79336, 17814,-24241, 12068, 8306, -4893, 8902 }, { 389061,-262125,-44088, 8387,-22976, -2093, -615, -9720, 6633 }, { -412235,-157046,-31430, 37817, -9740, -13, -7449, 9644, 0} }; double sa[8][9] = { { -29, -1, 9, 6, -6, 5, 4, 0, 0 }, { -48, -125, -26, -37, 18, -13, -20, -2, 0 }, { -150, -46, 68, 54, 14, 24, -28, 22, 0 }, { -621, 532, -694, -20, 192, -94, 71, -73, 0 }, { -14614, -19828, -5869, 1881, -4372, -2255, 782, 930, 913 }, { 139737, 0, 24667, 51123, -5102, 7429, -4095, -1976,-9566 }, { -138081, 0, 37205,-49039,-41901,-33872,-27037,-12474,18797 }, { 0, 28492,133236, 69654, 52322,-49577,-26430, -3593, 0} }; int kq[8][10] = { { 3086, 15746, 69613, 59899, 75645, 88306, 12661, 2658, 0, 0 }, { 21863, 32794, 10931, 73, 4387, 26934, 1473, 2157, 0, 0 }, { 10, 16002, 21863, 10931, 1473, 32004, 4387, 73, 0, 0 }, { 10, 6345, 7818, 1107, 15636, 7077, 8184, 532, 10, 0 }, { 19, 1760, 1454, 287, 1167, 880, 574, 2640, 19,1454 }, { 19, 574, 287, 306, 1760, 12, 31, 38, 19, 574 }, { 4, 204, 177, 8, 31, 200, 1265, 102, 4, 204 }, { 4, 102, 106, 8, 98, 1367, 487, 204, 4, 102} }; double cl[8][10] = { { 21, -95, -157, 41, -5, 42, 23, 30, 0, 0 }, { -160, -313, -235, 60, -74, -76, -27, 34, 0, 0 }, { -325, -322, -79, 232, -52, 97, 55, -41, 0, 0 }, { 2268, -979, 802, 602, -668, -33, 345, 201, -55, 0 }, { 7610, -4997,-7689,-5841,-2617, 1115, -748, -607, 6074, 354 }, { -18549, 30125,20012, -730, 824, 23, 1289, -352,-14767,-2062 }, { -135245,-14594, 4197,-4030,-5630,-2898, 2540, -306, 2939, 1986 }, { 89948, 2103, 8963, 2695, 3682, 1648, 866, -154, -1963, -283} }; double sl[8][10] = { { -342, 136, -23, 62, 66, -52, -33, 17, 0, 0 }, { 524, -149, -35, 117, 151, 122, -71, -62, 0, 0 }, { -105, -137, 258, 35, -116, -88, -112, -80, 0, 0 }, { 854, -205, -936, -240, 140, -341, -97, -232, 536, 0 }, { -56980, 8016, 1012, 1448,-3024,-3710, 318, 503, 3767, 577 }, { 138606,-13478,-4964, 1441,-1319,-1482, 427, 1236, -9167,-1918 }, { 71234,-41116, 5334,-4935,-1848, 66, 434,-1748, 3780, -701 }, { -47645, 11647, 2166, 3194, 679, 0, -244, -419, -2531, 48} }; double rmas[8] = { 6023600, 408523.5, 328900.5, 3098710, 1047.355, 3498.5, 22869, 19314 }; double Vx = 0, Vy = 0, Vz = 0; int index = -1; switch (b) { case SUN: Px = 0; Py = 0; Pz = 0; Vx = 0; Vy = 0; Vz = 0; return; break; case MERCURY: index = 0; break; case VENUS: index = 1; break; case EARTH: index = 2; break; case MARS: index = 3; break; case JUPITER: index = 4; break; case SATURN: index = 5; break; case URANUS: index = 6; break; case NEPTUNE: index = 7; break; case PLUTO: pluto(tjd, Px, Py, Pz, Vx, Vy, Vz); break; default: break; } if (b != PLUTO) { calcHeliocentricXYZ(tjd, 1/rmas[index], a[index], dlm[index], e[index], pi[index], dinc[index], omega[index], kp[index], ca[index], sa[index], kq[index], cl[index], sl[index], Px, Py, Pz, Vx, Vy, Vz); // rotate to earth equator J2000 const double eps = 23.4392911 * deg_to_rad; const double sEps = sin(eps); const double cEps = cos(eps); const double Y0 = Py; const double Z0 = Pz; Py = Y0 * cEps - Z0 * sEps; Pz = Z0 * cEps + Y0 * sEps; } } void EphemerisLow::kepler(const double al, const complex &z, const double u, complex &zto, double &r) { const double ex = abs(z); const double ex2 = ex*ex; const double ex3 = ex2*ex; double e = (al + (ex - ex3/8)*sin(al) + 0.5 * ex2 * sin(2*al) + 0.375 * ex3 * sin(3*al)); complex z1 = conj(z); for (int k = 0; k < 10; k++) { const complex z2(0, e); const complex zteta = exp(z2); const complex z3 = z1*zteta; const double dl = al - e + z3.imag(); r = 1 - z3.real(); if (fabs(dl) < 1e-12) { z1 = u * z * z3.imag(); const complex z2(z1.imag(), -z1.real()); zto = (-z + zteta + z2)/r; return; } e += dl/r; } xpWarn("Kepler: can't converge\n", __FILE__, __LINE__); } void EphemerisLow::ellipx(const double a, const double dlm, const double e, const double p, const double dia, const double omega, const double dmas, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz) { const double xa = a; const double xl = dlm; const double xk = e*cos(p); const double xh = e*sin(p); const double xq = sin(dia/2) * cos(omega); const double xp = sin(dia/2) * sin(omega); const double asr = 648000/M_PI; const double gk = 3548.1876069651; const double xfi = sqrt(1 - xk*xk - xh*xh); const double xki = sqrt(1 - xq*xq - xp*xp); const double u = 1/(1+xfi); complex z(xk, xh); complex zto; double r; kepler(xl, z, u, zto, r); const double xcw = zto.real(); const double xsw = zto.imag(); const double xm = xp*xcw - xq*xsw; const double xxx = xa*r; Px = xxx*(xcw - 2*xp*xm); Py = xxx*(xsw + 2*xq*xm); Pz = -2*xxx*xki*xm; const double xms = xa*(xh+xsw)/xfi; const double xmc = xa*(xk+xcw)/xfi; const double xn = gk*sqrt((1+dmas)/(xa*xa*xa))/asr; Vx = xn*((2*xp*xp - 1)*xms + 2*xp*xq*xmc); Vy = xn*((1 - 2*xq*xq)*xmc - 2*xp*xq*xms); Vz = 2*xn*xki*(xp*xms + xq*xmc); } void EphemerisLow::calcHeliocentricXYZ(const double tjd, const double dmas, double *a, double *dlm, double *e, double *pi, double *dinc, double *omega, int *kp, double *ca, double *sa, int *kq, double *cl, double *sl, double &Px, double &Py, double &Pz, double &Vx, double &Vy, double &Vz) { const double t = (tjd - 2451545)/365250; const double t2 = t*t; double da = a[0] + t*a[1] + t2*a[2]; double dl = (3600*dlm[0] + t*dlm[1] + t2*dlm[2]) * deg_to_rad / 3600; const double de = e[0] + t*e[1] + t2*e[2]; double dp = (3600*pi[0] + t*pi[1] + t2*pi[2]) * deg_to_rad / 3600; const double di = ((3600*dinc[0] + t*dinc[1] + t2*dinc[2]) * deg_to_rad / 3600); double dm = ((3600*omega[0] + t*omega[1] + t2*omega[2]) * deg_to_rad / 3600); const double dmu = 0.35953620*t; double arga, argl; for (int j = 0; j < 8; j++) { arga = kp[j] * dmu; da += (ca[j] * cos(arga) + sa[j] * sin(arga)) * 1e-7; argl = kq[j] * dmu; dl += (cl[j] * cos(argl) + sl[j] * sin(argl)) * 1e-7; } arga = kp[8] * dmu; da += t*(ca[8] * cos(arga) + sa[8] * sin(arga)) * 1e-7; for (int j = 8; j < 10; j++) { argl = kq[j] * dmu; dl += t*(cl[j] * cos(argl) + sl[j] * sin(argl)) * 1e-7; } dl = fmod(dl, TWO_PI); dp = fmod(dp, TWO_PI); dm = fmod(dm, TWO_PI); ellipx(da, dl, de, dp, di, dm, dmas, Px, Py, Pz, Vx, Vy, Vz); } xplanet-1.3.0/src/libephemeris/EphemerisSpice.h0000644000175000017500000000052210411416255016422 00000000000000#ifndef EPHEMSPICE_H #define EPHEMSPICE_H #include #include #include "Ephemeris.h" class EphemerisSpice : public Ephemeris { public: EphemerisSpice(); ~EphemerisSpice(); void GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz); }; #endif xplanet-1.3.0/src/libephemeris/EphemerisHigh.h0000644000175000017500000000056610411416255016246 00000000000000#ifndef EPHEMHIGH_H #define EPHEMHIGH_H #include #include "Ephemeris.h" class EphemerisHigh : public Ephemeris { public: EphemerisHigh(const std::string &ephemerisFile); ~EphemerisHigh(); void GetHeliocentricXYZ(const body b, const double tjd, double &Px, double &Py, double &Pz); private: void *ephem_; }; #endif xplanet-1.3.0/src/View.h0000644000175000017500000000306510411353363011764 00000000000000#ifndef VIEW_H #define VIEW_H class View { public: // Projection reference point (observer location) // View reference point (planet center) // display dimensions View(const double PRPx, const double PRPy, const double PRPz, const double VRPx, const double VRPy, const double VRPz, const double VUPx, const double VUPy, const double VUPz, const double dpp, const double rotate_angle); ~View(); // Rotate the point in the viewing coordinate system to heliocentric XYZ. void RotateToXYZ(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const; // Rotate the point in heliocentric XYZ to the viewing coordinate system. void RotateToViewCoordinates(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const; // Heliocentric equatorial to pixel offsets from the target planet // center void XYZToPixel(const double X, const double Y, const double Z, double &newX, double &newY, double &newZ) const; void PixelToViewCoordinates(const double X, const double Y, double &newX, double &newY, double &newZ) const; private: const double distPerPixel_; // Astronomical units per pixel double distToPlane_; // distance from observer to target planet double rotate[3][3]; double inv_rotate[3][3]; double translate[3]; }; #endif xplanet-1.3.0/src/buildPlanetMap.cpp0000644000175000017500000000547411107136743014320 00000000000000#include #include #include #include using namespace std; #include "body.h" #include "buildPlanetMap.h" #include "Options.h" #include "xpUtil.h" #include "libplanet/Planet.h" static Planet *p[RANDOM_BODY]; static bool firstTime = true; Planet * findPlanetinMap(map &planetMap, body b) { Planet *returnVal = NULL; for (map::iterator it0 = planetMap.begin(); it0 != planetMap.end(); it0++) { Planet *p = it0->second; if (p->Index() == b) { returnVal = p; break; } } return(returnVal); } void buildPlanetMap(const double jd, map &planetMap) { buildPlanetMap(jd, 0, 0, 0, false, planetMap); } void buildPlanetMap(const double jd, const double oX, const double oY, const double oZ, const bool light_time, map &planetMap) { planetMap.clear(); if (!firstTime) destroyPlanetMap(); firstTime = false; Options *options = Options::getInstance(); if (options->PrintEphemeris()) { printf("%10s: %12s %13s %13s %13s %13s\n", "Name", "Julian Day", "X", "Y", "Z", "R"); } for (int ibody = SUN; ibody < RANDOM_BODY; ibody++) { body b = (body) ibody; // Compute the planet's position double pX, pY, pZ; p[ibody] = new Planet(jd, b); p[ibody]->calcHeliocentricEquatorial(true); p[ibody]->getPosition(pX, pY, pZ); // Now get the position relative to the origin double dX = pX - oX; double dY = pY - oY; double dZ = pZ - oZ; double dist = sqrt(dX*dX + dY*dY + dZ*dZ); // Account for light time, if desired if (light_time) { double lt = dist * AU_to_km / 299792.458; lt /= 86400; delete p[ibody]; p[ibody] = new Planet(jd - lt, b); p[ibody]->calcHeliocentricEquatorial(); p[ibody]->getPosition(pX, pY, pZ); } // Now store this body in the map, using the heliocentric // distance as the key dist = sqrt(pX*pX + pY*pY + pZ*pZ); planetMap.insert(make_pair(dist, p[ibody])); if (options->PrintEphemeris()) { printf("%10s: %12.4f %13.9f %13.9f %13.9f %13.9f\n", body_string[ibody], jd, pX, pY, pZ, dist); } } if (options->PrintEphemeris()) { const double dist = sqrt(oX*oX + oY*oY + oZ*oZ); printf("%10s: %12.4f %13.9f %13.9f %13.9f %13.9f\n", "origin", jd, oX, oY, oZ, dist); exit(EXIT_SUCCESS); } } void destroyPlanetMap() { for (int ibody = SUN; ibody < RANDOM_BODY; ibody++) { delete p[ibody]; p[ibody] = NULL; } } xplanet-1.3.0/src/Separation.cpp0000644000175000017500000000711111227067111013505 00000000000000#include #include #include #include "Separation.h" #include "View.h" #include "xpUtil.h" using namespace std; Separation::Separation(const double oX, const double oY, const double oZ, const double tX, const double tY, const double tZ, const double sX, const double sY, const double sZ) { view_ = new View(tX, tY, tZ, oX, oY, oZ, sX, sY, sZ, 0, 0); view_->RotateToViewCoordinates(oX, oY, oZ, oX_, oY_, oZ_); view_->RotateToViewCoordinates(tX, tY, tZ, tX_, tY_, tZ_); view_->RotateToViewCoordinates(sX, sY, sZ, sX_, sY_, sZ_); oR_ = sqrt(oY_ * oY_ + oZ_ * oZ_); sR_ = sqrt(sY_ * sY_ + sZ_ * sZ_); } Separation::~Separation() { delete view_; } void Separation::getOrigin(double &oX, double &oY, double &oZ) { view_->RotateToXYZ(oX_, oY_, oZ_, oX, oY, oZ); } /* Given an angle sep, calculate the observer position using the bisection method. If the observer is closer to the target than target 2, then any separation angle is possible (e.g. observer = Venus, target = Sun, target 2 = Earth). The separation function increases monotonically from -PI to PI as alpha0 increases. At alpha0 + PI the separation function is 0. If the observer is farther from the target than target 1, there is a maximum separation possible (e.g. observer = Earth, target = Sun, target 2 = Venus). In this case the separation function looks like this: angle - alpha0 sep 0 0 acos(sR/oR) -max PI 0 2 PI-acos(sR/oR) max 2 PI 0 In this case, look for the angle that gives the required separation close to 0 or 2 PI, depending on the sign of the separation. */ void Separation::setSeparation(double sep) { const double alpha0 = atan2(sY_, sZ_); double x0 = alpha0; double x1 = alpha0 + TWO_PI; if (sep < 0) x1 = alpha0 + M_PI; else x0 = alpha0 + M_PI; if (oR_ > sR_) { double max_sep = asin(sR_/oR_); if (sep > max_sep) { sep = max_sep; printf("sep = %14.6f, maximum separation is %14.6f\n", sep/deg_to_rad, max_sep / deg_to_rad); calcSeparation(alpha0 + M_PI_2); return; } if (sep < 0) x1 = alpha0 + acos(sR_/oR_); else x0 = alpha0 + TWO_PI - acos(sR_/oR_); } double f0 = calcSeparation(x0) - sep; if (x0 == alpha0 && f0 > 0) f0 = -(calcSeparation(x0) + sep); if (f0 > 0) { double tmp = x0; x0 = x1; x1 = tmp; } for (int i = 0; i < 200; i++) { double xmid = 0.5 * (x0 + x1); double fmid = calcSeparation(xmid) - sep; if (fmid > 0) x1 = xmid; else x0 = xmid; if (fabs(x0-x1) < 1e-10 || fmid == 0.0) break; } } // Assume target 1 is at (0, 0, 0) and target 2 is at (0, y2, z2). // Supply an angle, and calculate the new observer location (0, y, z) // and the separation between the two targets. double Separation::calcSeparation(const double alpha) { oX_ = 0; oY_ = oR_ * sin(alpha); oZ_ = oR_ * cos(alpha); const double t[3] = { tX_ - oX_, tY_ - oY_, tZ_ - oZ_ }; const double s[3] = { sX_ - oX_, sY_ - oY_, sZ_ - oZ_ }; double separation = 0; const double cos_sep = ndot(t, s); if (cos_sep >= 1.0) separation = 0; else if (cos_sep <= -1.0) separation = M_PI; else separation = acos(cos_sep); double c[3]; cross(s, t, c); if (c[0] > 0) separation *= -1; return(separation); } xplanet-1.3.0/src/libdisplay/0000755000175000017500000000000011731372544013121 500000000000000xplanet-1.3.0/src/libdisplay/TimerMacAqua.h0000644000175000017500000000051110411360615015506 00000000000000#ifndef TIMERMACAQUA_H #define TIMERMACAQUA_H #include #include "config.h" #include "Timer.h" class TimerMacAqua : public Timer { public: TimerMacAqua(const int w, const unsigned long h, const unsigned long i); ~TimerMacAqua(); bool Sleep(); private: unsigned long GetSystemIdleTime(); }; #endif xplanet-1.3.0/src/libdisplay/DisplayX11.h0000644000175000017500000000131410533611712015100 00000000000000#ifndef DisplayX11_h #define DisplayX11_h #include #include "DisplayBase.h" class DisplayX11 : public DisplayBase { public: DisplayX11(const int tr); virtual ~DisplayX11(); void renderImage(PlanetProperties *planetProperties[]); static Window WindowID() { return(window); }; private: Display *display; static Window window; Window root; void computeShift(unsigned long mask, unsigned char &left_shift, unsigned char &right_shift); Pixmap createPixmap(const unsigned char *rgb_data, const int pixmap_width, const int pixmap_height); void decomposePixmap(const Pixmap p, unsigned char *rgb); }; #endif xplanet-1.3.0/src/libdisplay/DisplayX11.cpp0000644000175000017500000004015611107136044015440 00000000000000#include #include #include #include using namespace std; #include "config.h" #include "keywords.h" #include "Options.h" #include "PlanetProperties.h" #include "xpUtil.h" #include "DisplayX11.h" #include "TimerX11.h" #include "vroot.h" // The window is static because it needs to stay open between // renderings. Window DisplayX11::window; DisplayX11::DisplayX11(const int tr) : DisplayBase(tr) { Options *options = Options::getInstance(); if (options->DisplayMode() == WINDOW) display = TimerX11::DisplayID(); else display = XOpenDisplay(NULL); if (display == NULL) xpExit("Can't open X display\n", __FILE__, __LINE__); const int screen_num = DefaultScreen(display); if (options->VirtualRoot()) root = VirtualRootWindowOfScreen(ScreenOfDisplay(display, screen_num)); else root = ScreenOfDisplay(display, screen_num)->root; XWindowAttributes xgwa; XGetWindowAttributes(display, root, &xgwa); fullWidth_ = xgwa.width; fullHeight_ = xgwa.height; switch (options->DisplayMode()) { case WINDOW: { if (options->XID()) { window = static_cast (options->XID()); } else { width_ = options->getWidth(); height_ = options->getHeight(); if (times_run == 0) { int x = options->getWindowX(); int y = options->getWindowY(); if (options->GeometryMask() & XNegative) x += (fullWidth_ - width_); if (options->GeometryMask() & YNegative) y += (fullHeight_ - height_); window = XCreateSimpleWindow(display, root, x, y, width_, height_, 4, WhitePixel(display, screen_num), BlackPixel(display, screen_num)); if (options->GeometryMask() != NoValue) { XSizeHints *hints = XAllocSizeHints(); hints->flags = USPosition; XSetWMNormalHints(display, window, hints); } string title; if (options->WindowTitle().empty()) { title.assign("Xplanet "); title += VERSION; } else { title.assign(options->WindowTitle()); } XTextProperty windowName; char *titlec = (char *) title.c_str(); XStringListToTextProperty(&titlec, 1, &windowName); XSetWMName(display, window, &windowName); // Add X Class Hint // contributed by Dragan Stanojevic - Nevidljivi XClassHint classHint; classHint.res_name = "xplanet"; classHint.res_class = "XPlanet"; XSetClassHint(display, window, &classHint); } } XGetWindowAttributes(display, window, &xgwa); width_ = xgwa.width; height_ = xgwa.height; } break; case ROOT: if (options->GeometrySelected()) { width_ = options->getWidth(); height_ = options->getHeight(); } else { width_ = fullWidth_; height_ = fullHeight_; } window = root; break; default: xpExit("DisplayX11: Unknown display mode?\n", __FILE__, __LINE__); } if (!options->CenterSelected()) { if (width_ % 2 == 0) options->CenterX(width_/2 - 0.5); else options->CenterX(width_/2); if (height_ % 2 == 0) options->CenterY(height_/2 - 0.5); else options->CenterY(height_/2); } allocateRGBData(); } DisplayX11::~DisplayX11() { } void DisplayX11::renderImage(PlanetProperties *planetProperties[]) { drawLabel(planetProperties); Options *options = Options::getInstance(); Pixmap pixmap; switch (options->DisplayMode()) { case WINDOW: pixmap = createPixmap(rgb_data, width_, height_); XMapWindow(display, window); break; case ROOT: if (options->GeometrySelected()) PlaceImageOnRoot(); pixmap = createPixmap(rgb_data, fullWidth_, fullHeight_); if (options->Transparency()) { // Set the background pixmap for Eterms and aterms. This // code is taken from the Esetroot source. Atom prop_root, prop_esetroot, type; int format; unsigned long length, after; unsigned char *data_root, *data_esetroot; prop_root = XInternAtom(display, "_XROOTPMAP_ID", True); prop_esetroot = XInternAtom(display, "ESETROOT_PMAP_ID", True); if (prop_root != None && prop_esetroot != None) { XGetWindowProperty(display, root, prop_root, 0L, 1L, False, AnyPropertyType, &type, &format, &length, &after, &data_root); if (type == XA_PIXMAP) { XGetWindowProperty(display, root, prop_esetroot, 0L, 1L, False, AnyPropertyType, &type, &format, &length, &after, &data_esetroot); if (data_root && data_esetroot) { if (type == XA_PIXMAP && *((Pixmap *) data_root) == *((Pixmap *) data_esetroot)) { XKillClient(display, *((Pixmap *) data_root)); } } } } /* This will locate the property, creating it if it * doesn't exist */ prop_root = XInternAtom(display, "_XROOTPMAP_ID", False); prop_esetroot = XInternAtom(display, "ESETROOT_PMAP_ID", False); /* The call above should have created it. If that failed, * we can't continue. */ if (prop_root == None || prop_esetroot == None) { xpWarn("Can't set pixmap for transparency\n", __FILE__, __LINE__); } else { XChangeProperty(display, root, prop_root, XA_PIXMAP, 32, PropModeReplace, (unsigned char *) &pixmap, 1); XChangeProperty(display, root, prop_esetroot, XA_PIXMAP, 32, PropModeReplace, (unsigned char *) &pixmap, 1); XSetCloseDownMode(display, RetainPermanent); XFlush(display); } } break; default: xpExit("Unknown X11 display mode?\n", __FILE__, __LINE__); } XSetWindowBackgroundPixmap(display, window, pixmap); if (!options->Transparency()) XFreePixmap(display, pixmap); XClearWindow(display, window); XFlush(display); if (options->DisplayMode() == ROOT) XCloseDisplay(display); } void DisplayX11::computeShift(unsigned long mask, unsigned char &left_shift, unsigned char &right_shift) { left_shift = 0; right_shift = 8; if (mask != 0) { while ((mask & 0x01) == 0) { left_shift++; mask >>= 1; } while ((mask & 0x01) == 1) { right_shift--; mask >>= 1; } } } Pixmap DisplayX11::createPixmap(const unsigned char *rgb, const int pixmap_width, const int pixmap_height) { int i, j; // loop variables const int screen_num = DefaultScreen(display); const int depth = DefaultDepth(display, screen_num); Visual *visual = DefaultVisual(display, screen_num); Colormap colormap = DefaultColormap(display, screen_num); Pixmap tmp = XCreatePixmap(display, window, pixmap_width, pixmap_height, depth); char *pixmap_data = NULL; switch (depth) { case 32: case 24: pixmap_data = new char[4 * pixmap_width * pixmap_height]; break; case 16: case 15: pixmap_data = new char[2 * pixmap_width * pixmap_height]; break; case 8: pixmap_data = new char[pixmap_width * pixmap_height]; break; default: break; } XImage *ximage = XCreateImage(display, visual, depth, ZPixmap, 0, pixmap_data, pixmap_width, pixmap_height, 8, 0); int entries; XVisualInfo v_template; v_template.visualid = XVisualIDFromVisual(visual); XVisualInfo *visual_info = XGetVisualInfo(display, VisualIDMask, &v_template, &entries); unsigned long ipos = 0; switch (visual_info->c_class) { case PseudoColor: { XColor xc; xc.flags = DoRed | DoGreen | DoBlue; int num_colors = 256; XColor *colors = new XColor[num_colors]; for (i = 0; i < num_colors; i++) colors[i].pixel = (unsigned long) i; XQueryColors(display, colormap, colors, num_colors); int *closest_color = new int[num_colors]; for (i = 0; i < num_colors; i++) { xc.red = (i & 0xe0) << 8; // highest 3 bits xc.green = (i & 0x1c) << 11; // middle 3 bits xc.blue = (i & 0x03) << 14; // lowest 2 bits // find the closest color in the colormap double distance, distance_squared, min_distance = 0; for (int ii = 0; ii < num_colors; ii++) { distance = colors[ii].red - xc.red; distance_squared = distance * distance; distance = colors[ii].green - xc.green; distance_squared += distance * distance; distance = colors[ii].blue - xc.blue; distance_squared += distance * distance; if ((ii == 0) || (distance_squared <= min_distance)) { min_distance = distance_squared; closest_color[i] = ii; } } } for (j = 0; j < pixmap_height; j++) { for (i = 0; i < pixmap_width; i++) { xc.red = (unsigned short) (rgb[ipos++] & 0xe0); xc.green = (unsigned short) (rgb[ipos++] & 0xe0); xc.blue = (unsigned short) (rgb[ipos++] & 0xc0); xc.pixel = xc.red | (xc.green >> 3) | (xc.blue >> 6); XPutPixel(ximage, i, j, colors[closest_color[xc.pixel]].pixel); } } delete [] colors; delete [] closest_color; } break; case TrueColor: { unsigned char red_left_shift; unsigned char red_right_shift; unsigned char green_left_shift; unsigned char green_right_shift; unsigned char blue_left_shift; unsigned char blue_right_shift; computeShift(visual_info->red_mask, red_left_shift, red_right_shift); computeShift(visual_info->green_mask, green_left_shift, green_right_shift); computeShift(visual_info->blue_mask, blue_left_shift, blue_right_shift); unsigned long pixel; unsigned long red, green, blue; for (j = 0; j < pixmap_height; j++) { for (i = 0; i < pixmap_width; i++) { red = (unsigned long) rgb[ipos++] >> red_right_shift; green = (unsigned long) rgb[ipos++] >> green_right_shift; blue = (unsigned long) rgb[ipos++] >> blue_right_shift; pixel = (((red << red_left_shift) & visual_info->red_mask) | ((green << green_left_shift) & visual_info->green_mask) | ((blue << blue_left_shift) & visual_info->blue_mask)); XPutPixel(ximage, i, j, pixel); } } } break; default: { ostringstream errStr; errStr << "createPixmap: visual = " << visual_info->c_class << endl << "Visual should be either PseudoColor or TrueColor\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return(tmp); } } GC gc = XCreateGC(display, window, 0, NULL); XPutImage(display, tmp, gc, ximage, 0, 0, 0, 0, pixmap_width, pixmap_height); XFreeGC(display, gc); XFree(visual_info); delete [] pixmap_data; // Set ximage data to NULL since pixmap data was deallocated above ximage->data = NULL; XDestroyImage(ximage); return(tmp); } void DisplayX11::decomposePixmap(const Pixmap p, unsigned char *rgb) { int i, j; unsigned long ipos = 0; const int screen_num = DefaultScreen(display); Visual *visual = DefaultVisual(display, screen_num); int entries; XVisualInfo v_template; v_template.visualid = XVisualIDFromVisual(visual); XVisualInfo *visual_info = XGetVisualInfo(display, VisualIDMask, &v_template, &entries); Colormap colormap = DefaultColormap(display, screen_num); XImage *ximage = XGetImage(display, p, 0, 0, width_, height_, AllPlanes, ZPixmap); switch (visual_info->c_class) { case PseudoColor: { XColor *xc = new XColor[width_]; for (j = 0; j < height_; j++) { for (i = 0; i < width_; i++) xc[i].pixel = XGetPixel(ximage, i, j); XQueryColors(display, colormap, xc, width_); for (i = 0; i < width_; i++) { rgb[ipos++] = (unsigned char) (xc[i].red >> 8); rgb[ipos++] = (unsigned char) (xc[i].green >> 8); rgb[ipos++] = (unsigned char) (xc[i].blue >> 8); } } delete [] xc; } break; case TrueColor: { unsigned char red_left_shift; unsigned char red_right_shift; unsigned char green_left_shift; unsigned char green_right_shift; unsigned char blue_left_shift; unsigned char blue_right_shift; computeShift(visual_info->red_mask, red_left_shift, red_right_shift); computeShift(visual_info->green_mask, green_left_shift, green_right_shift); computeShift(visual_info->blue_mask, blue_left_shift, blue_right_shift); unsigned long pixel; for (j = 0; j < height_; j++) { for (i = 0; i < width_; i++) { pixel = XGetPixel(ximage, i, j); rgb[ipos++] = ((unsigned char) (((pixel & visual_info->red_mask) >> red_left_shift) << red_right_shift)); rgb[ipos++] = ((unsigned char) (((pixel & visual_info->green_mask) >> green_left_shift) << green_right_shift)); rgb[ipos++] = ((unsigned char) (((pixel & visual_info->blue_mask) >> blue_left_shift) << blue_right_shift)); } } } break; default: { ostringstream errStr; errStr << "decomposePixmap: visual = " << visual_info->c_class << endl << "Visual should be either PseudoColor or TrueColor\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } XFree(visual_info); XDestroyImage(ximage); } xplanet-1.3.0/src/libdisplay/Timer.cpp0000644000175000017500000000304210411361070014606 00000000000000#include #include #include #include #include using namespace std; #include "config.h" #include "keywords.h" #include "Options.h" #include "Timer.h" #include "xpUtil.h" Timer::Timer(const int w, const unsigned long h, const unsigned long i) : wait_(w), hibernate_(h), idlewait_(i) { } Timer::~Timer() { } void Timer::Update() { gettimeofday(¤tTime_, NULL); nextUpdate_ = currentTime_.tv_sec + wait_; } // Sleep for sleep_time seconds. bool Timer::SleepForTime(time_t sleep_time) { if (sleep_time <= 0) return(true); gettimeofday(¤tTime_, NULL); nextUpdate_ = sleep_time + currentTime_.tv_sec; if (static_cast (sleep_time) != 1) { Options *options = Options::getInstance(); if (options->Verbosity() > 0) { ostringstream msg; msg << "sleeping for " << static_cast (sleep_time) << " seconds until " << ctime((time_t *) &nextUpdate_); xpMsg(msg.str(), __FILE__, __LINE__); } } // Check every second if we've reached the time for the next // update. while (currentTime_.tv_sec < nextUpdate_) { sleep(1); gettimeofday(¤tTime_, NULL); } return(true); } // returns false if the program should exit after this sleep bool Timer::Sleep() { // Sleep until the next update gettimeofday(¤tTime_, NULL); SleepForTime(nextUpdate_ - currentTime_.tv_sec); return(true); } xplanet-1.3.0/src/libdisplay/Makefile.am0000644000175000017500000000275311430534510015071 00000000000000noinst_LIBRARIES = libdisplay.a libtimer.a if HAVE_AQUA displayaqua = DisplayMacAqua.cpp DisplayMacAqua.h DesktopPicture.m timeraqua = TimerMacAqua.cpp TimerMacAqua.h %.o: %.m $(OBJC) $(OBJCFLAGS) -c $< endif if HAVE_CYGWIN displaymswin = DisplayMSWin.cpp DisplayMSWin.h endif if HAVE_LIBFREETYPE textrendererft2 = TextRendererFT2.cpp TextRendererFT2.h endif if HAVE_LIBPANGOFT2 textrendererpangoft2 = TextRendererPangoFT2.cpp TextRendererPangoFT2.h endif if HAVE_LIBX11 displayx11 = DisplayX11.cpp DisplayX11.h vroot.h timerx11 = TimerX11.h TimerX11.cpp endif EXTRA_libdisplay_a_SOURCES = DisplayMacAqua.cpp DisplayMacAqua.h DisplayMSWin.cpp DisplayMSWin.h TextRendererFT2.cpp TextRendererFT2.h TextRendererPangoFT2.cpp TextRendererPangoFT2.h DisplayX11.cpp DisplayX11.h vroot.h TimerMacAqua.cpp TimerMacAqua.h TimerX11.cpp TimerX11.h AM_CPPFLAGS = -I@top_srcdir@/src @X_CFLAGS@ @FREETYPE_CFLAGS@ if USE_AR libdisplay_a_AR = $(AR) cru libtimer_a_AR = $(AR) cru else libdisplay_a_AR = $(CXX) @xplanet_ARFLAGS@ libtimer_a_AR = $(CXX) @xplanet_ARFLAGS@ endif libdisplay_a_SOURCES = \ DisplayBase.cpp \ DisplayBase.h \ DisplayOutput.h \ DisplayOutput.cpp \ getDisplay.cpp \ libdisplay.h \ TextRenderer.cpp \ TextRenderer.h \ getTextRenderer.cpp \ $(displayx11) \ $(displayaqua) \ $(displaymswin) \ $(textrendererft2) \ $(textrendererpangoft2) libtimer_a_SOURCES = \ getTimer.cpp \ libtimer.h \ Timer.h \ Timer.cpp \ $(timeraqua) \ $(timerx11) xplanet-1.3.0/src/libdisplay/TimerX11.cpp0000644000175000017500000001213410411361070015102 00000000000000#include #include using namespace std; #include #include #include "config.h" #include "keywords.h" #include "Options.h" #include "xpUtil.h" #include "TimerX11.h" #include "libdisplay/DisplayX11.h" Display *TimerX11::display_ = NULL; TimerX11::TimerX11(const int w, const unsigned long h, const unsigned long i) : Timer(w, h, i) { display_ = XOpenDisplay(NULL); #ifdef HAVE_XSS screenSaverInfo_ = NULL; if (display_) { const int screen_num = DefaultScreen(display_); root_ = RootWindow(display_, screen_num); int event_base, error_base; if (XScreenSaverQueryExtension(display_, &event_base, &error_base)) screenSaverInfo_ = XScreenSaverAllocInfo(); } #endif } TimerX11::~TimerX11() { XCloseDisplay(display_); #ifdef HAVE_XSS XFree(screenSaverInfo_); #endif } // Sleep for sleep_time seconds. Also check if this is a window // that's been closed, in which case the program should quit. bool TimerX11::SleepForTime(time_t sleep_time) { if (sleep_time <= 0) return(true); gettimeofday(¤tTime_, NULL); nextUpdate_ = sleep_time + currentTime_.tv_sec; Options *options = Options::getInstance(); if (static_cast (sleep_time) > 1) { if (options->Verbosity() > 0) { ostringstream msg; msg << "sleeping for " << static_cast (sleep_time) << " seconds until " << ctime((time_t *) &nextUpdate_); xpMsg(msg.str(), __FILE__, __LINE__); } } if (options->DisplayMode() == WINDOW) { Window window = DisplayX11::WindowID(); Atom wmDeleteWindow = XInternAtom(display_, "WM_DELETE_WINDOW", False); XSetWMProtocols(display_, window, &wmDeleteWindow, 1); XSelectInput(display_, window, KeyPressMask); XEvent event; // Check every 1/10th of a second if there's been a request to // kill the window while (currentTime_.tv_sec < nextUpdate_) { if (XCheckTypedWindowEvent(display_, window, ClientMessage, &event) == True) { if ((unsigned int) event.xclient.data.l[0] == wmDeleteWindow) return(false); } else if (XCheckTypedWindowEvent(display_, window, KeyPress, &event) == True) { KeySym keysym; char keybuf; XLookupString(&(event.xkey), &keybuf, 1, &keysym, NULL); if (keybuf == 'q' || keybuf == 'Q') return(false); } usleep(100000); // sleep for 1/10 second gettimeofday(¤tTime_, NULL); } } else { // Check every second if we've reached the time for the next // update. while (currentTime_.tv_sec < nextUpdate_) { sleep(1); gettimeofday(¤tTime_, NULL); } } return(true); } // returns false if the program should exit after this sleep bool TimerX11::Sleep() { // Sleep until the next update gettimeofday(¤tTime_, NULL); if (!SleepForTime(nextUpdate_ - currentTime_.tv_sec)) return(false); #ifdef HAVE_XSS // If the display has not been idle for idlewait_ // milliseconds, keep sleeping. Check every second until the // display has been idle for long enough. if (idlewait_ > 0) { unsigned long idle = GetSystemIdleTime(); Options *options = Options::getInstance(); if (options->Verbosity() > 0) { ostringstream msg; msg << "Idle time is " << idle/1000 << " second"; if (idle/1000 != 1) msg << "s"; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } while (idle < idlewait_) { gettimeofday(¤tTime_, NULL); if (!SleepForTime((idlewait_ - idle) / 1000)) return(false); idle = GetSystemIdleTime(); } } // If the display has been idle for longer than hibernate_ // milliseconds, keep sleeping. Check every second until // something happens. if (hibernate_ > 0) { unsigned long idle = GetSystemIdleTime(); Options *options = Options::getInstance(); if (options->Verbosity() > 0 && idle > hibernate_) xpMsg("Hibernating ...\n", __FILE__, __LINE__); while (idle > hibernate_) { if (!SleepForTime(1)) return(false); idle = GetSystemIdleTime(); } } #endif return(true); } // return the system idle time in milliseconds unsigned long TimerX11::GetSystemIdleTime() { unsigned long idle = 0; #ifdef HAVE_XSS if (screenSaverInfo_ != NULL) { XScreenSaverQueryInfo(display_, root_, screenSaverInfo_); idle = screenSaverInfo_->idle; } #endif return(idle); } xplanet-1.3.0/src/libdisplay/DisplayBase.h0000644000175000017500000000432011713224323015400 00000000000000#ifndef DisplayBase_h #define DisplayBase_h #include #include #include "config.h" #define TEXTRENDERER #ifdef TEXTRENDERER #include "TextRenderer.h" #else #endif class PlanetProperties; class DisplayBase { public: DisplayBase(const int tr); virtual ~DisplayBase(); int Width() const { return(width_); }; int Height() const { return(height_); }; void setPixel(const double X, const double Y, const unsigned char color[3]); void setPixel(const int x, const int y, const unsigned int value); void setPixel(const int x, const int y, const unsigned char pixel[3]); void setPixel(const int x, const int y, const unsigned char pixel[3], const double opacity); void setPixel(const int x, const int y, const unsigned char pixel[3], const double opacity[3]); void getPixel(const int x, const int y, unsigned char pixel[3]) const; virtual void renderImage(PlanetProperties *planetProperties[]) = 0; const std::string & Font() const { return(textRenderer_->Font()); }; int FontSize() const { return(textRenderer_->FontSize()); }; void Font(const std::string &fontname); void FontSize(const int size); void setText(const std::string &text); void DrawText(const int x, int y, const std::string &text, const unsigned char color[3], const double opacity); void DrawOutlinedText(const int x, int y, const std::string &text, const unsigned char color[3], const double opacity); void FreeText(); void getTextBox(int &textWidth, int &textHeight); virtual std::string TmpDir(); protected: const int times_run; int width_, height_; int area_; unsigned char *rgb_data; unsigned char *alpha; int fullWidth_, fullHeight_; // pixel dimensions of the display void allocateRGBData(); void drawLabel(PlanetProperties *planetProperties[]); void drawLabelLine(int ¤tX, int ¤tY, const std::string &text); void PlaceImageOnRoot(); void SetBackground(const int width, const int height, unsigned char *rgb); private: TextRenderer *textRenderer_; }; #endif xplanet-1.3.0/src/libdisplay/TextRendererFT2.cpp0000644000175000017500000001637011660336360016500 00000000000000#include #include #include #include using namespace std; #include "findFile.h" #include "Options.h" #include "xpDefines.h" #include "xpUtil.h" #include "DisplayBase.h" #include "TextRendererFT2.h" TextRendererFT2::TextRendererFT2(DisplayBase *display) : TextRenderer(display) { glyphs_ = NULL; pos = NULL; numGlyphs_ = 0; const int error = FT_Init_FreeType(&library_); if (error) xpExit("Can't initialize freetype library\n", __FILE__, __LINE__); Options *options = Options::getInstance(); fontSize_ = options->FontSize(); Font(options->Font()); } TextRendererFT2::~TextRendererFT2() { FT_Done_Face(face_); FT_Done_FreeType(library_); delete [] glyphs_; delete [] pos; } void TextRendererFT2::Font(const string &font) { font_.assign(font); if (!findFile(font_, "fonts")) { ostringstream errStr; errStr << "Can't open font file " << font_ << endl; xpWarn(errStr.str(), __FILE__, __LINE__); font_ = defaultFont; if (!findFile(font_, "fonts")) { errStr.str(""); errStr << "Can't open default font file " << font_ << endl; xpExit(errStr.str(), __FILE__, __LINE__); } } int error = FT_New_Face(library_, font_.c_str(), 0, &face_); if (error) { ostringstream errStr; errStr << "Can't load font " << font_ << endl; xpExit(errStr.str(), __FILE__, __LINE__); } error = FT_Select_Charmap(face_, ft_encoding_unicode); if (error) { ostringstream errStr; errStr << "No unicode map in font " << font_ << endl; xpExit(errStr.str(), __FILE__, __LINE__); } FontSize(fontSize_); } void TextRendererFT2::FontSize(const int size) { fontSize_ = size; int error = FT_Set_Pixel_Sizes(face_, 0, fontSize_); if (error) { ostringstream errStr; errStr << "Can't set pixel size to " << fontSize_ << endl; xpWarn(errStr.str(), __FILE__, __LINE__); fontSize_ = 12; error = FT_Set_Pixel_Sizes(face_, 0, fontSize_); } if (error) { ostringstream errStr; errStr << "Can't set pixel size to " << fontSize_ << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } } int TextRendererFT2::FontHeight() const { return(static_cast (1.25 * face_->size->metrics.y_ppem)); } void TextRendererFT2::DrawText(const int x, const int y, const unsigned char color[3]) { for (unsigned int i = 0; i < numGlyphs_; i++) { FT_Glyph image; int error = FT_Glyph_Copy(glyphs_[i], &image); FT_Vector pen; pen.x = pos[i].x; pen.y = pos[i].y; error = FT_Glyph_To_Bitmap( &image, ft_render_mode_normal, &pen, 1 ); if (!error) { FT_BitmapGlyph bit = (FT_BitmapGlyph) image; FT_Bitmap bitmap = bit->bitmap; pen.x += (x + bit->left); pen.y += (y - bit->top); for (int j = 0; j < bitmap.rows; j++) { int istart = j * bitmap.width; for (int k = 0; k < bitmap.width; k++) { if (bitmap.buffer[istart + k]) { double opacity = opacity_ * bitmap.buffer[istart + k]/255.0; display_->setPixel(pen.x + k, pen.y + j, color, opacity); } } } FT_Done_Glyph(image); } } } void TextRendererFT2::SetText(const std::string &text) { unsigned int numChars = 0; vector unicodeText; vector utf8Text; for (unsigned int i = 0; i < text.size(); i++) { unsigned char thisByte = (text[i] & 0xff); if (thisByte < 0x80 || (thisByte >= 0xc0 && thisByte <= 0xfd)) { // This is either an ASCII character or the first byte of // a multibyte sequence if (!utf8Text.empty()) { numChars++; unicodeText.push_back(UTF8ToUnicode(utf8Text)); } utf8Text.clear(); } utf8Text.push_back(thisByte); } if (!utf8Text.empty()) { numChars++; unicodeText.push_back(UTF8ToUnicode(utf8Text)); } int pen_x = 0; /* start at (0,0) !! */ int pen_y = 0; FT_Bool use_kerning = FT_HAS_KERNING(face_); FT_UInt previous = 0; delete [] glyphs_; delete [] pos; glyphs_ = new FT_Glyph[text.size()]; pos = new FT_Vector[text.size()]; numGlyphs_ = 0; for (unsigned int n = 0; n < numChars; n++ ) { // convert character code to glyph index FT_UInt glyph_index = FT_Get_Char_Index( face_, unicodeText[n] ); // retrieve kerning distance and move pen position if ( use_kerning && previous && glyph_index ) { FT_Vector delta; FT_Get_Kerning( face_, previous, glyph_index, ft_kerning_default, &delta ); pen_x += delta.x >> 6; } pos[numGlyphs_].x = pen_x; pos[numGlyphs_].y = pen_y; // load glyph image into the slot. DO NOT RENDER IT !! int error = FT_Load_Glyph( face_, glyph_index, FT_LOAD_DEFAULT ); if (error) continue; // ignore errors, jump to next glyph // extract glyph image and store it in our table error = FT_Get_Glyph( face_->glyph, &glyphs_[numGlyphs_] ); if (error) continue; // ignore errors, jump to next glyph // increment pen position pen_x += face_->glyph->advance.x >> 6; // record current glyph index previous = glyph_index; numGlyphs_++; } } void TextRendererFT2::FreeText() { for (unsigned int i = 0; i < numGlyphs_; i++) FT_Done_Glyph(glyphs_[i]); } void TextRendererFT2::TextBox(int &textWidth, int &textHeight) { FT_BBox bbox; // initialise string bbox to "empty" values bbox.xMin = bbox.yMin = 32000; bbox.xMax = bbox.yMax = -32000; // for each glyph image, compute its bounding box, translate it, // and grow the string bbox for (unsigned int i = 0; i < numGlyphs_; i++) { FT_BBox glyph_bbox; FT_Glyph_Get_CBox( glyphs_[i], ft_glyph_bbox_pixels, &glyph_bbox ); glyph_bbox.xMin += pos[i].x; glyph_bbox.xMax += pos[i].x; glyph_bbox.yMin += pos[i].y; glyph_bbox.yMax += pos[i].y; if (glyph_bbox.xMin < bbox.xMin) bbox.xMin = glyph_bbox.xMin; if (glyph_bbox.yMin < bbox.yMin) bbox.yMin = glyph_bbox.yMin; if (glyph_bbox.xMax > bbox.xMax) bbox.xMax = glyph_bbox.xMax; if (glyph_bbox.yMax > bbox.yMax) bbox.yMax = glyph_bbox.yMax; } // check that we really grew the string bbox if ( bbox.xMin > bbox.xMax ) { bbox.xMin = 0; bbox.yMin = 0; bbox.xMax = 0; bbox.yMax = 0; } textWidth = bbox.xMax - bbox.xMin; textHeight = bbox.yMax - bbox.yMin; } xplanet-1.3.0/src/libdisplay/libdisplay.h0000644000175000017500000000020210411344513015325 00000000000000#ifndef LIBDISPLAY_H #define LIBDISPLAY_H #include "DisplayBase.h" extern DisplayBase *getDisplay(const int times_run); #endif xplanet-1.3.0/src/libdisplay/DesktopPicture.m0000644000175000017500000001307111411447750016163 00000000000000/* File: DesktopPicture.m Description: This file contains the SetDesktopPicture function, which tells the Finder to set a given picture as the desktop picture. Author: MCF Copyright: Copyright 2002 Apple Computer, Inc. All rights reserved. Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Version History: 1.0 - 03/2002 Initial Release */ #import #include // Setting the desktop picture involves a lot of Apple Event and Carbon code. // It's all self-contained in this one function. This Apple Event isn't guarrenteed to // work forever, and real APIs to set the desktop picture should be coming down the road, // but in the meantime this is how you do it. static OSErr SetDesktopPicture(NSString *picturePath,SInt32 pIndex) { AEDesc tAEDesc = {typeNull, nil}; // always init AEDescs OSErr anErr = noErr; AliasHandle aliasHandle=nil; FSRef pictRef; OSStatus status; // Someday pIndex will hopefully determine on which monitor to set the desktop picture. // This doesn't work in Mac OS X right now, so we don't do anything with the parameter. #pragma unused (pIndex) // Let's make an FSRef from the NSString picture path that was passed in status=FSPathMakeRef([picturePath fileSystemRepresentation],&pictRef,NULL); // Now we create an alias to the picture from that FSRef if (status==noErr) anErr = FSNewAlias( nil, &pictRef, &aliasHandle); if ( noErr == anErr && aliasHandle == nil ) anErr = paramErr; // Now we create an AEDesc containing the alias to the picture if ( noErr == anErr ) { char handleState = HGetState( (Handle) aliasHandle ); HLock( (Handle) aliasHandle); anErr = AECreateDesc( typeAlias, *aliasHandle, GetHandleSize((Handle) aliasHandle), &tAEDesc); HSetState( (Handle) aliasHandle, handleState ); DisposeHandle( (Handle)aliasHandle ); } if (noErr == anErr) { // Now we need to build the actual Apple Event that we're going to send the Finder AppleEvent tAppleEvent; OSType sig = 'MACS'; // The app signature for the Finder AEBuildError tAEBuildError; anErr = AEBuildAppleEvent(kAECoreSuite,kAESetData,typeApplSignature,&sig,sizeof(OSType), kAutoGenerateReturnID,kAnyTransactionID,&tAppleEvent,&tAEBuildError, "'----':'obj '{want:type(prop),form:prop,seld:type('dpic'),from:'null'()},data:(@)",&tAEDesc); // Finally we can go ahead and send the Apple Event using AESend if (noErr == anErr) { AppleEvent theReply = {typeNull, nil}; anErr = AESend(&tAppleEvent,&theReply,kAENoReply,kAENormalPriority,kNoTimeOut,nil,nil); AEDisposeDesc(&tAppleEvent); // Always dispose ASAP } } return anErr; } /* This function written by Hari Nair (hari@alumni.caltech.edu) and distributed with Xplanet (http://xplanet.sourceforge.net) */ bool SetDesktopPictureFromCharString(const char *file) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *filePath = [NSString stringWithUTF8String: file]; OSErr err = SetDesktopPicture(filePath, 0); [pool release]; return (err == noErr); } xplanet-1.3.0/src/libdisplay/libtimer.h0000644000175000017500000000026210411344513015006 00000000000000#ifndef LIBTIMER_H #define LIBTIMER_H #include "Timer.h" extern Timer *getTimer(const int wait, const unsigned long hibernate, const unsigned long idlewait); #endif xplanet-1.3.0/src/libdisplay/TextRendererPangoFT2.h0000644000175000017500000000172110411417715017121 00000000000000#ifndef TEXTRENDERERPANGO_H #define TEXTRENDERERPANGO_H #include #include #include "TextRenderer.h" class DisplayBase; class TextRendererPangoFT2 : public TextRenderer { public: TextRendererPangoFT2(DisplayBase *display); virtual ~TextRendererPangoFT2(); virtual void Font(const std::string &font); const std::string & Font() const { return(font_); }; virtual int FontHeight() const; virtual void FontSize(const int size); int FontSize() const { return(fontSize_); }; virtual void DrawText(const int x, const int y, const unsigned char color[3]); virtual void SetText(const std::string &text); virtual void FreeText(); virtual void TextBox(int &textWidth, int &textHeight); private: PangoContext *context_; PangoDirection direction_; PangoFontDescription *fontDescription_; static PangoFontMap *fontMap_; PangoLayout *layout_; }; #endif xplanet-1.3.0/src/libdisplay/DisplayOutput.cpp0000644000175000017500000000356111107136020016360 00000000000000#include #include #include #include #include using namespace std; #include "keywords.h" #include "Options.h" #include "PlanetProperties.h" #include "xpUtil.h" #include "DisplayOutput.h" #include "libimage/Image.h" DisplayOutput::DisplayOutput(const int tr) : DisplayBase(tr) { Options *options = Options::getInstance(); width_ = options->getWidth(); height_ = options->getHeight(); quality_ = options->JPEGQuality(); if (!options->CenterSelected()) { if (width_ % 2 == 0) options->CenterX(width_/2 - 0.5); else options->CenterX(width_/2); if (height_ % 2 == 0) options->CenterY(height_/2 - 0.5); else options->CenterY(height_/2); } allocateRGBData(); } DisplayOutput::~DisplayOutput() { } void DisplayOutput::renderImage(PlanetProperties *planetProperties[]) { drawLabel(planetProperties); Options *options = Options::getInstance(); string outputFilename = options->OutputBase(); int startIndex = options->OutputStartIndex(); int stopIndex = options->NumTimes() + startIndex - 1; if (stopIndex > 1) { const int digits = (int) (log10((double) stopIndex) + 1); char buffer[64]; snprintf(buffer, 64, "%.*d", digits, times_run + startIndex); outputFilename += buffer; } outputFilename += options->OutputExtension(); Image i(width_, height_, rgb_data, alpha); i.Quality(quality_); if (!i.Write(outputFilename.c_str())) { ostringstream errStr; errStr << "Can't create " << outputFilename << ".\n"; xpExit(errStr.str(), __FILE__, __LINE__); } if (options->Verbosity() > 0) { ostringstream msg; msg << "Created image file " << outputFilename << "\n"; xpMsg(msg.str(), __FILE__, __LINE__); } } xplanet-1.3.0/src/libdisplay/getTimer.cpp0000644000175000017500000000106610411360615015316 00000000000000#include "config.h" #include "Timer.h" #ifdef HAVE_LIBX11 #include "TimerX11.h" #endif #ifdef HAVE_AQUA #include "TimerMacAqua.h" #endif Timer *getTimer(const int wait, const unsigned long hibernate, const unsigned long idlewait) { #ifdef HAVE_LIBX11 Display *d = XOpenDisplay(NULL); if (d != NULL) { XCloseDisplay(d); return(new TimerX11(wait, hibernate, idlewait)); } #endif #ifdef HAVE_AQUA return(new TimerMacAqua(wait, hibernate, idlewait)); #endif return(new Timer(wait, hibernate, idlewait)); } xplanet-1.3.0/src/libdisplay/TimerX11.h0000644000175000017500000000116510411360615014555 00000000000000#ifndef TIMERX11_H #define TIMERX11_H #include #include "config.h" #include #include #ifdef HAVE_XSS #include #endif #include "Timer.h" class TimerX11 : public Timer { public: TimerX11(const int w, const unsigned long h, const unsigned long i); ~TimerX11(); static Display *const DisplayID() { return(display_); }; bool Sleep(); private: static Display *display_; bool SleepForTime(time_t sleep); #ifdef HAVE_XSS Window root_; XScreenSaverInfo* screenSaverInfo_; #endif unsigned long GetSystemIdleTime(); }; #endif xplanet-1.3.0/src/libdisplay/TimerMacAqua.cpp0000644000175000017500000001503410411360615016047 00000000000000#include #include using namespace std; #include #include #include #include #include #include "config.h" #include "keywords.h" #include "Options.h" #include "xpUtil.h" #include "TimerMacAqua.h" TimerMacAqua::TimerMacAqua(const int w, const unsigned long h, const unsigned long i) : Timer(w, h, i) { } TimerMacAqua::~TimerMacAqua() { } // returns false if the program should exit after this sleep bool TimerMacAqua::Sleep() { // Sleep until the next update gettimeofday(¤tTime_, NULL); if (!SleepForTime(nextUpdate_ - currentTime_.tv_sec)) return(false); // If the display has not been idle for idlewait_ // milliseconds, keep sleeping. Check every second until the // display has been idle for long enough. if (idlewait_ > 0) { unsigned long idle = GetSystemIdleTime(); Options *options = Options::getInstance(); if (options->Verbosity() > 0) { ostringstream msg; msg << "Idle time is " << idle/1000 << " second"; if (idle/1000 != 1) msg << "s"; msg << endl; xpMsg(msg.str(), __FILE__, __LINE__); } while (idle < idlewait_) { gettimeofday(¤tTime_, NULL); if (!SleepForTime((idlewait_ - idle) / 1000)) return(false); idle = GetSystemIdleTime(); } } // If the display has been idle for longer than hibernate_ // milliseconds, keep sleeping. Check every second until // something happens. if (hibernate_ > 0) { unsigned long idle = GetSystemIdleTime(); Options *options = Options::getInstance(); if (options->Verbosity() > 0 && idle > hibernate_) xpMsg("Hibernating ...\n", __FILE__, __LINE__); while (idle > hibernate_) { if (!SleepForTime(1)) return(false); idle = GetSystemIdleTime(); } } return(true); } // return the system idle time in milliseconds This code is based on // "idler", found at // http://www.macosxlabs.org/tools_and_scripts/script_archive/script_archive.html // Their copyright notice follows: /***************************************** * idler.c * * Uses IOKit to figure out the idle time of the system. The idle time * is stored as a property of the IOHIDSystem class; the name is * HIDIdleTime. Stored as a 64-bit int, measured in ns. * * The program itself just prints to stdout the time that the computer has * been idle in seconds. * * Compile with gcc -Wall -framework IOKit -framework Carbon idler.c -o * idler * * Copyright (c) 2003, Stanford University * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Stanford University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ unsigned long TimerMacAqua::GetSystemIdleTime() { unsigned long idle; mach_port_t masterPort; io_iterator_t iter; io_registry_entry_t curObj; IOMasterPort(MACH_PORT_NULL, &masterPort); /* Get IOHIDSystem */ IOServiceGetMatchingServices(masterPort, IOServiceMatching("IOHIDSystem"), &iter); if (iter == 0) { xpWarn("Error accessing IOHIDSystem\n", __FILE__, __LINE__); } curObj = IOIteratorNext(iter); if (curObj == 0) { xpWarn("Iterator's empty!\n", __FILE__, __LINE__); } CFMutableDictionaryRef properties = 0; CFTypeRef obj; if (IORegistryEntryCreateCFProperties(curObj, &properties, kCFAllocatorDefault, 0) == KERN_SUCCESS && properties != NULL) { obj = CFDictionaryGetValue(properties, CFSTR("HIDIdleTime")); CFRetain(obj); } else { xpWarn("Couldn't grab properties of system\n", __FILE__, __LINE__); obj = NULL; } if (obj) { uint64_t tHandle; CFTypeID type = CFGetTypeID(obj); if (type == CFDataGetTypeID()) { CFDataGetBytes((CFDataRef) obj, CFRangeMake(0, sizeof(tHandle)), (UInt8*) &tHandle); } else if (type == CFNumberGetTypeID()) { CFNumberGetValue((CFNumberRef)obj, kCFNumberSInt64Type, &tHandle); } else { ostringstream errMsg; errMsg << (int) type << ": unsupported type\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } CFRelease(obj); // tHandle is in nanoseconds, we want milliseconds idle = static_cast (tHandle / 1e6); } else { xpWarn("Can't find idle time\n", __FILE__, __LINE__); } /* Release our resources */ IOObjectRelease(curObj); IOObjectRelease(iter); CFRelease((CFTypeRef)properties); return(idle); } xplanet-1.3.0/src/libdisplay/DisplayMacAqua.cpp0000644000175000017500000000661510411417337016405 00000000000000#include #include #include #include using namespace std; #include "keywords.h" #include "Options.h" #include "PlanetProperties.h" #include "xpUtil.h" #include "DisplayMacAqua.h" #include "libimage/Image.h" #include extern "C" { bool SetDesktopPictureFromCharString(const char *file); } DisplayMacAqua::DisplayMacAqua(const int tr) : DisplayBase(tr) { fullWidth_ = static_cast (CGDisplayPixelsWide(kCGDirectMainDisplay)); fullHeight_ = static_cast (CGDisplayPixelsHigh(kCGDirectMainDisplay)); if (fullWidth_ == 0 || fullHeight_ == 0) xpExit("Can't set Aqua display\n", __FILE__, __LINE__); Options *options = Options::getInstance(); switch (options->DisplayMode()) { case WINDOW: xpWarn("-window option not supported for Aqua.\n", __FILE__, __LINE__); // fall through case ROOT: if (options->GeometrySelected()) { width_ = options->getWidth(); height_ = options->getHeight(); } else { width_ = fullWidth_; height_ = fullHeight_; } break; } if (!options->CenterSelected()) { if (width_ % 2 == 0) options->CenterX(width_/2 - 0.5); else options->CenterX(width_/2); if (height_ % 2 == 0) options->CenterY(height_/2 - 0.5); else options->CenterY(height_/2); } allocateRGBData(); } DisplayMacAqua::~DisplayMacAqua() { } // This was pretty much written by trial and error once I found // DesktopPicture.m on developer.apple.com void DisplayMacAqua::renderImage(PlanetProperties *planetProperties[]) { drawLabel(planetProperties); // Setting the desktop picture doesn't seem to work if you give it // the same filename over and over again. char templateFile[16]; strncpy(templateFile, "Xplanet.XXXXXX", 16); char *tmpFile = mktemp(templateFile); ostringstream outputStream; outputStream << TmpDir() << "/" << tmpFile << ".png"; Options *options = Options::getInstance(); if (options->GeometrySelected()) PlaceImageOnRoot(); Image i(fullWidth_, fullHeight_, rgb_data, alpha); if (!i.Write(outputStream.str().c_str())) { ostringstream errStr; errStr << "Can't create image file " << outputStream.str() << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } if (options->Verbosity() > 1) { ostringstream msg; msg << "Created image file " << outputStream.str() << "\n"; xpMsg(msg.str(), __FILE__, __LINE__); } // This sometimes doesn't set the background correctly, but // doesn't return false in those cases. Hopefully the real API to // set the desktop will be available soon. sleep(1); if (!SetDesktopPictureFromCharString(outputStream.str().c_str())) { ostringstream errStr; errStr << "Failed to set desktop from " << outputStream.str() << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } // I have no idea, but maybe the failure to set the desktop is // because the Apple Event runs inside a thread or something. // Sleep for a second before removing the temporary file to give // it some time. sleep(1); if (!options->SaveDesktopFile()) unlinkFile(outputStream.str().c_str()); } xplanet-1.3.0/src/libdisplay/DisplayBase.cpp0000644000175000017500000004606111723527272015755 00000000000000#include #include #include #include #include #include #include using namespace std; #include "body.h" #include "findFile.h" #include "keywords.h" #include "Options.h" #include "parseColor.h" #include "ParseGeom.h" #include "PlanetProperties.h" #include "xpDefines.h" #include "xpUtil.h" #include "DisplayBase.h" #include "libimage/Image.h" #include "libplanet/Planet.h" extern TextRenderer *getTextRenderer(DisplayBase *display); DisplayBase::DisplayBase(const int tr) : times_run(tr) { textRenderer_ = getTextRenderer(this); } DisplayBase::~DisplayBase() { delete [] rgb_data; delete [] alpha; delete textRenderer_; } void DisplayBase::Font(const string &fontname) { textRenderer_->Font(fontname); } void DisplayBase::FontSize(const int size) { textRenderer_->FontSize(size); } void DisplayBase::getTextBox(int &textWidth, int &textHeight) { textRenderer_->TextBox(textWidth, textHeight); } // Remember to call FreeText() when done with the text operation void DisplayBase::setText(const string &text) { textRenderer_->SetText(text); } void DisplayBase::FreeText() { textRenderer_->FreeText(); } // x and y are the center left coordinates of the string void DisplayBase::DrawText(const int x, int y, const string &text, const unsigned char color[3], const double opacity) { textRenderer_->DrawText(x, y, text, color, opacity); } // x and y are the center left coordinates of the string void DisplayBase::DrawOutlinedText(const int x, int y, const string &text, const unsigned char color[3], const double opacity) { textRenderer_->DrawOutlinedText(x, y, text, color, opacity); } void DisplayBase::drawLabelLine(int ¤tX, int ¤tY, const string &text) { setText(text); int textWidth, textHeight; getTextBox(textWidth, textHeight); FreeText(); Options *options = Options::getInstance(); if (options->LabelMask() & XNegative) { currentX = (options->LabelX() + width_ - 2 - textWidth); } DrawOutlinedText(currentX, currentY, text, options->Color(), 1.0); currentY += textRenderer_->FontHeight(); } void DisplayBase::drawLabel(PlanetProperties *planetProperties[]) { Options *options = Options::getInstance(); if (!options->DrawLabel()) return; vector labelLines; const body target = (options->LabelBody() == UNKNOWN_BODY ? options->Target() : options->LabelBody()); const body origin = options->Origin(); string lookAt; if (options->LabelString().empty()) { if (options->TargetMode() != XYZ) { lookAt.assign(""); string viewTarget; string viewOrigin; if (options->Projection() == MULTIPLE) { viewTarget.assign(planetProperties[target]->Name()); switch (options->OriginMode()) { case ABOVE: viewOrigin.assign(" from above"); break; case BELOW: viewOrigin.assign(" from below"); break; case BODY: case MAJOR: case RANDOM: case SYSTEM: if (options->OppositeSide()) { viewTarget.assign(planetProperties[origin]->Name()); viewOrigin.assign(" from behind "); viewOrigin += planetProperties[target]->Name(); } else { viewOrigin.assign(" seen from "); viewOrigin += planetProperties[origin]->Name(); } break; case LBR: default: break; } } else { viewTarget.assign(planetProperties[target]->Name()); } lookAt += viewTarget; lookAt += viewOrigin; } } else { lookAt.assign(options->LabelString()); for (unsigned int i = 0; i < lookAt.size() - 1; i++) { if (lookAt[i] == '%') { switch (lookAt[i+1]) { case 't': if (target < RANDOM_BODY) lookAt.replace(i, 2, planetProperties[target]->Name()); break; case 'o': if (origin < RANDOM_BODY) lookAt.replace(i, 2, planetProperties[origin]->Name()); break; case '%': lookAt.erase(i, 1); break; } } } } time_t tv_sec = options->TVSec(); string timeString; if (tv_sec == (time_t) (-1)) { int year, month, day, hour, min; double sec; double jd = options->JulianDay(); fromJulian(jd, year, month, day, hour, min, sec); char timeBuffer[MAX_LINE_LENGTH]; memset(timeBuffer, 0, MAX_LINE_LENGTH); snprintf(timeBuffer, MAX_LINE_LENGTH, "%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d UTC", year, month, day, hour, min, static_cast (floor(sec))); timeString.assign(timeBuffer); } else { char *tzEnv = getenv("TZ"); string tzSave(""); if (options->DrawUTCLabel()) { if (tzEnv != NULL) { tzSave = "TZ="; tzSave += tzEnv; } putenv("TZ=UTC"); tzset(); } timeString.assign(options->DateFormat()); // run date string through strftime() and convert to UTF-8 strftimeUTF8(timeString); if (options->DrawUTCLabel()) { if (tzEnv == NULL) removeFromEnvironment("TZ"); else putenv((char *) tzSave.c_str()); tzset(); } } if (!lookAt.empty()) labelLines.push_back(lookAt); labelLines.push_back(timeString); double oX, oY, oZ; double targetDist; Planet *targetPlanet = NULL; if (options->TargetMode() != XYZ) { options->getOrigin(oX, oY, oZ); targetPlanet = new Planet(options->JulianDay(), target); targetPlanet->calcHeliocentricEquatorial(); double tX, tY, tZ; if (options->LightTime()) { targetPlanet->getPosition(tX, tY, tZ); const double deltX = tX - oX; const double deltY = tY - oY; const double deltZ = tZ - oZ; targetDist = AU_to_km * sqrt(deltX*deltX + deltY*deltY + deltZ*deltZ); double lightTime = targetDist / (299792.458 * 86400); delete targetPlanet; targetPlanet = new Planet(options->JulianDay() - lightTime, target); targetPlanet->calcHeliocentricEquatorial(); } targetPlanet->getPosition(tX, tY, tZ); const double deltX = tX - oX; const double deltY = tY - oY; const double deltZ = tZ - oZ; targetDist = AU_to_km * sqrt(deltX*deltX + deltY*deltY + deltZ*deltZ); double obsLat, obsLon; targetPlanet->XYZToPlanetographic(oX, oY, oZ, obsLat, obsLon); char obsString[MAX_LINE_LENGTH]; double obsLatDeg = obsLat / deg_to_rad; double obsLonDeg = obsLon / deg_to_rad; if (target == EARTH || target == MOON) { if (obsLonDeg > 180) obsLonDeg -= 360; snprintf(obsString, MAX_LINE_LENGTH, "obs %4.1f %c %5.1f %c", fabs(obsLatDeg), ((obsLatDeg < 0) ? 'S' : 'N'), fabs(obsLonDeg), ((obsLonDeg < 0) ? 'W' : 'E')); } else { if (obsLonDeg < 0) obsLonDeg += 360; snprintf(obsString, MAX_LINE_LENGTH,"obs %4.1f %c %5.1f", fabs(obsLatDeg), ((obsLatDeg < 0) ? 'S' : 'N'), obsLonDeg); } labelLines.push_back(obsString); double sunLat, sunLon; targetPlanet->XYZToPlanetographic(0, 0, 0, sunLat, sunLon); if (target != SUN) { char sunString[MAX_LINE_LENGTH]; double sunLatDeg = sunLat / deg_to_rad; double sunLonDeg = sunLon / deg_to_rad; if (target == EARTH || target == MOON) { if (sunLonDeg > 180) sunLonDeg -= 360; snprintf(sunString, MAX_LINE_LENGTH, "sun %4.1f %c %5.1f %c", fabs(sunLatDeg), ((sunLatDeg < 0) ? 'S' : 'N'), fabs(sunLonDeg), ((sunLonDeg < 0) ? 'W' : 'E')); } else { if (sunLonDeg < 0) sunLonDeg += 360; snprintf(sunString, MAX_LINE_LENGTH,"sun %4.1f %c %5.1f", fabs(sunLatDeg), ((sunLatDeg < 0) ? 'S' : 'N'), sunLonDeg); } labelLines.push_back(sunString); } } if (options->Projection() == MULTIPLE) { char fovCString[MAX_LINE_LENGTH]; double fov = options->FieldOfView() / deg_to_rad; if (fov > 1) snprintf(fovCString, MAX_LINE_LENGTH, "fov %.1f degrees", fov); else if (fov * 60 > 1) { fov *= 60; snprintf(fovCString, MAX_LINE_LENGTH, "fov %.1f arc minutes", fov); } else if (fov * 3600 > 1) { fov *= 3600; snprintf(fovCString, MAX_LINE_LENGTH, "fov %.1f arc seconds", fov); } else { fov *= 3600000; snprintf(fovCString, MAX_LINE_LENGTH, "fov %.1f milliarc seconds", fov); } char distString[MAX_LINE_LENGTH]; if (targetDist < 1e6) { snprintf(distString, MAX_LINE_LENGTH, "dist %.0f km", targetDist); } else if (targetDist < 1e9) { targetDist /= 1e6; snprintf(distString, MAX_LINE_LENGTH, "dist %.2f million km", targetDist); } else { targetDist /= 1e9; snprintf(distString, MAX_LINE_LENGTH, "dist %.2f billion km", targetDist); } labelLines.push_back(fovCString); if (options->Target() != ALONG_PATH) labelLines.push_back(distString); if (options->TargetMode() != XYZ && target != SUN) { char illumString[MAX_LINE_LENGTH]; snprintf(illumString, MAX_LINE_LENGTH, "illumination %.1f %%", targetPlanet->Illumination(oX, oY, oZ)); labelLines.push_back(illumString); } } delete targetPlanet; int labelX = options->LabelX(); int labelY = options->LabelY() + textRenderer_->FontHeight()/2; if (options->LabelMask() & YNegative) { labelY += (height_ - labelLines.size() * textRenderer_->FontHeight()); } for (unsigned int i = 0; i < labelLines.size(); i++) { if (!labelLines[i].empty()) drawLabelLine(labelX, labelY, labelLines[i]); } } // Set the pixel value to { value, value, value } void DisplayBase::setPixel(const int x, const int y, const unsigned int value) { if (x < 0 || x >= width_ || y < 0 || y >= height_) return; unsigned char *background = rgb_data + 3*(y*width_ + x); memset(background, value, 3); if (alpha != NULL) alpha[y*width_ + x] = 255; } // Given floating point pixel values, spread the pixel around its // neighbors void DisplayBase::setPixel(const double X, const double Y, const unsigned char color[3]) { if (X < 0 || X >= width_ || Y < 0 || Y >= height_) return; const int x0 = static_cast (floor(X)); const int y0 = static_cast (floor(Y)); int ipos[4]; ipos[0] = y0 * width_ + x0; ipos[1] = ipos[0] + 1; ipos[2] = ipos[0] + width_; ipos[3] = ipos[2] + 1; const double t = X - x0; const double u = 1 - (Y - y0); double weight[4]; getWeights(t, u, weight); setPixel(x0, y0, color, weight[0]); setPixel(x0+1, y0, color, weight[1]); setPixel(x0, y0+1, color, weight[2]); setPixel(x0+1, y0+1, color, weight[3]); } void DisplayBase::setPixel(const int x, const int y, const unsigned char pixel[3]) { setPixel(x, y, pixel, 1.0); } void DisplayBase::setPixel(const int x, const int y, const unsigned char p[3], const double opacity[3]) { if (x < 0 || x >= width_ || y < 0 || y >= height_) return; int ipos = y*width_ + x; unsigned char *background = rgb_data + 3*ipos; unsigned char pixel[3]; memcpy(pixel, p, 3); double meanOpacity = 0; for (int i = 0; i < 3; i++) meanOpacity += opacity[i]; meanOpacity /= 3; if (meanOpacity < 1) { for (int i = 0; i < 3; i++) pixel[i] = (unsigned char) (opacity[i] * p[i] + (1 - opacity[i]) * background[i]); if (alpha != NULL) { int thisAlpha = (int) (meanOpacity * 255 + alpha[ipos]); alpha[ipos] = (unsigned char) (thisAlpha > 255 ? 255 : thisAlpha); } } else { if (alpha != NULL) alpha[ipos] = 255; } memcpy(background, pixel, 3); } void DisplayBase::setPixel(const int x, const int y, const unsigned char p[3], const double opacity) { if (x < 0 || x >= width_ || y < 0 || y >= height_) return; int ipos = y*width_ + x; unsigned char *background = rgb_data + 3*ipos; unsigned char pixel[3]; memcpy(pixel, p, 3); if (opacity < 1) { for (int i = 0; i < 3; i++) pixel[i] = (unsigned char) (opacity * p[i] + (1 - opacity) * background[i]); if (alpha != NULL) { int thisAlpha = (int) (opacity * 255 + alpha[ipos]); alpha[ipos] = (unsigned char) (thisAlpha > 255 ? 255 : thisAlpha); } } else { if (alpha != NULL) alpha[y*width_ + x] = 255; } memcpy(background, pixel, 3); } void DisplayBase::getPixel(const int x, const int y, unsigned char pixel[3]) const { if (x < 0 || x >= width_ || y < 0 || y >= height_) return; memcpy(pixel, rgb_data + 3*(y*width_ + x), 3); } void DisplayBase::SetBackground(const int width, const int height, unsigned char *rgb) { Options *options = Options::getInstance(); string backgroundFile(options->Background()); if (!backgroundFile.empty()) { // First check if requesting a color unsigned char color[3]; string failed; parseColor(backgroundFile, color, failed); if (failed.empty()) { int ipos = 0; for (int i = 0; i < width * height; i++) { for (int j = 0; j < 3; j++) memcpy(rgb + ipos++, &color[j], 1); } } else { // look for an image file Image *image = new Image; bool foundFile = findFile(backgroundFile, "images"); if (foundFile) foundFile = image->Read(backgroundFile.c_str()); if (foundFile) { if ((image->Width() != width) || (image->Height() != height)) { ostringstream errStr; errStr << "For better performance, " << "background image should " << "be the same size as the output image\n"; xpWarn(errStr.str(), __FILE__, __LINE__); image->Resize(width, height); } memcpy(rgb, image->getRGBData(), 3 * width * height); } delete image; } } else { if (options->ProjectionMode() != MULTIPLE) { // add random stars int numStars = static_cast (width * height * options->StarFreq()); for (int i = 0; i < numStars; i++) { int j = random() % width; int k = random() % height; int brightness = random() % 256; memset(rgb + 3 * (k * width + j), brightness, 3); } } } } void DisplayBase::allocateRGBData() { area_ = width_ * height_; rgb_data = new unsigned char [3 * area_]; memset(rgb_data, 0, 3 * area_); alpha = NULL; Options *options = Options::getInstance(); if (options->TransPNG()) { alpha = new unsigned char [area_]; memset(alpha, 0, area_); } // If a background image is specified along with -geometry and // we're drawing to the root window, it will only be overlaid on // the true root window. The sub-image won't have the background // image. if (options->DisplayMode() != ROOT || !options->GeometrySelected()) SetBackground(width_, height_, rgb_data); } string DisplayBase::TmpDir() { Options *options = Options::getInstance(); string returnstring = options->TmpDir(); if (returnstring.empty()) { char *tmpdir = getenv("TMPDIR"); if (tmpdir == NULL) returnstring.assign("/tmp"); else returnstring.assign(tmpdir); } return(returnstring); } // If -geometry is specified, overlay the image on the root window. void DisplayBase::PlaceImageOnRoot() { Options *options = Options::getInstance(); if (!options->GeometrySelected()) return; const int area = fullWidth_ * fullHeight_; unsigned char *tmp = new unsigned char [ 3 * area ]; memset(tmp, 0, 3 * area); SetBackground(fullWidth_, fullHeight_, tmp); int x = options->getWindowX(); int y = options->getWindowY(); if (options->GeometryMask() & XNegative) x += (fullWidth_ - width_); if (options->GeometryMask() & YNegative) y += (fullHeight_ - height_); const int xmin = (x < 0) ? 0 : x; const int ymin = (y < 0) ? 0 : y; const int xmax = (x + width_ > fullWidth_) ? fullWidth_ : x + width_; const int ymax = (y + height_ > fullHeight_) ? fullHeight_ : y + height_; for (int trueY = ymin; trueY < ymax; trueY++) { unsigned char *trueP = tmp + 3 * trueY * fullWidth_; const int windowY = trueY - ymin; unsigned char *windowP = rgb_data + 3 * windowY * width_; for (int trueX = xmin; trueX < xmax; trueX++) { const int windowX = trueX - xmin; memcpy(trueP + 3 * trueX, windowP + 3 * windowX, 3); } } delete [] rgb_data; rgb_data = tmp; } xplanet-1.3.0/src/libdisplay/DisplayMSWin.h0000644000175000017500000000043410411344513015523 00000000000000#ifndef DISPLAYMSWIN_H #define DISPLAYMSWIN_H #include "DisplayBase.h" class DisplayMSWin : public DisplayBase { public: DisplayMSWin(const int tr); virtual ~DisplayMSWin(); void renderImage(PlanetProperties *planetProperties[]); std::string TmpDir(); }; #endif xplanet-1.3.0/src/libdisplay/getDisplay.cpp0000644000175000017500000000152310411352756015650 00000000000000#include "config.h" #include "keywords.h" #include "Options.h" #include "xpUtil.h" #include "DisplayBase.h" #ifdef HAVE_AQUA #include "DisplayMacAqua.h" #endif #ifdef HAVE_CYGWIN #include "DisplayMSWin.h" #endif #ifdef HAVE_LIBX11 #include "DisplayX11.h" #endif #include "DisplayOutput.h" DisplayBase *getDisplay(const int times_run) { Options *options = Options::getInstance(); if (options->DisplayMode() == OUTPUT) return(new DisplayOutput(times_run)); #ifdef HAVE_LIBX11 Display *d = XOpenDisplay(NULL); if (d != NULL) { XCloseDisplay(d); return(new DisplayX11(times_run)); } #endif #ifdef HAVE_AQUA return(new DisplayMacAqua(times_run)); #endif #ifdef HAVE_CYGWIN return(new DisplayMSWin(times_run)); #endif xpExit("Can't open display\n", __FILE__, __LINE__); return(NULL); } xplanet-1.3.0/src/libdisplay/vroot.h0000644000175000017500000001365310411352756014370 00000000000000/* -*- Mode: C; tab-width: 2 -*- */ /*****************************************************************************/ /** Copyright 1991 by Andreas Stolcke **/ /** Copyright 1990 by Solbourne Computer Inc. **/ /** Longmont, Colorado **/ /** **/ /** All Rights Reserved **/ /** **/ /** Permission to use, copy, modify, and distribute this software and **/ /** its documentation for any purpose and without fee is hereby **/ /** granted, provided that the above copyright notice appear in all **/ /** copies and that both that copyright notice and this permis- **/ /** sion notice appear in supporting documentation, and that the **/ /** name of Solbourne not be used in advertising **/ /** in publicity pertaining to distribution of the software without **/ /** specific, written prior permission. **/ /** **/ /** ANDREAS STOLCKE AND SOLBOURNE COMPUTER INC. DISCLAIMS ALL WARRANTIES **/ /** WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF **/ /** MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ANDREAS STOLCKE **/ /** OR SOLBOURNE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL **/ /** DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ /** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ /** OR PERFORMANCE OF THIS SOFTWARE. **/ /*****************************************************************************/ /* * vroot.h -- Virtual Root Window handling header file * * This header file redefines the X11 macros RootWindow and DefaultRootWindow, * making them look for a virtual root window as provided by certain `virtual' * window managers like swm and tvtwm. If none is found, the ordinary root * window is returned, thus retaining backward compatibility with standard * window managers. * The function implementing the virtual root lookup remembers the result of * its last invocation to avoid overhead in the case of repeated calls * on the same display and screen arguments. * The lookup code itself is taken from Tom LaStrange's ssetroot program. * * Most simple root window changing X programs can be converted to using * virtual roots by just including * * #include * * after all the X11 header files. It has been tested on such popular * X clients as xphoon, xfroot, xloadimage, and xaqua. * It also works with the core clients xprop, xwininfo, xwd, and editres * (and is necessary to get those clients working under tvtwm). * It does NOT work with xsetroot; get the xsetroot replacement included in * the tvtwm distribution instead. * * Andreas Stolcke , 9/7/90 * - replaced all NULL's with properly cast 0's, 5/6/91 * - free children list (suggested by Mark Martin ), 5/16/91 * - include X11/Xlib.h and support RootWindowOfScreen, too 9/17/91 * * Jamie Zawinski , 28-Apr-1997 * - use ANSI C * * Jamie Zawinski , 3-Sep-2003 * - if the environment variable "XSCREENSAVER_WINDOW" is set, use that * as the root window instead of searching for __SWM_VROOT. */ #ifndef _VROOT_H_ #define _VROOT_H_ #define _XSCREENSAVER_VROOT_H_ #if !defined(lint) && !defined(SABER) static const char vroot_rcsid[] = "#Id: vroot.h,v 1.5 2003/09/04 01:04:38 jwz Exp #" "\n" "#Id: vroot.h,v 1.4 1991/09/30 19:23:16 stolcke Exp stolcke #"; #endif #include #include #include static Window #ifdef __STDC__ /* ANSIfication added by jwz, to avoid superfluous warnings. */ VirtualRootWindowOfScreen(Screen *screen) #else /* !__STDC__ */ VirtualRootWindowOfScreen(screen) Screen *screen; #endif /* !__STDC__ */ { static Screen *save_screen = (Screen *)0; static Window root = (Window)0; if (screen != save_screen) { Display *dpy = DisplayOfScreen(screen); Atom __SWM_VROOT = None; int i; Window rootReturn, parentReturn, *children; unsigned int numChildren; /* first check for a hex or decimal window ID in the environment */ const char *xss_id = getenv("XSCREENSAVER_WINDOW"); if (xss_id && *xss_id) { unsigned long id = 0; char c; if (1 == sscanf (xss_id, " 0x%lx %c", &id, &c) || 1 == sscanf (xss_id, " %lu %c", &id, &c)) { root = (Window) id; save_screen = screen; return root; } } root = RootWindowOfScreen(screen); /* go look for a virtual root */ __SWM_VROOT = XInternAtom(dpy, "__SWM_VROOT", False); if (XQueryTree(dpy, root, &rootReturn, &parentReturn, &children, &numChildren)) { for (i = 0; i < numChildren; i++) { Atom actual_type; int actual_format; unsigned long nitems, bytesafter; Window *newRoot = (Window *)0; if (XGetWindowProperty(dpy, children[i], __SWM_VROOT, 0, 1, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, (unsigned char **) &newRoot) == Success && newRoot) { root = *newRoot; break; } } if (children) XFree((char *)children); } save_screen = screen; } return root; } #undef RootWindowOfScreen #define RootWindowOfScreen(s) VirtualRootWindowOfScreen(s) #undef RootWindow #define RootWindow(dpy,screen) VirtualRootWindowOfScreen(ScreenOfDisplay(dpy,screen)) #undef DefaultRootWindow #define DefaultRootWindow(dpy) VirtualRootWindowOfScreen(DefaultScreenOfDisplay(dpy)) #endif /* _VROOT_H_ */ xplanet-1.3.0/src/libdisplay/TextRenderer.cpp0000644000175000017500000001631311660336104016155 00000000000000#include #include #include using namespace std; #include "Options.h" #include "xpUtil.h" #include "DisplayBase.h" #include "TextRenderer.h" TextRenderer::TextRenderer(DisplayBase *display) : display_(display), opacity_(1.0) { Options *options = Options::getInstance(); fontSize_ = options->FontSize(); font_.assign(options->Font()); } TextRenderer::~TextRenderer() { } // x and y are the center left coordinates of the string void TextRenderer::DrawText(const int x, int y, const string &text, const unsigned char color[3], const double opacity) { SetText(text); SetOpacity(opacity); int textWidth, textHeight; TextBox(textWidth, textHeight); y += textHeight/2; DrawText(x, y, color); FreeText(); } // x and y are the center left coordinates of the string void TextRenderer::DrawOutlinedText(const int x, int y, const string &text, const unsigned char color[3], const double opacity) { SetText(text); SetOpacity(opacity); int textWidth, textHeight; TextBox(textWidth, textHeight); y += textHeight/2; unsigned char black[3] = { 0, 0, 0 }; DrawText(x+1, y, black); DrawText(x-1, y, black); DrawText(x, y+1, black); DrawText(x, y-1, black); DrawText(x, y, color); FreeText(); } bool TextRenderer::CheckUnicode(const unsigned long unicode, const std::vector &text) { int curPos; int numWords; if (unicode < 0x00000080) { curPos = 6; numWords = 1; } else if (unicode < 0x00000800) { curPos = 10; numWords = 2; } else if (unicode < 0x00010000) { curPos = 15; numWords = 3; } else if (unicode < 0x00200000) { curPos = 20; numWords = 4; } else if (unicode < 0x04000000) { curPos = 25; numWords = 5; } else if (unicode < 0x80000000) { curPos = 30; numWords = 6; } else { xpWarn("Bad unicode value\n", __FILE__, __LINE__); return(false); } // Construct the smallest UTF-8 encoding for this unicode value. bitset<32> uBitset(unicode); string utf8Val; if (numWords == 1) { utf8Val += "0"; for (int i = 0; i < 7; i++) utf8Val += (uBitset.test(curPos--) ? "1" : "0"); } else { for (int i = 0; i < numWords; i++) utf8Val += "1"; utf8Val += "0"; for (int i = 0; i < 7 - numWords; i++) utf8Val += (uBitset.test(curPos--) ? "1" : "0"); for (int j = 0; j < numWords - 1; j++) { utf8Val += "10"; for (int i = 0; i < 6; i++) utf8Val += (uBitset.test(curPos--) ? "1" : "0"); } } // Check that the input array is the "correct" array for // generating the derived unicode value. vector utf8Vec; for (unsigned int i = 0; i < utf8Val.size(); i += 8) { string thisByte(utf8Val.substr(i, i+8)); utf8Vec.push_back(bitset<8>(thisByte).to_ulong() & 0xff); } bool goodValue = (text.size() == utf8Vec.size()); if (goodValue) { for (unsigned int i = 0; i < utf8Vec.size(); i++) { if (text[i] != utf8Vec[i]) { goodValue = false; break; } } } return(goodValue); } unsigned long TextRenderer::UTF8ToUnicode(const std::vector &text) { unsigned long returnVal = 0xfffd; // Unknown character if (text.size() == 1) { if (text[0] < 0x80) { returnVal = static_cast (text[0] & 0x7f); } else { ostringstream errStr; errStr << "Multibyte UTF-8 code in single byte encoding:\n"; for (unsigned int i = 0; i < text.size(); i++) errStr << hex << static_cast (text[i]) << dec; errStr << endl; xpWarn(errStr.str(), __FILE__, __LINE__); } return(returnVal); } else if (text.size() > 6) { ostringstream errStr; errStr << "Too many bytes in UTF-8 sequence:\n"; for (unsigned int i = 0; i < text.size(); i++) errStr << "(" << hex << static_cast (text[i]) << dec << ")"; errStr << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return(returnVal); } bool goodChar = (text[0] >= 0xc0 && text[0] <= 0xfd); if (!goodChar) { ostringstream errStr; errStr << "Invalid leading byte in UTF-8 sequence:\n"; for (unsigned int i = 0; i < text.size(); i++) errStr << "(" << hex << static_cast (text[i]) << dec << ")"; errStr << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return(returnVal); } for (unsigned int i = 1; i < text.size(); i++) { goodChar = (text[i] >= 0x80 && text[i] <= 0xbf); if (!goodChar) { ostringstream errStr; errStr << "Invalid continuation byte in UTF-8 sequence:\n"; for (unsigned int i = 0; i < text.size(); i++) errStr << hex << "(" << hex << static_cast (text[i]) << dec << ")"; errStr << endl; xpWarn(errStr.str(), __FILE__, __LINE__); return(returnVal); } } bitset<8> firstByte(static_cast(text[0])); int numBytes = 0; while(firstByte.test(7 - numBytes)) numBytes++; string binValue; for (int i = 6 - numBytes; i >= 0; i--) binValue += (firstByte.test(i) ? "1" : "0"); for (int j = 1; j < numBytes; j++) { bitset<8> thisByte(static_cast(text[j])); for (int i = 5; i >= 0; i--) binValue += (thisByte.test(i) ? "1" : "0"); } returnVal = bitset<32>(binValue).to_ulong(); // Check for illegal values: // U+D800 to U+DFFF (UTF-16 surrogates) // U+FFFE and U+FFFF if ((returnVal >= 0xd800 && returnVal <= 0xdfff) || (returnVal == 0xfffe || returnVal == 0xffff) || (!CheckUnicode(returnVal, text))) { ostringstream errStr; errStr << "Malformed UTF-8 sequence:\n"; for (unsigned int i = 0; i < text.size(); i++) errStr << "(" << hex << static_cast (text[i]) << dec << ")"; errStr << endl; xpWarn(errStr.str(), __FILE__, __LINE__); returnVal = 0xfffd; } return(returnVal); } void TextRenderer::Font(const string &font) { } void TextRenderer::FontSize(const int size) { } int TextRenderer::FontHeight() const { return(0); } void TextRenderer::DrawText(const int x, const int y, const unsigned char color[3]) { } void TextRenderer::SetText(const std::string &text) { ostringstream errMsg; errMsg << "Xplanet was compiled without FreeType support. "; errMsg << "Ignoring text: " << text << endl; xpWarn(errMsg.str(), __FILE__, __LINE__); } void TextRenderer::FreeText() { } void TextRenderer::TextBox(int &textWidth, int &textHeight) { } xplanet-1.3.0/src/libdisplay/TextRendererFT2.h0000644000175000017500000000162610411352756016143 00000000000000#ifndef TEXTRENDERERFT2_H #define TEXTRENDERERFT2_H #include #include FT_FREETYPE_H #include FT_GLYPH_H #include "TextRenderer.h" class DisplayBase; class TextRendererFT2 : public TextRenderer { public: TextRendererFT2(DisplayBase *display); virtual ~TextRendererFT2(); virtual void Font(const std::string &font); const std::string & Font() const { return(font_); }; virtual int FontHeight() const; virtual void FontSize(const int size); int FontSize() const { return(fontSize_); }; virtual void DrawText(const int x, const int y, const unsigned char color[3]); virtual void SetText(const std::string &text); virtual void FreeText(); virtual void TextBox(int &textWidth, int &textHeight); private: FT_Library library_; FT_Face face_; FT_Glyph *glyphs_; FT_Vector *pos; FT_UInt numGlyphs_; }; #endif xplanet-1.3.0/src/libdisplay/DisplayOutput.h0000644000175000017500000000044310411360615016027 00000000000000#ifndef DISPLAYOUTPUT_H #define DISPLAYOUTPUT_H #include "DisplayBase.h" class DisplayOutput : public DisplayBase { public: DisplayOutput(const int tr); virtual ~DisplayOutput(); void renderImage(PlanetProperties *planetProperties[]); private: int quality_; }; #endif xplanet-1.3.0/src/libdisplay/DisplayMSWin.cpp0000644000175000017500000000525110411417337016065 00000000000000#include #include #include #include #include using namespace std; #include #include "keywords.h" #include "Options.h" #include "PlanetProperties.h" #include "xpUtil.h" #include "DisplayMSWin.h" #include "libimage/Image.h" #define WIN32_LEAN_AND_MEAN #include DisplayMSWin::DisplayMSWin(const int tr) : DisplayBase(tr) { fullWidth_ = GetSystemMetrics(SM_CXSCREEN); fullHeight_ = GetSystemMetrics(SM_CYSCREEN); Options *options = Options::getInstance(); switch (options->DisplayMode()) { case WINDOW: xpWarn("-window option not supported for MS Windows.\n", __FILE__, __LINE__); // fall through case ROOT: if (options->GeometrySelected()) { width_ = options->getWidth(); height_ = options->getHeight(); } else { width_ = fullWidth_; height_ = fullHeight_; } break; } if (!options->CenterSelected()) { if (width_ % 2 == 0) options->CenterX(width_/2 - 0.5); else options->CenterX(width_/2); if (height_ % 2 == 0) options->CenterY(height_/2 - 0.5); else options->CenterY(height_/2); } allocateRGBData(); } DisplayMSWin::~DisplayMSWin() { } void DisplayMSWin::renderImage(PlanetProperties *planetProperties[]) { drawLabel(planetProperties); string outputFilename(TmpDir()); outputFilename += "\\XPlanet.bmp"; Options *options = Options::getInstance(); if (options->GeometrySelected()) PlaceImageOnRoot(); Image i(fullWidth_, fullHeight_, rgb_data, alpha); if (!i.Write(outputFilename.c_str())) { ostringstream errStr; errStr << "Can't create image file " << outputFilename << "\n"; xpExit(errStr.str(), __FILE__, __LINE__); } if (options->Verbosity() > 1) { ostringstream msg; msg << "Created image file " << outputFilename << "\n"; xpMsg(msg.str(), __FILE__, __LINE__); } // Tell Windows to update the desktop wallpaper SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (char *) outputFilename.c_str(), SPIF_UPDATEINIFILE); if (!options->SaveDesktopFile()) unlinkFile(outputFilename.c_str()); } string DisplayMSWin::TmpDir() { Options *options = Options::getInstance(); string returnstring = options->TmpDir(); if (returnstring.empty()) { char tmpdir[MAX_PATH]; GetWindowsDirectory(tmpdir, MAX_PATH); returnstring.assign(tmpdir); } return(returnstring); } xplanet-1.3.0/src/libdisplay/Makefile.in0000644000175000017500000004505411731356514015115 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/libdisplay DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libdisplay_a_LIBADD = am__libdisplay_a_SOURCES_DIST = DisplayBase.cpp DisplayBase.h \ DisplayOutput.h DisplayOutput.cpp getDisplay.cpp libdisplay.h \ TextRenderer.cpp TextRenderer.h getTextRenderer.cpp \ DisplayX11.cpp DisplayX11.h vroot.h DisplayMacAqua.cpp \ DisplayMacAqua.h DesktopPicture.m DisplayMSWin.cpp \ DisplayMSWin.h TextRendererFT2.cpp TextRendererFT2.h \ TextRendererPangoFT2.cpp TextRendererPangoFT2.h @HAVE_LIBX11_TRUE@am__objects_1 = DisplayX11.$(OBJEXT) @HAVE_AQUA_TRUE@am__objects_2 = DisplayMacAqua.$(OBJEXT) \ @HAVE_AQUA_TRUE@ DesktopPicture.$(OBJEXT) @HAVE_CYGWIN_TRUE@am__objects_3 = DisplayMSWin.$(OBJEXT) @HAVE_LIBFREETYPE_TRUE@am__objects_4 = TextRendererFT2.$(OBJEXT) @HAVE_LIBPANGOFT2_TRUE@am__objects_5 = TextRendererPangoFT2.$(OBJEXT) am_libdisplay_a_OBJECTS = DisplayBase.$(OBJEXT) \ DisplayOutput.$(OBJEXT) getDisplay.$(OBJEXT) \ TextRenderer.$(OBJEXT) getTextRenderer.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) libdisplay_a_OBJECTS = $(am_libdisplay_a_OBJECTS) libtimer_a_LIBADD = am__libtimer_a_SOURCES_DIST = getTimer.cpp libtimer.h Timer.h \ Timer.cpp TimerMacAqua.cpp TimerMacAqua.h TimerX11.h \ TimerX11.cpp @HAVE_AQUA_TRUE@am__objects_6 = TimerMacAqua.$(OBJEXT) @HAVE_LIBX11_TRUE@am__objects_7 = TimerX11.$(OBJEXT) am_libtimer_a_OBJECTS = getTimer.$(OBJEXT) Timer.$(OBJEXT) \ $(am__objects_6) $(am__objects_7) libtimer_a_OBJECTS = $(am_libtimer_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) OBJCLD = $(OBJC) OBJCLINK = $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libdisplay_a_SOURCES) $(EXTRA_libdisplay_a_SOURCES) \ $(libtimer_a_SOURCES) DIST_SOURCES = $(am__libdisplay_a_SOURCES_DIST) \ $(EXTRA_libdisplay_a_SOURCES) $(am__libtimer_a_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ noinst_LIBRARIES = libdisplay.a libtimer.a @HAVE_AQUA_TRUE@displayaqua = DisplayMacAqua.cpp DisplayMacAqua.h DesktopPicture.m @HAVE_AQUA_TRUE@timeraqua = TimerMacAqua.cpp TimerMacAqua.h @HAVE_CYGWIN_TRUE@displaymswin = DisplayMSWin.cpp DisplayMSWin.h @HAVE_LIBFREETYPE_TRUE@textrendererft2 = TextRendererFT2.cpp TextRendererFT2.h @HAVE_LIBPANGOFT2_TRUE@textrendererpangoft2 = TextRendererPangoFT2.cpp TextRendererPangoFT2.h @HAVE_LIBX11_TRUE@displayx11 = DisplayX11.cpp DisplayX11.h vroot.h @HAVE_LIBX11_TRUE@timerx11 = TimerX11.h TimerX11.cpp EXTRA_libdisplay_a_SOURCES = DisplayMacAqua.cpp DisplayMacAqua.h DisplayMSWin.cpp DisplayMSWin.h TextRendererFT2.cpp TextRendererFT2.h TextRendererPangoFT2.cpp TextRendererPangoFT2.h DisplayX11.cpp DisplayX11.h vroot.h TimerMacAqua.cpp TimerMacAqua.h TimerX11.cpp TimerX11.h AM_CPPFLAGS = -I@top_srcdir@/src @X_CFLAGS@ @FREETYPE_CFLAGS@ @USE_AR_FALSE@libdisplay_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libdisplay_a_AR = $(AR) cru @USE_AR_FALSE@libtimer_a_AR = $(CXX) @xplanet_ARFLAGS@ @USE_AR_TRUE@libtimer_a_AR = $(AR) cru libdisplay_a_SOURCES = \ DisplayBase.cpp \ DisplayBase.h \ DisplayOutput.h \ DisplayOutput.cpp \ getDisplay.cpp \ libdisplay.h \ TextRenderer.cpp \ TextRenderer.h \ getTextRenderer.cpp \ $(displayx11) \ $(displayaqua) \ $(displaymswin) \ $(textrendererft2) \ $(textrendererpangoft2) libtimer_a_SOURCES = \ getTimer.cpp \ libtimer.h \ Timer.h \ Timer.cpp \ $(timeraqua) \ $(timerx11) all: all-am .SUFFIXES: .SUFFIXES: .cpp .m .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libdisplay/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libdisplay/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libdisplay.a: $(libdisplay_a_OBJECTS) $(libdisplay_a_DEPENDENCIES) -rm -f libdisplay.a $(libdisplay_a_AR) libdisplay.a $(libdisplay_a_OBJECTS) $(libdisplay_a_LIBADD) $(RANLIB) libdisplay.a libtimer.a: $(libtimer_a_OBJECTS) $(libtimer_a_DEPENDENCIES) -rm -f libtimer.a $(libtimer_a_AR) libtimer.a $(libtimer_a_OBJECTS) $(libtimer_a_LIBADD) $(RANLIB) libtimer.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DesktopPicture.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisplayBase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisplayMSWin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisplayMacAqua.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisplayOutput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisplayX11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextRenderer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextRendererFT2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextRendererPangoFT2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimerMacAqua.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimerX11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getDisplay.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getTextRenderer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getTimer.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .m.o: @am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepOBJC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ $< .m.obj: @am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepOBJC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am @HAVE_AQUA_TRUE@%.o: %.m @HAVE_AQUA_TRUE@ $(OBJC) $(OBJCFLAGS) -c $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/libdisplay/Timer.h0000644000175000017500000000070710411360615014264 00000000000000#ifndef TIMER_H #define TIMER_H #include #include class Timer { public: Timer(const int w, const unsigned long h, const unsigned long i); virtual ~Timer(); void Update(); virtual bool Sleep(); protected: const int wait_; const unsigned long hibernate_; const unsigned long idlewait_; struct timeval currentTime_; time_t nextUpdate_; virtual bool SleepForTime(time_t sleep); }; #endif xplanet-1.3.0/src/libdisplay/DisplayMacAqua.h0000644000175000017500000000042610411351163016036 00000000000000#ifndef DISPLAYMACAQUA_H #define DISPLAYMACAQUA_H #include "DisplayBase.h" class DisplayMacAqua : public DisplayBase { public: DisplayMacAqua(const int tr); virtual ~DisplayMacAqua(); void renderImage(PlanetProperties *planetProperties[]); private: }; #endif xplanet-1.3.0/src/libdisplay/TextRenderer.h0000644000175000017500000000265711660340313015625 00000000000000#ifndef TEXTRENDERER_H #define TEXTRENDERER_H #include #include class DisplayBase; class TextRenderer { public: TextRenderer(DisplayBase *display); virtual ~TextRenderer(); void DrawText(const int x, int y, const std::string &text, const unsigned char color[3], const double opacity); void DrawOutlinedText(const int x, int y, const std::string &text, const unsigned char color[3], const double opacity); virtual void Font(const std::string &font); const std::string & Font() const { return(font_); }; virtual void FontSize(const int size); int FontSize() const { return(fontSize_); }; virtual void DrawText(const int x, const int y, const unsigned char color[3]); void SetOpacity(double opacity) { opacity_ = opacity; }; virtual void SetText(const std::string &text); virtual void FreeText(); virtual void TextBox(int &textWidth, int &textHeight); virtual int FontHeight() const; bool CheckUnicode(const unsigned long unicode, const std::vector &text); unsigned long UTF8ToUnicode(const std::vector &text); protected: DisplayBase *display_; std::string font_; int fontSize_; double opacity_; private: }; #endif xplanet-1.3.0/src/libdisplay/getTextRenderer.cpp0000644000175000017500000000103310411357011016637 00000000000000#include "config.h" #include "Options.h" #include "xpUtil.h" #include "TextRenderer.h" #ifdef HAVE_LIBFREETYPE #include "TextRendererFT2.h" #endif #ifdef HAVE_LIBPANGOFT2 #include "TextRendererPangoFT2.h" #endif TextRenderer *getTextRenderer(DisplayBase *display) { #ifdef HAVE_LIBPANGOFT2 Options *options = Options::getInstance(); if (options->Pango()) return(new TextRendererPangoFT2(display)); #endif #ifdef HAVE_LIBFREETYPE return(new TextRendererFT2(display)); #endif return(new TextRenderer(display)); } xplanet-1.3.0/src/libdisplay/TextRendererPangoFT2.cpp0000644000175000017500000000766411660336575017503 00000000000000#include using namespace std; #include "Options.h" #include "DisplayBase.h" #include "TextRendererPangoFT2.h" PangoFontMap* TextRendererPangoFT2::fontMap_ = NULL; TextRendererPangoFT2::TextRendererPangoFT2(DisplayBase *display) : TextRenderer(display), direction_(PANGO_DIRECTION_LTR) { g_type_init(); // There is a memory leak in the pango library. This can be // minimized by making the fontMap_ member static. // See http://bugzilla.gnome.org/show_bug.cgi?id=143542 if (fontMap_ == NULL) fontMap_ = pango_ft2_font_map_new(); int dpiX = 100; int dpiY = 100; pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(fontMap_), dpiX, dpiY); context_ = pango_ft2_font_map_create_context(PANGO_FT2_FONT_MAP(fontMap_)); pango_context_set_language(context_, pango_language_from_string ("en_US")); pango_context_set_base_dir(context_, direction_); fontDescription_ = pango_font_description_new(); Options *options = Options::getInstance(); Font(options->Font()); FontSize(options->FontSize()); layout_ = pango_layout_new(context_); pango_layout_set_width(layout_, -1); // Don't wrap lines } TextRendererPangoFT2::~TextRendererPangoFT2() { g_object_unref(layout_); pango_font_description_free(fontDescription_); g_object_unref(context_); // g_object_unref(fontMap_); pango_ft2_shutdown_display(); } void TextRendererPangoFT2::Font(const string &font) { pango_font_description_set_family(fontDescription_, font.c_str()); pango_font_description_set_style(fontDescription_, PANGO_STYLE_NORMAL); pango_font_description_set_variant(fontDescription_, PANGO_VARIANT_NORMAL); pango_font_description_set_weight(fontDescription_, PANGO_WEIGHT_NORMAL); pango_font_description_set_stretch(fontDescription_, PANGO_STRETCH_NORMAL); } void TextRendererPangoFT2::FontSize(const int size) { pango_font_description_set_size(fontDescription_, size * PANGO_SCALE); } int TextRendererPangoFT2::FontHeight() const { int returnVal = 0; PangoRectangle rect; pango_layout_get_extents(layout_, NULL, &rect); returnVal = static_cast (1.5 * PANGO_PIXELS(pango_font_description_get_size(fontDescription_))); return(returnVal); } void TextRendererPangoFT2::DrawText(const int x, const int y, const unsigned char color[3]) { FT_Bitmap bitmap; int textWidth, textHeight; TextBox(textWidth, textHeight); unsigned char *buffer = new unsigned char[textWidth * textHeight]; memset(buffer, 0, textWidth * textHeight); bitmap.rows = textHeight; bitmap.width = textWidth; bitmap.pitch = bitmap.width; bitmap.buffer = buffer; bitmap.num_grays = 256; bitmap.pixel_mode = ft_pixel_mode_grays; pango_ft2_render_layout(&bitmap, layout_, 0, 0); for (int j = 0; j < bitmap.rows; j++) { int istart = j * bitmap.width; for (int k = 0; k < bitmap.width; k++) { if (bitmap.buffer[istart + k]) { double opacity = opacity_ * bitmap.buffer[istart + k]/255.0; display_->setPixel(x + k, y + j - textHeight, color, opacity); } } } delete [] buffer; } void TextRendererPangoFT2::SetText(const std::string &text) { pango_layout_set_text(layout_, text.c_str(), text.size()); pango_layout_set_alignment(layout_, PANGO_ALIGN_LEFT); pango_layout_set_font_description(layout_, fontDescription_); } void TextRendererPangoFT2::FreeText() { } void TextRendererPangoFT2::TextBox(int &textWidth, int &textHeight) { PangoRectangle rect; pango_layout_get_extents(layout_, NULL, &rect); textWidth = PANGO_PIXELS(rect.width); textHeight = PANGO_PIXELS(rect.height); } xplanet-1.3.0/src/Satellite.cpp0000644000175000017500000000735511227067073013347 00000000000000#include #include #include #include using namespace std; #include #include "xpUtil.h" #include "Satellite.h" using namespace sgp4sdp4; Satellite::Satellite(char tle_lines[3][80]) { checkLocale(LC_NUMERIC, "C"); good = (Get_Next_Tle_Set(tle_lines, &tle) == 1); checkLocale(LC_NUMERIC, ""); memcpy(tle_entry, tle_lines, 240); } Satellite::~Satellite() { } int Satellite::getID() const { return(tle.catnr); } const char * Satellite::getName() const { return(tle.sat_name); } bool Satellite::isGoodData() const { return(good); } void Satellite::loadTLE() { checkLocale(LC_NUMERIC, "C"); Get_Next_Tle_Set(tle_entry, &tle); checkLocale(LC_NUMERIC, ""); ClearFlag(ALL_FLAGS); select_ephemeris(&tle); // SGP4 or SDP4 depending on period } void Satellite::getSpherical(const time_t tv_sec, double &lat, double &lon, double &alt) { double jul_utc = toJulian(gmtime((time_t *) &tv_sec)->tm_year + 1900, gmtime((time_t *) &tv_sec)->tm_mon + 1, gmtime((time_t *) &tv_sec)->tm_mday, gmtime((time_t *) &tv_sec)->tm_hour, gmtime((time_t *) &tv_sec)->tm_min, gmtime((time_t *) &tv_sec)->tm_sec); double year, day; /* Modification to support Y2K */ /* Valid 1957 through 2056 */ day = modf(tle.epoch*1E-3, &year)*1E3; if( year < 57 ) year = year + 2000; else year = year + 1900; /* End modification */ double jul_epoch = toJulian((int) year,1,0,0,0,0); jul_epoch += day; /* Zero vector for initializations */ vector_t zero_vector = {0,0,0,0}; vector_t pos = zero_vector; vector_t vel = zero_vector; double tsince = (jul_utc - jul_epoch) * xmnpda; if( isFlagSet(DEEP_SPACE_EPHEM_FLAG) ) SDP4(tsince, &tle, &pos, &vel); else SGP4(tsince, &tle, &pos, &vel); /* Scale position and velocity vectors to km and km/sec */ Convert_Sat_State( &pos, &vel ); /* Satellite's predicted geodetic position */ geodetic_t sat_geodetic; /** All angles in rads. Distance in km. Velocity in km/s **/ /* Calculate satellite Lat North, Lon East and Alt. */ Calculate_LatLonAlt(jul_utc, &pos, &sat_geodetic); lat = sat_geodetic.lat; lon = sat_geodetic.lon; alt = sat_geodetic.alt; // return alt in units of earth radii alt = alt/6378.14 + 1; #if 0 cout << "BEGIN getSpherical()\n"; cout << getName() << endl; cout << "day = " << day << "\tyear = " << year << endl; cout << "tsince = " << tsince << endl; cout << pos.x << '\t' << pos.y << '\t' << pos.z << endl; cout << vel.x << '\t' << vel.y << '\t' << vel.z << endl; cout << lat/deg_to_rad << '\t' << lon/deg_to_rad << '\t' << alt << endl; cout << "END getSpherical()\n\n"; #endif } void Satellite::printTLE() const { cout << "epoch = " << tle.epoch << endl; cout << "xndt2o = " << tle.xndt2o << endl; cout << "xndd6o = " << tle.xndd6o << endl; cout << "bstar = " << tle.bstar << endl; cout << "xincl = " << tle.xincl << endl; cout << "xnodeo = " << tle.xnodeo << endl; cout << "eo = " << tle.eo << endl; cout << "omegao = " << tle.omegao << endl; cout << "xmo = " << tle.xmo << endl; cout << "xno = " << tle.xno << endl; cout << "catnr = " << tle.catnr << endl; cout << "elset = " << tle.elset << endl; cout << "revnum = " << tle.revnum << endl; cout << "name = " << tle.sat_name << endl; cout << "idesg = " << tle.idesg << endl; cout << endl; } bool Satellite::operator == (const Satellite &sat) const { return(tle.catnr == sat.tle.catnr); } xplanet-1.3.0/src/getopt1.c0000644000175000017500000001065010411344513012423 00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ xplanet-1.3.0/src/buildPlanetMap.h0000644000175000017500000000074410500132010013733 00000000000000#ifndef BUILDPLANETMAP_H #define BUILDPLANETMAP_H #include #include "body.h" class Planet; extern Planet * findPlanetinMap(std::map &planetMap, body b); extern void buildPlanetMap(const double jd, std::map &planetMap); extern void buildPlanetMap(const double jd, const double oX, const double oY, const double oZ, const bool light_time, std::map &planetMap); extern void destroyPlanetMap(); #endif xplanet-1.3.0/src/Options.cpp0000644000175000017500000010174111716061501013037 00000000000000#include #include #include #include #include #include using namespace std; #include #include "config.h" #include "xpDefines.h" #include "xpUtil.h" #ifndef _GETOPT_H #include "xpGetopt.h" #endif #ifdef HAVE_LIBX11 #include #include #else #include "ParseGeom.h" extern "C" { extern int XParseGeometry(const char *string, int *x, int *y, unsigned int *width, unsigned int *height); } #endif #include "keywords.h" #include "findBodyXYZ.h" #include "Options.h" #include "parseColor.h" #include "PlanetProperties.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" #include "libprojection/libprojection.h" extern void printVersion(); Options* Options::instance_ = NULL; Options* Options::getInstance() { if (instance_ == NULL) instance_ = new Options; return(instance_); } Options::~Options() { // delete instance_; } Options::Options() : arcSpacing_(0.1), arcThickness_(1), background_(""), baseMag_(10.0), centerSelected_(false), configFile_(defaultConfigFile), dateFormat_("%c %Z"), displayMode_(ROOT), drawLabel_(false), drawUTCLabel_(false), dynamicOrigin_(""), font_(defaultFont), fontSize_(12), fork_(false), fov_(-1), fovMode_(RADIUS), geometryMask_(NoValue), geometrySelected_(false), glare_(28), grsLon_(94), grsSet_(false), hibernate_(0), idleWait_(0), interpolateOriginFile_(false), jplFile_(""), labelMask_(XNegative), labelX_(-15), labelY_(15), labelBody_(UNKNOWN_BODY), labelString_(""), latitude_(0), lightTime_(false), localTime_(-1), logMagStep_(0.4), longitude_(0), makeCloudMaps_(false), markerBounds_(""), north_(BODY), numTimes_(0), oppositeSide_(false), origin_(SUN), originFile_(""), originID_(0), originMode_(LBR), outputBase_(""), outputExt_(defaultMapExt), outputMapRect_(""), outputStartIndex_(0), oX_(0), oY_(0), oZ_(0), pango_(false), pathRelativeTo_(SUN), pathRelativeToID_(-1), post_command_(""), prev_command_(""), primary_(SUN), printEphemeris_(false), projection_(MULTIPLE), projectionMode_(MULTIPLE), quality_(80), radius_(0.45), random_(false), rangeSpecified_(false), range_(1000), rayleighFile_(""), rotate_(0), rotate0_(0), saveDesktopFile_(false), separationDist_(0), separationTarget_(UNKNOWN_BODY), starFreq_(0.001), star_map(defaultStarMap), sunLat_(0), sunLon_(0), target_(EARTH), targetID_(0), targetMode_(BODY), timewarp(1), tmpDir_(""), transparency_(false), transpng_(false), tX_(0), tY_(0), tZ_(0), universalTime_(true), useCurrentTime_(true), verbosity_(0), virtual_root(false), wait(300), width(512), height(512), windowX_(0), windowY_(0), windowTitle_(""), xid_(0), XYZFile_("") { memset(color_, 0, 3); color_[0] = 255; // default label color is red searchdir.push_back(DATADIR); #if defined(HAVE_AQUA) || defined(HAVE_LIBX11) char *homeDir = getenv("HOME"); if (homeDir != NULL) { ostringstream xplanetDir; #ifdef HAVE_AQUA xplanetDir << homeDir << "/Library/Xplanet"; #else xplanetDir << homeDir << "/.xplanet"; #endif searchdir.push_back(xplanetDir.str()); } #endif searchdir.push_back("xplanet"); struct timeval time; gettimeofday(&time, NULL); time_t t = time.tv_sec; julianDay_ = toJulian(gmtime(static_cast (&t))->tm_year + 1900, gmtime(static_cast (&t))->tm_mon + 1, gmtime(static_cast (&t))->tm_mday, gmtime(static_cast (&t))->tm_hour, gmtime(static_cast (&t))->tm_min, gmtime(static_cast (&t))->tm_sec); tv_sec = get_tv_sec(julianDay_); srandom((unsigned int) tv_sec); } void Options::parseArgs(int argc, char **argv) { static struct option long_options[] = { {"arc_file", required_argument, NULL, ARC_FILE}, {"arc_spacing", required_argument, NULL, ARC_SPACING}, {"arc_thickness", required_argument, NULL, THICKNESS}, {"background", required_argument, NULL, BACKGROUND}, {"base_magnitude", required_argument, NULL, BASEMAG}, {"body", required_argument, NULL, TARGET}, {"center", required_argument, NULL, CENTER}, {"color", required_argument, NULL, COLOR}, {"config", required_argument, NULL, CONFIG_FILE}, {"create_scattering_tables", required_argument, NULL, RAYLEIGH_FILE}, {"date", required_argument, NULL, DATE}, {"date_format", required_argument, NULL, DATE_FORMAT}, {"dynamic_origin", required_argument, NULL, DYNAMIC_ORIGIN}, {"ephemeris_file", required_argument, NULL, JPL_FILE}, {"font", required_argument, NULL, FONT}, {"fontsize", required_argument, NULL, FONTSIZE}, {"fork", no_argument, NULL, FORK}, {"fov", required_argument, NULL, FOV}, {"geometry", required_argument, NULL, GEOMETRY}, {"glare", required_argument, NULL, GLARE}, {"gmtlabel", no_argument, NULL, UTCLABEL}, {"grs_longitude", required_argument, NULL, GRS_LON}, {"hibernate", required_argument, NULL, HIBERNATE}, {"idlewait", required_argument, NULL, IDLEWAIT}, {"interpolate_origin_file", no_argument, NULL, INTERPOLATE_ORIGIN_FILE}, {"jdate", required_argument, NULL, JDATE}, {"label", no_argument, NULL, LABEL}, {"labelpos", required_argument, NULL, LABELPOS}, {"label_body", required_argument, NULL, LABEL_BODY}, {"label_string", required_argument, NULL, LABEL_STRING}, {"latitude", required_argument, NULL, LATITUDE}, {"light_time", no_argument, NULL, LIGHT_TIME}, {"localtime", required_argument, NULL, LOCALTIME}, {"log_magstep", required_argument, NULL, LOGMAGSTEP}, {"longitude", required_argument, NULL, LONGITUDE}, {"make_cloud_maps",no_argument, NULL, MAKECLOUDMAPS}, {"marker_file", required_argument, NULL, MARKER_FILE}, {"markerbounds", required_argument, NULL, MARKER_BOUNDS}, {"north", required_argument, NULL, NORTH}, {"num_times", required_argument, NULL, NUM_TIMES}, {"origin", required_argument, NULL, ORIGIN}, {"origin_file", required_argument, NULL, ORIGINFILE}, {"output", required_argument, NULL, OUTPUT}, {"output_map", required_argument, NULL, OUTPUT_MAP_RECT}, {"output_start_index",required_argument,NULL,OUTPUT_START_INDEX}, {"pango", no_argument, NULL, PANGO}, {"path_relative_to", required_argument, NULL, PATH_RELATIVE_TO}, {"post_command", required_argument, NULL, POST_COMMAND}, {"prev_command", required_argument, NULL, PREV_COMMAND}, {"print_ephemeris",no_argument, NULL, EPHEMERIS}, {"projection", required_argument, NULL, PROJECTION}, {"proj_param", required_argument, NULL, PROJECTIONPARAMETER}, {"quality", required_argument, NULL, QUALITY}, {"radius", required_argument, NULL, RADIUS}, {"random", no_argument, NULL, RANDOM}, {"range", required_argument, NULL, RANGE}, {"rotate", required_argument, NULL, ROTATE}, {"save_desktop_file", no_argument, NULL, SAVE_DESKTOP_FILE}, {"searchdir", required_argument, NULL, SEARCHDIR}, {"separation", required_argument, NULL, SEPARATION}, {"spice_ephemeris", required_argument, NULL, SPICE_EPHEMERIS}, {"spice_file", required_argument, NULL, SPICE_FILE}, {"starfreq", required_argument, NULL, STARFREQ}, {"starmap", required_argument, NULL, STARMAP}, {"target", required_argument, NULL, TARGET}, {"tt", no_argument, NULL, TERRESTRIAL}, {"timewarp", required_argument, NULL, TIMEWARP}, {"tmpdir", required_argument, NULL, TMPDIR}, {"transparency", no_argument, NULL, TRANSPARENT}, {"transpng", required_argument, NULL, TRANSPNG}, {"utclabel", no_argument, NULL, UTCLABEL}, {"verbosity", required_argument, NULL, VERBOSITY}, {"version", no_argument, NULL, VERSIONNUMBER}, {"vroot", no_argument, NULL, VROOT}, {"wait", required_argument, NULL, WAIT}, {"window", no_argument, NULL, WINDOW}, {"window-id", required_argument, NULL, XWINID}, {"window_title", required_argument, NULL, WINDOWTITLE}, {"XID", required_argument, NULL, XWINID}, {"xscreensaver", no_argument, NULL, VROOT}, {"XYZ_file", required_argument, NULL, XYZFILE}, {NULL, 0, NULL, 0} }; int this_option; int option_index = 0; while((this_option = getopt_long_only(argc, argv, "+", long_options, &option_index)) >= 0) { switch (this_option) { case ARC_FILE: arcFiles_.push_back(optarg); break; case ARC_SPACING: sscanf(optarg, "%lf", &arcSpacing_); if (arcSpacing_ < 0) { ostringstream errMsg; errMsg << "Arc spacing must be > 0\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); arcSpacing_ = 0.1; } break; case BACKGROUND: background_ = optarg; break; case BASEMAG: sscanf(optarg, "%lf", &baseMag_); break; case CENTER: { unsigned int w, h; int x, y; int mask = XParseGeometry(optarg, &x, &y, &w, &h); centerSelected_ = ((mask & XValue) && (mask & YValue)); centerX_ = x; centerY_ = y; } break; case COLOR: parseColor(optarg, color_); break; case CONFIG_FILE: configFile_ = optarg; break; case DATE: { long int yyyymmdd, hhmmss; sscanf(optarg, "%ld.%ld", &yyyymmdd, &hhmmss); int yyyymm = yyyymmdd / 100; int year = yyyymm/100; int month = abs(yyyymm - year * 100); int day = abs((int) yyyymmdd - yyyymm * 100); int hhmm = hhmmss / 100; int hour = hhmm / 100; int min = hhmm - hour * 100; int sec = hhmmss - hhmm * 100; julianDay_ = toJulian(year, month, day, hour, min, sec); tv_sec = get_tv_sec(julianDay_); useCurrentTime_ = false; } break; case DATE_FORMAT: dateFormat_ = optarg; break; case DYNAMIC_ORIGIN: dynamicOrigin_ = optarg; originMode_ = LBR; break; case EPHEMERIS: printEphemeris_ = true; break; case FONT: #ifdef HAVE_LIBFREETYPE font_.assign(optarg); #else { ostringstream errMsg; errMsg << "Sorry, this binary was built without FreeType " << "support. The -" << long_options[option_index].name << " option will be ignored.\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } #endif break; case FONTSIZE: { #ifdef HAVE_LIBFREETYPE int val; sscanf(optarg, "%d", &val); if (val > 0) fontSize_ = val; #else { ostringstream errMsg; errMsg << "Sorry, this binary was built without FreeType " << "support. The -" << long_options[option_index].name << " option will be ignored.\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } #endif } break; case FORK: fork_ = true; break; case FOV: sscanf(optarg, "%lf", &fov_); if (fov_ <= 0) { xpWarn("FOV must be positive.\n", __FILE__, __LINE__); } else { fov_ *= deg_to_rad; fovMode_ = FOV; } break; case GEOMETRY: { geometryMask_ = XParseGeometry(optarg, &windowX_, &windowY_, &width, &height); geometrySelected_ = ((geometryMask_ & WidthValue) && (geometryMask_ & HeightValue)); } break; case GLARE: { double g; sscanf(optarg, "%lf", &g); if (g >= 0) glare_ = g; } break; case GRS_LON: sscanf(optarg, "%lf", &grsLon_); grsLon_ = fmod(grsLon_, 360); grsSet_ = true; break; case HIBERNATE: sscanf(optarg, "%lu", &hibernate_); hibernate_ *= 1000; break; case IDLEWAIT: sscanf(optarg, "%lu", &idleWait_); idleWait_ *= 1000; break; case INTERPOLATE_ORIGIN_FILE: interpolateOriginFile_ = true; break; case JDATE: sscanf(optarg, "%lf", &julianDay_); tv_sec = get_tv_sec(julianDay_); useCurrentTime_ = false; break; case JPL_FILE: jplFile_ = optarg; break; case LABEL: drawLabel_ = true; break; case LABELPOS: { unsigned int temp; labelMask_ = XParseGeometry(optarg, &labelX_, &labelY_, &temp, &temp); if (labelMask_ & (WidthValue | HeightValue)) { xpWarn("width and height supplied in -labelpos will be ignored\n", __FILE__, __LINE__); } drawLabel_ = true; } break; case LABEL_BODY: { labelBody_ = Planet::parseBodyName(optarg); if (labelBody_ >= UNKNOWN_BODY) { xpWarn("Unknown body specified for label_body\n", __FILE__, __LINE__); labelBody_ = UNKNOWN_BODY; } } break; case LABEL_STRING: labelString_ = optarg; drawLabel_ = true; break; case LATITUDE: sscanf(optarg, "%lf", &latitude_); if (latitude_ < -90) latitude_ = -90; if (latitude_ > 90) latitude_ = 90; latitude_ *= deg_to_rad; originMode_ = LBR; break; case LIGHT_TIME: lightTime_ = true; break; case LOCALTIME: sscanf(optarg, "%lf", &localTime_); if (localTime_ < 0 || localTime_ > 24) { localTime_ = fmod(localTime_, 24.); if (localTime_ < 0) localTime_ += 24; ostringstream errStr; errStr << "localtime set to " << localTime_ << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } originMode_ = LBR; break; case LOGMAGSTEP: sscanf(optarg, "%lf", &logMagStep_); break; case LONGITUDE: sscanf(optarg, "%lf", &longitude_); longitude_ = fmod(longitude_, 360); longitude_ *= deg_to_rad; originMode_ = LBR; break; case MAKECLOUDMAPS: displayMode_ = OUTPUT; makeCloudMaps_ = true; break; case MARKER_BOUNDS: markerBounds_.assign(optarg); break; case MARKER_FILE: markerFiles_.push_back(optarg); break; case NORTH: { char *lowercase = optarg; char *ptr = optarg; while (*ptr) *ptr++ = tolower(*optarg++); if (strncmp(lowercase, "galactic", 1) == 0) north_ = GALACTIC; else if (strncmp(lowercase, "orbit", 1) == 0) north_ = ORBIT; else if (strncmp(lowercase, "path", 1) == 0) north_ = PATH; else if (strncmp(lowercase, "separation", 1) == 0) north_ = SEPARATION; else if (strncmp(lowercase, "terrestrial", 1) == 0) north_ = TERRESTRIAL; else { if (strncmp(lowercase, "body", 1) != 0) xpWarn("Unknown value for -north, using body\n", __FILE__, __LINE__); north_ = BODY; } } break; case NUM_TIMES: sscanf(optarg, "%d", &numTimes_); if (numTimes_ < 0) numTimes_ = 0; break; case ORIGIN: { char *name = optarg; if (name[0] == '-') { oppositeSide_ = true; name++; } origin_ = Planet::parseBodyName(name); switch (origin_) { case ABOVE_ORBIT: originMode_ = ABOVE; break; case BELOW_ORBIT: originMode_ = BELOW; break; case MAJOR_PLANET: originMode_ = MAJOR; break; case NAIF: if (strlen(name) < 5) { ostringstream errMsg; errMsg << "NAIF id must be specified " << "(e.g. naif-82 for Cassini)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(name+4, "%d", &originID_); } originMode_ = LBR; break; case NORAD: if (strlen(name) < 6) { ostringstream errMsg; errMsg << "NORAD id must be specified " << "(e.g. NORAD20580 for Hubble)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(name+5, "%d", &originID_); } originMode_ = LBR; break; case RANDOM_BODY: originMode_ = RANDOM; break; case SAME_SYSTEM: originMode_ = SYSTEM; break; case ALONG_PATH: case UNKNOWN_BODY: xpWarn("Invalid origin specified, using SUN\n", __FILE__, __LINE__); origin_ = SUN; default: originMode_ = BODY; break; } } break; case ORIGINFILE: originFile_ = optarg; originMode_ = LBR; break; case TRANSPNG: transpng_ = true; // fall through to OUTPUT block case OUTPUT: outputBase_ = optarg; if (outputBase_.find('.') == string::npos) { outputExt_ = defaultMapExt; } else { outputExt_.assign(outputBase_, outputBase_.rfind('.'), outputBase_.size()); outputBase_.assign(outputBase_, 0, outputBase_.rfind('.')); } displayMode_ = OUTPUT; geometrySelected_ = true; break; case OUTPUT_MAP_RECT: { string base = optarg; string ext = defaultMapExt; if (base.find('.') != string::npos) { ext.assign(base, base.rfind('.'), base.size()); base.assign(base, 0, base.rfind('.')); } outputMapRect_ = base + ext; } break; case OUTPUT_START_INDEX: sscanf(optarg, "%d", &outputStartIndex_); break; case PANGO: #ifdef HAVE_LIBPANGOFT2 pango_ = true; #else { ostringstream errMsg; errMsg << "Sorry, this binary was built without Pango " << "support. The -" << long_options[option_index].name << " option will be ignored.\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } #endif break; case PATH_RELATIVE_TO: pathRelativeTo_ = Planet::parseBodyName(optarg); switch (pathRelativeTo_) { case NAIF: if (strlen(optarg) < 5) { ostringstream errMsg; errMsg << "NAIF id must be specified " << "(e.g. naif-82 for Cassini)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(optarg+4, "%d", &pathRelativeToID_); } break; case NORAD: if (strlen(optarg) < 6) { ostringstream errMsg; errMsg << "NORAD id must be specified " << "(e.g. NORAD20580 for Hubble)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(optarg+5, "%d", &pathRelativeToID_); } break; case RANDOM_BODY: case ABOVE_ORBIT: case ALONG_PATH: case BELOW_ORBIT: case DEFAULT: case MAJOR_PLANET: case SAME_SYSTEM: case UNKNOWN_BODY: xpWarn("Unknown body specified for path, using SUN\n", __FILE__, __LINE__); pathRelativeTo_ = SUN; default: break; } break; case POST_COMMAND: post_command_.assign(optarg); break; case PREV_COMMAND: prev_command_.assign(optarg); break; case PROJECTION: projectionMode_ = getProjectionType(optarg); break; case PROJECTIONPARAMETER: { double d; sscanf(optarg, "%lf", &d); projectionParameters_.push_back(d * deg_to_rad); } break; case QUALITY: sscanf(optarg, "%d", &quality_); if (quality_ < 0) quality_ = 0; if (quality_ > 100) quality_ = 100; break; case RADIUS: sscanf(optarg, "%lf", &radius_); if (radius_ <= 0) xpExit("radius must be positive\n", __FILE__, __LINE__); radius_ /= 100; fov_ = 1; // just a sneaky way to know that -radius has // been set fovMode_ = RADIUS; break; case RANDOM: random_ = true; originMode_ = LBR; // This block is repeated in setOrigin(), but this way the // user can use -random to set a random rotation and then // set the sub-observer point another way, like with // -origin sun longitude_ = random() % 360; longitude_ *= deg_to_rad; // Weight random latitudes towards the equator latitude_ = (random() % 2000)/1000.0 - 1; latitude_ = asin(latitude_); rotate0_ = random() % 360; rotate0_ *= deg_to_rad; rotate_ = rotate0_; break; case RANGE: sscanf(optarg, "%lf", &range_); rangeSpecified_ = (range_ > 1); if (!rangeSpecified_) { range_ = 1000; xpWarn("range must be greater than 1\n", __FILE__, __LINE__); } break; case RAYLEIGH_FILE: rayleighFile_ = optarg; break; case ROTATE: sscanf(optarg, "%lf", &rotate0_); rotate0_ = fmod(rotate0_, 360.) * deg_to_rad; rotate_ = rotate0_; break; case SAVE_DESKTOP_FILE: saveDesktopFile_ = true; break; case SEARCHDIR: searchdir.push_back(optarg); break; case SEPARATION: { const char *colon = strstr(optarg, ":"); if (colon != NULL) { sscanf(colon + 1, "%lf", &separationDist_); separationTarget_ = Planet::parseBodyName(optarg); if (separationTarget_ >= RANDOM_BODY) separationTarget_ = RANDOM_BODY; } } break; case SPICE_EPHEMERIS: { #ifdef HAVE_CSPICE int id; sscanf(optarg, "%d", &id); spiceEphemeris_.push_back(id); #else ostringstream errMsg; errMsg << "Sorry, this binary was built without SPICE " << "support. The -" << long_options[option_index].name << " option will be ignored.\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); #endif } break; case SPICE_FILE: { #ifdef HAVE_CSPICE spiceFiles_.push_back(optarg); #else ostringstream errMsg; errMsg << "Sorry, this binary was built without SPICE " << "support. The -" << long_options[option_index].name << " option will be ignored.\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); #endif } break; case STARFREQ: sscanf(optarg, "%lf", &starFreq_); if (starFreq_ < 0) starFreq_ = 0; else if (starFreq_ > 1) starFreq_ = 1; break; case STARMAP: star_map = optarg; break; case TARGET: target_ = Planet::parseBodyName(optarg); switch (target_) { case ALONG_PATH: targetMode_ = XYZ; break; case MAJOR_PLANET: targetMode_ = MAJOR; break; case NAIF: if (strlen(optarg) < 5) { ostringstream errMsg; errMsg << "NAIF id must be specified " << "(e.g. naif-82 for Cassini)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(optarg+4, "%d", &targetID_); targetMode_ = XYZ; } break; case NORAD: if (strlen(optarg) < 6) { ostringstream errMsg; errMsg << "NORAD id must be specified " << "(e.g. NORAD20580 for Hubble)\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); } else { sscanf(optarg+5, "%d", &targetID_); targetMode_ = XYZ; } break; case RANDOM_BODY: targetMode_ = RANDOM; break; case ABOVE_ORBIT: case BELOW_ORBIT: case SAME_SYSTEM: case UNKNOWN_BODY: xpWarn("Unknown target body specified, using EARTH\n", __FILE__, __LINE__); target_ = EARTH; default: targetMode_ = BODY; break; } break; case TERRESTRIAL: universalTime_ = false; break; case THICKNESS: { int thickness; sscanf(optarg, "%d", &thickness); if (thickness > 0) { arcThickness_ = thickness; } else { xpWarn("thickness must be positive.\n", __FILE__, __LINE__); } } break; case TIMEWARP: sscanf(optarg, "%lf", &timewarp); useCurrentTime_ = false; break; case TMPDIR: tmpDir_.assign(optarg); tmpDir_ += separator; break; case TRANSPARENT: transparency_ = true; break; case UTCLABEL: drawLabel_ = true; drawUTCLabel_ = true; break; case VERBOSITY: sscanf(optarg, "%d", &verbosity_); break; case VERSIONNUMBER: printVersion(); exit(EXIT_SUCCESS); break; case VROOT: virtual_root = true; break; case WAIT: sscanf(optarg, "%d", &wait); break; case WINDOWTITLE: windowTitle_.assign(optarg); // fall through case WINDOW: displayMode_ = WINDOW; geometrySelected_ = true; break; case XWINID: { if (optarg[0] == '0' && (optarg[1] == 'x' || optarg[1] == 'X')) { sscanf(optarg, "%lx", &xid_); } else { sscanf(optarg, "%lu", &xid_); } displayMode_ = WINDOW; } break; case XYZFILE: { XYZFile_ = optarg; } default: case UNKNOWN: { cout << "Valid options to Xplanet are:\n"; unsigned int i = 0; while (1) { if (long_options[i].name == NULL) break; printf("-%-20s", long_options[i].name); if (long_options[i].has_arg) cout << " (needs argument)"; cout << endl; i++; } exit(EXIT_SUCCESS); } break; } } if (optind < argc) { string errMsg("unrecognized options: "); while (optind < argc) { errMsg += argv[optind++]; errMsg += " "; } errMsg += "\n"; if (long_options[option_index].has_arg) { errMsg += "Perhaps you didn't supply an argument to -"; errMsg += long_options[option_index].name; errMsg += "?\n"; } xpExit(errMsg, __FILE__, __LINE__); } // useCurrentTime is false if: // 1) -date or -jdate is used // 2) -timewarp is used // 3) -origin_file is used AND -interpolate_origin_file is not // used if (useCurrentTime_) { if (!originFile_.empty() && !interpolateOriginFile_) { useCurrentTime_ = false; } } if (!originFile_.empty() || !dynamicOrigin_.empty()) originMode_ = LBR; // A number of options are meaningless if we're not looking at a // planetary body. if (targetMode_ == XYZ) { if (projectionMode_ != MULTIPLE) { ostringstream errStr; errStr << "Can't use -projection option without a " << "planetary body\n"; xpWarn(errStr.str(), __FILE__, __LINE__); projectionMode_ = MULTIPLE; } if (fovMode_ != FOV) { fov_ = 45 * deg_to_rad; fovMode_ = FOV; } if (north_ == BODY || north_ == ORBIT) { north_ = TERRESTRIAL; } } } void Options::getOrigin(double &X, double &Y, double &Z) { X = oX_; Y = oY_; Z = oZ_; } void Options::setOrigin(const double X, const double Y, const double Z) { oX_ = X; oY_ = Y; oZ_ = Z; } void Options::getTarget(double &X, double &Y, double &Z) { X = tX_; Y = tY_; Z = tZ_; } void Options::setTarget(const double X, const double Y, const double Z) { tX_ = X; tY_ = Y; tZ_ = Z; } void Options::incrementTime(const double sec) { julianDay_ += sec/86400; tv_sec = get_tv_sec(julianDay_); } void Options::setTime(const double jd) { julianDay_ = jd; tv_sec = get_tv_sec(julianDay_); } xplanet-1.3.0/src/Makefile.in0000644000175000017500000006373711731356513012770 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = xplanet$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__xplanet_SOURCES_DIST = Map.cpp Map.h Options.cpp Options.h \ PlanetProperties.h PlanetProperties.cpp Ring.cpp Ring.h \ Satellite.h Satellite.cpp Separation.h Separation.cpp View.cpp \ View.h body.h buildPlanetMap.h buildPlanetMap.cpp createMap.h \ createMap.cpp drawMultipleBodies.cpp drawProjection.cpp \ findBodyXYZ.h findBodyXYZ.cpp findFile.h findFile.cpp getopt.c \ getopt.h getopt1.c keywords.h parse.h parse.cpp parseColor.h \ parseColor.cpp printVersion.cpp readConfig.cpp \ readOriginFile.h readOriginFile.cpp satrings.h ssec.cpp \ setPositions.h setPositions.cpp sphericalToPixel.h \ sphericalToPixel.cpp xpGetopt.h xpUtil.cpp xpUtil.h \ xplanet.cpp ParseGeom.c ParseGeom.h @HAVE_LIBX11_FALSE@am__objects_1 = ParseGeom.$(OBJEXT) am_xplanet_OBJECTS = Map.$(OBJEXT) Options.$(OBJEXT) \ PlanetProperties.$(OBJEXT) Ring.$(OBJEXT) Satellite.$(OBJEXT) \ Separation.$(OBJEXT) View.$(OBJEXT) buildPlanetMap.$(OBJEXT) \ createMap.$(OBJEXT) drawMultipleBodies.$(OBJEXT) \ drawProjection.$(OBJEXT) findBodyXYZ.$(OBJEXT) \ findFile.$(OBJEXT) getopt.$(OBJEXT) getopt1.$(OBJEXT) \ parse.$(OBJEXT) parseColor.$(OBJEXT) printVersion.$(OBJEXT) \ readConfig.$(OBJEXT) readOriginFile.$(OBJEXT) ssec.$(OBJEXT) \ setPositions.$(OBJEXT) sphericalToPixel.$(OBJEXT) \ xpUtil.$(OBJEXT) xplanet.$(OBJEXT) $(am__objects_1) xplanet_OBJECTS = $(am_xplanet_OBJECTS) xplanet_DEPENDENCIES = libannotate/libannotate.a \ libdisplay/libdisplay.a libdisplay/libtimer.a \ libephemeris/libephemeris.a libephemeris/libmoons/libmoons.a \ libimage/libimage.a libmultiple/libmultiple.a \ libplanet/libplanet.a libprojection/libprojection.a \ libsgp4sdp4/libsgp4sdp4.a xplanet_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(xplanet_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(xplanet_SOURCES) $(EXTRA_xplanet_SOURCES) DIST_SOURCES = $(am__xplanet_SOURCES_DIST) $(EXTRA_xplanet_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ SUBDIRS = libannotate libdisplay libephemeris libimage libmultiple libplanet libprojection libsgp4sdp4 EXTRA_xplanet_SOURCES = ParseGeom.c ParseGeom.h @HAVE_LIBX11_FALSE@parsegeom = ParseGeom.c ParseGeom.h AM_CPPFLAGS = -DDATADIR=\"$(datadir)@separator@xplanet\" @X_CFLAGS@ @FREETYPE_CFLAGS@ AM_LDFLAGS = @xplanet_LDFLAGS@ xplanet_SOURCES = \ Map.cpp \ Map.h \ Options.cpp \ Options.h \ PlanetProperties.h \ PlanetProperties.cpp \ Ring.cpp \ Ring.h \ Satellite.h \ Satellite.cpp \ Separation.h \ Separation.cpp \ View.cpp \ View.h \ body.h \ buildPlanetMap.h \ buildPlanetMap.cpp \ createMap.h \ createMap.cpp \ drawMultipleBodies.cpp \ drawProjection.cpp \ findBodyXYZ.h \ findBodyXYZ.cpp \ findFile.h \ findFile.cpp \ getopt.c \ getopt.h \ getopt1.c \ keywords.h \ parse.h \ parse.cpp \ parseColor.h \ parseColor.cpp \ printVersion.cpp \ readConfig.cpp \ readOriginFile.h \ readOriginFile.cpp \ satrings.h \ ssec.cpp \ setPositions.h \ setPositions.cpp \ sphericalToPixel.h \ sphericalToPixel.cpp \ xpGetopt.h \ xpUtil.cpp \ xpUtil.h \ xplanet.cpp \ $(parsegeom) xplanet_LDADD = libannotate/libannotate.a \ libdisplay/libdisplay.a \ libdisplay/libtimer.a \ libephemeris/libephemeris.a \ libephemeris/libmoons/libmoons.a \ libimage/libimage.a \ libmultiple/libmultiple.a \ libplanet/libplanet.a \ libprojection/libprojection.a \ libsgp4sdp4/libsgp4sdp4.a \ @GRAPHICS_LIBS@ @CSPICE_LIBS@ @X_LIBS@ \ @XSS_LIBS@ @FREETYPE_LIBS@ @AQUA_LIBS@ \ @LIBICONV@ @LIBCHARSET@ all: all-recursive .SUFFIXES: .SUFFIXES: .c .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) xplanet$(EXEEXT): $(xplanet_OBJECTS) $(xplanet_DEPENDENCIES) @rm -f xplanet$(EXEEXT) $(xplanet_LINK) $(xplanet_OBJECTS) $(xplanet_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Map.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParseGeom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PlanetProperties.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Satellite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Separation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/View.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildPlanetMap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createMap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawMultipleBodies.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawProjection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findBodyXYZ.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseColor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printVersion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readConfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readOriginFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setPositions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphericalToPixel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpUtil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xplanet.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/src/getopt.c0000644000175000017500000010245210411344513012344 00000000000000/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #ifdef HAVE_CONFIG_H # include #endif #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifndef _ # define _(msgid) gettext (msgid) # endif # else # define _(msgid) (msgid) # endif # if defined _LIBC && defined USE_IN_LIBIO # include # endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else # if HAVE_STRING_H # include # else # include # endif /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv extern char *getenv (); #endif static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (posixly_correct == NULL && argc == __libc_argc && argv == __libc_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { int print_errors = opterr; if (optstring[0] == ':') print_errors = 0; if (argc < 1) return -1; optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; #endif if (argv[optind - 1][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("\ %s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); #else fprintf (stderr, _("\ %s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("\ %s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); #else fprintf (stderr, _("\ %s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #endif } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; #endif if (argv[optind][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); #else fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); #else fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #endif } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; #endif if (posixly_correct) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("%s: illegal option -- %c\n"), argv[0], c); #else fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); #endif } else { #if defined _LIBC && defined USE_IN_LIBIO __asprintf (&buf, _("%s: invalid option -- %c\n"), argv[0], c); #else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #endif } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("%s: option requires an argument -- %c\n"), argv[0], c); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); #endif } nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("\ %s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); #endif } nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (print_errors) { /* 1003.2 specifies the format of this message. */ #if defined _LIBC && defined USE_IN_LIBIO char *buf; __asprintf (&buf, _("%s: option requires an argument -- %c\n"), argv[0], c); if (_IO_fwide (stderr, 0) > 0) __fwprintf (stderr, L"%s", buf); else fputs (buf, stderr); free (buf); #else fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); #endif } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ xplanet-1.3.0/src/getopt.h0000644000175000017500000001447210411344513012355 00000000000000/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef _GETOPT_H #ifndef __need_getopt # define _GETOPT_H 1 #endif /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include , but that does not exist if we are standalone. So: if __GNU_LIBRARY__ is not defined, include , which will pull in for us if it's from glibc. (Why ctype.h? It's guaranteed to exist and it doesn't flood the namespace with stuff the way some other headers do.) */ #if !defined __GNU_LIBRARY__ # include #endif #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; #ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { # if (defined __STDC__ && __STDC__) || defined __cplusplus const char *name; # else char *name; # endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 #endif /* need getopt */ /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, `optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in `optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU `getopt'. The argument `--' causes premature termination of argument scanning, explicitly telling `getopt' that there are no more options. If OPTS begins with `--', then non-option arguments are treated as arguments to the option '\0'. This behavior is specific to the GNU `getopt'. */ #if (defined __STDC__ && __STDC__) || defined __cplusplus # ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts); # else /* not __GNU_LIBRARY__ */ extern int getopt (); # endif /* __GNU_LIBRARY__ */ # ifndef __need_getopt extern int getopt_long (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); extern int getopt_long_only (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only); # endif #else /* not __STDC__ */ extern int getopt (); # ifndef __need_getopt extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); # endif #endif /* __STDC__ */ #ifdef __cplusplus } #endif /* Make sure we later can get all the definitions and declarations. */ #undef __need_getopt #endif /* getopt.h */ xplanet-1.3.0/src/xpGetopt.h0000644000175000017500000000171210411353363012661 00000000000000#ifndef _GETOPT_H #define _GETOPT_H /* The essential bits and pieces from the GNU getopt.h header file. This has been a headache on all kinds of different systems which define getopt in different ways. */ #ifdef __cplusplus extern "C" { #endif extern char *optarg; extern int optind; struct option { # if defined __STDC__ && __STDC__ const char *name; # else char *name; # endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; # define no_argument 0 # define required_argument 1 # define optional_argument 2 extern int getopt_long_only (int __argc, char *const *__argv, const char *__shortopts, const struct option *__longopts, int *__longind); #ifdef __cplusplus } #endif #endif xplanet-1.3.0/src/createMap.cpp0000644000175000017500000001273411430532717013315 00000000000000#include #include #include #include #include using namespace std; #include "body.h" #include "findFile.h" #include "Map.h" #include "Options.h" #include "PlanetProperties.h" #include "Ring.h" #include "xpUtil.h" #include "libimage/Image.h" #include "libplanet/Planet.h" extern void loadSSEC(Image *&image, const unsigned char *&rgb, string &imageFile, const int imageWidth, const int imageHeight); static void loadRGB(Image *&image, const unsigned char *&rgb, string &imageFile, const string &name, const int imageWidth, const int imageHeight, const int shift) { bool foundFile = findFile(imageFile, "images"); if (foundFile) { image = new Image; foundFile = image->Read(imageFile.c_str()); } if (foundFile) { if ((image->Width() != imageWidth) || (image->Height() != imageHeight)) { ostringstream errStr; errStr << "Resizing " << name << " map\n" << "For better performance, all image maps should " << "be the same size as the day map\n"; xpWarn(errStr.str(), __FILE__, __LINE__); image->Resize(imageWidth, imageHeight); } if (shift != 0) image->Shift(shift); rgb = image->getRGBData(); } else { ostringstream errStr; errStr << "Can't load map file " << imageFile << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } Map * createMap(const double sLat, const double sLon, const double obsLat, const double obsLon, const int width, const int height, const double pR, Planet *planet, Ring *ring, map &planetsFromSunMap, PlanetProperties *planetProperties) { Map *m = NULL; string imageFile(planetProperties->DayMap()); Image *day = new Image; bool foundFile = false; if (imageFile.compare("none") != 0) { findFile(imageFile, "images"); foundFile = day->Read(imageFile.c_str()); } if (!foundFile) { // If the day map isn't found, assume the other maps won't be // found either int xsize = (int) (pR*4); if (xsize < 128) xsize = 128; if (xsize > width) xsize = width; int ysize = xsize / 2; m = new Map(xsize, ysize, sLat, sLon, planet, planetProperties, ring, planetsFromSunMap); } else { int imageWidth = day->Width(); int imageHeight = day->Height(); int ishift = 0; Options *options = Options::getInstance(); if (options->GRSSet() && planet->Index() == JUPITER) { double shift = (fmod(planet->Flipped() * (options->GRSLon()/360 + 0.5), 1.0)); shift *= imageWidth; ishift = static_cast (-shift); if (ishift != 0 && day != NULL) day->Shift(ishift); } const unsigned char *dayRGB = day->getRGBData(); Image *night = NULL; const unsigned char *nightRGB = NULL; Image *bump = NULL; const unsigned char *bumpRGB = NULL; Image *cloud = NULL; const unsigned char *cloudRGB = NULL; Image *specular = NULL; const unsigned char *specularRGB = NULL; imageFile = planetProperties->NightMap(); if (!imageFile.empty() && planetProperties->Shade() < 1) loadRGB(night, nightRGB, imageFile, "night", imageWidth, imageHeight, ishift); imageFile = planetProperties->BumpMap(); if (!imageFile.empty()) loadRGB(bump, bumpRGB, imageFile, "bump", imageWidth, imageHeight, ishift); imageFile = planetProperties->SpecularMap(); if (!imageFile.empty()) loadRGB(specular, specularRGB, imageFile, "specular", imageWidth, imageHeight, ishift); imageFile = planetProperties->CloudMap(); if (!imageFile.empty()) { if (planetProperties->SSECMap()) { loadSSEC(cloud, cloudRGB, imageFile, imageWidth, imageHeight); } else { loadRGB(cloud, cloudRGB, imageFile, "cloud", imageWidth, imageHeight, ishift); } } m = new Map(imageWidth, imageHeight, sLat, sLon, obsLat, obsLon, dayRGB, nightRGB, bumpRGB, specularRGB, cloudRGB, planet, planetProperties, ring, planetsFromSunMap); delete night; delete bump; delete cloud; delete specular; // If the map dimensions are each a power of two, the map size // will be reduced to get rid of high-frequency noise const double log2 = log(2.0); double e = log((double) imageWidth) / log2; double remainder = fabs(e - floor(e+0.5)); if (remainder < 1e-3) { e = log((double) imageHeight) / log2; remainder = fabs(e - floor(e+0.5)); if (remainder < 1e-3) { // optimal size for image is about 4*pR x 2*pR const double ratio = day->Height()/pR; const int factor = (int) (log(ratio)/log2) - 1; m->Reduce(factor); } } } delete day; return(m); } xplanet-1.3.0/src/parse.cpp0000644000175000017500000002741111724306745012532 00000000000000#include #include #include #include using namespace std; #include "keywords.h" #include "parseColor.h" #include "xpUtil.h" // sloppy, but it's an easy way to set the comment marker as a line // terminator static bool commentEndsLine = true; bool isDelimiter(char c) { return(c == ' ' || c == '\t'); } bool isEndOfLine(char c) { // 13 is DOS end-of-line, 28 is the file separator bool returnValue = (c == '\0' || c == 13 || c == 28); if (commentEndsLine) returnValue = (c == '#' || returnValue); return(returnValue); } static void skipPastToken(int &i, const char *line, const char endChar) { while (line[i] != endChar) { if (isEndOfLine(line[i])) { ostringstream errStr; errStr << "Malformed line:\n\t" << line << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); return; } i++; } } static void skipPastToken(int &i, const char *line) { while (!isDelimiter(line[i])) { if (isEndOfLine(line[i])) return; i++; } } // If the line contains 'key', return everything between 'key' and 'endChar' static bool getValue(const char *line, int &i, const char *key, const char endChar, char *&returnstring) { const unsigned int length = strlen(key); if (strncmp(line + i, key, length) == 0) { i += length; int istart = i; skipPastToken(i, line, endChar); returnstring = new char[i - istart + 1]; strncpy(returnstring, (line + istart), i - istart); returnstring[i-istart] = '\0'; i++; return(true); } return(false); } // If the line contains 'key', return everything between 'key' and // 'endChar' comment markers are allowed in the string. Use this for // reading marker labels. static bool getValueIncludingComment(const char *line, int &i, const char *key, const char endChar, char *&returnstring) { commentEndsLine = false; bool returnValue = getValue(line, i, key, endChar, returnstring); commentEndsLine = true; return(returnValue); } static bool getValueAfter(const char *line, int &i, const char *key, const char endChar, char *&returnstring) // If the line contains the 'key', skip past 'endChar' and return // everything to the end of the line in 'returnString' { const unsigned int length = strlen(key); if (strncmp(line + i, key, length) == 0) { i += length; skipPastToken(i, line, endChar); // Skips 'to' endChar int istart = i + 1; // Add another to not include endChar skipPastToken(i, line); returnstring = new char[i - istart + 1]; strncpy(returnstring, (line + istart), i - istart); returnstring[i-istart] = '\0'; i++; return(true); } return(false); } static bool getValue(const char *line, int &i, const char *key, char *&returnstring) { const unsigned int length = strlen(key); if (strncmp(line + i, key, length) == 0) { i += length; int istart = i; skipPastToken(i, line); returnstring = new char[i - istart + 1]; strncpy(returnstring, (line + istart), i - istart); returnstring[i-istart] = '\0'; i++; return(true); } return(false); } // This routine returns the next token in the line and its type. int parse(int &i, const char *line, char *&returnString) { if (i >= (int) strlen(line)) return(ENDOFLINE); if (returnString != NULL) xpWarn("returnString is not NULL!\n", __FILE__, __LINE__); int returnVal = UNKNOWN; if (isDelimiter(line[i])) { i++; returnVal = DELIMITER; } else if (isEndOfLine(line[i])) returnVal = ENDOFLINE; else if (getValue(line, i, "align=", returnString)) returnVal = ALIGN; else if (getValue(line, i, "arc_color={", '}', returnString)) returnVal = ARC_COLOR; else if (getValue(line, i, "arc_color=", returnString)) { unsigned char RGB[3]; parseColor(returnString, RGB); delete [] returnString; returnString = new char[32]; snprintf(returnString, 32, "%d,%d,%d", RGB[0], RGB[1], RGB[2]); returnVal = ARC_COLOR; } else if (getValue(line, i, "arc_thickness=", returnString)) returnVal = THICKNESS; // This line must be after all other "arc_" keywords, because it // gobbles all forms else if (getValueAfter(line, i, "arc_", '=', returnString)) returnVal = ARC_FILE; else if (getValue(line, i, "[", ']', returnString)) returnVal = BODY; else if (getValue(line, i, "altcirc=", returnString)) returnVal = CIRCLE; else if (getValue(line, i, "circle=", returnString)) returnVal = CIRCLE; else if (getValue(line, i, "bump_map=", returnString)) returnVal = BUMP_MAP; else if (getValue(line, i, "bump_scale=", returnString)) returnVal = BUMP_SCALE; else if (getValue(line, i, "bump_shade=", returnString)) returnVal = BUMP_SHADE; else if (getValue(line, i, "cloud_gamma=", returnString)) returnVal = CLOUD_GAMMA; else if (getValue(line, i, "cloud_map=", returnString)) returnVal = CLOUD_MAP; else if (getValue(line, i, "cloud_ssec=", returnString)) returnVal = CLOUD_SSEC; else if (getValue(line, i, "cloud_threshold=", returnString)) returnVal = CLOUD_THRESHOLD; else if (getValue(line, i, "color={", '}', returnString)) returnVal = COLOR; else if (getValue(line, i, "color=", returnString)) { unsigned char RGB[3]; parseColor(returnString, RGB); delete [] returnString; returnString = new char[32]; snprintf(returnString, 32, "%d,%d,%d", RGB[0], RGB[1], RGB[2]); returnVal = COLOR; } else if (getValue(line, i, "draw_orbit=", returnString)) returnVal = DRAW_ORBIT; else if (getValue(line, i, "font=", returnString)) returnVal = FONT; else if (getValue(line, i, "fontsize=", returnString)) returnVal = FONTSIZE; else if (getValue(line, i, "grid=", returnString)) returnVal = GRID; else if (getValue(line, i, "grid1=", returnString)) returnVal = GRID1; else if (getValue(line, i, "grid2=", returnString)) returnVal = GRID2; else if (getValue(line, i, "grid_color=", returnString)) returnVal = GRID_COLOR; else if (getValue(line, i, "image=", returnString)) returnVal = IMAGE; else if (getValue(line, i, "lang=", returnString)) returnVal = LANGUAGE; else if (getValue(line, i, "magnify=", returnString)) returnVal = MAGNIFY; else if (getValue(line, i, "mapbounds={", '}', returnString)) returnVal = MAP_BOUNDS; else if (getValue(line, i, "marker_color={", '}', returnString)) returnVal = MARKER_COLOR; else if (getValue(line, i, "marker_color=", returnString)) { unsigned char RGB[3]; parseColor(returnString, RGB); delete [] returnString; returnString = new char[32]; snprintf(returnString, 32, "%d,%d,%d", RGB[0], RGB[1], RGB[2]); returnVal = MARKER_COLOR; } else if (getValue(line, i, "marker_font=", returnString)) returnVal = MARKER_FONT; else if (getValue(line, i, "marker_fontsize=", returnString)) returnVal = MARKER_FONTSIZE; // This line must be after all other "marker_" keywords, because // it gobbles all forms else if (getValueAfter(line, i, "marker_", '=', returnString)) returnVal = MARKER_FILE; else if (getValue(line, i, "map=", returnString)) returnVal = DAY_MAP; else if (getValue(line, i, "max_radius_for_label=", returnString)) returnVal = MAX_RAD_FOR_LABEL; else if (getValue(line, i, "min_radius_for_label=", returnString)) returnVal = MIN_RAD_FOR_LABEL; else if (getValue(line, i, "min_radius_for_markers=", returnString)) returnVal = MIN_RAD_FOR_MARKERS; else if (getValue(line, i, "max_radius=", returnString)) returnVal = MAX_RAD_FOR_MARKERS; else if (getValue(line, i, "min_radius=", returnString)) returnVal = MIN_RAD_FOR_MARKERS; else if (getValueIncludingComment(line, i, "\"", '"', returnString)) returnVal = NAME; else if (getValueIncludingComment(line, i, "{", '}', returnString)) returnVal = NAME; else if (getValue(line, i, "night_map=", returnString)) returnVal = NIGHT_MAP; else if (getValue(line, i, "orbit={", '}', returnString)) returnVal = ORBIT; else if (getValue(line, i, "orbit_color={", '}', returnString)) returnVal = ORBIT_COLOR; else if (getValue(line, i, "orbit_color=", returnString)) { unsigned char RGB[3]; parseColor(returnString, RGB); delete [] returnString; returnString = new char[32]; snprintf(returnString, 32, "%d,%d,%d", RGB[0], RGB[1], RGB[2]); returnVal = ORBIT_COLOR; } else if (getValue(line, i, "relative_to=", returnString)) returnVal = ORIGIN; else if (getValue(line, i, "opacity=", returnString)) returnVal = OPACITY; else if (getValue(line, i, "outlined=", returnString)) returnVal = OUTLINED; else if (getValue(line, i, "position=", returnString)) returnVal = POSITION; else if (getValue(line, i, "radius=", returnString)) returnVal = RADIUS; else if (getValue(line, i, "random_origin=", returnString)) returnVal = RANDOM_ORIGIN; else if (getValue(line, i, "random_target=", returnString)) returnVal = RANDOM_TARGET; else if (getValue(line, i, "rayleigh_emission_weight=", returnString)) returnVal = RAYLEIGH_EMISSION_WEIGHT; else if (getValue(line, i, "rayleigh_file=", returnString)) returnVal = RAYLEIGH_FILE; else if (getValue(line, i, "rayleigh_limb_scale=", returnString)) returnVal = RAYLEIGH_LIMB_SCALE; else if (getValue(line, i, "rayleigh_scale=", returnString)) returnVal = RAYLEIGH_SCALE; // Any 'new' satellite_* tokens must be before this, because it // gobbles all forms else if (getValueAfter(line, i, "satellite_", '=', returnString)) returnVal = SATELLITE_FILE; else if (getValue(line, i, "shade=", returnString)) returnVal = SHADE; else if (getValue(line, i, "spacing=", returnString)) returnVal = SPACING; else if (getValue(line, i, "specular_map=", returnString)) returnVal = SPECULAR_MAP; else if (getValue(line, i, "symbolsize=", returnString)) returnVal = SYMBOLSIZE; else if (getValue(line, i, "text_color={", '}', returnString)) returnVal = TEXT_COLOR; else if (getValue(line, i, "thickness=", returnString)) returnVal = THICKNESS; else if (strncmp(line+i, "timezone=", 9) == 0) { i += 9; int istart = i; while (line[i] == '/' || line[i] == ',' || !isDelimiter(line[i])) { if (isEndOfLine(line[i])) break; i++; } returnString = new char[i - istart + 1]; strncpy(returnString, (line + istart), i - istart); returnString[i-istart] = '\0'; returnVal = TIMEZONE; } else if (getValue(line, i, "trail={", '}', returnString)) returnVal = TRAIL; else if (getValue(line, i, "trail_output=", returnString)) returnVal = OUTPUT; else if (getValue(line, i, "transparent={", '}', returnString)) returnVal = TRANSPARENT; else if (getValue(line, i, "twilight=", returnString)) returnVal = TWILIGHT; else // assume it's a latitude/longitude value { int istart = i; skipPastToken(i, line); returnString = new char[i - istart + 1]; strncpy(returnString, (line + istart), i - istart); returnString[i-istart] = '\0'; returnVal = LATLON; } return(returnVal); } xplanet-1.3.0/src/sphericalToPixel.cpp0000644000175000017500000000230710411417337014664 00000000000000#include #include using namespace std; #include "Options.h" #include "View.h" #include "xpUtil.h" #include "libplanet/Planet.h" #include "libprojection/ProjectionBase.h" bool sphericalToPixel(const double lat, const double lon, const double rad, double &X, double &Y, double &Z, Planet *planet, View *view, ProjectionBase *projection) { bool returnVal = false; if (view != NULL) { if (planet == NULL) { RADecToXYZ(lon, lat, X, Y, Z); } else { planet->PlanetographicToXYZ(X, Y, Z, lat, lon, rad); } Options *options = Options::getInstance(); view->XYZToPixel(X, Y, Z, X, Y, Z); X += options->CenterX(); Y += options->CenterY(); // true if the point is in front of us returnVal = (Z > 0); } else if (projection != NULL) { returnVal = projection->sphericalToPixel(lon * planet->Flipped(), lat, X, Y); Z = 0; } else { xpExit("Both view and projection are NULL!\n", __FILE__, __LINE__); } return(returnVal); } xplanet-1.3.0/src/keywords.h0000644000175000017500000001016611724306745012733 00000000000000#ifndef KEYWORDS_H #define KEYWORDS_H enum keyWords { UNKNOWN = '?', // for getopt ABOVE, ABSOLUTE, ALIGN, ANCIENT, ARC_COLOR, ARC_FILE, ARC_SPACING, AUTO, AZIMUTHAL, BACKGROUND, BASEMAG, BELOW, BODY, BONNE, BUMP_MAP, BUMP_SCALE, BUMP_SHADE, CENTER, CIRCLE, CLOUD_GAMMA, CLOUD_MAP, CLOUD_SSEC, CLOUD_THRESHOLD, COLOR, CONFIG_FILE, DATE, DATE_FORMAT, DAY_MAP, DELIMITER, DRAW_ORBIT, DYNAMIC_ORIGIN, ENDOFLINE, EPHEMERIS, EQUAL_AREA, FONT, FONTSIZE, FORK, FOV, GALACTIC, GEOMETRY, GLARE, GNOMONIC, GRID, GRID1, GRID2, GRID_COLOR, GROUND, GRS_LON, HEMISPHERE, HIBERNATE, ICOSAGNOMONIC, IDLEWAIT, IMAGE, INTERPOLATE_ORIGIN_FILE, JDATE, JPL_FILE, LABEL, LABELPOS, LABEL_BODY, LABEL_STRING, LAMBERT, LANGUAGE, LATITUDE, LATLON, LBR, LEFT, LIGHT_TIME, LOCALTIME, LOGMAGSTEP, LONGITUDE, MAGNIFY, MAJOR, MAKECLOUDMAPS, MAP_BOUNDS, MARKER_BOUNDS, MARKER_COLOR, MARKER_FILE, MARKER_FONT, MARKER_FONTSIZE, MAX_RAD_FOR_LABEL, MIN_RAD_FOR_LABEL, MAX_RAD_FOR_MARKERS, MIN_RAD_FOR_MARKERS, MERCATOR, MOLLWEIDE, MULTIPLE, NAME, NIGHT_MAP, NORTH, NUM_TIMES, OPACITY, ORBIT, ORBIT_COLOR, ORIGIN, ORIGINFILE, ORTHOGRAPHIC, OUTLINED, OUTPUT, OUTPUT_MAP_RECT, OUTPUT_START_INDEX, PANGO, PATH, PATH_RELATIVE_TO, PETERS, POLYCONIC, POSITION, POST_COMMAND, PREV_COMMAND, PROJECTION, PROJECTIONPARAMETER, QUALITY, RADIUS, RANDOM, RANDOM_ORIGIN, RANDOM_TARGET, RANGE, RAYLEIGH_EMISSION_WEIGHT, RAYLEIGH_FILE, RAYLEIGH_LIMB_SCALE, RAYLEIGH_SCALE, RECTANGULAR, RIGHT, ROOT, ROTATE, SATELLITE_FILE, SAVE_DESKTOP_FILE, SEARCHDIR, SEPARATION, SHADE, SPACING, SPECULAR_MAP, SPICE_EPHEMERIS, SPICE_FILE, STARFREQ, STARMAP, SYMBOLSIZE, SYSTEM, TARGET, TERRESTRIAL, TEXT_COLOR, THICKNESS, TIMEWARP, TIMEZONE, TMPDIR, TRAIL, TRANSPARENT, TRANSPNG, TSC, TWILIGHT, UTCLABEL, VERBOSITY, VERSIONNUMBER, VROOT, WAIT, WINDOW, WINDOWTITLE, XWINID, XYZ, XYZFILE, LAST_WORD }; const char * const keyWordString[LAST_WORD] = { "UNKNOWN", "ABOVE", "ABSOLUTE", "ALIGN", "ANCIENT", "ARC_COLOR", "ARC_FILE", "ARC_SPACING", "AUTO", "AZIMUTHAL", "BACKGROUND", "BASEMAG", "BELOW", "BODY", "BONNE", "BUMP_MAP", "BUMP_SCALE", "BUMP_SHADE", "CENTER", "CIRCLE", "CLOUD_GAMMA", "CLOUD_MAP", "CLOUD_SSEC", "CLOUD_THRESHOLD", "COLOR", "CONFIG_FILE", "DATE", "DATE_FORMAT", "DAY_MAP", "DELIMITER", "DRAW_ORBIT", "DYNAMIC_ORIGIN", "ENDOFLINE", "EPHEMERIS", "EQUAL_AREA", "FONT", "FONTSIZE", "FORK", "FOV", "GALACTIC", "GEOMETRY", "GLARE", "GNOMONIC", "GRID", "GRID1", "GRID2", "GRID_COLOR", "GROUND", "GRS_LON", "HEMISPHERE", "HIBERNATE", "ICOSAGNOMONIC", "IDLEWAIT", "IMAGE", "INTERPOLATE_ORIGIN_FILE", "JDATE", "JPL_FILE", "LABEL", "LABELPOS", "LABEL_BODY", "LABEL_STRING", "LAMBERT", "LANGUAGE", "LATITUDE", "LATLON", "LBR", "LEFT", "LIGHT_TIME", "LOCALTIME", "LOGMAGSTEP", "LONGITUDE", "MAGNIFY", "MAJOR", "MAKECLOUDMAPS", "MAP_BOUNDS", "MARKER_BOUNDS", "MARKER_COLOR", "MARKER_FILE", "MARKER_FONT", "MARKER_FONTSIZE", "MAX_RAD_FOR_LABEL", "MIN_RAD_FOR_LABEL", "MAX_RAD_FOR_MARKERS", "MIN_RAD_FOR_MARKERS", "MERCATOR", "MOLLWEIDE", "MULTIPLE", "NAME", "NIGHT_MAP", "NORTH", "NUM_TIMES", "OPACITY", "ORBIT", "ORBIT_COLOR", "ORIGIN", "ORIGINFILE", "ORTHOGRAPHIC", "OUTLINED", "OUTPUT", "OUTPUT_MAP_RECT", "OUTPUT_START_INDEX", "PANGO", "PATH", "PATH_RELATIVE_TO", "PETERS", "POLYCONIC", "POSITION", "POST_COMMAND", "PREV_COMMAND", "PROJECTION", "PROJECTIONPARAMETER", "QUALITY", "RADIUS", "RANDOM", "RANDOM_ORIGIN", "RANDOM_TARGET", "RANGE", "RAYLEIGH_EMISSION_WEIGHT", "RAYLEIGH_FILE", "RAYLEIGH_LIMB_SCALE", "RAYLEIGH_SCALE", "RECTANGULAR", "RIGHT", "ROOT", "ROTATE", "SATELLITE_FILE", "SAVE_DESKTOP_FILE", "SEARCHDIR", "SEPARATION", "SHADE", "SPACING", "SPECULAR_MAP", "SPICE_EPHEMERIS", "SPICE_FILE", "STARFREQ", "STARMAP", "SYMBOLSIZE", "SYSTEM", "TARGET", "TERRESTRIAL", "TEXT_COLOR", "THICKNESS", "TIMEWARP", "TIMEZONE", "TMPDIR", "TRAIL", "TRANSPARENT", "TRANSPNG", "TSC", "TWILIGHT", "UTCLABEL", "VERBOSITY", "VERSIONNUMBER", "VROOT", "WAIT", "WINDOW", "WINDOWTITLE", "XWINID", "XYZ", "XYZFILE" "LAST_WORD" }; #endif xplanet-1.3.0/src/xpUtil.cpp0000644000175000017500000004172611716061445012706 00000000000000#include #include #include #include #include #include #include #include #include #include using namespace std; #include extern char **environ; #include "config.h" #ifdef HAVE_ICONV # include # ifdef HAVE_LIBCHARSET # include # else # ifdef HAVE_LANGINFO_H # include # else # define NO_ICONV # endif # endif #else # define NO_ICONV #endif #include "Options.h" #include "xpUtil.h" void xpExit(const string &message, const char *file, const int line) { cerr << "Error: " << message; cerr << "Exiting from " << file << " at line " << line << endl; #if 0 // force a segfault const char *const ptr = NULL; cout << ptr[5000] << endl; cout.flush(); #endif exit(EXIT_FAILURE); } void xpWarn(const string &message, const char *file, const int line) { Options *options = Options::getInstance(); if (options->Verbosity() >= 0) { cerr << "Warning: " << message; if (options->Verbosity() > 0) cerr << "In " << file << " at line " << line << endl << endl; cerr.flush(); } } void xpMsg(const string &message, const char *file, const int line) { Options *options = Options::getInstance(); if (options->Verbosity() > 0) { cout << message; cout.flush(); } } void removeFromEnvironment(const char *name) { #ifdef HAVE_UNSETENV unsetenv(name); #else string badname = name; badname += "="; // I found this useful code on groups.google.com. It's based on // sudo's code, where the environment is cleaned up before // executing anything. char **cur, **move; for (cur = environ; *cur; cur++) { if (strncmp(*cur, badname.c_str(), badname.length()) == 0) { /* Found variable; move subsequent variables over it */ for (move = cur; *move; move++) *move = *(move + 1); cur--; } } #endif } void unlinkFile(const char *name) { if (unlink(name) == -1) { ostringstream errStr; errStr << "Can't remove " << name << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } void cross(const double a[3], const double b[3], double c[3]) { c[0] = a[1]*b[2] - b[1]*a[2]; c[1] = a[2]*b[0] - b[2]*a[0]; c[2] = a[0]*b[1] - b[0]*a[1]; } double dot(const double A0, const double A1, const double A2, const double B0, const double B1, const double B2) { return(A0 * B0 + A1 * B1 + A2 * B2); } double ndot(const double A0, const double A1, const double A2, const double B0, const double B1, const double B2) { const double len_a = dot(A0, A1, A2, A0, A1, A2); const double len_b = dot(B0, B1, B2, B0, B1, B2); return(dot(A0, A1, A2, B0, B1, B2) / sqrt(len_a * len_b)); } double dot(const double a[3], const double b[3]) { return(a[0] * b[0] + a[1] * b[1] + a[2] * b[2]); } double ndot(const double a[3], const double b[3]) { const double len_a = dot(a, a); const double len_b = dot(b, b); return(dot(a, b) / sqrt(len_a * len_b)); } double normalize(double a[3]) { const double length = dot(a, a); if (length > 0) for (int i = 0; i < 3; i++) a[i] /= length; return(length); } void invertMatrix(const double in[3][3], double out[3][3]) { double a1 = in[0][0]; double a2 = in[0][1]; double a3 = in[0][2]; double b1 = in[1][0]; double b2 = in[1][1]; double b3 = in[1][2]; double c1 = in[2][0]; double c2 = in[2][1]; double c3 = in[2][2]; double det = (a1*(b2*c3 - b3*c2) + a2*(b3*c1 - b1*c3) + a3*(b1*c2 - b2*c1)); out[0][0] = (b2*c3 - b3*c2)/det; out[0][1] = (a3*c2 - a2*c3)/det; out[0][2] = (a2*b3 - a3*b2)/det; out[1][0] = (b3*c1 - b1*c3)/det; out[1][1] = (a1*c3 - a3*c1)/det; out[1][2] = (a3*b1 - a1*b3)/det; out[2][0] = (b1*c2 - b2*c1)/det; out[2][1] = (a2*c1 - a1*c2)/det; out[2][2] = (a1*b2 - a2*b1)/det; #if 0 printf("in:\n"); for (int i = 0; i < 3; i++) { printf("[%14.8e, %14.8e, %14.8e],\n", in[i][0], in[i][1], in[i][2]); } printf("det = %14.8e\n", det); printf("out:\n"); for (int i = 0; i < 3; i++) { printf("[%14.8e, %14.8e, %14.8e],\n", out[i][0], out[i][1], out[i][2]); } printf("product:\n"); double prod[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { prod[i][j] = 0; for (int ii = 0; ii < 3; ii++) prod[i][j] += in[i][ii] * out[ii][j]; } printf("[%14.8e, %14.8e, %14.8e],\n", prod[i][0], prod[i][1], prod[i][2]); } #endif } void RADecToXYZ(double RA, double Dec, double &X, double &Y, double &Z) { RA *= 15; X = FAR_DISTANCE * cos(Dec) * cos(RA); Y = FAR_DISTANCE * cos(Dec) * sin(RA); Z = FAR_DISTANCE * sin(Dec); } void fromJulian(double jd, int &year, int &month, int &day, int &hour, int &min, double &sec) { jd += 0.5; int Z = (int) jd; double F = jd - Z; int A = Z; if (Z >= 2291161) { int alpha = (int) ((Z - 1867216.25)/36524.25); A = Z + 1 + alpha - alpha/4; } int B = A + 1524; int C = (int) floor((B - 122.1) / 365.25); int D = (int) floor(365.25 * C); int E = (int) floor((B - D)/30.6001); double dday = B - D - (int) floor(30.6001 * E) + F; day = (int) floor(dday); month = E - 13; if (E < 14) month = E - 1; year = C - 4715; if (month > 2) year--; double dhour = 24 * (dday - day); hour = (int) floor(dhour); double dmin = 60 * (dhour - hour); min = (int) floor(dmin); sec = 60 * (dmin - min); } string fromJulian(double date) { char timeString[16]; int year, month, day, hour, min; double sec; fromJulian(date, year, month, day, hour, min, sec); snprintf(timeString, 16, "%4.4d%2.2d%2.2d.%2.2d%2.2d%2.2d", year, month, day, hour, min, (int) floor(sec)); return(string(timeString)); } time_t get_tv_sec(double jd) { int year, month, day, hour, min; double sec; fromJulian(jd, year, month, day, hour, min, sec); tm tm_struct = { (int) floor(sec + 0.5), min, hour, day, month - 1, year - 1900, 0, 0, -1 }; #ifdef HAVE_TIMEGM time_t returnval = timegm(&tm_struct); #else string tz_save = ""; char *get_tz = getenv("TZ"); if (get_tz != NULL) { tz_save = "TZ="; tz_save += get_tz; } putenv("TZ=UTC"); tzset(); time_t returnval = mktime(&tm_struct); if (tz_save.empty()) removeFromEnvironment("TZ"); else putenv((char *) tz_save.c_str()); tzset(); #endif return(returnval); } double toJulian(int year, int month, int day, int hour, int min, int sec) { // Gregorian calendar (after 1582 Oct 15) const bool gregorian = (year > 1582 || (year == 1582 && month > 10) || (year == 1582 && month == 10 && day >= 15)); if(month < 3) { year -= 1; month += 12; } int a = year/100; int b = 0; if (gregorian) b = 2 - a + a/4; int c = (int) floor(365.25 * (year + 4716)); int d = (int) floor(30.6001 * (month + 1)); double e = day + ((sec/60. + min) / 60. + hour) / 24.; double jd = b + c + d + e - 1524.5; return(jd); } // find the difference between universal and ephemeris time // (delT = ET - UT) double delT(const double jd) { #if 0 // From McCarthy & Babcock (1986) const double j1800 = 2378496.5; const double t = (jd - j1800)/36525; const double delT = 5.156 + 13.3066 * (t - 0.19) * (t - 0.19); #else // Valid from 1825 to 2000, Montenbruck & Pfelger (2000), p 188 const double T = (jd - 2451545)/36525; const int i = (int) floor(T/0.25); const double c[7][4] = { { 10.4, -80.8, 413.9, -572.3 }, { 6.6, 46.3, -358.4, 18.8 }, { -3.9, -10.8, -166.2, 867.4 }, { -2.6, 114.1, 327.5, -1467.4 }, { 24.2, -6.3, -8.2, 483.4 }, { 29.3, 32.5, -3.8, 550.7 }, { 45.3, 130.5, -570.5, 1516.7 } }; double t = T - i * 0.25; int ii = i + 7; if (ii < 0) { t = 0; ii = 0; } else if (ii > 6) { ii = 6; t = 0.25; } const double delT = c[ii][0] + t * (c[ii][1] + t * (c[ii][2] + t * c[ii][3])); #endif return(delT); } void rotateX(double &X, double &Y, double &Z, const double theta) { const double st = sin(theta); const double ct = cos(theta); const double X0 = X; const double Y0 = Y; const double Z0 = Z; X = X0; Y = Y0 * ct + Z0 * st; Z = Z0 * ct - Y0 * st; } void rotateZ(double &X, double &Y, double &Z, const double theta) { const double st = sin(theta); const double ct = cos(theta); const double X0 = X; const double Y0 = Y; const double Z0 = Z; X = X0 * ct + Y0 * st; Y = Y0 * ct - X0 * st; Z = Z0; } /* x = 0 passes through 0 and 2 y = 0 passes through 0 and 1 Given a point (x, y), compute the area weighting of each pixel. --- --- | 0 | 1 | --- --- | 2 | 3 | --- --- */ void getWeights(const double t, const double u, double weights[4]) { // Weights are from Numerical Recipes, 2nd Edition // weight[0] = (1 - t) * u; // weight[2] = (1-t) * (1-u); // weight[3] = t * (1-u); weights[1] = t * u; weights[0] = u - weights[1]; weights[2] = 1 - t - u + weights[1]; weights[3] = t - weights[1]; } void calcGreatArc(const double lat1, const double lon1, const double lat2, const double lon2, double &trueCourse, double &dist) { /* * Equations are from http://www.best.com/~williams/avform.html * returned trueCourse is relative to latitude north */ const double sin_lat1 = sin(lat1); const double cos_lat1 = cos(lat1); const double sin_lat2 = sin(lat2); const double cos_lat2 = cos(lat2); const double dlon = lon1 - lon2; // Arc length between points (in radians) double arg = sin_lat1 * sin_lat2 + cos_lat1 * cos_lat2 * cos(dlon); if (arg >= 1) dist = 0; else if (arg <= -1) dist = M_PI; else dist = acos(arg); // True course trueCourse = fmod(atan2(sin(dlon) * cos_lat2, cos_lat1 * sin_lat2 - sin_lat1 * cos_lat2 * cos(dlon)), TWO_PI); } double kepler(const double e, double M) { double E = M = fmod(M, TWO_PI); double delta = 1; while (fabs(delta) > 1E-10) { delta = (M + e * sin(E) - E)/(1 - e * cos(E)); E += delta; } return(E); } // Precess rectangular coordinates in B1950 frame to J2000 using // Standish precession matrix from Lieske (1998) void precessB1950J2000(double &X, double &Y, double &Z) { static const double p[3][3] = { { 0.9999256791774783, -0.0111815116768724, -0.0048590038154553 }, { 0.0111815116959975, 0.9999374845751042, -0.0000271625775175 }, { 0.0048590037714450, -0.0000271704492210, 0.9999881946023742 } }; double newX = p[0][0] * X + p[0][1] * Y + p[0][2] * Z; double newY = p[1][0] * X + p[1][1] * Y + p[1][2] * Z; double newZ = p[2][0] * X + p[2][1] * Y + p[2][2] * Z; X = newX; Y = newY; Z = newZ; } // Return the shading function. For Lambertian shading, the input // value X is the cosine of the sun-surface-observer angle, and the // return value is just X. Using the sqrt of X brightens the image a // bit. double photoFunction(const double x) { return(sqrt(x)); } static void convertEncoding(const bool toNative, ICONV_CONST char *inBuf, char *outBuf) { #ifdef NO_ICONV memcpy(outBuf, inBuf, MAX_LINE_LENGTH); #else #ifdef HAVE_LIBCHARSET const char *encoding = locale_charset(); #else const char *encoding = nl_langinfo(CODESET); #endif const char *fromCode = (toNative ? "UTF-8" : encoding); const char *toCode = (toNative ? encoding : "UTF-8"); iconv_t conv = iconv_open(toCode, fromCode); if (conv != (iconv_t) -1) { size_t inbytesleft = strlen(inBuf); size_t outbytesleft = MAX_LINE_LENGTH; while (inbytesleft != (size_t) 0) { size_t retVal = iconv(conv, &inBuf, &inbytesleft, &outBuf, &outbytesleft); if (retVal == (size_t) -1) { ostringstream errStr; errStr << "Can't convert sequence " << inBuf << " from encoding " << fromCode << " to encoding " << toCode << endl; switch (errno) { case EINVAL: errStr << "Incomplete character or shift sequence " << "(EINVAL)\n"; break; case E2BIG: errStr << "Lack of space in output buffer (E2BIG)\n"; break; case EILSEQ: errStr << "Illegal character or shift sequence " << "(EILSEQ)\n"; break; case EBADF: errStr << "Invalid conversion descriptor (EBADF)\n"; break; default: errStr << "Unknown iconv error\n"; } xpWarn(errStr.str(), __FILE__, __LINE__); iconv_close(conv); return; } } iconv_close(conv); } else { ostringstream errStr; errStr << "iconv_open() failed, fromCode is " << fromCode << ", toCode is " << toCode << "\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } #endif } void strftimeUTF8(string &timeString) { // This is the input string, with formatting characters char buffer_UTF8[MAX_LINE_LENGTH]; memset(buffer_UTF8, 0, MAX_LINE_LENGTH); strncpy(buffer_UTF8, timeString.c_str(), MAX_LINE_LENGTH); // Convert to native encoding char buffer_native_format[MAX_LINE_LENGTH]; memset(buffer_native_format, 0, MAX_LINE_LENGTH); convertEncoding(true, buffer_UTF8, buffer_native_format); // Run it through strftime() char buffer_native[MAX_LINE_LENGTH]; Options *options = Options::getInstance(); time_t tv_sec = options->TVSec(); strftime(buffer_native, MAX_LINE_LENGTH, buffer_native_format, localtime((time_t *) &tv_sec)); // Convert back to UTF8 convertEncoding(false, buffer_native, buffer_UTF8); timeString.assign(buffer_UTF8); } char * checkLocale(const int category, const char *locale) { static bool showWarning = true; char *returnVal = setlocale(category, locale); if (locale != NULL) { if (returnVal == NULL) { ostringstream errMsg; errMsg << "setlocale("; switch (category) { case LC_CTYPE: errMsg << "LC_CTYPE"; break; case LC_COLLATE: errMsg << "LC_COLLATE"; break; case LC_TIME: errMsg << "LC_TIME"; break; case LC_NUMERIC: errMsg << "LC_NUMERIC"; break; case LC_MONETARY: errMsg << "LC_MONETARY"; break; case LC_MESSAGES: errMsg << "LC_MESSAGES"; break; case LC_ALL: errMsg << "LC_ALL"; break; default: errMsg << "UNKNOWN CATEGORY!"; } errMsg << ", "; if (strlen(locale) == 0) { errMsg << "\"\""; } else { errMsg << "\"" << locale << "\""; } errMsg << ") failed! "; if (strlen(locale) == 0) { errMsg << "Check your LANG environment variable " << "(currently "; char *lang = getenv("LANG"); if (lang == NULL) { errMsg << "NULL"; } else { errMsg << "\"" << lang << "\""; } errMsg << "). Setting to \"C\".\n"; if (showWarning) { xpWarn(errMsg.str(), __FILE__, __LINE__); showWarning = false; } returnVal = setlocale(category, "C"); } else { errMsg << "Trying native ...\n"; xpWarn(errMsg.str(), __FILE__, __LINE__); showWarning = true; returnVal = checkLocale(category, ""); } } } return(returnVal); } xplanet-1.3.0/src/findBodyXYZ.cpp0000644000175000017500000000444710411417337013565 00000000000000#include using namespace std; #include "config.h" #include "body.h" #include "keywords.h" #include "xpUtil.h" #include "libannotate/libannotate.h" #include "libplanet/Planet.h" void findBodyXYZ(const double julianDay, const body bodyIndex, const int bodyID, double &X, double &Y, double &Z) { switch (bodyIndex) { case NAIF: { #ifdef HAVE_CSPICE Planet Sun(julianDay, SUN); Sun.calcHeliocentricEquatorial(); calculateSpicePosition(julianDay, bodyID, &Sun, 10, X, Y, Z); #else ostringstream errStr; errStr << "Xplanet was compiled without SPICE support.\n"; xpWarn(errStr.str(), __FILE__, __LINE__); #endif } break; case NORAD: { const time_t tv_sec = get_tv_sec(julianDay); double lat, lon, rad; if (calculateSatellitePosition(tv_sec, bodyID, lat, lon, rad)) { Planet earth(julianDay, EARTH); earth.calcHeliocentricEquatorial(); earth.PlanetographicToXYZ(X, Y, Z, lat, lon, rad); } else { ostringstream errStr; errStr << "Can't get position of satellite # " << bodyID << ".\n"; xpWarn(errStr.str(), __FILE__, __LINE__); } } break; default: { Planet t(julianDay, bodyIndex); t.calcHeliocentricEquatorial(); t.getPosition(X, Y, Z); } } } void findBodyVelocity(const double julianDay, const body bodyIndex, const int bodyID, const body relativeIndex, const int relativeID, double &vX, double &vY, double &vZ) { const double delT = 0.01; double bmX, bmY, bmZ; double bpX, bpY, bpZ; findBodyXYZ(julianDay - delT/2, bodyIndex, bodyID, bmX, bmY, bmZ); findBodyXYZ(julianDay + delT/2, bodyIndex, bodyID, bpX, bpY, bpZ); double rmX, rmY, rmZ; double rpX, rpY, rpZ; findBodyXYZ(julianDay - delT/2, relativeIndex, relativeID, rmX, rmY, rmZ); findBodyXYZ(julianDay + delT/2, relativeIndex, relativeID, rpX, rpY, rpZ); vX = ((bpX - rpX) - (bmX - rmX)) / delT; vY = ((bpY - rpY) - (bmY - rmY)) / delT; vZ = ((bpZ - rpZ) - (bmZ - rmZ)) / delT; } xplanet-1.3.0/Makefile.am0000644000175000017500000000257211716063601012152 00000000000000SUBDIRS = src man_MANS = xplanet.1 nobase_dist_data_DATA = \ xplanet/rgb.txt \ xplanet/arcs/README \ xplanet/arcs/constellations \ xplanet/config/README \ xplanet/config/default \ xplanet/config/earth_markers \ xplanet/config/moon_orbit \ xplanet/config/overlay_clouds \ xplanet/ephemeris/README \ xplanet/fonts/README \ xplanet/fonts/FreeMonoBold.ttf \ xplanet/images/README \ xplanet/images/earth.jpg \ xplanet/images/hubble.png \ xplanet/images/iss.png \ xplanet/images/mgs.png \ xplanet/images/night.jpg \ xplanet/images/odyssey.png \ xplanet/images/shuttle.png \ xplanet/images/smile.png \ xplanet/images/sublunar.png \ xplanet/images/subsolar.png \ xplanet/images/sun.jpg \ xplanet/markers/README \ xplanet/markers/brightStars \ xplanet/markers/earth \ xplanet/markers/mars \ xplanet/markers/moon \ xplanet/origin/README \ xplanet/origin/cassini \ xplanet/origin/galileo \ xplanet/satellites/README \ xplanet/satellites/iss \ xplanet/satellites/iss.tle \ xplanet/scattering/README \ xplanet/scattering/earthRayleigh \ xplanet/spice/README \ xplanet/spice/asteroids \ xplanet/spice/asteroids.krn \ xplanet/spice/cassini \ xplanet/spice/cassini.krn \ xplanet/spice/mgs \ xplanet/spice/mgs.krn \ xplanet/spice/voyager \ xplanet/spice/voyager.krn \ xplanet/stars/BSC EXTRA_DIST = xplanet.1 $(sources) xplanet-1.3.0/missing0000755000175000017500000002403610411344513011507 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 xplanet-1.3.0/INSTALL0000644000175000017500000002203010411344513011131 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. xplanet-1.3.0/xplanet.10000644000175000017500000005363611716030066011661 00000000000000.TH XPLANET 1 .\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection .\" other parms are allowed: see man(7), man(1) .SH NAME xplanet \- render an image of a planet into an X window or file .SH SYNOPSIS .B xplanet .I "[options]" .SH DESCRIPTION .B Xplanet is similar to Xearth, where an image of the earth is rendered into an X window. All of the major planets and most satellites can be drawn. A number of different map projections are also supported, including azimuthal, Mercator, Mollweide, orthographic, and rectangular. The latest version can always be found at http://xplanet.sourceforge.net. .SH OPTIONS Options need only be specified with enough characters to be unambiguous. Valid options to Xplanet are: .TP .B \-arc_file Specify an arc file to be plotted against the background stars. Each line in the file must have the following syntax: .nf .sp dec1 ra1 dec2 ra2 .sp .fi where declination is in degrees and right ascension is in hours. This option has no effect if \-projection is specified. .TP .B \-arc_spacing spacing When drawing an arc, draw line segments that are spacing degrees apart. The default is 0.1 degrees. Line segments shorter than spacing will not be drawn. .TP .B \-arc_thickness thickness Specify the thickness of arcs. The default is 1 pixel. When drawing arcs on a planet using the arc_file option in the configuration file, use the arc_thickness option there too. .TP .B \-background background_file Use background_file as the background image, with the planet to be superimposed upon it. A color may also be supplied (e.g. \-background "navy blue" or \-background 0xff00ff). .TP .B \-base_magnitude magnitude A star of the specified magnitude will have a pixel brightness of 1. The default value is 10. Stars will be drawn more brightly if this number is larger. .TP .B \-body body Render an image of the specified planet or satellite. Valid values for body are sun, mercury, venus, earth, moon, mars, phobos, deimos, jupiter, io, europa, ganymede, callisto, saturn, mimas, enceladus, tethys, dione, rhea, titan, hyperion, iapetus, phoebe, uranus, miranda, ariel, umbriel, titania, oberon, neptune, triton, nereid, pluto, charon, random, and major. The field of view can also be centered on a satellite location using "naif" or "norad", along with the satellite id. For example, "\-body naif-82" will center the field of view on NAIF ID \-82, which is the Cassini orbiter. Xplanet must be compiled with SPICE support and the required kernels must be present. See the README in the spice subdirectory for more details. Using "\-body norad20580" will center the field of view on NORAD ID 20580, which is the Hubble Space Telescope. The appropriate TLE files must be present in this case. See the README in the satellites subdirectory for more information. Using "path" will center the field of view on the direction of motion of the origin. This direction is relative to the direction of motion of the body specified by \-path_relative_to. Earth is the default body. This option is the same as \-target. .TP .B \-center +x+y Place the center of the rendered body at pixel coordinates (x, y). The upper left corner of the screen is at (0,0). Either x or y may be negative. The default value is the center of the screen. .TP .B \-color color Set the color for the label. The default is "red". Any color in the rgb.txt file may be used. Colors may also be specified by RGB hex values; for example \-color 0xff and \-color blue mean the same thing, as do \-color 0xff0000 and \-color red. .TP .B \-config config_file Use the configuration file config_file. The format of config_file is described in README.config. See the description of \-searchdir to see where xplanet looks in order to find the configuration file. .TP .B \-create_scattering_tables scattering_file Create lookup tables for Rayleigh scattering. See the README in the scattering directory for more information. .TP .B \-date YYYYMMDD.HHMMSS Use the date specified instead of the current local time. The date is assumed to be GMT. .TP .B \-date_format string Specify the format for the date/time label. This format string is passed to strftime(3). The default is "%c %Z", which shows the date, time, and time zone in the locale's appropriate date and time representation. .TP .B \-dynamic_origin file Specify an observer location. The location is relative to the body specified with \-origin (by default, this is the Sun). The last line of the file must be of the form .nf .sp YYYYMMDD.HHMMSS range lat lon localtime .sp .fi For example, .nf .sp 19951207.120000 10.328 \-3.018 97.709 9.595 .sp .fi The specified time is ignored and the current time is used. The range is in planetary radii, and lat and lon are in degrees. Localtime (in hours) is optional, but if present, it will be used in place of the longitude. Only the last line of the file is used. This file may be updated between renderings using a script executed with the \-prev_command or \-post_command options. .TP .B \-ephemeris_file filename Specify a JPL digital ephemeris file (DE200, DE405, or DE406) to use for computing planetary positions. Xplanet uses Bill Gray's code (http://www.projectpluto.com/jpl_eph.htm), which reads both big and little endian binary files. The ephemeris files found at ftp://ssd.jpl.nasa.gov/pub/eph/export/unix are big endian files, but you do not need to do any additional byte-swapping to use them. See the description of \-searchdir to see where xplanet looks in order to find the ephemeris file. .TP .B \-font fontname Set the font for the label. Only TrueType fonts are supported. If the \-pango option is used, fontname is taken to be the font family name (e.g. "Arial"). .TP .B \-fontsize size Specify the point size. The default is 12. .TP .B \-fork Detach from the controlling terminal. This is useful on MS Windows to run xplanet from a batch file without having to keep a DOS window open. Be careful when using this option; it's easy to have multiple processes running at the same time without knowing it - check the Task Manager. On unix systems this is pretty much the same as running xplanet in the background. .TP .B \-fov Specify the field of view, in degrees. This option and the \-radius option are mutually exclusive. This option has no effect if the \-projection option is used. .TP .B \-geometry string Specify the image geometry using the standard X window geometry syntax, [{xX}][{+-}{+-}] (e.g. 256x256-10+10 puts a window 256x256 pixels in size 10 pixels away from the right side and 10 pixels below the top of the root window). The root window outside of the image will be black. This option may be used with \-window or \-output. .TP .B \-glare radius Draw a glare around the sun with with a radius of the specified value larger than the sun. The default value is 28. .TP .B \-gmtlabel Same as the \-label option, but show GMT instead of local time. .TP .B \-grs_longitude lon The longitude of Jupiter's Great Red Spot (GRS). A typical value is 94 degrees. If this option is specified, longitudes on Jupiter will be calculated in System II coordinates. By default, longitudes are calculated in System III coordinates. When using this option, use an image map for Jupiter where the center of the GRS is at the pixel 0 column, or the left side of the image. .TP .B \-hibernate seconds After the screen has been idle for the specified number of seconds, xplanet will sleep. This option requires xplanet to have been compiled with the X Screensaver extension. .TP .B \-idlewait seconds Don't run Xplanet unless the screen has been idle for the specified number of seconds. This option requires xplanet to have been compiled with the X Screensaver extension. .TP .B \-interpolate_origin_file This option is only useful in conjunction with \-origin_file. It computes the observer position at the current time by interpolating between values specified in the origin file. This is useful if you have spacecraft positions tabulated in an origin file, but want a real time view. .TP .B \-jdate Julian date Use the specified Julian date instead of the current local time. .TP .B \-label Display a label in the upper right corner. .TP .B \-labelpos Specify the location of the label using the standard X window geometry syntax. The default position is "-15+15", or 15 pixels to the left and below the top right corner of the display. This option implies \-label. .TP .B \-label_body body Use the specified body to calculate the sub-observer, sub-solar, and illumination values in the label. This is useful with the \-separation option. .TP .B \-label_string Specify the text of the first line of the label. By default, it says something like "Looking at Earth". Any instances of %t will be replaced by the target name, and any instances of %o will be replaced by the origin name. .TP .B \-latitude latitude Render the target body as seen from above the specified latitude (in degrees). The default value is 0. .TP .B \-light_time Account for the time it takes for light to travel from the target body to the observer. The default is to ignore the effects of light time. .TP .B \-localtime localtime Place the observer above the longitude where the local time is the specified value. 0 is midnight and 12 is noon. .TP .B \-log_magstep step Increase the brightness of a star by 10^step for each integer decrease in magnitude. The default value is 0.4. This means that a star of magnitude 2 is 10^0.4 (about 2.5) times brighter than a star of magnitude 3. A larger number makes stars brighter. .TP .B \-longitude longitude Place the observer above the specified longitude (in degrees). Longitude is positive going east, negative going west (for the earth and moon), so for example Los Angeles is at \-118 or 242. The default value is 0. .TP .B \-make_cloud_maps If there is an entry in the config file for cloud_map, xplanet will output a day and night image with clouds overlaid and then exit. The images will be created in the directory specified by \-tmpdir, or in the current directory if \-tmpdir is not used. The names of the output images default to day_clouds.jpg and night_clouds.jpg, but may be changed by the \-output option. If "\-output filename.extension" is specified, the output images will be named "day_filename.extension" and "night_filename.extension". The dimensions of the output images are the same as the day image. .TP .B \-marker_file Specify a file containing user defined marker data to display against the background stars. The format of each line is generally declination, right ascension, string, as in the example below: .nf .sp \-16.7161 6.7525 "Sirius" .sp .fi For additional options which may be specified, see the marker_file entry in README.config. This option has no effect if \-projection is specified. This option is not meant for city markers; for that use the marker_file option in the configuration file. .TP .B \-markerbounds filename Write coordinates of the bounding box for each marker to filename. This might be useful if you're using xplanet to make imagemaps for web pages. Each line looks like: .nf .sp 204,312 277,324 Los Angeles .sp .fi where the coordinates are for the upper left and lower right corners of the box. This file gets rewritten every time xplanet renders its image. .TP .B \-north north_type This option rotates the image so that the top points to north_type. Valid values for north_type are: .nf .sp body: body's north pole galactic: galactic north pole orbit: body's orbital north pole (perpendicular to the orbit plane) path: origin's velocity vector (also see \-path_relative_to option) separation: perpendicular to the line of sight and the target-separation target line (see \-separation option) .sp .fi The default value is "body". .TP .B \-num_times num_times Run num_times before exiting. The default is to run indefinitely. .TP .B \-origin body Place the observer at the center of the specified body. Valid values are the same as for \-target. In addition, "above", "below", or "system" may be specified. Using "above" or "below" centers the view on the body's primary and the field of view is large enough to show the body's orbit. Using "system" places the observer at the center of a random body in the same system as the target body. Two bodies are in the same system if one of the following is true: .nf .sp 1) target and origin have same primary 2) target is origin's primary 3) origin is target's primary .sp .fi If the body name is preceded by a dash, the observer is placed on the opposite side of the target from the specified body at a distance equal to the distance between the target and body. For example, \-target earth \-origin sun places the observer at the center of the sun. If \-target earth \-origin \-sun is used, the observer is placed on a line connecting the centers of the earth and sun at a distance of 1 AU farther from the sun than the earth. .TP .B \-origin_file origin_file Specify a list of observer positions in origin_file. The positions are relative to the body specified with \-origin (by default, this is the Sun). Each line should be of the form .nf .sp YYYYMMDD.HHMMSS range lat lon localtime .sp .fi For example, .nf .sp 19951207.120000 10.328 \-3.018 97.709 9.595 .sp .fi Range is in planetary radii, and lat and lon are in degrees. The date is the only required value. If the localtime (in hours) is supplied, it will be used in place of the longitude. For each line in the origin file, the observer is placed at the specified position, relative to the body specified with \-origin. This option is useful for showing spacecraft flybys or orbiting around a planet. Any line with a # in the first column is ignored. .TP .B \-output filename Output to a file instead of rendering to a window. The file format is taken from the extension. Currently .gif, .jpg, .ppm, .png, and .tiff images can be created, if xplanet has been compiled with the appropriate libraries. The image size defaults to 512 by 512 pixels but this may be changed by the \-geometry flag. If used with the \-num_times option, each output file will be numbered sequentially. .TP .B \-output_map filename Output the intermediate rectangular map that is created in the process of rendering the final image. It will have the same dimensions as the default day map. .TP .B \-output_start_index index Start numbering output files at index. The default is 0. .TP .B \-pango Use the Pango (http://www.pango.org) library for rendering internationalized text. Pango uses Unicode for all of its encoding, and will eventually support output in all the worlds major languages. If xplanet has not been compiled with this library this option will be ignored. There appear to be memory leaks in the pango library, so I don't recommend letting xplanet run indefinitely with this option. .TP .B \-path_relative_to body Only used with \-north path or \-target path. The origin's velocity vector is calculated relative to the specified body. By default, this is the Sun. .TP .B \-post_command command .TP .B \-prev_command command Run command either before or after each time xplanet renders an image. On MS Windows, you may need to use unix-style paths. For example: .nf .sp xplanet.exe \-prev_command ./prev.bat .sp .fi .TP .B \-print_ephemeris Print the heliocentric rectangular equatorial coordinates (J2000) for each body xplanet knows about, and then exit. .TP .B \-projection projection_type The projection type may be one of ancient, azimuthal, bonne, equal_area, gnomonic, hemisphere, lambert, mercator, mollweide, orthographic, peters, polyconic, rectangular, or tsc. The default is no projection. Multiple bodies will not be shown if this option is specified, although shadows will still be drawn. .TP .B \-proj_param value Pass additional parameters for some projections. The only projections that use this option at present are the Bonne, Gnomonic, and Mercator projections. The Bonne projection is conformal at the specified latitude. Higher values lead to a thinner heart shape. The default is 50 degrees. The Gnomonic and Mercator projections use the specified latitude as the boundaries of the projection. The defaults are 45 and 80 degrees, respectively. This option may be used more than once for future projections that require additional parameters. Only the first value is used at present. .TP .B \-quality quality This option is only used when creating JPEG images. The quality can range from 0 to 100. The default value is 80. .TP .B \-radius radius Specify the radius of the globe as a percent of the screen height. The default value is 45% of the screen height. When drawing Saturn, the radius value applies to the radius of the outer ring. .TP .B \-random Place the observer above a random latitude and longitude. .TP .B \-range range Render the globe as seen from a distance of range from the planet's center, in units of the planetary radius. The default value is 1000. Note that if you use very close ranges the field of view of the screen can be greater than 180 degrees! If you want an "up close" image use the -radius option. .TP .B \-rotate angle Rotate the globe by angle degrees counterclockwise so that north (as defined by the \-north argument) isn't at the top. The default value is 0. My friends in the Southern Hemisphere can use \-rotate 180 to make the earth look like it should! For non-orthographic projections, the globe is rotated and then projected, if that helps you visualize what to expect. .TP .B \-save_desktop_file On Microsoft Windows and Mac OS X, xplanet creates an intermediate image file which is used to set the desktop. This file will be created in the \-tmpdir directory. By default, this image is removed after the desktop has been set. Specifying this option will leave the file in place. .TP .B \-searchdir directory Any files used by xplanet should be placed in one of the following directories depending on its type: "arcs", "config", "ephemeris", "fonts", "images", "markers", "origin", "satellites", or "stars". By default, xplanet will look for a file in the following order: .nf .sp The current directory searchdir subdirectories of searchdir subdirectories of xplanet (if it exists in the current directory) subdirectories of ${HOME}/.xplanet on X11 subdirectories of ${HOME}/Library/Xplanet on Mac OS X subdirectories of DATADIR/xplanet .sp .fi DATADIR is set at compile time and defaults to /usr/local/share. .TP .B \-separation body:dist Place the observer at a location where the target body and the separation body are dist degrees apart. For example "\-target earth \-separation moon:-3" means place the observer at a location where the moon appears 3 degrees to the left of the earth. .TP .B \-spice_ephemeris index Use SPICE kernels to compute the position of the named body. The index is the naif ID code (e.g. 599 for Jupiter). The \-spice_file option must be used to supply the names of the kernel files. This option may be used more than once for different bodies. .TP .B \-spice_file spice_file Specify a file containing a list of objects to display. A file containing a list of SPICE kernels to read named spice_file.krn must exist along with spice_file. See the README in the "spice" subdirectory for more information. .TP .B \-starfreq frequency Fraction of background pixels that will be colored white. The default value is 0.001. This option is only meaningful with the azimuthal, mollweide, orthographic, and peters projections. .TP .B \-starmap starmap Use starmap to draw the background stars. This file should be a text file where each line has the following format: .nf .sp Declination, Right Ascension, Magnitude .sp .fi where Declination is in decimal degrees and Right Ascension is in decimal hours. For example, the entry for Sirius is .nf .sp \-16.7161 6.7525 \-1.46 .sp .fi See the description of \-searchdir to see where xplanet looks in order to find the star map. .TP .B \-target target Same as \-body. .TP .B \-tt Use terrestrial time instead of universal time. The two differ slightly due to the non-uniform rotation of the earth. The default is to use universal time. .TP .B \-timewarp As in xearth, scale the apparent rate at which time progresses by factor. The default is 1. .TP .B \-tmpdir tmpdir Specify a directory that xplanet will use to place images created using \-make_cloud_maps. On Microsoft Windows, xplanet will write a bitmap file called xplanet.bmp to the specified directory. The default is the result of the GetWindowsDirectory call (C:\WINDOWS on Win95). On Mac OS X, xplanet will create an intermediate PNG file in order to set the background. The default value is /tmp. On Windows and Mac OS X, the intermediate file will be removed unless the \-save_desktop_file option is specified. .TP .B \-transparency Update the background pixmap for transparent Eterms and aterms. This option only works under X11. .TP .B \-transpng filename Same as the \-output option, except set the background to be transparent when writing a PNG file. .TP .B \-utclabel Same as \-gmtlabel. .TP .B \-verbosity level .nf .sp level output < 0 only fatal error messages 0 non-fatal warning messages 1 basic information 2 basic diagnostics 3 more detailed diagnostics 4 very detailed diagnostics .sp .fi The default value is 0. .TP .B \-version Display current version information, along with a list of compile-time options that xplanet supports. .TP .B \-vroot Render the image to the virtual root window. Some window managers use one big window that sits over the real root window as their background window. Xscreensaver uses a virtual root window to cover the screen as well. .TP .B \-wait wait Update every wait seconds. .TP .B \-window Render the image to its own X window. The size defaults to 512 by 512 pixels but this may be set by the \-geometry flag. .TP .B \-window-id ID When using the X11 windowing system, draw to the window with the specified ID. .TP .B \-window_title title Set the window's title to title. This option implies \-window. .TP .B \-XID ID Same as -window-id. .TP .B \-xscreensaver Same as \-vroot. xplanet-1.3.0/pkg.m40000644000175000017500000001214511344621576011146 00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES xplanet-1.3.0/AUTHORS0000644000175000017500000000076411446205672011175 00000000000000Primary author: Hari Nair With contributions from: Richard Rognlie (Ancient and Hemisphere projections) Ian Turner (Icosagnomonic projection) Martin Pool (Peters Projection) The SGP4/SDP4 library is based on code written by Neoklis Kyriazis (http://leonardo.spidernet.net/Copernicus/22420). The code to read JPL Digital Ephemeris files uses routines from Bill Gray (http://www.projectpluto.com/jpl_eph.htm). xplanet-1.3.0/acinclude.m40000644000175000017500000010644611411446371012315 00000000000000AC_DEFUN([AC_FIND_LOCALE_CHARSET], [ have_locale_charset='no' have_localcharset_h='no' AC_CHECK_HEADER(localcharset.h,have_localcharset_h='yes',have_localcharset_h='no') if test "$have_localcharset_h" = 'yes'; then have_libcharset='no' AC_CHECK_LIB(charset,locale_charset,have_libcharset='yes',have_libcharset='no') if test "$have_libcharset" = 'yes'; then LIBCHARSET="-lcharset" AC_SUBST(LIBCHARSET) AC_DEFINE(HAVE_LIBCHARSET,,Define if you have libcharset) have_locale_charset='yes' fi fi AC_CHECK_HEADER(langinfo.h,have_langinfo_h='yes',have_langinfo_h='no') if test "$have_langinfo_h" = 'yes'; then AC_DEFINE(HAVE_LANGINFO_H,,Define if you have langinfo.h) fi ]) AC_DEFUN([AC_FIND_CSPICE], [ AC_ARG_WITH(cspice,AC_HELP_STRING([--with-cspice],[Use JPL's SPICE toolkit (YES)])) have_cspice='no' if test "$with_cspice" != 'no'; then have_cspice_h='no' AC_CHECK_HEADER(SpiceUsr.h,have_cspice_h='yes',have_cspice_h='no') if test "$have_cspice_h" = 'yes'; then have_cspice_lib='no' AC_CHECK_LIB(cspice,furnsh_c,have_cspice_lib='yes',have_cspice_lib='no',-lm) if test "$have_cspice_lib" = 'yes'; then CSPICE_LIBS="-lcspice" AC_DEFINE(HAVE_CSPICE,,Define if you have CSPICE library) AC_SUBST(CSPICE_LIBS) have_cspice='yes' fi fi if test "$have_cspice" = 'no'; then AC_MSG_WARN(*** Xplanet will be built without SPICE support ***) fi fi ]) AC_DEFUN([AC_FIND_FREETYPE], [ AC_ARG_WITH(freetype,AC_HELP_STRING([--with-freetype],[Enable Freetype support for TrueType fonts (YES)])) have_freetype='no' if test "$with_freetype" != 'no'; then AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no) if test "$FREETYPE_CONFIG" = no; then AC_MSG_WARN(*** Xplanet will be built without freetype support ***) else FREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags` -I`$FREETYPE_CONFIG --prefix`/include" FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` AC_SUBST(FREETYPE_CFLAGS) AC_SUBST(FREETYPE_LIBS) AC_DEFINE(HAVE_LIBFREETYPE,,Define if you have freetype) have_freetype='yes' fi fi ]) AC_DEFUN([AC_FIND_PANGO], [ AC_ARG_WITH(pango,AC_HELP_STRING([--with-pango],[Enable Pango (YES)])) have_pangoft2='no' if test "$with_pango" != 'no'; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test "$PKG_CONFIG" = no; then AC_MSG_WARN(*** Xplanet will be built without pango support ***) else PKG_CHECK_MODULES([PANGOFT2], pangoft2 >= 1.2.0, have_pangoft2='yes', have_pangoft2='no') FREETYPE_CFLAGS="$FREETYPE_CFLAGS $PANGOFT2_CFLAGS" FREETYPE_LIBS="$FREETYPE_LIBS $PANGOFT2_LIBS" AC_SUBST(FREETYPE_CFLAGS) AC_SUBST(FREETYPE_LIBS) if test "$have_pangoft2" = 'yes'; then AC_DEFINE(HAVE_LIBPANGOFT2,,Define if you have pango with freetype 2) fi fi fi ]) dnl Autoconf stuff to check for graphics libraries is adapted from dnl imagemagick's configure.in AC_DEFUN([AC_FIND_GRAPHICS_LIBS], [ GRAPHICS_LIBS="" # # Check for GIF # AC_ARG_WITH(gif,AC_HELP_STRING([--with-gif],[Enable GIF support (YES)])) have_gif='no' if test "$with_gif" != 'no'; then have_gif_header='no' AC_CHECK_HEADER(gif_lib.h,have_gif_header='yes',have_gif_header='no') if test "$have_gif_header" != 'no'; then have_libgif='no' AC_CHECK_LIB(gif, DGifOpenFileName,have_libgif='yes',have_libgif='no',$X_LIBS) if test "$have_libgif" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lgif $X_LIBS" AC_DEFINE(HAVE_LIBGIF,,Define if you have GIF library) have_gif='yes' else AC_CHECK_LIB(ungif, DGifOpenFileName,have_libgif='yes',have_libgif='no',$X_LIBS) if test "$have_libgif" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lungif" AC_DEFINE(HAVE_LIBGIF,,Define if you have GIF library) have_gif='yes' fi fi fi if test "$have_gif" != 'yes'; then AC_MSG_WARN(*** Native GIF support will not be included ***) fi fi # # Check for JPEG # AC_ARG_WITH(jpeg,AC_HELP_STRING([--with-jpeg],[Enable JPEG support (YES)])) have_jpeg='no' if test "$with_jpeg" != 'no'; then have_jpeg_header='no' AC_CHECK_HEADER(jpeglib.h,have_jpeg_header='yes',have_jpeg_header='no') if test "$have_jpeg_header" != 'no'; then have_libjpeg='no' AC_CHECK_LIB(jpeg,jpeg_read_header,have_libjpeg='yes',have_libjpeg='no',) if test "$have_libjpeg" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -ljpeg" AC_DEFINE(HAVE_LIBJPEG,,Define if you have JPEG library) have_jpeg='yes' fi fi if test "$have_jpeg" != 'yes'; then AC_MSG_WARN(*** Native JPEG support will not be included ***) fi fi # # Check for PNG # AC_ARG_WITH(png,AC_HELP_STRING([--with-png],[Enable PNG support (YES)])) have_png='no' if test "$with_png" != 'no'; then have_png_header='no' AC_CHECK_HEADER(png.h,have_png_header='yes',have_png_header='no') if test "$have_png_header" != 'no'; then have_libpng='no' AC_CHECK_LIB(png,png_create_read_struct,have_libpng='yes',have_libpng='no',-lm -lz) if test "$have_libpng" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lpng -lm -lz" AC_DEFINE(HAVE_LIBPNG,,Define if you have PNG library) have_png='yes' fi fi if test "$have_png" != 'yes'; then AC_MSG_WARN(*** Native PNG support will not be included ***) fi fi # # Check for PNM # AC_ARG_WITH(pnm,AC_HELP_STRING([--with-pnm],[Enable PNM support (YES)])) have_pnm='no' if test "$with_pnm" != 'no'; then have_pnm_header='no' AC_CHECK_HEADER(pnm.h,have_pnm_header='yes',have_pnm_header='no') if test "$have_pnm_header" != 'no'; then have_libpnm='no' AC_CHECK_LIB(netpbm,pnm_init,have_libpnm='yes',have_libpnm='no',) if test "$have_libpnm" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lnetpbm" AC_DEFINE(HAVE_LIBPNM,,Define if you have PNM library) have_pnm='yes' else AC_CHECK_LIB(pnm,pnm_init,have_libpnm='yes',have_libpnm='no',) if test "$have_libpnm" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lpnm -lpbm" AC_DEFINE(HAVE_LIBPNM,,Define if you have PNM library) have_pnm='yes' fi fi fi if test "$have_pnm" != 'yes'; then AC_MSG_WARN(*** Native PNM support will not be included ***) fi fi # # Check for TIFF # AC_ARG_WITH(tiff,AC_HELP_STRING([--with-tiff],[Enable TIFF support (YES)])) have_tiff='no' if test "$with_tiff" != 'no'; then have_tiff_header='no' AC_CHECK_HEADER(tiff.h,have_tiff_header='yes',have_tiff_header='no') AC_CHECK_HEADER(tiffio.h,have_tiff_header='yes',have_tiff_header='no') if test "$have_tiff_header" != 'no'; then have_libtiff='no' AC_CHECK_LIB(tiff,_TIFFmalloc,have_libtiff='yes',have_libtiff='no',-lm) if test "$have_libtiff" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -ltiff -lm" AC_DEFINE(HAVE_LIBTIFF,,Define if you have TIFF library) have_tiff='yes' fi fi if test "$have_tiff" != 'yes'; then AC_MSG_WARN(*** Native TIFF support will not be included ***) fi fi AC_SUBST(GRAPHICS_LIBS) ]) # # Check for X11 # AC_DEFUN([AC_FIND_X11], [ have_libx11='no' if test "$with_x" != 'no'; then dnl Locate X include files and libraries AC_PATH_XTRA NEW_LIBS="$X_LIBS -lX11" AC_CHECK_LIB(X11, XOpenDisplay, have_libx11='yes',have_libx11='no',$X_LIBS) if test "$have_libx11" != 'no'; then AC_DEFINE(HAVE_LIBX11,,Define if you have X11 libraries) X_LIBS="$NEW_LIBS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LIBS="$X_LIBS $LIBS" else AC_MSG_WARN(*** Xplanet will be built without X11 support ***) fi fi ]) AC_DEFUN([AC_FIND_XSS], [ dnl Check for XScreenSaver AC_ARG_WITH(xscreensaver,AC_HELP_STRING([--with-xscreensaver],[compile with X screensaver extension (YES)])) have_xss='no' if test "$have_libx11" = 'yes' ; then if test "$with_xscreensaver" != 'no' ; then AC_CHECK_HEADERS([X11/Xlib.h]) AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [have_xss=yes], [], [#if HAVE_X11_XLIB_H #include #endif ]) if test "$have_xss" = "yes"; then AC_CHECK_LIB(Xext, XScreenSaverRegister,[XSS_LIBS="-lXext"],[have_xss=no],[-lX11 -lm]) if test "$have_xss" = "no"; then AC_CHECK_LIB(Xss, XScreenSaverRegister,[have_xss=yes; XSS_LIBS="-lXss -lXext"],[have_xss=no],[$X_LIBS -lX11 -lXext -lm]) fi if test "$have_xss" = "yes"; then AC_DEFINE(HAVE_XSS,,Define if you have X screensaver extension) AC_SUBST(XSS_LIBS) fi fi fi fi ]) AC_DEFUN([AC_USE_MACAQUA], [ AC_ARG_WITH(aqua,AC_HELP_STRING([--with-aqua],[For Mac OS X Aqua (NO)])) if test "$with_aqua" = yes; then AC_DEFINE(HAVE_AQUA,,Define for Mac OS X) AQUA_LIBS="-framework IOKit -framework Carbon -framework Cocoa -bind_at_load" AC_SUBST(AQUA_LIBS) OBJC="gcc" OBJCFLAGS="-Wno-import" AC_SUBST(OBJC) AC_SUBST(OBJCFLAGS) fi ]) dnl Everything after this is from libiconv's configure setup. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) m4_include([pkg.m4]) xplanet-1.3.0/config.sub0000755000175000017500000007244210411352756012107 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-02-03' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic4x | c4x*) basic_machine=tic4x-unknown os=-coff ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -microbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xplanet-1.3.0/NEWS0000644000175000017500000000703410411420230010575 00000000000000Original version written by Frank Solensky , updates by Hari Nair This file is aimed at those who are upgrading from versions of Xplanet earlier than 1.0. Xplanet 1.0 is a completely rewritten program from the older (0.95) version. I should have called it Xplanet2 to avoid confusion, but I didn't think of it, and I apologize for any trouble. The default behaviour of Xplanet is run continuously instead of just once. As a result, the "xplanetbg" program is no longer needed. Xplanet in its default mode will now draw multiple bodies. For example, when drawing Jupiter, any of the Galilean satellites in the field of view will also be drawn. For this reason, options that are specific to a body, such as the image map or marker files, are now specified in a configuration file. Options that affect the way the image is drawn, such as geometry or label, are still specified on the command line. There is a [default] section at the top of the configuration file. Be careful to specify options that apply to only one planet under that planet's section, and not under [default]. For example, a common mistake is to put cloud_map=clouds.jpg under [default] and not under [earth]. This will overlay clouds on every planet which is probably not what you want, and is a huge waste of time! Input image dimensions should be powers of 2, where the height is half the width (e.g. 2048x1024). Other image dimensions will work, but performance will be slower. Input images are specified in the configuration file. Marker files must now be in UTF-8 encoding. Font files must now be TrueType fonts. The subdirectories under share/xplanet (e.g. arcs, markers, satellites) each contain README and example files for more information. Command line argument changes: Version 0.95 Version 1.0 ------------ ----------- -center , -center +x+y -date "%d %b %Y %H:%M:%S" [specifying local time] -date YYYYMMDD.HHMMSS [specifying GMT] -dayside -origin sun -earthside -origin earth -labelformat -date_format -moonside -origin moon -nightside -origin -sun The following command line options should instead be set as parameters in the file specified with the '-config' option or the file "config/default" in the '-searchdir' directory. greatarcfile arc_file= cloud_gamma cloud_gamma= cloud_image cloud_map= cloud_ssec cloud_ssec=true (Use in conjunction with cloud_map) cloud_threshold cloud_threshold= fuzz twilight= grid grid=true grid1 grid1= grid2 grid2= mapbounds mapbounds= markers marker_file= markerfile marker_file= night_image night_map= satfile satellite_file= shade shade= specular_file specular_map= Finally, these options are not currently supported: -animate -blend -cloud_shade -demfile -demscale -fontdir -fullscreen -labelname -labelrot -mapdir -nice -notransparency -orbit -print_coords -root -sattrackid -spacing -start_cloud -start_index -stop_cloud -sunrel -swap -terminator -truetype xplanet-1.3.0/configure0000755000175000017500000077240411731356512012040 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for xplanet 1.3.0. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xplanet' PACKAGE_TARNAME='xplanet' PACKAGE_VERSION='1.3.0' PACKAGE_STRING='xplanet 1.3.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="src/xplanet.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS mapext USE_AR_FALSE USE_AR_TRUE HAVE_CYGWIN_FALSE HAVE_CYGWIN_TRUE HAVE_LIBTIFF_FALSE HAVE_LIBTIFF_TRUE HAVE_LIBPNM_FALSE HAVE_LIBPNM_TRUE HAVE_LIBPNG_FALSE HAVE_LIBPNG_TRUE HAVE_LIBJPEG_FALSE HAVE_LIBJPEG_TRUE HAVE_LIBGIF_FALSE HAVE_LIBGIF_TRUE HAVE_AQUA_FALSE HAVE_AQUA_TRUE HAVE_LIBX11_FALSE HAVE_LIBX11_TRUE HAVE_LIBPANGOFT2_FALSE HAVE_LIBPANGOFT2_TRUE HAVE_LIBFREETYPE_FALSE HAVE_LIBFREETYPE_TRUE HAVE_CSPICE_FALSE HAVE_CSPICE_TRUE LIBCHARSET LTLIBICONV LIBICONV CSPICE_LIBS GRAPHICS_LIBS OBJCFLAGS OBJC AQUA_LIBS separator xplanet_LDFLAGS xplanet_ARFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS PKG_CONFIG FREETYPE_LIBS FREETYPE_CFLAGS FREETYPE_CONFIG XSS_LIBS EGREP GREP X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS CPP XMKMF host_os host_vendor host_cpu host build_os build_vendor build_cpu build PERL am__fastdepOBJC_FALSE am__fastdepOBJC_TRUE RANLIB am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking with_cygwin with_x with_xscreensaver with_freetype with_pango with_aqua with_gif with_jpeg with_png with_pnm with_tiff with_cspice with_libiconv_prefix with_map_extension ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC XMKMF CPP PKG_CONFIG PANGOFT2_CFLAGS PANGOFT2_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures xplanet 1.3.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/xplanet] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of xplanet 1.3.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-cygwin check for Cygwin environment (YES) --with-x use the X Window System --with-xscreensaver compile with X screensaver extension (YES) --with-freetype Enable Freetype support for TrueType fonts (YES) --with-pango Enable Pango (YES) --with-aqua For Mac OS X Aqua (NO) --with-gif Enable GIF support (YES) --with-jpeg Enable JPEG support (YES) --with-png Enable PNG support (YES) --with-pnm Enable PNM support (YES) --with-tiff Enable TIFF support (YES) --with-cspice Use JPL's SPICE toolkit (YES) --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-map-extension=EXTENSION use EXTENSION as default map extension jpg Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags XMKMF Path to xmkmf, Makefile generator for X Window System CPP C preprocessor PKG_CONFIG path to pkg-config utility PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF xplanet configure 1.3.0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by xplanet $as_me 1.3.0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='xplanet' VERSION='1.3.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if false; then am__fastdepOBJC_TRUE= am__fastdepOBJC_FALSE='#' else am__fastdepOBJC_TRUE='#' am__fastdepOBJC_FALSE= fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-cygwin was given. if test "${with_cygwin+set}" = set; then : withval=$with_cygwin; fi separator="/" use_ar='yes' have_aqua='no' have_cygwin='no' # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case "$host" in sparc-sun-*) if test "x$GXX" != "xyes"; then # This is for Sun Workshop compiler use_ar='no' xplanet_ARFLAGS="-xar -o" xplanet_LDFLAGS="-xildoff" fi ;; mips-sgi-irix*) # this is for the MIPSpro compilers if test "x$GXX" != "xyes"; then use_ar='no' xplanet_ARFLAGS="-ar -WR,-s,-u,-v -o" fi ;; *-cygwin*) if test "$with_cygwin" != 'no'; then $as_echo "#define HAVE_CYGWIN /**/" >>confdefs.h have_cygwin='yes' xplanet_LDFLAGS="-static" separator="\\\\\\\\" fi ;; *-apple-darwin*) have_aqua='yes' ;; i686-pc-linux-gnu) ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi have_libx11='no' if test "$with_x" != 'no'; then if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = x""yes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = x""yes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if test "${ac_cv_lib_socket_connect+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = x""yes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = x""yes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if test "${ac_cv_lib_posix_remove+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = x""yes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if test "${ac_cv_lib_ipc_shmat+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi NEW_LIBS="$X_LIBS -lX11" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5 $as_echo_n "checking for XOpenDisplay in -lX11... " >&6; } if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $X_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_XOpenDisplay=yes else ac_cv_lib_X11_XOpenDisplay=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5 $as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; } if test "x$ac_cv_lib_X11_XOpenDisplay" = x""yes; then : have_libx11='yes' else have_libx11='no' fi if test "$have_libx11" != 'no'; then $as_echo "#define HAVE_LIBX11 /**/" >>confdefs.h X_LIBS="$NEW_LIBS" CPPFLAGS="$X_CFLAGS $CPPFLAGS" LIBS="$X_LIBS $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Xplanet will be built without X11 support ***" >&5 $as_echo "$as_me: WARNING: *** Xplanet will be built without X11 support ***" >&2;} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check whether --with-xscreensaver was given. if test "${with_xscreensaver+set}" = set; then : withval=$with_xscreensaver; fi have_xss='no' if test "$have_libx11" = 'yes' ; then if test "$with_xscreensaver" != 'no' ; then for ac_header in X11/Xlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xlib_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_XLIB_H 1 _ACEOF fi done for ac_header in X11/extensions/scrnsaver.h do : ac_fn_c_check_header_compile "$LINENO" "X11/extensions/scrnsaver.h" "ac_cv_header_X11_extensions_scrnsaver_h" "#if HAVE_X11_XLIB_H #include #endif " if test "x$ac_cv_header_X11_extensions_scrnsaver_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_SCRNSAVER_H 1 _ACEOF have_xss=yes fi done if test "$have_xss" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXext" >&5 $as_echo_n "checking for XScreenSaverRegister in -lXext... " >&6; } if test "${ac_cv_lib_Xext_XScreenSaverRegister+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lX11 -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XScreenSaverRegister (); int main () { return XScreenSaverRegister (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XScreenSaverRegister=yes else ac_cv_lib_Xext_XScreenSaverRegister=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XScreenSaverRegister" >&5 $as_echo "$ac_cv_lib_Xext_XScreenSaverRegister" >&6; } if test "x$ac_cv_lib_Xext_XScreenSaverRegister" = x""yes; then : XSS_LIBS="-lXext" else have_xss=no fi if test "$have_xss" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXss" >&5 $as_echo_n "checking for XScreenSaverRegister in -lXss... " >&6; } if test "${ac_cv_lib_Xss_XScreenSaverRegister+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXss $X_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XScreenSaverRegister (); int main () { return XScreenSaverRegister (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xss_XScreenSaverRegister=yes else ac_cv_lib_Xss_XScreenSaverRegister=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xss_XScreenSaverRegister" >&5 $as_echo "$ac_cv_lib_Xss_XScreenSaverRegister" >&6; } if test "x$ac_cv_lib_Xss_XScreenSaverRegister" = x""yes; then : have_xss=yes; XSS_LIBS="-lXss -lXext" else have_xss=no fi fi if test "$have_xss" = "yes"; then $as_echo "#define HAVE_XSS /**/" >>confdefs.h fi fi fi fi # Check whether --with-freetype was given. if test "${with_freetype+set}" = set; then : withval=$with_freetype; fi have_freetype='no' if test "$with_freetype" != 'no'; then # Extract the first word of "freetype-config", so it can be a program name with args. set dummy freetype-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_FREETYPE_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $FREETYPE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_FREETYPE_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="no" ;; esac fi FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG if test -n "$FREETYPE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5 $as_echo "$FREETYPE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$FREETYPE_CONFIG" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Xplanet will be built without freetype support ***" >&5 $as_echo "$as_me: WARNING: *** Xplanet will be built without freetype support ***" >&2;} else FREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags` -I`$FREETYPE_CONFIG --prefix`/include" FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` $as_echo "#define HAVE_LIBFREETYPE /**/" >>confdefs.h have_freetype='yes' fi fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check whether --with-pango was given. if test "${with_pango+set}" = set; then : withval=$with_pango; fi have_pangoft2='no' if test "$with_pango" != 'no'; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$PKG_CONFIG" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Xplanet will be built without pango support ***" >&5 $as_echo "$as_me: WARNING: *** Xplanet will be built without pango support ***" >&2;} else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGOFT2" >&5 $as_echo_n "checking for PANGOFT2... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2 >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2 >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2 >= 1.2.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2 >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2 >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2 >= 1.2.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pangoft2 >= 1.2.0"` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pangoft2 >= 1.2.0"` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_pangoft2='no' elif test $pkg_failed = untried; then have_pangoft2='no' else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_pangoft2='yes' fi FREETYPE_CFLAGS="$FREETYPE_CFLAGS $PANGOFT2_CFLAGS" FREETYPE_LIBS="$FREETYPE_LIBS $PANGOFT2_LIBS" if test "$have_pangoft2" = 'yes'; then $as_echo "#define HAVE_LIBPANGOFT2 /**/" >>confdefs.h fi fi fi # Check whether --with-aqua was given. if test "${with_aqua+set}" = set; then : withval=$with_aqua; fi if test "$with_aqua" = yes; then $as_echo "#define HAVE_AQUA /**/" >>confdefs.h AQUA_LIBS="-framework IOKit -framework Carbon -framework Cocoa -bind_at_load" OBJC="gcc" OBJCFLAGS="-Wno-import" fi GRAPHICS_LIBS="" # # Check for GIF # # Check whether --with-gif was given. if test "${with_gif+set}" = set; then : withval=$with_gif; fi have_gif='no' if test "$with_gif" != 'no'; then have_gif_header='no' ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default" if test "x$ac_cv_header_gif_lib_h" = x""yes; then : have_gif_header='yes' else have_gif_header='no' fi if test "$have_gif_header" != 'no'; then have_libgif='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpenFileName in -lgif" >&5 $as_echo_n "checking for DGifOpenFileName in -lgif... " >&6; } if test "${ac_cv_lib_gif_DGifOpenFileName+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgif $X_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DGifOpenFileName (); int main () { return DGifOpenFileName (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gif_DGifOpenFileName=yes else ac_cv_lib_gif_DGifOpenFileName=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_DGifOpenFileName" >&5 $as_echo "$ac_cv_lib_gif_DGifOpenFileName" >&6; } if test "x$ac_cv_lib_gif_DGifOpenFileName" = x""yes; then : have_libgif='yes' else have_libgif='no' fi if test "$have_libgif" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lgif $X_LIBS" $as_echo "#define HAVE_LIBGIF /**/" >>confdefs.h have_gif='yes' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpenFileName in -lungif" >&5 $as_echo_n "checking for DGifOpenFileName in -lungif... " >&6; } if test "${ac_cv_lib_ungif_DGifOpenFileName+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lungif $X_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DGifOpenFileName (); int main () { return DGifOpenFileName (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ungif_DGifOpenFileName=yes else ac_cv_lib_ungif_DGifOpenFileName=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ungif_DGifOpenFileName" >&5 $as_echo "$ac_cv_lib_ungif_DGifOpenFileName" >&6; } if test "x$ac_cv_lib_ungif_DGifOpenFileName" = x""yes; then : have_libgif='yes' else have_libgif='no' fi if test "$have_libgif" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lungif" $as_echo "#define HAVE_LIBGIF /**/" >>confdefs.h have_gif='yes' fi fi fi if test "$have_gif" != 'yes'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Native GIF support will not be included ***" >&5 $as_echo "$as_me: WARNING: *** Native GIF support will not be included ***" >&2;} fi fi # # Check for JPEG # # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; fi have_jpeg='no' if test "$with_jpeg" != 'no'; then have_jpeg_header='no' ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = x""yes; then : have_jpeg_header='yes' else have_jpeg_header='no' fi if test "$have_jpeg_header" != 'no'; then have_libjpeg='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_header in -ljpeg" >&5 $as_echo_n "checking for jpeg_read_header in -ljpeg... " >&6; } if test "${ac_cv_lib_jpeg_jpeg_read_header+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_read_header (); int main () { return jpeg_read_header (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_read_header=yes else ac_cv_lib_jpeg_jpeg_read_header=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_read_header" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_read_header" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_read_header" = x""yes; then : have_libjpeg='yes' else have_libjpeg='no' fi if test "$have_libjpeg" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -ljpeg" $as_echo "#define HAVE_LIBJPEG /**/" >>confdefs.h have_jpeg='yes' fi fi if test "$have_jpeg" != 'yes'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Native JPEG support will not be included ***" >&5 $as_echo "$as_me: WARNING: *** Native JPEG support will not be included ***" >&2;} fi fi # # Check for PNG # # Check whether --with-png was given. if test "${with_png+set}" = set; then : withval=$with_png; fi have_png='no' if test "$with_png" != 'no'; then have_png_header='no' ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" if test "x$ac_cv_header_png_h" = x""yes; then : have_png_header='yes' else have_png_header='no' fi if test "$have_png_header" != 'no'; then have_libpng='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_read_struct in -lpng" >&5 $as_echo_n "checking for png_create_read_struct in -lpng... " >&6; } if test "${ac_cv_lib_png_png_create_read_struct+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng -lm -lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char png_create_read_struct (); int main () { return png_create_read_struct (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_png_png_create_read_struct=yes else ac_cv_lib_png_png_create_read_struct=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_create_read_struct" >&5 $as_echo "$ac_cv_lib_png_png_create_read_struct" >&6; } if test "x$ac_cv_lib_png_png_create_read_struct" = x""yes; then : have_libpng='yes' else have_libpng='no' fi if test "$have_libpng" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lpng -lm -lz" $as_echo "#define HAVE_LIBPNG /**/" >>confdefs.h have_png='yes' fi fi if test "$have_png" != 'yes'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Native PNG support will not be included ***" >&5 $as_echo "$as_me: WARNING: *** Native PNG support will not be included ***" >&2;} fi fi # # Check for PNM # # Check whether --with-pnm was given. if test "${with_pnm+set}" = set; then : withval=$with_pnm; fi have_pnm='no' if test "$with_pnm" != 'no'; then have_pnm_header='no' ac_fn_c_check_header_mongrel "$LINENO" "pnm.h" "ac_cv_header_pnm_h" "$ac_includes_default" if test "x$ac_cv_header_pnm_h" = x""yes; then : have_pnm_header='yes' else have_pnm_header='no' fi if test "$have_pnm_header" != 'no'; then have_libpnm='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pnm_init in -lnetpbm" >&5 $as_echo_n "checking for pnm_init in -lnetpbm... " >&6; } if test "${ac_cv_lib_netpbm_pnm_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetpbm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pnm_init (); int main () { return pnm_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_netpbm_pnm_init=yes else ac_cv_lib_netpbm_pnm_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_netpbm_pnm_init" >&5 $as_echo "$ac_cv_lib_netpbm_pnm_init" >&6; } if test "x$ac_cv_lib_netpbm_pnm_init" = x""yes; then : have_libpnm='yes' else have_libpnm='no' fi if test "$have_libpnm" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lnetpbm" $as_echo "#define HAVE_LIBPNM /**/" >>confdefs.h have_pnm='yes' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pnm_init in -lpnm" >&5 $as_echo_n "checking for pnm_init in -lpnm... " >&6; } if test "${ac_cv_lib_pnm_pnm_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpnm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pnm_init (); int main () { return pnm_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pnm_pnm_init=yes else ac_cv_lib_pnm_pnm_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pnm_pnm_init" >&5 $as_echo "$ac_cv_lib_pnm_pnm_init" >&6; } if test "x$ac_cv_lib_pnm_pnm_init" = x""yes; then : have_libpnm='yes' else have_libpnm='no' fi if test "$have_libpnm" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -lpnm -lpbm" $as_echo "#define HAVE_LIBPNM /**/" >>confdefs.h have_pnm='yes' fi fi fi if test "$have_pnm" != 'yes'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Native PNM support will not be included ***" >&5 $as_echo "$as_me: WARNING: *** Native PNM support will not be included ***" >&2;} fi fi # # Check for TIFF # # Check whether --with-tiff was given. if test "${with_tiff+set}" = set; then : withval=$with_tiff; fi have_tiff='no' if test "$with_tiff" != 'no'; then have_tiff_header='no' ac_fn_c_check_header_mongrel "$LINENO" "tiff.h" "ac_cv_header_tiff_h" "$ac_includes_default" if test "x$ac_cv_header_tiff_h" = x""yes; then : have_tiff_header='yes' else have_tiff_header='no' fi ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" if test "x$ac_cv_header_tiffio_h" = x""yes; then : have_tiff_header='yes' else have_tiff_header='no' fi if test "$have_tiff_header" != 'no'; then have_libtiff='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _TIFFmalloc in -ltiff" >&5 $as_echo_n "checking for _TIFFmalloc in -ltiff... " >&6; } if test "${ac_cv_lib_tiff__TIFFmalloc+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _TIFFmalloc (); int main () { return _TIFFmalloc (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tiff__TIFFmalloc=yes else ac_cv_lib_tiff__TIFFmalloc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff__TIFFmalloc" >&5 $as_echo "$ac_cv_lib_tiff__TIFFmalloc" >&6; } if test "x$ac_cv_lib_tiff__TIFFmalloc" = x""yes; then : have_libtiff='yes' else have_libtiff='no' fi if test "$have_libtiff" != 'no'; then GRAPHICS_LIBS="$GRAPHICS_LIBS -ltiff -lm" $as_echo "#define HAVE_LIBTIFF /**/" >>confdefs.h have_tiff='yes' fi fi if test "$have_tiff" != 'yes'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Native TIFF support will not be included ***" >&5 $as_echo "$as_me: WARNING: *** Native TIFF support will not be included ***" >&2;} fi fi # Check whether --with-cspice was given. if test "${with_cspice+set}" = set; then : withval=$with_cspice; fi have_cspice='no' if test "$with_cspice" != 'no'; then have_cspice_h='no' ac_fn_c_check_header_mongrel "$LINENO" "SpiceUsr.h" "ac_cv_header_SpiceUsr_h" "$ac_includes_default" if test "x$ac_cv_header_SpiceUsr_h" = x""yes; then : have_cspice_h='yes' else have_cspice_h='no' fi if test "$have_cspice_h" = 'yes'; then have_cspice_lib='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for furnsh_c in -lcspice" >&5 $as_echo_n "checking for furnsh_c in -lcspice... " >&6; } if test "${ac_cv_lib_cspice_furnsh_c+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcspice -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char furnsh_c (); int main () { return furnsh_c (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cspice_furnsh_c=yes else ac_cv_lib_cspice_furnsh_c=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cspice_furnsh_c" >&5 $as_echo "$ac_cv_lib_cspice_furnsh_c" >&6; } if test "x$ac_cv_lib_cspice_furnsh_c" = x""yes; then : have_cspice_lib='yes' else have_cspice_lib='no' fi if test "$have_cspice_lib" = 'yes'; then CSPICE_LIBS="-lcspice" $as_echo "#define HAVE_CSPICE /**/" >>confdefs.h have_cspice='yes' fi fi if test "$have_cspice" = 'no'; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Xplanet will be built without SPICE support ***" >&5 $as_echo "$as_me: WARNING: *** Xplanet will be built without SPICE support ***" >&2;} fi fi if test "$have_aqua" = no; then if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if test "${am_cv_proto_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi if test "$am_cv_func_iconv" = yes; then proto_iconv="$am_cv_proto_iconv_arg1" else proto_iconv="" fi have_locale_charset='no' have_localcharset_h='no' ac_fn_c_check_header_mongrel "$LINENO" "localcharset.h" "ac_cv_header_localcharset_h" "$ac_includes_default" if test "x$ac_cv_header_localcharset_h" = x""yes; then : have_localcharset_h='yes' else have_localcharset_h='no' fi if test "$have_localcharset_h" = 'yes'; then have_libcharset='no' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for locale_charset in -lcharset" >&5 $as_echo_n "checking for locale_charset in -lcharset... " >&6; } if test "${ac_cv_lib_charset_locale_charset+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcharset $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char locale_charset (); int main () { return locale_charset (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_charset_locale_charset=yes else ac_cv_lib_charset_locale_charset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_charset_locale_charset" >&5 $as_echo "$ac_cv_lib_charset_locale_charset" >&6; } if test "x$ac_cv_lib_charset_locale_charset" = x""yes; then : have_libcharset='yes' else have_libcharset='no' fi if test "$have_libcharset" = 'yes'; then LIBCHARSET="-lcharset" $as_echo "#define HAVE_LIBCHARSET /**/" >>confdefs.h have_locale_charset='yes' fi fi ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" if test "x$ac_cv_header_langinfo_h" = x""yes; then : have_langinfo_h='yes' else have_langinfo_h='no' fi if test "$have_langinfo_h" = 'yes'; then $as_echo "#define HAVE_LANGINFO_H /**/" >>confdefs.h fi fi if test "$have_cspice" = 'yes'; then HAVE_CSPICE_TRUE= HAVE_CSPICE_FALSE='#' else HAVE_CSPICE_TRUE='#' HAVE_CSPICE_FALSE= fi if test "$have_freetype" = 'yes'; then HAVE_LIBFREETYPE_TRUE= HAVE_LIBFREETYPE_FALSE='#' else HAVE_LIBFREETYPE_TRUE='#' HAVE_LIBFREETYPE_FALSE= fi if test "$have_pangoft2" = 'yes'; then HAVE_LIBPANGOFT2_TRUE= HAVE_LIBPANGOFT2_FALSE='#' else HAVE_LIBPANGOFT2_TRUE='#' HAVE_LIBPANGOFT2_FALSE= fi if test "$have_libx11" = 'yes'; then HAVE_LIBX11_TRUE= HAVE_LIBX11_FALSE='#' else HAVE_LIBX11_TRUE='#' HAVE_LIBX11_FALSE= fi if test "$with_aqua" = 'yes'; then HAVE_AQUA_TRUE= HAVE_AQUA_FALSE='#' else HAVE_AQUA_TRUE='#' HAVE_AQUA_FALSE= fi if test "$have_gif" = 'yes'; then HAVE_LIBGIF_TRUE= HAVE_LIBGIF_FALSE='#' else HAVE_LIBGIF_TRUE='#' HAVE_LIBGIF_FALSE= fi if test "$have_jpeg" = 'yes'; then HAVE_LIBJPEG_TRUE= HAVE_LIBJPEG_FALSE='#' else HAVE_LIBJPEG_TRUE='#' HAVE_LIBJPEG_FALSE= fi if test "$have_png" = 'yes'; then HAVE_LIBPNG_TRUE= HAVE_LIBPNG_FALSE='#' else HAVE_LIBPNG_TRUE='#' HAVE_LIBPNG_FALSE= fi if test "$have_pnm" = 'yes'; then HAVE_LIBPNM_TRUE= HAVE_LIBPNM_FALSE='#' else HAVE_LIBPNM_TRUE='#' HAVE_LIBPNM_FALSE= fi if test "$have_tiff" = 'yes'; then HAVE_LIBTIFF_TRUE= HAVE_LIBTIFF_FALSE='#' else HAVE_LIBTIFF_TRUE='#' HAVE_LIBTIFF_FALSE= fi if test "$have_cygwin" = "yes"; then HAVE_CYGWIN_TRUE= HAVE_CYGWIN_FALSE='#' else HAVE_CYGWIN_TRUE='#' HAVE_CYGWIN_FALSE= fi if test $use_ar = 'yes'; then USE_AR_TRUE= USE_AR_FALSE='#' else USE_AR_TRUE='#' USE_AR_FALSE= fi cat >>confdefs.h <<_ACEOF #define ICONV_CONST $proto_iconv _ACEOF # Check whether --with-map-extension was given. if test "${with_map_extension+set}" = set; then : withval=$with_map_extension; mapext="$withval" else mapext="jpg" fi for ac_func in unsetenv do : ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNSETENV 1 _ACEOF fi done for ac_func in timegm do : ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" if test "x$ac_cv_func_timegm" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIMEGM 1 _ACEOF fi done ac_config_files="$ac_config_files xpDefines.h Makefile src/Makefile src/libannotate/Makefile src/libdisplay/Makefile src/libephemeris/Makefile src/libephemeris/libmoons/Makefile src/libimage/Makefile src/libmultiple/Makefile src/libplanet/Makefile src/libprojection/Makefile src/libsgp4sdp4/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepOBJC_TRUE}" && test -z "${am__fastdepOBJC_FALSE}"; then as_fn_error "conditional \"am__fastdepOBJC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_CSPICE_TRUE}" && test -z "${HAVE_CSPICE_FALSE}"; then as_fn_error "conditional \"HAVE_CSPICE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBFREETYPE_TRUE}" && test -z "${HAVE_LIBFREETYPE_FALSE}"; then as_fn_error "conditional \"HAVE_LIBFREETYPE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBPANGOFT2_TRUE}" && test -z "${HAVE_LIBPANGOFT2_FALSE}"; then as_fn_error "conditional \"HAVE_LIBPANGOFT2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBX11_TRUE}" && test -z "${HAVE_LIBX11_FALSE}"; then as_fn_error "conditional \"HAVE_LIBX11\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_AQUA_TRUE}" && test -z "${HAVE_AQUA_FALSE}"; then as_fn_error "conditional \"HAVE_AQUA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBGIF_TRUE}" && test -z "${HAVE_LIBGIF_FALSE}"; then as_fn_error "conditional \"HAVE_LIBGIF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBJPEG_TRUE}" && test -z "${HAVE_LIBJPEG_FALSE}"; then as_fn_error "conditional \"HAVE_LIBJPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBPNG_TRUE}" && test -z "${HAVE_LIBPNG_FALSE}"; then as_fn_error "conditional \"HAVE_LIBPNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBPNM_TRUE}" && test -z "${HAVE_LIBPNM_FALSE}"; then as_fn_error "conditional \"HAVE_LIBPNM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBTIFF_TRUE}" && test -z "${HAVE_LIBTIFF_FALSE}"; then as_fn_error "conditional \"HAVE_LIBTIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_CYGWIN_TRUE}" && test -z "${HAVE_CYGWIN_FALSE}"; then as_fn_error "conditional \"HAVE_CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_AR_TRUE}" && test -z "${USE_AR_FALSE}"; then as_fn_error "conditional \"USE_AR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by xplanet $as_me 1.3.0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ xplanet config.status 1.3.0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "xpDefines.h") CONFIG_FILES="$CONFIG_FILES xpDefines.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/libannotate/Makefile") CONFIG_FILES="$CONFIG_FILES src/libannotate/Makefile" ;; "src/libdisplay/Makefile") CONFIG_FILES="$CONFIG_FILES src/libdisplay/Makefile" ;; "src/libephemeris/Makefile") CONFIG_FILES="$CONFIG_FILES src/libephemeris/Makefile" ;; "src/libephemeris/libmoons/Makefile") CONFIG_FILES="$CONFIG_FILES src/libephemeris/libmoons/Makefile" ;; "src/libimage/Makefile") CONFIG_FILES="$CONFIG_FILES src/libimage/Makefile" ;; "src/libmultiple/Makefile") CONFIG_FILES="$CONFIG_FILES src/libmultiple/Makefile" ;; "src/libplanet/Makefile") CONFIG_FILES="$CONFIG_FILES src/libplanet/Makefile" ;; "src/libprojection/Makefile") CONFIG_FILES="$CONFIG_FILES src/libprojection/Makefile" ;; "src/libsgp4sdp4/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsgp4sdp4/Makefile" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi xplanet-1.3.0/TODO0000644000175000017500000000043510476133333010604 00000000000000use -random to set rotation, then set lat/lon other ways use arbitrary "lookAt" position add spice objects to planet list, not annotation map multiple line markers Uranus rings constant latitude arcs -separation option, to place the observer where two bodies are x degrees apart xplanet-1.3.0/xpDefines.h.in0000644000175000017500000000051010411352756012612 00000000000000#ifndef XPDEFINES_H #define XPDEFINES_H #include const std::string defaultConfigFile = "default"; const std::string defaultFont = "FreeMonoBold.ttf"; const std::string defaultMapExt = ".@mapext@"; const std::string defaultStarMap = "BSC"; const std::string separator = "@separator@"; #endif xplanet-1.3.0/configure.ac0000644000175000017500000000576711731356501012416 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT(xplanet, 1.3.0) AC_CONFIG_SRCDIR(src/xplanet.cpp) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB AM_CONDITIONAL([am__fastdepOBJC], false) AC_PATH_PROG(PERL, perl, no) AC_SUBST(PERL) AC_ARG_WITH(cygwin,AC_HELP_STRING([--with-cygwin], [check for Cygwin environment (YES)])) separator="/" use_ar='yes' have_aqua='no' have_cygwin='no' AC_CANONICAL_HOST case "$host" in sparc-sun-*) if test "x$GXX" != "xyes"; then # This is for Sun Workshop compiler use_ar='no' xplanet_ARFLAGS="-xar -o" xplanet_LDFLAGS="-xildoff" fi ;; mips-sgi-irix*) # this is for the MIPSpro compilers if test "x$GXX" != "xyes"; then use_ar='no' xplanet_ARFLAGS="-ar -WR,-s,-u,-v -o" fi ;; *-cygwin*) if test "$with_cygwin" != 'no'; then AC_DEFINE(HAVE_CYGWIN,,Define if compiling under cygwin) have_cygwin='yes' xplanet_LDFLAGS="-static" separator="\\\\\\\\" fi ;; *-apple-darwin*) have_aqua='yes' ;; i686-pc-linux-gnu) ;; esac AC_FIND_X11 AC_FIND_XSS AC_FIND_FREETYPE AC_FIND_PANGO AC_SUBST(xplanet_ARFLAGS) AC_SUBST(xplanet_LDFLAGS) AC_SUBST(separator) AC_USE_MACAQUA AC_FIND_GRAPHICS_LIBS AC_FIND_CSPICE if test "$have_aqua" = no; then AM_ICONV if test "$am_cv_func_iconv" = yes; then proto_iconv="$am_cv_proto_iconv_arg1" else proto_iconv="" fi AC_FIND_LOCALE_CHARSET fi dnl AM_CONDITIONAL(HAVE_LIBCHARSET, test "$have_locale_charset" = 'yes') dnl AM_CONDITIONAL(HAVE_LANGINFO_H, test "$have_langinfo_h" = 'yes') AM_CONDITIONAL(HAVE_CSPICE, test "$have_cspice" = 'yes') AM_CONDITIONAL(HAVE_LIBFREETYPE, test "$have_freetype" = 'yes') AM_CONDITIONAL(HAVE_LIBPANGOFT2, test "$have_pangoft2" = 'yes') AM_CONDITIONAL(HAVE_LIBX11, test "$have_libx11" = 'yes') AM_CONDITIONAL(HAVE_AQUA, test "$with_aqua" = 'yes') AM_CONDITIONAL(HAVE_LIBGIF, test "$have_gif" = 'yes') AM_CONDITIONAL(HAVE_LIBJPEG, test "$have_jpeg" = 'yes') AM_CONDITIONAL(HAVE_LIBPNG, test "$have_png" = 'yes') AM_CONDITIONAL(HAVE_LIBPNM, test "$have_pnm" = 'yes') AM_CONDITIONAL(HAVE_LIBTIFF, test "$have_tiff" = 'yes') AM_CONDITIONAL(HAVE_CYGWIN, test "$have_cygwin" = "yes") AM_CONDITIONAL(USE_AR, test $use_ar = 'yes') AC_DEFINE_UNQUOTED(ICONV_CONST, $proto_iconv, [Define as const if the declaration of iconv() needs const.]) AC_ARG_WITH(map-extension, [ --with-map-extension=EXTENSION use EXTENSION as default map extension [jpg]], mapext="$withval", mapext="jpg") AC_SUBST(mapext) AC_CHECK_FUNCS(unsetenv) AC_CHECK_FUNCS(timegm) AC_CONFIG_FILES([xpDefines.h \ Makefile \ src/Makefile \ src/libannotate/Makefile \ src/libdisplay/Makefile \ src/libephemeris/Makefile \ src/libephemeris/libmoons/Makefile \ src/libimage/Makefile \ src/libmultiple/Makefile \ src/libplanet/Makefile \ src/libprojection/Makefile \ src/libsgp4sdp4/Makefile]) AC_OUTPUT xplanet-1.3.0/install-sh0000755000175000017500000001425310411344513012114 00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "$0: no input file specified" >&2 exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d "$dst" ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "$0: $src does not exist" >&2 exit 1 fi if [ x"$dst" = x ] then echo "$0: no destination specified" >&2 exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d "$dst" ] then dst=$dst/`basename "$src"` else : fi fi ## this sed command emulates the dirname command dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp='' while [ $# -ne 0 ] ; do pathcomp=$pathcomp$1 shift if [ ! -d "$pathcomp" ] ; then $mkdirprog "$pathcomp" else : fi pathcomp=$pathcomp/ done fi if [ x"$dir_arg" != x ] then $doit $instcmd "$dst" && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename "$dst"` else : fi # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/#inst.$$# rmtmp=$dstdir/#rm.$$# # Trap to clean up temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && # Now remove or move aside any old file at destination location. We try this # two ways since rm can't unlink itself on some systems and the destination # file might be busy for other reasons. In this case, the final cleanup # might fail but the new file should still install successfully. { if [ -f "$dstdir/$dstfile" ] then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } xplanet-1.3.0/aclocal.m40000644000175000017500000010436011731356511011756 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, [m4_warning([this file was generated for autoconf 2.65. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) xplanet-1.3.0/config.guess0000755000175000017500000012075110411352756012441 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-01-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:MicroBSD:*:*) echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:3*) echo i586-pc-interix3 exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xplanet-1.3.0/ChangeLog0000644000175000017500000001773711731372132011700 00000000000000Version 1.3.0 (released 18 Feb 2012) * add "outlined" keyword to marker files * update JPL ephemeris code for 64 bit machines * add bump_shade config file parameter * add opacity keyword for markers * implement Rayleigh scattering Version 1.2.1 (released 18 Apr 2009) * Remove signbit() from ProjectionIcosagnomonic.cpp * Add shadows from satellites on Saturn's rings, let brightness of rings go to zero as Saturn approaches equinox. * Add trail_output option to satellite files to print out satellite positions. * Calculate eclipse shadows a little past the terminator so they don't get cut off sharply. * Reload satellite files in case TLE files are updated between renderings. Suggested by Lutz Mndle. * Added Lambert Equal Area projection * Check that -origin above or below is not specified for the Sun. * Added a definition for signbit() in ProjectionIcosagnomonic.cpp * Add patch from Doug Hawkins to support marker_* keywords in config file. * Added the -label_body option. This is useful in conjunction with -separation to specify which body the label should apply to. * Added the -separation option. This places the observer at a point in space where two bodies have the specified separation. * Allow -glare 0 to remove sun glare. * Fixed a bug where arcs were sometimes not drawn if they were vertical or horizontal lines. * A thickness value may now be specified for arcs. * Added max_radius and min_radius keywords to marker files. This disables drawing of the marker if the planet radius is larger than or smaller than the specified value, respectively. * Fixed a bug where the arc color was not reset to the default color for subsequent arcs in the file. Version 1.2.0 (released 16 Jun 2005) * Added the -grs_longitude option, to specify the longitude of Jupiter's Great Red Spot, in System II coordinates. This assumes the Jupiter image has the center of the Great Red Spot at pixel 0 (at the left side of the image) in order to draw it at the right position. * Added the Icosagnomonic projection, contributed by Ian Turner. * Fixed a bug where output filenames had an extra digit in some cases. * Added the bump_map and bump_scale options in the configuration file. * Added the -glare option to set the size of the sun's glare. * An image map may be specified for the sun in the configuration file now. A shade value is now required for the sun (should be 100, otherwise the sun will have a night side!) * Added the -arc_spacing option to set the default angular distance between great arc points. It used to be 0.1 degree, so arcs smaller than this wouldn't get drawn. * Fixed a bug where markers were not aligned properly when using align = "above" or "below". * Added warnings if options are specified in the [default] section of the configuration file that probably shouldn't be there. Version 1.1.2 (released 5 Dec 2004) * Saturn's rings are now drawn properly when using "magnify" in the config file. * Added marker_fontsize as an option in the configuration file. * Added the Bonne, Gnomonic, Polyconic, and Tangential Spherical Cube (TSC) projections. * Added the -proj_param option. Note that the -projection option cannot be abbreviated to -proj anymore! * Color cloud maps are now allowed. * A color may now be specified with -background. Version 1.1.1 (released 23 Jul 2004) * Added -north path, -target path, and -path_relative_to options. * Added -output_start_index option. * Print a list of compile-time options when using the -version option. * Fixed a bug where orbits were not drawn for bodies using SPICE kernels. * Added ssec_map option to configuration files to use University of Wisconsin cloud maps. Version 1.1.0 (released 20 Jun 2004) * Added the -fork option. * Fixed a bug where stars were not drawn when using the -proj option. Version 1.0.8 (released 23 May 2004) * Fixed a bug where eclipse shadows were not drawn properly. * Timer now sleeps until it's time to wake up, instead of sleeping for a set time. Version 1.0.7 (released 04 May 2004) * The native Quicktime library can be used when reading/writing image files on Mac OS X. * The -hibernate and -idlewait options now work on Mac OS X. * Fixed a segfault when writing image files. * Minor updates to allow compilation with gcc 3.4.0. Version 1.0.6 (released 21 Apr 2004) * Fixed a bug where markers on the far side of a planet were being drawn when they shouldn't have been. * Fixed a bug where satellites were not drawn for some locales. * Added -projection random. This picks a random projection. Version 1.0.5 (released 23 Mar 2004) * Improved locale support. The date string is now converted to UTF-8 using iconv() after being created by strftime() in the default encoding. Added the "lang" keyword to marker files. * Floating point numbers in all input files must be in the "C" locale format, meaning that the decimal separator must be the '.' character and not the ','. * Fixed align=center option in marker files. Version 1.0.4 (released 05 Mar 2004) * Added support for SPICE kernels for spacecraft ephemerides. * Xplanet now works without freetype. There will be no text annotation, but it will run instead of exit immediately. Version 1.0.3 (released 06 Jan 2004) * Jupiter and Saturn are now drawn as oblate spheroids. Version 1.0.2 (released 22 Dec 2003) * Added -interpolate_origin_file option so that origin_files may be used as ephemeris files. * Added -label_string option to set the first line of the label. * Added the Lambert (Cylindrical Equal Area) projection. * The -geometry option now applies to the root window. The area outside the image is black. * The format for the star map is different. It is now Dec, RA, Mag to be consistent with marker and arc files, which have lat then lon. * -marker_file and -arc_file can now be used on the command line. Coordinates for these files are Declination and Right Ascension. Markers and arcs are plotted against the star field. * Fixed a text rendering bug where the text wasn't positioned properly. * Added -dynamic_origin option to read a file for the observer's position before each rendering. * Changed --disable-screensaver to --with-xscreensaver in configure script. * -origin and -range options can now be used together. * Added -save_desktop_file option for Windows and OS X. * Added twilight option in config file to adjust extent of terminator. * -localtime option wasn't right for most planets. * Added -ephemeris_file option. This allows the use of JPL's DExxx files for super-duper accuracy. * Added pango support. The workings of pango are still mysterious to me so there may be things that don't quite look right. There are memory leaks inside the pango library, so using this option all of the time is not a good idea. Version 1.0.1 (released 17 Mar 2003) * mapbounds is now supported as an option in the configuration file. * Xplanet now works natively on Aqua, but is a little flaky; it sometimes fails to set the desktop and the default "Aqua Blue" shows up. Reproducible bug reports are greatly appreciated! * The timer would cause an exit after one drawing on non-X11 systems. * Markers on the other planets were not drawn properly with the -projection option. Version 1.0.0 (released 11 Mar 2003) * First public release. See the NEWS file for changes from the previous version. xplanet-1.3.0/depcomp0000755000175000017500000003176710411352756011506 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Must come before tru64. # Intel's C compiler understands `-MD -MF file'. However # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 xplanet-1.3.0/COPYING0000644000175000017500000004311010411344513011135 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xplanet-1.3.0/Makefile.in0000644000175000017500000007033411731356514012171 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(nobase_dist_data_DATA) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(srcdir)/xpDefines.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO config.guess config.sub depcomp install-sh missing \ mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 $(top_srcdir)/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = xpDefines.h CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(datadir)" NROFF = nroff MANS = $(man_MANS) DATA = $(nobase_dist_data_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AQUA_LIBS = @AQUA_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSPICE_LIBS = @CSPICE_LIBS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GRAPHICS_LIBS = @GRAPHICS_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBCHARSET = @LIBCHARSET@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJC = @OBJC@ OBJCFLAGS = @OBJCFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XSS_LIBS = @XSS_LIBS@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mapext = @mapext@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ separator = @separator@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ xplanet_ARFLAGS = @xplanet_ARFLAGS@ xplanet_LDFLAGS = @xplanet_LDFLAGS@ SUBDIRS = src man_MANS = xplanet.1 nobase_dist_data_DATA = \ xplanet/rgb.txt \ xplanet/arcs/README \ xplanet/arcs/constellations \ xplanet/config/README \ xplanet/config/default \ xplanet/config/earth_markers \ xplanet/config/moon_orbit \ xplanet/config/overlay_clouds \ xplanet/ephemeris/README \ xplanet/fonts/README \ xplanet/fonts/FreeMonoBold.ttf \ xplanet/images/README \ xplanet/images/earth.jpg \ xplanet/images/hubble.png \ xplanet/images/iss.png \ xplanet/images/mgs.png \ xplanet/images/night.jpg \ xplanet/images/odyssey.png \ xplanet/images/shuttle.png \ xplanet/images/smile.png \ xplanet/images/sublunar.png \ xplanet/images/subsolar.png \ xplanet/images/sun.jpg \ xplanet/markers/README \ xplanet/markers/brightStars \ xplanet/markers/earth \ xplanet/markers/mars \ xplanet/markers/moon \ xplanet/origin/README \ xplanet/origin/cassini \ xplanet/origin/galileo \ xplanet/satellites/README \ xplanet/satellites/iss \ xplanet/satellites/iss.tle \ xplanet/scattering/README \ xplanet/scattering/earthRayleigh \ xplanet/spice/README \ xplanet/spice/asteroids \ xplanet/spice/asteroids.krn \ xplanet/spice/cassini \ xplanet/spice/cassini.krn \ xplanet/spice/mgs \ xplanet/spice/mgs.krn \ xplanet/spice/voyager \ xplanet/spice/voyager.krn \ xplanet/stars/BSC EXTRA_DIST = xplanet.1 $(sources) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 xpDefines.h: $(top_builddir)/config.status $(srcdir)/xpDefines.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } install-nobase_dist_dataDATA: $(nobase_dist_data_DATA) @$(NORMAL_INSTALL) test -z "$(datadir)" || $(MKDIR_P) "$(DESTDIR)$(datadir)" @list='$(nobase_dist_data_DATA)'; test -n "$(datadir)" || list=; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo "$(MKDIR_P) '$(DESTDIR)$(datadir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(datadir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(datadir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(datadir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_dataDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_data_DATA)'; test -n "$(datadir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(datadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(datadir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(datadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-nobase_dist_dataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-nobase_dist_dataDATA uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-hdr distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 \ install-nobase_dist_dataDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-man uninstall-man1 uninstall-nobase_dist_dataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xplanet-1.3.0/config.h.in0000644000175000017500000000545711731356546012160 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define for Mac OS X */ #undef HAVE_AQUA /* Define if you have CSPICE library */ #undef HAVE_CSPICE /* Define if compiling under cygwin */ #undef HAVE_CYGWIN /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have langinfo.h */ #undef HAVE_LANGINFO_H /* Define if you have libcharset */ #undef HAVE_LIBCHARSET /* Define if you have freetype */ #undef HAVE_LIBFREETYPE /* Define if you have GIF library */ #undef HAVE_LIBGIF /* Define if you have JPEG library */ #undef HAVE_LIBJPEG /* Define if you have pango with freetype 2 */ #undef HAVE_LIBPANGOFT2 /* Define if you have PNG library */ #undef HAVE_LIBPNG /* Define if you have PNM library */ #undef HAVE_LIBPNM /* Define if you have TIFF library */ #undef HAVE_LIBTIFF /* Define if you have X11 libraries */ #undef HAVE_LIBX11 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `timegm' function. */ #undef HAVE_TIMEGM /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_SCRNSAVER_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Define if you have X screensaver extension */ #undef HAVE_XSS /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING xplanet-1.3.0/mkinstalldirs0000755000175000017500000000370410411344513012715 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here xplanet-1.3.0/README0000644000175000017500000005046711716030015010775 00000000000000-arc_file Specify an arc file to be plotted against the background stars. Each line in the file must have the following syntax: dec1 ra1 dec2 ra2 where declination is in degrees and right ascension is in hours. This option has no effect if -projection is specified. -arc_spacing spacing When drawing an arc, draw line segments that are spacing degrees apart. The default is 0.1 degrees. Line segments shorter than spacing will not be drawn. -arc_thickness thickness Specify the thickness of arcs. The default is 1 pixel. When drawing arcs on a planet using the arc_file option in the configuration file, use the arc_thickness option there too. -background background_file Use background_file as the background image, with the planet to be superimposed upon it. A color may also be supplied (e.g. -background "navy blue" or -background 0xff00ff). -base_magnitude magnitude A star of the specified magnitude will have a pixel brightness of 1. The default value is 10. Stars will be drawn more brightly if this number is larger. -body body Render an image of the specified planet or satellite. Valid values for body are sun, mercury, venus, earth, moon, mars, phobos, deimos, jupiter, io, europa, ganymede, callisto, saturn, mimas, enceladus, tethys, dione, rhea, titan, hyperion, iapetus, phoebe, uranus, miranda, ariel, umbriel, titania, oberon, neptune, triton, nereid, pluto, charon, random, and major. The field of view can also be centered on a satellite location using "naif" or "norad", along with the satellite id. For example, "-body naif-82" will center the field of view on NAIF ID -82, which is the Cassini orbiter. Xplanet must be compiled with SPICE support and the required kernels must be present. See the README in the spice subdirectory for more details. Using "-body norad20580" will center the field of view on NORAD ID 20580, which is the Hubble Space Telescope. The appropriate TLE files must be present in this case. See the README in the satellites subdirectory for more information. Using "path" will center the field of view on the direction of motion of the origin. This direction is relative to the direction of motion of the body specified by -path_relative_to. Earth is the default body. This option is the same as -target. -center +x+y Place the center of the rendered body at pixel coordinates (x, y). The upper left corner of the screen is at (0,0). Either x or y may be negative. The default value is the center of the screen. -color color Set the color for the label. The default is "red". Any color in the rgb.txt file may be used. Colors may also be specified by RGB hex values; for example -color 0xff and -color blue mean the same thing, as do -color 0xff0000 and -color red. -config config_file Use the configuration file config_file. The format of config_file is described in README.config. See the description of -searchdir to see where xplanet looks in order to find the configuration file. -create_scattering_tables scattering_file Create lookup tables for Rayleigh scattering. See the README in the scattering directory for more information. -date YYYYMMDD.HHMMSS Use the date specified instead of the current local time. The date is assumed to be GMT. -date_format string Specify the format for the date/time label. This format string is passed to strftime(3). The default is "%c %Z", which shows the date, time, and time zone in the locale's appropriate date and time representation. -dynamic_origin file Specify an observer location. The location is relative to the body specified with -origin (by default, this is the Sun). The last line of the file must be of the form YYYYMMDD.HHMMSS range lat lon localtime For example, 19951207.120000 10.328 -3.018 97.709 9.595 The specified time is ignored and the current time is used. The range is in planetary radii, and lat and lon are in degrees. Localtime (in hours) is optional, but if present, it will be used in place of the longitude. Only the last line of the file is used. This file may be updated between renderings using a script executed with the -prev_command or -post_command options. -ephemeris_file filename Specify a JPL digital ephemeris file (DE200, DE405, or DE406) to use for computing planetary positions. Xplanet uses Bill Gray's code (http://www.projectpluto.com/jpl_eph.htm), which reads both big and little endian binary files. The ephemeris files found at ftp://ssd.jpl.nasa.gov/pub/eph/export/unix are big endian files, but you do not need to do any additional byte-swapping to use them. See the description of -searchdir to see where xplanet looks in order to find the ephemeris file. -font fontname Set the font for the label. Only TrueType fonts are supported. If the -pango option is used, fontname is taken to be the font family name (e.g. "Arial"). -fontsize size Specify the point size. The default is 12. -fork Detach from the controlling terminal. This is useful on MS Windows to run xplanet from a batch file without having to keep a DOS window open. Be careful when using this option; it's easy to have multiple processes running at the same time without knowing it - check the Task Manager. On unix systems this is pretty much the same as running xplanet in the background. -fov Specify the field of view, in degrees. This option and the -radius option are mutually exclusive. This option has no effect if the -projection option is used. -geometry string Specify the image geometry using the standard X window geometry syntax, [{xX}][{+-}{+-}] (e.g. 256x256-10+10 puts a window 256x256 pixels in size 10 pixels away from the right side and 10 pixels below the top of the root window). The root window outside of the image will be black. This option may be used with -window or -output. -glare radius Draw a glare around the sun with with a radius of the specified value larger than the sun. The default value is 28. -gmtlabel Same as the -label option, but show GMT instead of local time. -grs_longitude lon The longitude of Jupiter's Great Red Spot (GRS). A typical value is 94 degrees. If this option is specified, longitudes on Jupiter will be calculated in System II coordinates. By default, longitudes are calculated in System III coordinates. When using this option, use an image map for Jupiter where the center of the GRS is at the pixel 0 column, or the left side of the image. -hibernate seconds After the screen has been idle for the specified number of seconds, xplanet will sleep. This option requires xplanet to have been compiled with the X Screensaver extension. -idlewait seconds Don't run Xplanet unless the screen has been idle for the specified number of seconds. This option requires xplanet to have been compiled with the X Screensaver extension. -interpolate_origin_file This option is only useful in conjunction with -origin_file. It computes the observer position at the current time by interpolating between values specified in the origin file. This is useful if you have spacecraft positions tabulated in an origin file, but want a real time view. -jdate Julian date Use the specified Julian date instead of the current local time. -label Display a label in the upper right corner. -labelpos Specify the location of the label using the standard X window geometry syntax. The default position is "-15+15", or 15 pixels to the left and below the top right corner of the display. This option implies -label. -label_body body Use the specified body to calculate the sub-observer, sub-solar, and illumination values in the label. This is useful with the -separation option. -label_string Specify the text of the first line of the label. By default, it says something like "Looking at Earth". Any instances of %t will be replaced by the target name, and any instances of %o will be replaced by the origin name. -latitude latitude Render the target body as seen from above the specified latitude (in degrees). The default value is 0. -light_time Account for the time it takes for light to travel from the target body to the observer. The default is to ignore the effects of light time. -localtime localtime Place the observer above the longitude where the local time is the specified value. 0 is midnight and 12 is noon. -log_magstep step Increase the brightness of a star by 10^step for each integer decrease in magnitude. The default value is 0.4. This means that a star of magnitude 2 is 10^0.4 (about 2.5) times brighter than a star of magnitude 3. A larger number makes stars brighter. -longitude longitude Place the observer above the specified longitude (in degrees). Longitude is positive going east, negative going west (for the earth and moon), so for example Los Angeles is at -118 or 242. The default value is 0. -make_cloud_maps If there is an entry in the config file for cloud_map, xplanet will output a day and night image with clouds overlaid and then exit. The images will be created in the directory specified by -tmpdir, or in the current directory if -tmpdir is not used. The names of the output images default to day_clouds.jpg and night_clouds.jpg, but may be changed by the -output option. If "-output filename.extension" is specified, the output images will be named "day_filename.extension" and "night_filename.extension". The dimensions of the output images are the same as the day image. -marker_file Specify a file containing user defined marker data to display against the background stars. The format of each line is generally declination, right ascension, string, as in the example below: -16.7161 6.7525 "Sirius" For additional options which may be specified, see the marker_file entry in README.config. This option has no effect if -projection is specified. This option is not meant for city markers; for that use the marker_file option in the configuration file. -markerbounds filename Write coordinates of the bounding box for each marker to filename. This might be useful if you're using xplanet to make imagemaps for web pages. Each line looks like: 204,312 277,324 Los Angeles where the coordinates are for the upper left and lower right corners of the box. This file gets rewritten every time xplanet renders its image. -north north_type This option rotates the image so that the top points to north_type. Valid values for north_type are: body: body's north pole galactic: galactic north pole orbit: body's orbital north pole (perpendicular to the orbit plane) path: origin's velocity vector (also see -path_relative_to option) separation: perpendicular to the line of sight and the target-separation target line (see -separation option) The default value is "body". -num_times num_times Run num_times before exiting. The default is to run indefinitely. -origin body Place the observer at the center of the specified body. Valid values are the same as for -target. In addition, "above", "below", or "system" may be specified. Using "above" or "below" centers the view on the body's primary and the field of view is large enough to show the body's orbit. Using "system" places the observer at the center of a random body in the same system as the target body. Two bodies are in the same system if one of the following is true: 1) target and origin have same primary 2) target is origin's primary 3) origin is target's primary If the body name is preceded by a dash, the observer is placed on the opposite side of the target from the specified body at a distance equal to the distance between the target and body. For example, -target earth -origin sun places the observer at the center of the sun. If -target earth -origin -sun is used, the observer is placed on a line connecting the centers of the earth and sun at a distance of 1 AU farther from the sun than the earth. -origin_file origin_file Specify a list of observer positions in origin_file. The positions are relative to the body specified with -origin (by default, this is the Sun). Each line should be of the form YYYYMMDD.HHMMSS range lat lon localtime For example, 19951207.120000 10.328 -3.018 97.709 9.595 Range is in planetary radii, and lat and lon are in degrees. The date is the only required value. If the localtime (in hours) is supplied, it will be used in place of the longitude. For each line in the origin file, the observer is placed at the specified position, relative to the body specified with -origin. This option is useful for showing spacecraft flybys or orbiting around a planet. Any line with a # in the first column is ignored. -output filename Output to a file instead of rendering to a window. The file format is taken from the extension. Currently .gif, .jpg, .ppm, .png, and .tiff images can be created, if xplanet has been compiled with the appropriate libraries. The image size defaults to 512 by 512 pixels but this may be changed by the -geometry flag. If used with the -num_times option, each output file will be numbered sequentially. -output_map filename Output the intermediate rectangular map that is created in the process of rendering the final image. It will have the same dimensions as the default day map. -output_start_index index Start numbering output files at index. The default is 0. -pango Use the Pango (http://www.pango.org) library for rendering internationalized text. Pango uses Unicode for all of its encoding, and will eventually support output in all the worlds major languages. If xplanet has not been compiled with this library this option will be ignored. There appear to be memory leaks in the pango library, so I don't recommend letting xplanet run indefinitely with this option. -path_relative_to body Only used with -north path or -target path. The origin's velocity vector is calculated relative to the specified body. By default, this is the Sun. -post_command command -prev_command command Run command either before or after each time xplanet renders an image. On MS Windows, you may need to use unix-style paths. For example: xplanet.exe -prev_command ./prev.bat -print_ephemeris Print the heliocentric rectangular equatorial coordinates (J2000) for each body xplanet knows about, and then exit. -projection projection_type The projection type may be one of ancient, azimuthal, bonne, equal_area, gnomonic, hemisphere, icosagnomonic, lambert, mercator, mollweide, orthographic, peters, polyconic, rectangular, or tsc. The default is no projection. Multiple bodies will not be shown if this option is specified, although shadows will still be drawn. -proj_param value Pass additional parameters for some projections. The only projections that use this option at present are the Bonne, Gnomonic, and Mercator projections. The Bonne projection is conformal at the specified latitude. Higher values lead to a thinner heart shape. The default is 50 degrees. The Gnomonic and Mercator projections use the specified latitude as the boundaries of the projection. The defaults are 45 and 80 degrees, respectively. This option may be used more than once for future projections that require additional parameters. Only the first value is used at present. -quality quality This option is only used when creating JPEG images. The quality can range from 0 to 100. The default value is 80. -radius radius Specify the radius of the globe as a percent of the screen height. The default value is 45% of the screen height. When drawing Saturn, the radius value applies to the radius of the outer ring. -random Place the observer above a random latitude and longitude. -range range Render the globe as seen from a distance of range from the planet's center, in units of the planetary radius. The default value is 1000. Note that if you use very close ranges the field of view of the screen can be greater than 180 degrees! If you want an "up close" image use the -radius option. -rotate angle Rotate the globe by angle degrees counterclockwise so that north (as defined by the -north argument) isn't at the top. The default value is 0. My friends in the Southern Hemisphere can use -rotate 180 to make the earth look like it should! For non-orthographic projections, the globe is rotated and then projected, if that helps you visualize what to expect. -save_desktop_file On Microsoft Windows and Mac OS X, xplanet creates an intermediate image file which is used to set the desktop. This file will be created in the -tmpdir directory. By default, this image is removed after the desktop has been set. Specifying this option will leave the file in place. -searchdir directory Any files used by xplanet should be placed in one of the following directories depending on its type: "arcs", "config", "ephemeris", "fonts", "images", "markers", "origin", "satellites", or "stars". By default, xplanet will look for a file in the following order: The current directory searchdir subdirectories of searchdir subdirectories of xplanet (if it exists in the current directory) subdirectories of ${HOME}/.xplanet on X11 subdirectories of ${HOME}/Library/Xplanet on Mac OS X subdirectories of DATADIR/xplanet DATADIR is set at compile time and defaults to /usr/local/share. -separation body:dist Place the observer at a location where the target body and the separation body are dist degrees apart. For example "-target earth -separation moon:-3" means place the observer at a location where the moon appears 3 degrees to the left of the earth. -spice_ephemeris index Use SPICE kernels to compute the position of the named body. The index is the naif ID code (e.g. 599 for Jupiter). The -spice_file option must be used to supply the names of the kernel files. This option may be used more than once for different bodies. -spice_file spice_file Specify a file containing a list of objects to display. A file containing a list of SPICE kernels to read named spice_file.krn must exist along with spice_file. See the README in the "spice" subdirectory for more information. -starfreq frequency Fraction of background pixels that will be colored white. The default value is 0.001. This option is only meaningful with the azimuthal, mollweide, orthographic, and peters projections. -starmap starmap Use starmap to draw the background stars. This file should be a text file where each line has the following format: Declination, Right Ascension, Magnitude where Declination is in decimal degrees and Right Ascension is in decimal hours. For example, the entry for Sirius is -16.7161 6.7525 -1.46 See the description of -searchdir to see where xplanet looks in order to find the star map. -target target Same as -body. -tt Use terrestrial time instead of universal time. The two differ slightly due to the non-uniform rotation of the earth. The default is to use universal time. -timewarp As in xearth, scale the apparent rate at which time progresses by factor. The default is 1. -tmpdir tmpdir Specify a directory that xplanet will use to place images created using -make_cloud_maps. On Microsoft Windows, xplanet will write a bitmap file called xplanet.bmp to the specified directory. The default is the result of the GetWindowsDirectory call (C:\WINDOWS on Win95). On Mac OS X, xplanet will create an intermediate PNG file in order to set the background. The default value is /tmp. On Windows and Mac OS X, the intermediate file will be removed unless the -save_desktop_file option is specified. -transparency Update the background pixmap for transparent Eterms and aterms. This option only works under X11. -transpng filename Same as the -output option, except set the background to be transparent when writing a PNG file. -utclabel Same as -gmtlabel. -verbosity level level output < 0 only fatal error messages 0 non-fatal warning messages 1 basic information 2 basic diagnostics 3 more detailed diagnostics 4 very detailed diagnostics The default value is 0. -version Display current version information, along with a list of compile-time options that xplanet supports. -vroot Render the image to the virtual root window. Some window managers use one big window that sits over the real root window as their background window. Xscreensaver uses a virtual root window to cover the screen as well. -wait wait Update every wait seconds. -window Render the image to its own X window. The size defaults to 512 by 512 pixels but this may be set by the -geometry flag. -window-id ID When using the X11 windowing system, draw to the window with the specified ID. -window_title title Set the window's title to title. This option implies -window. -XID ID Same as -window-id. -xscreensaver Same as -vroot. xplanet-1.3.0/xplanet/0000755000175000017500000000000011731372543011650 500000000000000xplanet-1.3.0/xplanet/arcs/0000755000175000017500000000000011731372543012600 500000000000000xplanet-1.3.0/xplanet/arcs/constellations0000644000175000017500000012521310411352756015506 00000000000000# Constellation outlines are from # http://www.astro.wisc.edu/~dolan/java, created by Chris Dolan # (dolan.wisc.edu) 42.3187 2.0649 41.4019 1.6134 # And Gamma1-57,And Upsilo-50 41.4019 1.6134 48.6155 1.6333 # And Upsilo-50,And 51 41.4019 1.6134 35.6151 1.1623 # And Upsilo-50,Mirach 35.6151 1.1623 30.8480 0.6555 # Mirach,And Delta-31 30.8480 0.6555 29.0833 0.1394 # And Delta-31,Alpheratz 35.6151 1.1623 38.4856 0.9454 # Mirach,And Mu-37 38.4856 0.9454 41.0639 0.8300 # And Mu-37,And Nu-35 24.2648 0.7888 29.3011 0.6421 # And Zeta-34,And Epsilo-30 29.3011 0.6421 30.8480 0.6555 # And Epsilo-30,And Delta-31 30.8480 0.6555 38.6689 0.2850 # And Delta-31,And Theta-24 38.6689 0.2850 43.2640 23.6357 # And Theta-24,And Iota-17 43.2640 23.6357 44.3355 23.6735 # And Iota-17,And Kappa-19 44.3355 23.6735 46.4497 23.6261 # And Kappa-19,And Lambda-16 43.2640 23.6357 42.3187 23.0318 # And Iota-17,And Omicron-1 -37.1334 10.9450 -31.0658 10.4523 # Ant Iota,Ant Alpha -31.0658 10.4523 -27.7655 9.7368 # Ant Alpha,Ant Theta -27.7655 9.7368 -35.9474 9.4870 # Ant Theta,Ant Epsilon -77.5155 16.7178 -78.8848 16.5573 # Aps Beta,Aps Gamma -78.8848 16.5573 -78.6843 16.3388 # Aps Gamma,Aps Delta2 -78.6843 16.3388 -79.0338 14.7976 # Aps Delta2,Aps Alpha -21.1651 23.1570 -15.8194 22.9107 # Aqr 88,Aqr 77 -15.8194 22.9107 -13.5848 22.8266 # Aqr 77,Aqr Tau1-69 -13.5848 22.8266 -7.5688 22.8767 # Aqr Tau1-69,Aqr 78 -7.5688 22.8767 -6.0332 23.2384 # Aqr 78,Aqr Phi-90 -6.0332 23.2384 -0.0172 22.4806 # Aqr Phi-90,Aqr Zeta2-55 -0.0172 22.4806 -1.3808 22.3606 # Aqr Zeta2-55,Sadachbia -1.3808 22.3606 -0.3151 22.0959 # Sadachbia,Sadalmelik -0.3151 22.0959 -5.5691 21.5260 # Sadalmelik,Sadalsud -5.5691 21.5260 -8.9840 20.8771 # Sadalsud,Aqr 7 -8.9840 20.8771 -9.4825 20.7945 # Aqr 7,Aqr Epsilon-2 -0.3151 22.0959 -7.7808 22.2804 # Sadalmelik,Aqr Theta-43 -7.7808 22.2804 -13.8656 22.1074 # Aqr Theta-43,Aqr 39 15.0688 18.9932 13.8484 19.0902 # Aql Epsilo-13,Aql Zeta-17 13.8484 19.0902 10.5997 19.7712 # Aql Zeta-17,Tarazed 10.5997 19.7712 8.8694 19.8461 # Tarazed,Altair 8.8694 19.8461 6.3999 19.9217 # Altair,Aql Beta-60 6.3999 19.9217 1.0027 19.8744 # Aql Beta-60,Aql Eta-55 1.0027 19.8744 -1.2834 19.6116 # Aql Eta-55,Aql Iota-41 -1.2834 19.6116 -4.8644 19.1039 # Aql Iota-41,Aql 15 -4.8644 19.1039 -5.7353 19.0279 # Aql 15,Aql 12 -0.8193 20.1884 1.0027 19.8744 # Aql 66,Aql Eta-55 1.0027 19.8744 3.0997 19.4252 # Aql Eta-55,Aql Delta-30 -60.6820 17.5184 -56.3676 17.4229 # Ara Delta,Ara Gamma -56.3676 17.4229 -55.5139 17.4217 # Ara Gamma,Ara Gamma -55.5139 17.4217 -49.8645 17.5306 # Ara Gamma,Ara Kappa -49.8645 17.5306 -53.1476 16.9928 # Ara Kappa,Ara Epsilon1 -53.1476 16.9928 -55.9837 16.9767 # Ara Epsilon1,Ara Zeta -55.9837 16.9767 -59.0318 16.8293 # Ara Zeta,Ara Eta -55.9837 16.9767 -56.3676 17.4229 # Ara Zeta,Ara Gamma 19.7155 3.1940 21.3312 2.9866 # Ari Delta-57,Ari Epsilo-48 21.3312 2.9866 27.2499 2.8327 # Ari Epsilo-48,Ari 41 27.2499 2.8327 23.4512 2.1196 # Ari 41,Hamal 23.4512 2.1196 20.7984 1.9106 # Hamal,Sheratan 20.7984 1.9106 19.2858 1.8923 # Sheratan,Ari Gamma2-5 54.2820 5.9924 44.9314 5.9924 # Aur Delta-33,Menkalinan 44.9314 5.9924 37.2021 5.9950 # Menkalinan,Aur Theta-37 37.2021 5.9950 33.1513 4.9500 # Aur Theta-37,Aur Iota-3 33.1513 4.9500 41.2358 5.1085 # Aur Iota-3,Aur Eta-10 41.2358 5.1085 41.0639 5.0413 # Aur Eta-10,Aur Zeta-8 41.0639 5.0413 43.8141 5.0329 # Aur Zeta-8,Aur Epsilon-7 43.8141 5.0329 41.2358 5.1085 # Aur Epsilon-7,Aur Eta-10 41.2358 5.1085 45.9856 5.2777 # Aur Eta-10,Capella 45.9856 5.2777 44.9314 5.9924 # Capella,Menkalinan 51.7839 14.2246 46.0830 14.2728 # Boo Kappa1-17,Boo Lambda-19 46.0830 14.2728 38.3022 14.5344 # Boo Lambda-19,Boo Gamma-27 38.3022 14.5344 40.3821 15.0321 # Boo Gamma-27,Nekkar 40.3821 15.0321 33.3003 15.2582 # Nekkar,Boo Delta-49 33.3003 15.2582 37.3683 15.4076 # Boo Delta-49,Boo Mu1-51 33.3003 15.2582 27.0665 14.7495 # Boo Delta-49,Pulcherrima 27.0665 14.7495 19.1654 14.2613 # Pulcherrima,Arcturus 19.1654 14.2613 30.3668 14.5306 # Arcturus,Boo Rho-25 30.3668 14.5306 38.3022 14.5344 # Boo Rho-25,Boo Gamma-27 15.7850 13.8243 17.4523 13.7877 # Boo Upsilon-5,Boo Tau-4 17.4523 13.7877 18.3805 13.9110 # Boo Tau-4,Muphrid 18.3805 13.9110 19.1654 14.2613 # Muphrid,Arcturus 19.1654 14.2613 16.4152 14.6788 # Arcturus,Boo Pi2-29 16.4152 14.6788 13.7166 14.6857 # Boo Pi2-29,Boo Zeta-30 -41.8488 4.6761 -37.1334 4.7005 # Cae Alpha,Cae Beta 53.7492 4.9546 60.4356 5.0565 # Cam 7,Cam Beta-10 60.4356 5.0565 66.3313 4.9007 # Cam Beta-10,Cam Alpha-9 66.3313 4.9007 71.3161 3.8396 # Cam Alpha-9,Cam Gamma 71.3161 3.8396 59.9314 3.4843 # Cam Gamma,Per Gamma-23 11.8488 8.9744 18.1513 8.7445 # Cnc Alpha-65,Cnc Delta-47 18.1513 8.7445 21.4687 8.7212 # Cnc Delta-47,Cnc Gamma-43 21.4687 8.7212 28.7510 8.7777 # Cnc Gamma-43,Cnc Iota-48 18.1513 8.7445 9.1845 8.2750 # Cnc Delta-47,Cnc Beta-17 38.3022 12.9332 41.3504 12.5623 # CVn Alpha1-12,CVn Beta-8 -12.0321 6.9026 -15.6360 7.0623 # CMa Theta-14,CMa Gamma-23 -15.6360 7.0623 -17.0512 6.9355 # CMa Gamma-23,CMa Iota-20 -17.0512 6.9355 -16.7017 6.7521 # CMa Iota-20,Sirius -16.7017 6.7521 -17.9508 6.3782 # Sirius,Mirzam -16.7017 6.7521 -23.8350 7.0501 # Sirius,CMa Omicr2-24 -23.8350 7.0501 -26.3847 7.1394 # CMa Omicr2-24,CMa Delta-25 -26.3847 7.1394 -27.9317 7.0283 # CMa Delta-25,Adara -27.9317 7.0283 -28.9687 6.9771 # Adara,Adara -28.9687 6.9771 -30.0516 6.3384 # Adara,CMa Zeta-1 -26.3847 7.1394 -26.7686 7.2468 # CMa Delta-25,CMa 27 -26.7686 7.2468 -24.9523 7.3117 # CMa 27,CMa Omega-28 -26.7686 7.2468 -29.3011 7.4019 # CMa 27,CMa Eta-31 5.2139 7.6551 8.2850 7.4523 # Procyon,Gomeisa -12.5019 20.2938 -14.7651 20.3499 # Cap 3,Cap Beta-9 -14.7651 20.3499 -25.2674 20.7682 # Cap Beta-9,Cap Psi-16 -25.2674 20.7682 -26.9176 20.8633 # Cap Psi-16,Cap Omega-18 -26.9176 20.8633 -24.9981 21.1188 # Cap Omega-18,Cap 24 -24.9981 21.1188 -22.4026 21.4443 # Cap 24,Cap Zeta-34 -22.4026 21.4443 -19.4519 21.6177 # Cap Zeta-34,Cap 37 -19.4519 21.6177 -16.1173 21.7839 # Cap 37,Deneb Algiedi -16.1173 21.7839 -16.6502 21.6677 # Deneb Algiedi,Cap Kappa-43 -16.6502 21.6677 -16.8335 21.3706 # Cap Kappa-43,Cap 31 -16.8335 21.3706 -17.2174 21.0990 # Cap 31,Cap Theta-23 -17.2174 21.0990 -14.7651 20.3499 # Cap Theta-23,Cap Beta-9 -52.6835 6.3988 -52.9642 6.5829 # Canopus,Canopus -52.9642 6.5829 -53.6174 6.8304 # Canopus,Pup Tau -53.6174 6.8304 -52.9642 7.9462 # Pup Tau,Car Chi -52.9642 7.9462 -59.5017 8.3751 # Car Chi,Car Epsilon -59.5017 8.3751 -59.2668 9.2846 # Car Epsilon,Car Iota -59.2668 9.2846 -61.3179 10.2846 # Car Iota,Car Theta -61.3179 10.2846 -61.6846 10.5333 # Car Theta,Car Theta -61.6846 10.5333 -64.3833 10.7155 # Car Theta,Car Theta -64.3833 10.7155 -70.0326 10.2288 # Car Theta,Car Omega -70.0326 10.2288 -69.7175 9.2200 # Car Omega,Car Beta -69.7175 9.2200 -65.0651 9.7850 # Car Beta,Car Upsilon 63.6671 1.9068 60.2351 1.4301 # Cas Epsilo-45,Cas Delta-37 60.2351 1.4301 60.7163 0.9450 # Cas Delta-37,Cas Gamma-27 60.7163 0.9450 56.5337 0.6746 # Cas Gamma-27,Schedar 56.5337 0.6746 59.1350 0.1528 # Schedar,Caph 60.7163 0.9450 62.9165 0.5500 # Cas Gamma-27,Cas Kappa-15 62.9165 0.5500 67.4028 2.4843 # Cas Kappa-15,Cas Iota 56.5337 0.6746 53.8810 0.6161 # Schedar,Cas Zeta-17 53.8810 0.6161 55.1357 1.1849 # Cas Zeta-17,Cas Theta-33 -36.6979 13.3434 -39.4023 13.5172 # Cen Iota,Cen Nu -39.4023 13.5172 -34.4520 13.8239 # Cen Nu,Cen 2 -34.4520 13.8239 -36.3656 14.1112 # Cen 2,Cen Theta-5 -36.3656 14.1112 -37.8840 14.3423 # Cen Theta-5,Cen Psi -37.8840 14.3423 -37.7808 14.6994 # Cen Psi,Cen Eta -37.7808 14.6994 -35.1681 14.7273 # Cen Eta,Cen Psi -37.8840 14.3423 -42.1525 14.5917 # Cen Psi,Cen Eta -42.1525 14.5917 -42.1009 14.9863 # Cen Eta,Cen Kappa -36.3656 14.1112 -41.6827 13.8251 # Cen Theta-5,Cen Mu -41.6827 13.8251 -42.4676 13.8266 # Cen Mu,Cen Mu -42.4676 13.8266 -47.2805 13.9255 # Cen Mu,Cen Zeta -47.2805 13.9255 -53.4512 13.6643 # Cen Zeta,Cen Epsilon -53.4512 13.6643 -48.9478 12.6918 # Cen Epsilon,Cen Tau -48.9478 12.6918 -40.1643 12.8904 # Cen Tau,Cen Gamma -40.1643 12.8904 -41.6827 13.8251 # Cen Gamma,Cen Mu -48.9478 12.6918 -50.2140 12.4672 # Cen Tau,Cen Sigma -50.2140 12.4672 -50.7182 12.1394 # Cen Sigma,Cen Rho -50.7182 12.1394 -52.3683 12.1941 # Cen Rho,Cen Rho -52.3683 12.1941 -54.4826 11.3499 # Cen Rho,Cen Pi -54.4826 11.3499 -61.1690 11.7750 # Cen Pi,Cen Lambda -61.1690 11.7750 -63.0139 11.5963 # Cen Lambda,Cen Lambda -60.3668 14.0634 -53.4512 13.6643 # Hadar (Agena),Cen Epsilon -53.4512 13.6643 -60.8309 14.6601 # Cen Epsilon,Rigil Kentaurus 62.9853 20.4928 61.8336 20.7544 # Cep Theta-2,Cep Eta-3 61.8336 20.7544 62.5842 21.3094 # Cep Eta-3,Alderamin 62.5842 21.3094 70.5483 21.4779 # Alderamin,Alphirk 70.5483 21.4779 77.6186 23.6555 # Alphirk,Alrai 77.6186 23.6555 66.1995 22.8278 # Alrai,Cep Iota-32 66.1995 22.8278 58.2011 22.1807 # Cep Iota-32,Cep Zeta-21 58.2011 22.1807 62.5842 21.3094 # Cep Zeta-21,Alderamin 58.2011 22.1807 57.0322 22.2506 # Cep Zeta-21,Cep Epsilo-23 57.0322 22.2506 58.4016 22.4863 # Cep Epsilo-23,Cep Delta-27 3.2315 2.7215 4.0852 3.0378 # Cet Gamma-86,Mekab 4.0852 3.0378 8.8980 2.9950 # Mekab,Cet Lambda-91 8.8980 2.9950 10.1012 2.7491 # Cet Lambda-91,Cet Mu-87 10.1012 2.7491 8.4511 2.4694 # Cet Mu-87,Cet Xi2-73 8.4511 2.4694 5.5806 2.5978 # Cet Xi2-73,Cet Nu-78 5.5806 2.5978 3.2315 2.7215 # Cet Nu-78,Cet Gamma-86 3.2315 2.7215 0.3151 2.6578 # Cet Gamma-86,Cet Delta-82 0.3151 2.6578 -2.9679 2.3224 # Cet Delta-82,Mira -2.9679 2.3224 -10.3362 1.8579 # Mira,Baten -10.3362 1.8579 -8.1818 1.3999 # Baten,Cet 44 -8.1818 1.3999 -10.1643 1.1429 # Cet 44,Cet Eta-31 -10.1643 1.1429 -15.9340 1.7338 # Cet Eta-31,Cet Tau-52 -15.9340 1.7338 -10.3362 1.8579 # Cet Tau-52,Baten -15.9340 1.7338 -21.0677 2.0000 # Cet Tau-52,Cet Upsilo-59 -21.0677 2.0000 -13.8484 2.7349 # Cet Upsilo-59,Cet Pi-89 -10.1643 1.1429 -17.9851 0.7261 # Cet Eta-31,Diphda -17.9851 0.7261 -8.8178 0.3239 # Diphda,Cet Iota-8 -76.9139 8.3090 -78.5984 10.5909 # Cha Theta,Cha Gamma -78.5984 10.5909 -79.2974 12.3056 # Cha Gamma,Cha Beta -79.2974 12.3056 -80.5349 10.7628 # Cha Beta,Cha Delta1 -80.5349 10.7628 -77.4811 8.3438 # Cha Delta1,Cha Theta -77.4811 8.3438 -76.9139 8.3090 # Cha Theta,Cha Theta -59.3183 15.3893 -64.9677 14.7082 # Cir Gamma,Cir Alpha -64.9677 14.7082 -58.8027 15.2915 # Cir Alpha,Cir Delta -35.4661 5.5199 -34.0681 5.6604 # Col Epsilon,Phakt -34.0681 5.6604 -35.7640 5.8495 # Phakt,Col Beta -35.7640 5.8495 -35.2827 5.9588 # Col Beta,Col Gamma -35.2827 5.9588 -35.1338 6.2754 # Col Gamma,Col Kappa -35.1338 6.2754 -33.4321 6.3682 # Col Kappa,Col Delta -35.7640 5.8495 -42.7999 5.9855 # Col Beta,Col Eta 17.5153 13.1662 27.8687 13.1979 # Com Alpha-42,Com Beta-43 27.8687 13.1979 28.2640 12.4488 # Com Beta-43,Com Gamma-15 -37.0990 18.9783 -37.0475 19.1066 # CrA Epsilon,CrA Gamma -37.0475 19.1066 -37.9012 19.1578 # CrA Gamma,CrA Beta -37.9012 19.1578 -39.3336 19.1673 # CrA Beta,CrA Delta -39.3336 19.1673 -40.4852 19.1387 # CrA Delta,CrA Delta -40.4852 19.1387 -42.0838 19.0516 # CrA Delta,CrA Zeta -42.0838 19.0516 -42.7025 18.9378 # CrA Zeta,CrA Eta2 -42.7025 18.9378 -43.4359 18.8262 # CrA Eta2,CrA Eta2 31.3523 15.5489 29.1005 15.4637 # CrB Theta-4,CrB Beta-3 29.1005 15.4637 26.6998 15.5780 # CrB Beta-3,Alphecca 26.6998 15.5780 26.2816 15.7124 # Alphecca,CrB Gamma-8 26.2816 15.7124 26.0639 15.8266 # CrB Gamma-8,CrB Delta-10 26.0639 15.8266 26.8660 15.9595 # CrB Delta-10,CrB Epsilo-13 26.8660 15.9595 29.8511 16.0237 # CrB Epsilo-13,CrB Iota-14 -24.7174 12.1398 -22.6146 12.1685 # Crv Alpha-1,Crv 3 -22.6146 12.1685 -17.5325 12.2632 # Crv 3,Crv Gamma-4 -17.5325 12.2632 -16.5012 12.4977 # Crv Gamma-4,Crv Eta-8 -16.5012 12.4977 -23.3824 12.5726 # Crv Eta-8,Crv Beta-9 -23.3824 12.5726 -22.6146 12.1685 # Crv Beta-9,Crv 3 -17.1486 11.9332 -18.3518 11.7460 # Crt Eta-30,Crt Zeta-27 -18.3518 11.7460 -17.6815 11.4145 # Crt Zeta-27,Crt Lambda-13 -17.6815 11.4145 -14.7651 11.3224 # Crt Lambda-13,Crt Delta-12 -14.7651 11.3224 -10.8518 11.4099 # Crt Delta-12,Crt Kappa-16 -10.8518 11.4099 -9.7976 11.6112 # Crt Kappa-16,Crt Theta-21 -17.6815 11.4145 -22.8152 11.1941 # Crt Lambda-13,Crt Beta-11 -22.8152 11.1941 -18.2831 10.9962 # Crt Beta-11,Crt Alpha-7 -18.2831 10.9962 -14.7651 11.3224 # Crt Alpha-7,Crt Delta-12 -63.0827 12.4435 -57.1010 12.5195 # Acrux,Cru Gamma -59.6850 12.7949 -58.7339 12.2521 # Cru Iota,Cru Delta 53.3653 19.2850 51.7152 19.4951 # Cyg Kappa-1,Cyg Iota2-10 51.7152 19.4951 50.2140 19.6074 # Cyg Iota2-10,Cyg Theta-13 50.2140 19.6074 45.1147 19.7495 # Cyg Theta-13,Cyg Delta-18 45.1147 19.7495 40.2503 20.3706 # Cyg Delta-18,Cyg Gamma-37 40.2503 20.3706 33.9649 20.7701 # Cyg Gamma-37,Cyg Epsilo-53 33.9649 20.7701 30.2178 21.2155 # Cyg Epsilo-53,Cyg Zeta-64 30.2178 21.2155 28.7338 21.7357 # Cyg Zeta-64,Cyg Mu1-78 30.2178 21.2155 34.8817 21.2984 # Cyg Zeta-64,Cyg Upsilo-66 34.8817 21.2984 38.0329 21.2460 # Cyg Upsilo-66,Cyg Tau-65 38.0329 21.2460 39.3851 21.2900 # Cyg Tau-65,Cyg Sigma-67 39.3851 21.2900 45.5845 21.5661 # Cyg Sigma-67,Cyg Rho-73 45.5845 21.5661 49.2973 21.7800 # Cyg Rho-73,Cyg Pi2-81 45.2694 20.6907 40.2503 20.3706 # Deneb,Cyg Gamma-37 40.2503 20.3706 35.0822 19.9382 # Cyg Gamma-37,Cyg Eta-21 35.0822 19.9382 32.8992 19.8427 # Cyg Eta-21,Cyg Chi 32.8992 19.8427 27.9489 19.5115 # Cyg Chi,Albireo 11.2987 20.5535 14.5818 20.6257 # Del Epsilon-2,Rotanev 14.5818 20.6257 15.0688 20.7243 # Rotanev,Del Delta-11 15.0688 20.7243 16.1173 20.7774 # Del Delta-11,Del Gamma1-12 16.1173 20.7774 15.8996 20.6605 # Del Gamma1-12,Svalocin 15.8996 20.6605 14.5818 20.6257 # Svalocin,Rotanev -51.4860 4.2674 -55.0326 4.5669 # Dor Gamma,Dor Alpha -55.0326 4.5669 -57.4677 5.0917 # Dor Alpha,Dor Zeta -57.4677 5.0917 -62.4810 5.5607 # Dor Zeta,Dor Beta -62.4810 5.5607 -65.7354 5.7460 # Dor Beta,Dor Epsilon -62.4810 5.5607 -63.0827 5.9018 # Dor Beta,Dor Epsilon 55.1816 17.5359 52.2996 17.5073 # Dra Nu1-24,Alwaid 52.2996 17.5073 51.4860 17.9435 # Alwaid,Rastaban 51.4860 17.9435 56.8661 17.8923 # Rastaban,Dra Xi-32 56.8661 17.8923 55.1816 17.5359 # Dra Xi-32,Dra Nu1-24 56.8661 17.8923 67.6491 19.2090 # Dra Xi-32,Dra Delta-57 67.6491 19.2090 70.2675 19.8029 # Dra Delta-57,Dra Epsilo-63 70.2675 19.8029 72.7141 18.3507 # Dra Epsilo-63,Dra Chi-44 72.7141 18.3507 65.7011 17.1460 # Dra Chi-44,Dra Zeta-22 65.7011 17.1460 61.5013 16.3996 # Dra Zeta-22,Dra Eta-14 61.5013 16.3996 58.5506 16.0310 # Dra Eta-14,Dra Theta-13 58.5506 16.0310 58.9516 15.4156 # Dra Theta-13,Dra Iota-12 58.9516 15.4156 64.3661 14.0726 # Dra Iota-12,Thuban 64.3661 14.0726 69.7805 12.5577 # Thuban,Dra Kappa-5 69.7805 12.5577 69.3164 11.5233 # Dra Kappa-5,Dra Lambda-1 9.9981 21.2411 6.8010 21.3816 # Equ Delta-7,Equ Beta-10 6.8010 21.3816 5.2311 21.2632 # Equ Beta-10,Equ Alpha-8 5.2311 21.2632 10.1184 21.1723 # Equ Alpha-8,Equ Gamma-5 -8.7491 5.1520 -5.0821 5.1306 # Eri Lambda-69,Cursa -5.0821 5.1306 -5.4488 4.8816 # Cursa,Eri Omega-61 -5.4488 4.8816 -3.2487 4.7582 # Eri Omega-61,Eri Mu-57 -3.2487 4.7582 -3.3518 4.6051 # Eri Mu-57,Eri Nu-48 -3.3518 4.6051 -6.8354 4.1979 # Eri Nu-48,Eri Omicr2-40 -6.8354 4.1979 -13.4989 3.9672 # Eri Omicr2-40,Zaurak -13.4989 3.9672 -12.1009 3.7689 # Zaurak,Eri Pi-26 -12.1009 3.7689 -9.7517 3.7204 # Eri Pi-26,Eri Delta-23 -9.7517 3.7204 -9.4481 3.5489 # Eri Delta-23,Eri Epsilo-18 -9.4481 3.5489 -8.8808 2.9404 # Eri Epsilo-18,Eri Eta-3 -8.8808 2.9404 -18.5638 2.7517 # Eri Eta-3,Eri Tau1-1 -18.5638 2.7517 -20.9989 2.8499 # Eri Tau1-1,Eri Tau2-2 -20.9989 2.8499 -23.6173 3.0401 # Eri Tau2-2,Eri Tau3-11 -23.6173 3.0401 -21.7495 3.3251 # Eri Tau3-11,Eri 15 -21.7495 3.3251 -21.6177 3.5627 # Eri 15,Eri Tau5-19 -21.6177 3.5627 -23.2334 3.7804 # Eri Tau5-19,Eri Tau6-27 -23.2334 3.7804 -24.0012 3.9985 # Eri Tau6-27,Eri Tau9-36 -24.0012 3.9985 -29.7652 4.5585 # Eri Tau9-36,Eri Upsil2-52 -29.7652 4.5585 -30.5501 4.5921 # Eri Upsil2-52,Eri Upsil2-52 -30.5501 4.5921 -34.0165 4.4007 # Eri Upsil2-52,Eri 43 -34.0165 4.4007 -33.7816 4.2983 # Eri 43,Eri 43 -33.7816 4.2983 -36.1995 3.8239 # Eri 43,For Chi3 -36.1995 3.8239 -37.6147 3.8102 # For Chi3,Hor Delta -37.6147 3.8102 -43.0692 3.3323 # Hor Delta,Eri Theta2 -43.0692 3.3323 -40.3019 2.9710 # Eri Theta2,Eri Theta2 -40.3019 2.9710 -39.8492 2.6776 # Eri Theta2,Eri Iota -39.8492 2.6776 -42.8859 2.6635 # Eri Iota,Eri Kappa -42.8859 2.6635 -47.6987 2.4496 # Eri Kappa,Eri Kappa -47.6987 2.4496 -51.4974 2.2750 # Eri Kappa,Eri Phi -51.4974 2.2750 -51.6006 1.9324 # Eri Phi,Eri Chi -51.6006 1.9324 -57.2328 1.6283 # Eri Chi,Achernar -28.9859 3.2009 -32.4008 2.8178 # For Alpha,For Beta -32.4008 2.8178 -29.2839 2.0745 # For Beta,For Nu 22.5001 6.2479 22.5001 6.3827 # Gem Eta-7,Gem Mu-13 22.5001 6.3827 25.1185 6.7323 # Gem Mu-13,MEbsuta 25.1185 6.7323 30.2350 7.1857 # MEbsuta,Gem Tau-46 30.2350 7.1857 31.7820 7.4851 # Gem Tau-46,Gem Rho-62 31.7820 7.4851 31.8851 7.5768 # Gem Rho-62,Castor 31.8851 7.5768 28.8828 7.7216 # Castor,Gem Sigma-75 28.8828 7.7216 28.0176 7.7552 # Gem Sigma-75,Pollux 28.0176 7.7552 24.3851 7.7407 # Pollux,Gem Kappa-77 24.3851 7.7407 21.9672 7.3350 # Gem Kappa-77,Wasat 21.9672 7.3350 20.5692 7.0684 # Wasat,Gem Zeta-43 20.5692 7.0684 16.3809 6.6284 # Gem Zeta-43,Gem Gamma-24 16.3809 6.6284 20.2025 6.4828 # Gem Gamma-24,Gem Nu-18 20.2025 6.4828 22.5001 6.3827 # Gem Nu-18,Gem Mu-13 16.3809 6.6284 13.2181 6.7326 # Gem Gamma-24,Gem 30 21.9672 7.3350 16.5356 7.3018 # Wasat,Gem Lambda-54 -37.3511 21.8988 -39.5341 22.1017 # Gru Gamma,Gru Lambda -39.5341 22.1017 -41.3332 22.2602 # Gru Lambda,Gru Mu1 -41.3332 22.2602 -43.4818 22.4878 # Gru Mu1,Gru Delta1 -43.4818 22.4878 -46.8851 22.7113 # Gru Delta1,Gru Beta -46.8851 22.7113 -51.3141 22.8091 # Gru Beta,Gru Epsilon -51.3141 22.8091 -52.7522 23.0146 # Gru Epsilon,Gru Kappa -46.9482 22.1372 -46.8851 22.7113 # Gru Alpha,Gru Beta -46.8851 22.7113 -45.2350 23.1727 # Gru Beta,Gru Iota -45.2350 23.1727 -43.5161 23.1143 # Gru Iota,Gru Theta 44.9314 16.1460 42.4333 16.5684 # Her Phi-11,Her Sigma-35 42.4333 16.5684 38.9153 16.7151 # Her Sigma-35,Her Eta-44 38.9153 16.7151 31.5986 16.6880 # Her Eta-44,Her Zeta-40 31.5986 16.6880 21.4859 16.5035 # Her Zeta-40,Kornephoros 21.4859 16.5035 19.1482 16.3648 # Kornephoros,Her Gamma-20 21.4859 16.5035 14.3812 17.2437 # Kornephoros,Her Alpha1-64 46.0028 17.6578 37.2480 17.9374 # Her Iota-85,Her Theta-91 37.2480 17.9374 37.1334 17.3946 # Her Theta-91,Her Rho-75 37.1334 17.3946 36.8011 17.2506 # Her Rho-75,Her Pi-67 36.8011 17.2506 38.9153 16.7151 # Her Pi-67,Her Eta-44 36.8011 17.2506 30.9168 17.0046 # Her Pi-67,Her Epsilo-58 30.9168 17.0046 31.5986 16.6880 # Her Epsilo-58,Her Zeta-40 30.9168 17.0046 24.8320 17.2498 # Her Epsilo-58,Her Delta-65 24.8320 17.2498 26.0982 17.5115 # Her Delta-65,Her Lambda-76 26.0982 17.5115 27.7140 17.7743 # Her Lambda-76,Her Mu-86 27.7140 17.7743 29.2323 17.9626 # Her Mu-86,Her Xi-92 29.2323 17.9626 28.7510 18.1257 # Her Xi-92,Her Omicr-103 28.7510 18.1257 30.1834 17.9748 # Her Omicr-103,Her Nu-94 28.7510 18.1257 21.7667 18.3950 # Her Omicr-103,Her 109 21.7667 18.3950 20.7984 18.1460 # Her 109,Her 102 21.7667 18.3950 20.5348 18.7609 # Her 109,Her 110 20.5348 18.7609 18.1685 18.7835 # Her 110,Her 111 -42.2843 4.2334 -50.7984 2.7089 # Hor Alpha,Hor Eta -50.7984 2.7089 -52.5345 2.6234 # Hor Eta,Hor Eta -52.5345 2.6234 -54.5513 2.6776 # Hor Eta,Hor Zeta -54.5513 2.6776 -59.7309 3.0600 # Hor Zeta,Hor Mu -59.7309 3.0600 -64.0681 2.9801 # Hor Mu,Hor Beta -26.6655 14.1062 -23.1647 13.3152 # Hya Pi-49,Hya Gamma-46 -23.1647 13.3152 -33.9019 11.8816 # Hya Gamma-46,Hya Beta -33.9019 11.8816 -31.8507 11.5501 # Hya Beta,Hya Xi -31.8507 11.5501 -16.1861 10.8266 # Hya Xi,Hya Nu -16.1861 10.8266 -16.8335 10.4343 # Hya Nu,Hya Mu-42 -16.8335 10.4343 -12.3472 10.1761 # Hya Mu-42,Hya Lambda-41 -12.3472 10.1761 -13.0520 10.0848 # Hya Lambda-41,Hya Upsil2-40 -13.0520 10.0848 -14.8339 9.8579 # Hya Upsil2-40,Hya Upsil1-39 -14.8339 9.8579 -8.6517 9.4595 # Hya Upsil1-39,Hya 29 -8.6517 9.4595 -1.1345 9.6639 # Hya 29,Hya Iota-35 -1.1345 9.6639 2.2976 9.2395 # Hya Iota-35,Hya Theta-22 2.2976 9.2395 5.9358 8.9232 # Hya Theta-22,Hya Zeta-16 5.9358 8.9232 3.3862 8.7200 # Hya Zeta-16,Hya Eta-7 3.3862 8.7200 3.3346 8.6456 # Hya Eta-7,Hya Sigma-5 3.3346 8.6456 5.7009 8.6272 # Hya Sigma-5,Hya Delta-4 5.7009 8.6272 6.4171 8.7796 # Hya Delta-4,Hya Epsilo-11 6.4171 8.7796 5.9358 8.9232 # Hya Epsilo-11,Hya Zeta-16 -74.2324 3.7873 -77.2519 0.4290 # Hyi Gamma,Hyi Beta -77.2519 0.4290 -68.2679 2.6593 # Hyi Beta,Hyi Epsilon -68.2679 2.6593 -68.6518 2.3621 # Hyi Epsilon,Hyi Delta -68.6518 2.3621 -67.6319 1.9156 # Hyi Delta,Hyi Eta2 -67.6319 1.9156 -61.5643 1.9794 # Hyi Eta2,Hyi Alpha -47.2805 20.6261 -53.4340 21.3312 # Ind Alpha,Ind Theta -53.4340 21.3312 -54.9810 21.9649 # Ind Theta,Ind Pi -53.4340 21.3312 -58.4474 20.9133 # Ind Theta,Ind Beta 37.7350 22.2663 43.1151 22.5077 # Lac 1,Lac 6 43.1151 22.5077 47.6987 22.4924 # Lac 6,Lac 5 47.6987 22.4924 49.4692 22.4084 # Lac 5,Lac 4 49.4692 22.4084 52.2194 22.3927 # Lac 4,Lac Beta-3 52.2194 22.3927 50.2656 22.5211 # Lac Beta-3,Lac Alpha-7 50.2656 22.5211 47.6987 22.4924 # Lac Alpha-7,Lac 5 26.1670 9.4106 22.9641 9.5283 # Leo Kappa-1,Leo Lambda-4 22.9641 9.5283 23.7663 9.7640 # Leo Lambda-4,Leo Epsilo-17 23.7663 9.7640 26.0008 9.8793 # Leo Epsilo-17,Leo Mu-24 26.0008 9.8793 23.4168 10.2777 # Leo Mu-24,Leo Zeta-36 23.4168 10.2777 19.8358 10.3327 # Leo Zeta-36,Leo Gamma2-41 19.8358 10.3327 16.7476 10.1223 # Leo Gamma2-41,Leo Eta-30 16.7476 10.1223 11.9691 10.1394 # Leo Eta-30,Regulus 11.9691 10.1394 9.8835 9.6857 # Regulus,Leo Omicro-14 11.9691 10.1394 15.4183 11.2372 # Regulus,Leo Theta-70 15.4183 11.2372 14.5646 11.8178 # Leo Theta-70,Denebola 14.5646 11.8178 20.5176 11.2349 # Denebola,Zozca 20.5176 11.2349 19.8358 10.3327 # Zozca,Leo Gamma2-41 15.4183 11.2372 10.5195 11.3984 # Leo Theta-70,Leo Iota-78 10.5195 11.3984 6.0161 11.3522 # Leo Iota-78,Leo Sigma-77 34.1999 10.8885 36.6979 10.4645 # LMi 46,LMi Beta-31 36.6979 10.4645 35.2312 10.1238 # LMi Beta-31,LMi 21 -11.8660 5.2051 -12.9317 5.2204 # Lep Kappa-4,Lep Lambda-6 -12.9317 5.2204 -13.1666 5.3262 # Lep Lambda-6,Lep Lambda-6 -13.1666 5.3262 -16.1975 5.2154 # Lep Lambda-6,Lep Mu-5 -16.1975 5.2154 -17.8190 5.5455 # Lep Mu-5,Lep 10 -17.8190 5.5455 -14.8167 5.7823 # Lep 10,Lep Zeta-14 -14.8167 5.7823 -14.4844 5.8266 # Lep Zeta-14,Lep Zeta-14 -14.4844 5.8266 -14.1692 5.9400 # Lep Zeta-14,Lep Eta-16 -17.8190 5.5455 -20.7525 5.4706 # Lep 10,Lep Beta-9 -20.8671 5.8549 -22.4313 5.7410 # Lep Delta-15,Lep Gamma-13 -22.4313 5.7410 -20.7525 5.4706 # Lep Gamma-13,Lep Beta-9 -20.7525 5.4706 -21.2338 5.3407 # Lep Beta-9,Lep Beta-9 -21.2338 5.3407 -22.3683 5.0909 # Lep Beta-9,Lep Epsilon-2 -14.2666 15.9695 -16.7189 15.8973 # Lib 48,Lib Theta-46 -16.7189 15.8973 -15.6647 15.7346 # Lib Theta-46,Lib Eta-44 -15.6647 15.7346 -14.7823 15.5921 # Lib Eta-44,Lib Zeta4-35 -14.7823 15.5921 -9.3679 15.2835 # Lib Zeta4-35,Zuben el Chamali -9.3679 15.2835 -16.0314 14.8476 # Zuben el Chamali,Lib Alpha2-9 -16.0314 14.8476 -25.2674 15.0676 # Lib Alpha2-9,Lib Sigma-20 -25.2674 15.0676 -28.1322 15.6165 # Lib Sigma-20,Lib Upsilo-39 -28.1322 15.6165 -29.7652 15.6440 # Lib Upsilo-39,Lib Tau-40 -25.2674 15.0676 -9.3679 15.2835 # Lib Sigma-20,Zuben el Chamali -36.8011 16.1100 -38.3824 16.0016 # Lup Theta,Lup Eta -38.3824 16.0016 -41.1670 15.5856 # Lup Eta,Lup Gamma -41.1670 15.5856 -44.6850 15.3778 # Lup Gamma,Lup Epsilon -44.6850 15.3778 -48.7358 15.1990 # Lup Epsilon,Lup Kappa1 -48.7358 15.1990 -52.0819 15.2044 # Lup Kappa1,Lup Zeta -52.0819 15.2044 -47.3836 14.6990 # Lup Zeta,Lup Alpha -47.3836 14.6990 -43.1323 14.9756 # Lup Alpha,Lup Beta -43.1323 14.9756 -40.6342 15.3560 # Lup Beta,Lup Delta -40.6342 15.3560 -36.2510 15.3633 # Lup Delta,Lup Phi1 -36.2510 15.3633 -33.6154 15.8495 # Lup Phi1,Lup Chi-5 -41.1670 15.5856 -40.6342 15.3560 # Lup Gamma,Lup Delta 34.3832 9.3507 36.8011 9.3140 # Lyn Alpha-40,Lyn 38 36.8011 9.3140 41.7686 9.0107 # Lyn 38,Lyn 35 41.7686 9.0107 43.1838 8.3805 # Lyn 35,Lyn 31 43.1838 8.3805 49.1999 7.4450 # Lyn 31,Lyn 21 49.1999 7.4450 58.4188 6.9546 # Lyn 21,Lyn 15 58.4188 6.9546 58.9975 6.3266 # Lyn 15,Lyn 2 43.9344 18.9221 39.1330 19.2296 # Lyr 13,Lyr Eta-20 39.1330 19.2296 38.1361 19.2728 # Lyr Eta-20,Lyr Theta-21 38.1361 19.2728 38.7835 18.6154 # Lyr Theta-21,Vega 38.7835 18.6154 39.6659 18.7388 # Vega,Lyr Epsilo1-4 38.7835 18.6154 37.5975 18.7460 # Vega,Lyr Zeta1-6 37.5975 18.7460 33.3519 18.8343 # Lyr Zeta1-6,Sheliak 33.3519 18.8343 32.6815 18.9821 # Sheliak,Sulaphat 32.6815 18.9821 36.9672 18.8954 # Sulaphat,Lyr Delta1-11 36.9672 18.8954 37.5975 18.7460 # Lyr Delta1-11,Lyr Zeta1-6 38.7835 18.6154 36.0505 18.3312 # Vega,Lyr Kappa-1 -74.7481 6.1704 -76.3352 5.5310 # Men Alpha,Men Gamma -76.3352 5.5310 -74.9314 4.9194 # Men Gamma,Men Eta -74.9314 4.9194 -71.2989 5.0451 # Men Eta,Men Beta -40.8003 21.3461 -32.1659 21.2988 # Mic Theta2,Mic Epsilon -32.1659 21.2988 -32.2518 21.0211 # Mic Epsilon,Mic Gamma -32.2518 21.0211 -33.7644 20.8327 # Mic Gamma,Mic Beta -2.9851 8.1429 -9.5512 7.6872 # Mon Zeta-29,Mon Alpha-26 -9.5512 7.6872 -0.4813 7.1979 # Mon Alpha-26,Mon 21 -0.4813 7.1979 -7.0187 6.4802 # Mon 21,Mon Beta-11 -7.0187 6.4802 -6.2682 6.2471 # Mon Beta-11,Mon Gamma-5 -6.2682 6.2471 4.5837 6.3961 # Mon Gamma-5,Mon Epsilon-8 4.5837 6.3961 7.3167 6.5481 # Mon Epsilon-8,Mon 13 -71.5338 13.0378 -69.1331 12.6196 # Mus Delta,Mus Alpha -69.1331 12.6196 -72.1182 12.5413 # Mus Alpha,Mus Gamma -68.1018 12.7712 -69.1331 12.6196 # Mus Beta,Mus Alpha -69.1331 12.6196 -67.9528 12.2926 # Mus Alpha,Mus Zeta1 -67.9528 12.2926 -66.8011 11.8041 # Mus Zeta1,Mus Mu -47.5498 16.4527 -50.0651 16.2835 # Nor Epsilon,Nor Gamma1 -50.0651 16.2835 -50.1510 16.3304 # Nor Gamma1,Nor Gamma2 -50.1510 16.3304 -49.2171 16.0535 # Nor Gamma2,Nor Eta -83.6690 14.4485 -77.3837 21.6910 # Oct Delta,Oct Nu -77.3837 21.6910 -80.4318 22.3335 # Oct Nu,Oct Epsilon -80.4318 22.3335 -81.3657 22.7671 # Oct Epsilon,Oct Beta -81.3657 22.7671 -83.6690 14.4485 # Oct Beta,Oct Delta -24.9810 17.3667 -15.7162 17.1727 # Oph 44,Oph Eta-35 -15.7162 17.1727 -10.5653 16.6196 # Oph Eta-35,Oph Zeta-13 -10.5653 16.6196 -16.5986 16.5188 # Oph Zeta-13,Oph Phi-8 -10.5653 16.6196 -4.6811 16.3049 # Oph Zeta-13,Oph Epsilon-2 -4.6811 16.3049 -3.6841 16.2388 # Oph Epsilon-2,Oph Epsilon-2 -3.6841 16.2388 1.9824 16.5149 # Oph Epsilon-2,Oph Lambda-10 1.9824 16.5149 9.3679 16.9611 # Oph Lambda-10,Oph Kappa-27 9.3679 16.9611 10.1528 16.8996 # Oph Kappa-27,Oph Iota-25 9.3679 16.9611 12.5478 17.5818 # Oph Kappa-27,Ras Alhague 12.5478 17.5818 9.5512 18.1223 # Ras Alhague,Oph 72 9.5512 18.1223 2.4809 18.0906 # Oph 72,Oph 70 2.4809 18.0906 -9.7689 17.9840 # Oph 70,Oph Nu-64 2.4809 18.0906 2.9164 18.0107 # Oph 70,Oph 67 2.9164 18.0107 2.6986 17.7976 # Oph 67,Oph Gamma-62 2.6986 17.7976 4.5665 17.7243 # Oph Gamma-62,Kelb al Rai 4.5665 17.7243 4.1310 17.4416 # Kelb al Rai,Oph Sigma-49 20.1337 6.0649 14.1979 6.1990 # Ori Chi2-62,Ori Xi-70 14.1979 6.1990 9.6314 6.0394 # Ori Xi-70,Ori Mu-61 9.6314 6.0394 7.4026 5.9194 # Ori Mu-61,Betelgeuse 7.4026 5.9194 -1.9309 5.6795 # Betelgeuse,Ori Sigma-48 -1.9309 5.6795 -9.6658 5.7957 # Ori Sigma-48,Ori Kappa-53 -9.6658 5.7957 -8.1990 5.2422 # Ori Kappa-53,Rigel -8.1990 5.2422 -0.2807 5.5332 # Rigel,Ori Delta-34 -0.2807 5.5332 6.3312 5.4190 # Ori Delta-34,Bellatrix 6.3312 5.4190 9.9351 5.5856 # Bellatrix,Ori Lambda-39 9.9351 5.5856 7.4026 5.9194 # Ori Lambda-39,Betelgeuse 6.3312 5.4190 6.9500 4.8304 # Bellatrix,Ori Pi3-1 6.9500 4.8304 5.5978 4.8533 # Ori Pi3-1,Ori Pi4-3 5.5978 4.8533 2.4351 4.9038 # Ori Pi4-3,Ori Pi5-8 2.4351 4.9038 1.7017 4.9756 # Ori Pi5-8,Ori Pi6-10 6.9500 4.8304 8.8980 4.8434 # Ori Pi3-1,Ori Pi2-2 8.8980 4.8434 10.1528 4.9148 # Ori Pi2-2,Ori Pi1-7 -56.7343 20.4271 -66.1995 20.7487 # Pav Alpha,Pav Beta -66.1995 20.7487 -66.7496 20.6991 # Pav Beta,Pav Beta -66.7496 20.6991 -72.8974 20.0096 # Pav Beta,Pav Epsilon -72.8974 20.0096 -71.4192 18.7174 # Pav Epsilon,Pav Zeta -71.4192 18.7174 -64.7156 17.7617 # Pav Zeta,Pav Eta -64.7156 17.7617 -63.6671 18.1429 # Pav Eta,Pav Pi -63.6671 18.1429 -61.4841 18.3874 # Pav Pi,Pav Xi -61.4841 18.3874 -62.1831 18.8702 # Pav Xi,Pav Lambda -62.1831 18.8702 -66.1652 20.1448 # Pav Lambda,Pav Delta -66.1652 20.1448 -66.1995 20.7487 # Pav Delta,Pav Beta -66.1995 20.7487 -65.3516 21.4405 # Pav Beta,Pav Gamma 9.8663 21.7361 6.1822 22.1700 # Eniph,Peg Theta-26 6.1822 22.1700 10.8174 22.6910 # Peg Theta-26,Homam 10.8174 22.6910 12.1639 22.7785 # Homam,Peg Xi-46 12.1639 22.7785 15.2006 23.0795 # Peg Xi-46,Markab 15.2006 23.0795 15.1834 0.2204 # Markab,Algenib 15.1834 0.2204 29.0833 0.1394 # Algenib,Alpheratz 29.0833 0.1394 28.0692 23.0627 # Alpheratz,Peg Beta-53 28.0692 23.0627 15.2006 23.0795 # Peg Beta-53,Markab 25.6341 21.7437 25.3362 22.1166 # Peg Kappa-10,Peg Iota-24 25.3362 22.1166 30.2178 22.7166 # Peg Iota-24,Peg Eta-44 30.2178 22.7166 28.0692 23.0627 # Peg Eta-44,Peg Beta-53 28.0692 23.0627 24.6028 22.8335 # Peg Beta-53,Peg Mu-48 24.6028 22.8335 23.5486 22.7755 # Peg Mu-48,Peg Lambda-47 23.5486 22.7755 17.3492 21.7418 # Peg Lambda-47,Peg 9 50.3515 4.1096 48.3977 4.2479 # Per Lambda-47,Per Mu-51 48.3977 4.2479 47.6987 4.1444 # Per Mu-51,Per 48 47.6987 4.1444 47.7847 3.7151 # Per 48,Per Delta-39 47.7847 3.7151 48.1858 3.6077 # Per Delta-39,Per Psi-37 48.1858 3.6077 49.8473 3.4049 # Per Psi-37,Mirfak 49.8473 3.4049 53.5028 3.0798 # Mirfak,Per Gamma-23 53.5028 3.0798 55.8806 2.8449 # Per Gamma-23,Per Eta-15 47.7847 3.7151 42.5650 3.7533 # Per Delta-39,Per Nu-41 42.5650 3.7533 39.9982 3.9637 # Per Nu-41,Per Epsilo-45 39.9982 3.9637 35.7812 3.9828 # Per Epsilo-45,Per Xi-46 35.7812 3.9828 31.8851 3.9022 # Per Xi-46,Per Zeta-44 31.8851 3.9022 32.2862 3.7384 # Per Zeta-44,Per Omicro-38 49.8473 3.4049 49.6010 3.1513 # Mirfak,Per Iota 49.6010 3.1513 49.2171 2.7361 # Per Iota,Per Theta-13 49.6010 3.1513 44.8511 3.1581 # Per Iota,Per Kappa-27 44.8511 3.1581 40.9493 3.1360 # Per Kappa-27,Algol 40.9493 3.1360 38.8351 3.0860 # Algol,Per Rho-25 38.8351 3.0860 39.6487 2.9794 # Per Rho-25,Per Pi-22 -49.0681 1.5206 -43.3156 1.4729 # Phe Delta,Phe Gamma -43.3156 1.4729 -45.5158 1.2529 # Phe Gamma,Phe Nu -45.5158 1.2529 -46.7190 1.1012 # Phe Nu,Phe Beta -46.7190 1.1012 -42.3015 0.4377 # Phe Beta,Phe Kappa -42.3015 0.4377 -45.7335 0.1566 # Phe Kappa,Phe Epsilon -45.7335 0.1566 -42.5994 23.5845 # Phe Epsilon,Phe Iota -42.5994 23.5845 -45.4814 23.6307 # Phe Iota,Phe Theta -45.4814 23.6307 -52.7350 23.9821 # Phe Theta,Phe Pi -46.7190 1.1012 -55.2331 1.1394 # Phe Beta,Phe Zeta -55.2331 1.1394 -57.4505 0.7223 # Phe Zeta,Phe Eta -57.4505 0.7223 -45.7335 0.1566 # Phe Eta,Phe Epsilon -61.9310 6.8029 -56.1671 5.8304 # Pic Alpha,Pic Gamma -56.1671 5.8304 -51.0505 5.7876 # Pic Gamma,Pic Beta 30.0860 1.1944 27.2499 1.3243 # Psc Tau-83,Psc Upsilo-90 27.2499 1.3243 24.5856 1.2288 # Psc Upsilo-90,Psc Phi-85 24.5856 1.2288 15.3324 1.5244 # Psc Phi-85,Psc Eta-99 15.3324 1.5244 9.1501 1.7567 # Psc Eta-99,Psc Omicr-110 9.1501 1.7567 2.7502 2.0340 # Psc Omicr-110,Kaitain 2.7502 2.0340 5.4832 1.6906 # Kaitain,Psc Nu-106 5.4832 1.6906 6.1306 1.5027 # Psc Nu-106,Psc Mu-98 6.1306 1.5027 7.8839 1.0489 # Psc Mu-98,Psc Epsilo-71 7.8839 1.0489 7.5860 0.8109 # Psc Epsilo-71,Psc Delta-63 7.5860 0.8109 6.8526 23.9882 # Psc Delta-63,Psc Omega-28 6.8526 23.9882 5.6150 23.6654 # Psc Omega-28,Psc Iota-17 5.6150 23.6654 6.3656 23.4661 # Psc Iota-17,Psc Theta-10 6.3656 23.4661 3.2659 23.2862 # Psc Theta-10,Psc Gamma-6 3.2659 23.2862 1.2490 23.4489 # Psc Gamma-6,Psc Kappa-8 1.2490 23.4489 1.7647 23.7006 # Psc Kappa-8,Psc Lambda-18 1.7647 23.7006 5.6150 23.6654 # Psc Lambda-18,Psc Iota-17 -29.6162 22.9607 -27.0321 22.6773 # Fomalhaut,PsA Epsilo-18 -27.0321 22.6773 -27.7655 22.2384 # PsA Epsilo-18,PsA Lambda-16 -27.7655 22.2384 -30.8824 21.7957 # PsA Lambda-16,PsA Theta-10 -30.8824 21.7957 -33.0138 21.7487 # PsA Theta-10,PsA Iota-9 -33.0138 21.7487 -32.9852 22.1395 # PsA Iota-9,PsA Upsilon -32.9852 22.1395 -32.3320 22.5249 # PsA Upsilon,PsA Beta-17 -32.3320 22.5249 -32.8649 22.8755 # PsA Beta-17,PsA Delta-23 -32.8649 22.8755 -32.5325 22.9321 # PsA Delta-23,PsA Delta-23 -32.5325 22.9321 -29.6162 22.9607 # PsA Delta-23,Fomalhaut -19.2342 8.1505 -22.8667 7.9477 # Pup 16,Pup 12 -22.8667 7.9477 -24.8492 7.8216 # Pup 12,Pup Omicron -24.8492 7.8216 -26.7972 7.6467 # Pup Omicron,Pup 3 -26.7972 7.6467 -28.3671 7.5894 # Pup 3,Pup 1 -28.3671 7.5894 -30.9512 7.5115 # Pup 1,CMa Eta-31 -30.9512 7.5115 -37.0818 7.2857 # CMa Eta-31,Pup Pi -37.0818 7.2857 -43.1838 6.6295 # Pup Pi,Pup Nu -43.1838 6.6295 -50.5979 6.8323 # Pup Nu,Pup Tau -50.5979 6.8323 -44.6334 7.2254 # Pup Tau,Pup Sigma -44.6334 7.2254 -43.2984 7.4874 # Pup Sigma,Pup Sigma -43.2984 7.4874 -39.9982 8.0596 # Pup Sigma,Pup Zeta -39.9982 8.0596 -24.2991 8.1257 # Pup Zeta,Pup Rho-15 -24.2991 8.1257 -22.8667 7.9477 # Pup Rho-15,Pup 12 -35.2999 8.6685 -33.1857 8.7265 # Pyx Beta,Pyx Alpha -33.1857 8.7265 -27.7025 8.8423 # Pyx Alpha,Pyx Gamma -64.8015 3.7361 -62.4639 4.2407 # Ret Beta,Ret Theta -62.4639 4.2407 -59.3011 4.2743 # Ret Theta,Ret Epsilon -59.3011 4.2743 -61.0658 4.0218 # Ret Epsilon,Ret Iota -61.0658 4.0218 -61.3982 3.9790 # Ret Iota,Ret Gamma -61.3982 3.9790 -64.8015 3.7361 # Ret Gamma,Ret Beta 19.9848 20.0856 19.4806 19.9790 # Sge Eta-16,Sge Gamma-12 19.4806 19.9790 18.5352 19.7896 # Sge Gamma-12,Sge Delta-7 18.5352 19.7896 17.4695 19.6838 # Sge Delta-7,Sge Beta-6 18.5352 19.7896 18.0023 19.6685 # Sge Delta-7,Sge Alpha-5 -44.7824 19.3866 -41.8660 19.9210 # Sgr Beta1,Sgr Iota -41.8660 19.9210 -40.5998 19.3977 # Sgr Iota,Sgr Alpha -41.8660 19.9210 -35.2656 19.9955 # Sgr Iota,Sgr Theta1 -35.2656 19.9955 -34.6811 19.9974 # Sgr Theta1,Sgr Theta1 -34.6811 19.9974 -27.7025 20.0444 # Sgr Theta1,Sgr 62 -27.7025 20.0444 -27.1639 19.9489 # Sgr 62,Sgr 59 -27.1639 19.9489 -24.8836 19.6116 # Sgr 59,Sgr 51 -24.8836 19.6116 -25.2503 19.2590 # Sgr 51,Sgr Psi-42 -25.2503 19.2590 -27.6681 19.1154 # Sgr Psi-42,Sgr Zeta-38 -27.6681 19.1154 -29.8683 19.0432 # Sgr Zeta-38,Sgr Zeta-38 -29.8683 19.0432 -26.9806 18.7605 # Sgr Zeta-38,Sgr Phi-27 -26.9806 18.7605 -26.2816 18.9210 # Sgr Phi-27,Sgr Sigma-34 -26.2816 18.9210 -27.6681 19.1154 # Sgr Sigma-34,Sgr Zeta-38 -26.2816 18.9210 -21.7323 19.0780 # Sgr Sigma-34,Sgr Omicro-39 -21.7323 19.0780 -21.0161 19.1628 # Sgr Omicro-39,Sgr Pi-41 -21.0161 19.1628 -18.9477 19.2938 # Sgr Pi-41,Sgr Rho2-45 -18.9477 19.2938 -17.8362 19.3610 # Sgr Rho2-45,Sgr Rho2-45 -21.7323 19.0780 -21.1020 18.9622 # Sgr Omicro-39,Sgr Xi2-37 -26.9806 18.7605 -25.4164 18.4660 # Sgr Phi-27,Sgr Lambda-22 -25.4164 18.4660 -21.0505 18.2296 # Sgr Lambda-22,Sgr Mu-13 -25.4164 18.4660 -29.8167 18.3499 # Sgr Lambda-22,Sgr 18 -29.8167 18.3499 -34.3832 18.4026 # Sgr 18,Kaus Australis -34.3832 18.4026 -36.7495 18.2938 # Kaus Australis,Sgr Eta -29.8167 18.3499 -30.4183 18.0967 # Sgr 18,Sgr Gamma2-10 -30.4183 18.0967 -27.8171 17.7926 # Sgr Gamma2-10,Sgr 3 -19.8014 16.0906 -20.6666 16.1135 # Sco Omega1-9,Sco Omega1-9 -20.6666 16.1135 -19.4347 16.1994 # Sco Omega1-9,Sco Nu-14 -19.4347 16.1994 -11.3675 16.0722 # Sco Nu-14,Sco Xi -11.3675 16.0722 -19.8014 16.0906 # Sco Xi,Sco Omega1-9 -19.8014 16.0906 -22.6146 16.0054 # Sco Omega1-9,Sco Delta-7 -22.6146 16.0054 -26.0982 15.9806 # Sco Delta-7,Sco Pi-6 -26.0982 15.9806 -29.1979 15.9477 # Sco Pi-6,Sco Rho-5 -22.6146 16.0054 -25.5826 16.3526 # Sco Delta-7,Sco Sigma-20 -25.5826 16.3526 -26.4191 16.4893 # Sco Sigma-20,Antares -26.4191 16.4893 -28.2010 16.5978 # Antares,Sco Tau-23 -28.2010 16.5978 -34.2858 16.8362 # Sco Tau-23,Sco Epsilo-26 -34.2858 16.8362 -34.6983 16.5230 # Sco Epsilo-26,Sco Epsilo-26 -34.6983 16.5230 -35.2484 16.6062 # Sco Epsilo-26,Sco Epsilo-26 -35.2484 16.6062 -34.2858 16.8362 # Sco Epsilo-26,Sco Epsilo-26 -34.2858 16.8362 -38.0329 16.8644 # Sco Epsilo-26,Sco Mu1 -38.0329 16.8644 -42.3473 16.9095 # Sco Mu1,Sco Zeta2 -42.3473 16.9095 -43.2354 17.2021 # Sco Zeta2,Sco Eta -43.2354 17.2021 -42.9833 17.6215 # Sco Eta,Sco Theta -42.9833 17.6215 -40.1185 17.7926 # Sco Theta,Sco Iota1 -40.1185 17.7926 -39.0184 17.7078 # Sco Iota1,Sco Kappa -39.0184 17.7078 -37.0990 17.5600 # Sco Kappa,Shaula -40.1185 17.7926 -37.0360 17.8304 # Sco Iota1,Sco Kappa -29.3526 0.9767 -28.9687 0.3583 # Scl Alpha,Scl Iota -28.9687 0.3583 -28.1150 23.8156 # Scl Iota,Scl Delta -28.1150 23.8156 -32.5154 23.3133 # Scl Delta,Scl Gamma -32.5154 23.3133 -37.8152 23.5493 # Scl Gamma,Scl Beta -4.7326 18.7861 -8.2334 18.5868 # Sct Beta,Sct Alpha -8.2334 18.5868 -14.5474 18.4867 # Sct Alpha,Sct Gamma -8.2334 18.5868 -8.9324 18.3946 # Sct Alpha,Sct Zeta -3.4148 15.8266 2.1830 15.8385 # Ser 36,Ser Omega-34 2.1830 15.8385 4.4691 15.8465 # Ser Omega-34,Ser Epsilo-37 4.4691 15.8465 6.4171 15.7376 # Ser Epsilo-37,Unukalhay 6.4171 15.7376 10.5310 15.5799 # Unukalhay,Ser Delta-13 10.5310 15.5799 15.4183 15.7693 # Ser Delta-13,Ser Beta-28 15.4183 15.7693 15.6475 15.9404 # Ser Beta-28,Ser Gamma-41 15.6475 15.9404 18.1341 15.8121 # Ser Gamma-41,Ser Kappa-35 18.1341 15.8121 15.4183 15.7693 # Ser Kappa-35,Ser Beta-28 -0.6360 10.5046 -0.3667 10.1322 # Sex Delta-29,Sex Alpha-15 -0.3667 10.1322 -8.1016 9.8751 # Sex Alpha-15,Sex Gamma-8 28.6021 5.4385 22.9527 4.7040 # Alnath,Tau Tau-94 22.9527 4.7040 19.1654 4.4767 # Tau Tau-94,Tau Epsilo-74 19.1654 4.4767 17.9164 4.4244 # Tau Epsilo-74,Tau Delta3-68 17.9164 4.4244 17.5325 4.3824 # Tau Delta3-68,Tau Delta1-61 17.5325 4.3824 15.6188 4.3300 # Tau Delta1-61,Tau Gamma-54 15.6188 4.3300 15.8652 4.4779 # Tau Gamma-54,Tau Theta2-78 15.8652 4.4779 16.5012 4.5982 # Tau Theta2-78,Aldebaran 16.5012 4.5982 21.1307 5.6272 # Aldebaran,Tau Zeta-123 15.6188 4.3300 12.4848 4.0111 # Tau Gamma-54,Tau Lambda-35 12.4848 4.0111 12.9317 3.5145 # Tau Lambda-35,Tau 5 12.9317 3.5145 9.7174 3.4526 # Tau 5,Tau Xi-2 9.7174 3.4526 9.0184 3.4133 # Tau Xi-2,Tau Omicron-1 12.4848 4.0111 8.8808 4.2582 # Tau Lambda-35,Tau Mu-49 8.8808 4.2582 5.9817 4.0523 # Tau Mu-49,Tau Nu-38 -45.9512 18.1872 -45.9684 18.4496 # Tel Epsilon,Tel Alpha -45.9684 18.4496 -49.0681 18.4806 # Tel Alpha,Tel Zeta 29.5646 1.8843 33.2831 2.0493 # Tri Alpha-2,Tri Epsilon-3 33.2831 2.0493 34.9848 2.1589 # Tri Epsilon-3,Tri Beta-4 34.9848 2.1589 33.8332 2.2884 # Tri Beta-4,Tri Gamma-9 33.8332 2.2884 29.5646 1.8843 # Tri Gamma-9,Tri Alpha-2 -69.0185 16.8106 -63.4150 15.9191 # TrA Alpha,TrA Beta -63.4150 15.9191 -66.3141 15.6116 # TrA Beta,TrA Epsilon -66.3141 15.6116 -68.6690 15.3152 # TrA Epsilon,TrA Gamma -68.6690 15.3152 -69.0185 16.8106 # TrA Gamma,TrA Alpha -64.9505 22.4557 -60.2522 22.3083 # Tuc Delta,Tuc Alpha -60.2522 22.3083 -58.2354 23.2907 # Tuc Alpha,Tuc Gamma -58.2354 23.2907 -65.5693 23.9981 # Tuc Gamma,Tuc Epsilon -65.5693 23.9981 -64.8646 0.3346 # Tuc Epsilon,Tuc Zeta -64.8646 0.3346 -62.9509 0.5256 # Tuc Zeta,Tuc Beta3 -62.9509 0.5256 -58.2354 23.2907 # Tuc Beta3,Tuc Gamma 49.2973 13.7922 54.9180 13.3988 # Benetnasch,Mizar 54.9180 13.3988 55.9493 12.9007 # Mizar,Alioth 55.9493 12.9007 57.0150 12.2571 # Alioth,Megrez 57.0150 12.2571 53.6861 11.8973 # Megrez,Phecda 53.6861 11.8973 56.3676 11.0306 # Phecda,Merak 56.3676 11.0306 61.7477 11.0623 # Merak,Dubhe 53.6861 11.8973 47.7675 11.7674 # Phecda,UMa Chi-63 47.7675 11.7674 31.5184 11.3029 # UMa Chi-63,UMa Xi-53 47.7675 11.7674 44.4844 11.1612 # UMa Chi-63,UMa Psi-52 44.4844 11.1612 42.8974 10.2850 # UMa Psi-52,UMa Lambda-33 44.4844 11.1612 41.4821 10.3721 # UMa Psi-52,UMa Mu-34 61.7477 11.0623 63.0483 9.5256 # Dubhe,UMa 23 63.0483 9.5256 60.7163 8.5046 # UMa 23,UMa Omicron-1 56.3676 11.0306 54.0528 9.8682 # Merak,UMa Phi-30 54.0528 9.8682 59.0318 9.8495 # UMa Phi-30,UMa Upsilo-29 54.0528 9.8682 51.6693 9.5474 # UMa Phi-30,UMa Theta-25 51.6693 9.5474 48.0311 8.9867 # UMa Theta-25,Talitha 48.0311 8.9867 47.1487 9.0604 # Talitha,UMa Kappa-12 47.1487 9.0604 51.6693 9.5474 # UMa Kappa-12,UMa Theta-25 89.2496 2.5302 86.5854 17.5367 # Polaris,UMi Delta-23 86.5854 17.5367 82.0361 16.7663 # UMi Delta-23,UMi Epsilo-22 82.0361 16.7663 77.7848 15.7346 # UMi Epsilo-22,UMi Zeta-16 77.7848 15.7346 74.1522 14.8450 # UMi Zeta-16,Kocab 74.1522 14.8450 71.8317 15.3457 # Kocab,UMi Gamma-13 71.8317 15.3457 75.7508 16.2915 # UMi Gamma-13,UMi Eta-21 75.7508 16.2915 77.7848 15.7346 # UMi Eta-21,UMi Zeta-16 -49.4176 10.7796 -48.2144 10.6215 # Vel Mu,Vel Mu -48.2144 10.6215 -42.1181 10.2456 # Vel Mu,Ant Eta -42.1181 10.2456 -40.4680 9.5115 # Ant Eta,Vel Psi -40.4680 9.5115 -43.4187 9.1333 # Vel Psi,Vel Lambda -43.4187 9.1333 -42.6338 8.7399 # Vel Lambda,Vel Lambda -42.6338 8.7399 -42.9833 8.6272 # Vel Lambda,Vel Lambda -42.9833 8.6272 -47.3320 8.1589 # Vel Lambda,Vel Gamma2 -47.3320 8.1589 -54.7003 8.7445 # Vel Gamma2,Vel Delta -54.7003 8.7445 -54.9982 9.3682 # Vel Delta,Vel Kappa -54.9982 9.3682 -54.5685 9.9477 # Vel Kappa,Vel Phi -54.5685 9.9477 -49.4176 10.7796 # Vel Phi,Vel Mu 8.7147 12.0867 6.5145 11.7644 # Vir Omicron-9,Vir Nu-3 6.5145 11.7644 1.7475 11.8449 # Vir Nu-3,Zawijah 1.7475 11.8449 -0.6646 12.3316 # Zawijah,Vir Eta-15 -0.6646 12.3316 -1.4324 12.6945 # Vir Eta-15,Vir Gamma-29 -1.4324 12.6945 3.3862 12.9267 # Vir Gamma-29,Vir Delta-43 3.3862 12.9267 10.9492 13.0359 # Vir Delta-43,Vindemiatrix 3.3862 12.9267 -0.5844 13.5783 # Vir Delta-43,Vir Zeta-79 -0.5844 13.5783 -11.1498 13.4198 # Vir Zeta-79,Spica -11.1498 13.4198 -5.5348 13.1654 # Spica,Vir Theta-51 -5.5348 13.1654 -1.4324 12.6945 # Vir Theta-51,Vir Gamma-29 -0.5844 13.5783 1.5355 14.0272 # Vir Zeta-79,Vir Tau-93 1.5355 14.0272 1.8850 14.7705 # Vir Tau-93,Vir 109 -11.1498 13.4198 -10.2674 14.2151 # Spica,Vir Kappa-98 -10.2674 14.2151 -5.9989 14.2666 # Vir Kappa-98,Vir Iota-99 -5.9989 14.2666 -5.6494 14.7178 # Vir Iota-99,Vir Mu-107 -66.3829 9.0405 -66.1308 8.4290 # Vol Alpha,Vol Beta -66.1308 8.4290 -68.6174 8.1318 # Vol Beta,Vol Epsilon -68.6174 8.1318 -67.9528 7.2804 # Vol Epsilon,Vol Delta -67.9528 7.2804 -70.4853 7.1452 # Vol Delta,Vol Gamma1 -70.4853 7.1452 -72.5995 7.6967 # Vol Gamma1,Vol Zeta -72.5995 7.6967 -68.6174 8.1318 # Vol Zeta,Vol Epsilon 24.0642 19.8912 24.6486 19.4783 # Vul 13,Vul Alpha-6 24.6486 19.4783 21.3828 19.2701 # Vul Alpha-6,Vul 1 4.1998 18.9366 -2.8820 18.3549 # Ser Theta1-63,Ser Eta-58 -2.8820 18.3549 -12.8686 17.6899 # Ser Eta-58,Ser Omicro-56 -12.8686 17.6899 -15.3839 17.6261 # Ser Omicro-56,Ser Xi-55 -15.3839 17.6261 -12.8343 17.3473 # Ser Xi-55,Ser Nu-53 xplanet-1.3.0/xplanet/arcs/README0000644000175000017500000000111010423221014013350 00000000000000Each line should have the following syntax: lat1 lon1 lat2 lon2 where all values are in degrees. In addition, the keywords "color", "spacing", and "thickness" are supported as in the example below: 33.9 -118.4 52.3 4.8 color=SpringGreen spacing=0.5 thickness=2 # LAX-AMS Valid values for "color" are the same as for the -color option. The value for spacing defines the distance between dots on the great arc. The default is 0.1 degree. Delimiters (whitespace, tabs, or commas) are not permitted in any of these keyword/value pairs. Anything after the # character is ignored. xplanet-1.3.0/xplanet/fonts/0000755000175000017500000000000011731372543013001 500000000000000xplanet-1.3.0/xplanet/fonts/FreeMonoBold.ttf0000644000175000017500000052565010411352756015766 00000000000000pGDEF 0GPOSZP,GSUB'`|OS/2x+pVcmap>cvt !ydgasphglyfYphead٠u7X6hheam7$hmtx'MJ>7$loca^mtGpmaxp_H namef_hwpost?Rlt6 ( 0>DFLTlatnkernZ2@ft(6Dj4Zw $79:<_} s cPd $79:< $79:< $fGtRqUkVjWYZ\fffg $79:< $79:<$79:< $79:<}} H(nDvH2H.T^h    " | j  4 b B H V l z $2@N\jp#&*24789:<DE-FGHRTWXYZ\m$29:< $+.2 $-79:;<XE$-2DHLMRUX $79:<$&*267DHRX\ $&*26789:<X\$&*2DHRX $79:;<`N$-DHR&*2789:<DHRX\( $79:<W,~l$&*-269 :<DFHJLMRUVXY Z m $PQU$n\|$&*267 DHJLRUX\m$$&*267DHJLRUX\m &24HRX\$xj{$&*267DHJLRSXYmY\MYZ\Z\K NWYZ[\DHILMORVW DHO\7MqDHJRVXY\S YZ\7SYZ\7WYZ[\W\FX)/DFGHIJKLMNOP$Q RSTUVWXYZ[\]W6DHKR xdDFJORVDFHJORVDFHRTzeDFHJORV &*24789:<&*24789:<DE-FGHRTWXYZ\m &*24789:< &*24789:<&*24789:<DE-FGRTWXYZ\m&*24789:<DE-FGHRTWXYZ\m$79<$79:<79<79<$79:;<$$$PQU$$EPQUYZ\YZ\YZ\YZ\YZ \YZ\YZ\YZ\YZ\WWYZ[\$')*-/13 5= DFHLN\,238=?BDG ,latnliga: 0-OLIM,ILX1  PxPfEd ZmxZ ~3TY\akmu"(7uz~_   " & 0 7 : < F I K d !!!"!'!+!_!"""""""a"e#%%%%%%%%%& &7&;&l $PV[_emoy!'7tz~    & 0 2 9 < D H K d p !!!"!&!*!S!"""""""`"d#%%%%%%%%%&&0&9&i|{yxurqNF@ Zlkif]\[ZSRQ9.p@}߽ߗߖi ~{utho  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkvjsgwl|cnm}byqz!y!n./<2<2/<2<23!%!!!M f!X}~%"'&'&547632#"'&5476;2{ (' +2 H)#)%  .') 3*$'% )8Z3"'&53"'&5  Z!!>TX32+32+#"'&57##"'&54?#"'&5476;7#"'&5476;7676323767632#3   "     H 2#    !!  !  !  G  vGH j  ?!  j   jS`632#"'&'&#"#"'&=&'#"'&=47632327654'&/&'&54767547632_  %  + .JKAW%*Y"+ +$ 8G ; JD"+ j$ ! * ( )%*C`1S#  S  =!  )+j O/  P i 4DT2#"'&5476"327654'&#"'&54727%6322#"'&5476"327654'&J)8%.F*8%.*&, (j J)8&.E*8%.* '* (i;$.D*8&.D+A&, &. v vK;$.D*8&.D+A&, &. K&9@%73232+'#"'&547&'47632632&'"'32m5!   = )Ho/` :+3!%)%"/T5RR ! 4 I$1g8?!F/"  !(x4:8lZ3"'&5 Z!gx2#"'&'&54767676"  ee   k[ x   'ugUx2#"'&547654'&5476k\ "  ee  x'  Sn8'&'&5476325476327632#"'&/"'&547V+ V V ,V444 t Y!  Y #G HH *.0'%#"'&=#"'&5476;54763232#^ !  !    "  b_ 73#"'&547ۄ  *.I%!"'&54763!2!  !   wu#"'&5476;25($)% $(% )S "'&54767632  AbY' ' S~$2#"'&=4763276=4'&#",9!J2D9!J8=F=F~xEZ_N%xEZ_N;mq*L)7mq*L)S~ 32#!"'&5476;#"'&54767^e  "  eW   ~   6~/73632!56767654'&#"#"'&54767632.:0_3#>#  * >^k>,':d6 Xi,W2) ! +2 8H4F:2 5B~B327654'&#"#"'&547632#"'&547632327654'&'&'&'476(2 @@# E=Lc92= q?>z0 #U_&9 41! '6  .":0DB- 7`T9/1!  "&2  &# Kn22+"'&5476;5!55;=; "  &n20&2 &SBn6632#"'&5476322327654'&'&#"#"'&5!2#8+g=/7:t{< $@ 96B " .   sOn;/P=Ta5#7/ J0"M0@M,  F O=TsF2 (Z UrV@J2C )<*4W11,mG03%#32+"54763#"'&5476;2+"'&5476;/  B ?!  #    @NO: 2    ;G"-87#"'&5476;2#!"'&547637327654'&+3254'&'&+^!  h8$<jP1D"  sqT <f(%>d B+8?/5\Z+ -/ 6%!4U9632#"'&'&'&'&#"32767632#"'&=47632   +6\2"S0BH& 5EsTEXLlED3 T!  G/@@`, $%2XHgBRH  &G'7"'476;2+"'&5476;27676=4'&+J; sLCFG}! 1koL()-,Mnd2XOo/nIK ,$-H.H53 &GB7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&= )"  !   U &  4!    !  2! ' q!   &G?732+"'&5476;#"'&54763!#"'&=!3547632#"'&=d!  "  !   U       3!  q!  !PUD%#"'&'&'4=4767632672#"'&'&'&#"3275#"'&5476;2&fMO<NNzQ@    TU/5-4_E8d"  ! 6F?gGrSM  N! - /5P@U&,E  &EGM%#32+"'&5476;&'476;2+35#"'&5476;232+"'&5476;!  y!  2 e!    e! 4!  y    -   +  SG%32#!"'&5476;#"'&54763!2#^e B  ee!  .   2   6eG.#"'5476323276765#"'&54763!2#* A\T E09&w!  !  M/ 8A"  !`$    ZGH4;2#32+&'&'32+"'&5476;#"'&5476;2+7&UBd! >UD   n=P<#  "  !  !  #3 2- 9 3l     !;G)3547632!"'&5476;#"'&5476;2# ("  99!    \!    oH732+"'&567&'47633322+"'&5476;##  ! 63 nn! 4; "  #o[  /.) +2 !PG032+"'&567#"'&5476;#"'&5476;2###!  ! 6!  s#!  =c  / x$  2CU2#"'&5476"327654'&,gR^URptRQUQqQ6,B1@O7-B1UMZ}ZV[Y~ZVdG:La>/F:Kc?. G)4732+"'&5476;#"'&5476;2#327654'&'c  "  !  t=(21Q bvR@d   J1BI76 9BoCU9I632327632#"'&'&#"#"'&54?&'&'&547632#""327654'&&." &3," ,R>U!,UQqsRRa8T Q5-A2@O7-C1    <1, M[ZVZY|["G:M_?0F:Kd?. kG5@732+"'&5476;#"'&5476;232+&'&/327654'&+#!  "  !  y>%lA= !  O4M"`L\&3!pz   I-<\;9a eN$d-, >US#"'&'4'&'&#"#"'"=47632327654'&'&'&'&54763267632  <D @n);X:SSI3  ? "P$$QU,C M;QM5  X! ,(  /N^0 'BB! $ (! &J V4'! *.G+32+"'&5476;##"'&=!#"'&=]B    Ak    ]  !  ] NG2"'&5&5476;2+32765#"'&5476;2T@@T= "  #6!*E&#!  k?11Ai0 8!1"  2mG,%#"'&5476;2##"'&'&5476;2+/  !  c  !  S   bG*#&5476;2+73#"'&5476;2#,[o>. !  0$LhL#5!  ! /67327&'476;2+"54723'+"'&547637'&:[! _]$ #Z - : oB1ef3 o -8. mm *02,xx* *ƹCG34;27&5476;2+32+"'&5476;5'"CY! &_^( !\!   A!  !  !A>2 !" !   IG73547632!5##"'&=! :. dH!  dF!  als32+32#^;      S#"'&'&547632A    Z  }l^s#"'&5476;#"'&54763;    0?  SE#"'&54?#"'&'+u d!5dK22}^#"/&547632…  o p *;*7!5#"'&5476325&'"#"'&54767232#'5&#"32K[[6#'D-;W3A" RZ,!  t?0F)(R'8#,1,L 0 P& 2 % ;p$4632#"'&'#"'&5476;#"'&5476327654'&#"?WmDFFDlK@t  !   U)')DF('B$p2ACecDA)#  < )3)(('4M%650"32767632#"'&'&54763263#"'&'&'&6_)B' @BpE=ZDbV: .  )^C!+{   (! @=]{D4sK6TIe}K;k&GU+X U=VkD;SA[1<5K;o<32#!"'&5476;5#"'&5476;547632#"'&#"32#+!  !  :/"  !.X,=P9* >3T  Q   %\& $#  1% !3P*:532++"'&5476;276=#"'&547632"327654'&t!  H3Dp"  mCBKpE7QAZRPF)9$-F+9$$ ]6& 271P@XoD6d6#+D(6#*E( EpC63232+"'&5476;54/&#"32+"'&5476;#"'&54763o"32#!"'&5476;5#"'&547637#5^z  "  zN#  v   iiu3o!#"'&54763!+"'&5476;2765#5"  .G3Er"  oC*wQ 7\6' 2ii!;p77#"5476;#"'&5476;7&5476;2+32+"547'tB !  tO p!  v!!  vBg2 ? ` 2[>p32#!"'&5476;#"'&54763^z  "  zN#  p   o=4;672632+4'&#"2+&'"2+"'&5675&C]2#9--;H%9B^ 5 ^"#; X!  392#119 *-27" )7$%2 .;54;676322+"56754'#"32+"'&5476;5&"C^75 h/; YC6P 60  p  =204G)822/D-  *.2#"'&5476"327654'&/rLASIfuLAUJeW.?)6T.>)NBYgE=NBYkD:d:!*D'8"+C'3;/C732+"'&5476;#"'&5476;67232#"'&"327654'&'&:!  "  !  t>I vG7SC\QF?&(?%1W((&B   -5O>Ug>151D!8$1#!3e->5#"'&547632532+32+"'&54763"27674'&HTwF5TC]P<t!  !  !  \<(,*&~&+A%i8M:OmA4.- F  )22$)1E!6;/67632#"&#"32#!"'&5476;5#"'&547Y2 5- *#M5!  !  :#" BAC& $;+   0IE"'&'&#"#"'#"'&=47632327654'&'&'&547632632)>?Ef+=Q * $W= & +RM "E M6KI8 / !  !@G(  !" ,' FG'B%!  O7327632#"'&=#"'&5476;54763232#2 +F lN,0 /U73632!5%##"'&=!/N d6 XS  mQgo6#"'&=4'&'&547676=47632\ % % @( 115#), !0% & 5$*-- @)#$ g^n#"'&547632^  ,}  !  go654767&'&=4'&'&'&547632#"'&54767676 % % @( 115#), !0%  & 5$*--@)#$ >'2"'&'&#"#"'&5476723276823J #':6+- #l%<A*" +=#. }&672#"'&5432+"'&5476 (' +2 H)% )$r).'3* 4% )$)SD%#"'&=&'&54767547632632#"'&'&#"327632_ i*J)5 -   AO& 7 (81J cM  QY,3_?" M"  C *  +6 <"$  ,!&VK%#3632#!"'&54767654'#"'&5476;&547632#"'&'&#"32:-+( T 2 E!  ,F,;H4" (0D!  ;9.' N  & %7  3&Z/,! # : I@@P&'&5476326327672#"'&/#"'"'&5476?&547"327654'&&   01/2 ! "/000!   5+2-%   1/00"    "1/1/-3+7CDO7&5476;2#32+32+32+"'&5476;5#"4;5#"4;'#'&'&5476;2-_) [  Haaa/ B"  .aaaH" \!\ & 8"8# 2 #8"8! ! g^n##"'&=47632#"'&=47632^  )  ,  ! - >  !  $V4G?R#"+5432327654/&'&54767&5476;#"'&5'&'"367654'&-k\lM &+J, )ijg [*,L  '{[Z}ZWZZYYINBYfF>OBYhF;vS%2@5#"'&54763254#"#"'&54763232#'5&#"276!"'&54763!2b75G&/c$:#,  9OBYgE=}"r32+"'&56 ) r "  &}T2#"'&5476"327654'&,T4'C0>P4)A0><"1#="1TA1>W4&@2?T5'=2$;$3$<"*.p'9#"'&=#"'&5476;54763232#!2#!"'&5476^ "  !    "  Jd  d "    })3632!567654'&#""'&54767632m" #% (8J%! : +8D !#6%(&}?327654'&#"#"'&5476320#"'&5476323254'&'&'&5476+ (  4#(K# 0@)&Ig 3\(" ! !41!<3"' 4#"'&54?632ą   ppo g;2#"'&5#"'&5476;3275#"'&5476;2+5#" !  t* =Y#"  ; _ONP   36 2&1R.G#-432+"'&'#"5476;&'&=476;2#57#67$66]  5 Oz>%QJe66UE,N'  H*2.M4/N5 ,7 wZ%#"'&5476;25($)% $(% )"'&5476323254'"53,5( $5 FJ5   f)K; ~32+"54;5#"'&54767N9++,,90~!""! zS+2#"'&5476"327654'&#"5476;2-T3#@/;S3$?/<1+1*e4 4S@-:J/"=*6M2&N)) &.' &'!;'%'&547632#"'&547/&547632#"'&547  O  ٍ      u~*?B32+"54;5#"'&54767#"'&547672+"54;5#5759++,,90   l$%$,O++O~!""! L=   ""!7恁u~*R32+"54;5#"'&54767#"'&5476723632!567654/#""'&547676329++,,90   m" #% (8J%!~!""! L=  ! +8D !#6%(&#v}@Rgj327654'&#"#"'&5476320#"'&5476323254'&'&'&5476%#"'&547672+"54;5#575V+ (  4#(K# 0@)&Ig 3\("   m$%$,O,,P ! !41!<3"' 4,=   ""!7恁S&8#"'&5476763232754763232+"'&5476k?s:$A#@, 672 )#)% YO4L0AM16 81"5   $'% )mG03E%#32+"54763#"'&5476;2+"'&5476;/#"/&547632  B ?!  #    @NO  : 2   6p o mG03D%#32+"54763#"'&5476;2+"'&5476;/#"'&54?632  B ?!  #    @NO    : 2   op mG03J%#32+"54763#"'&5476;2+"'&5476;/#"'&5476?#"'  B ?!  #    @NOBq    : 2   a     m03X%#32+"54763#"'&5476;2+"'&5476;/2#"'&#"#"'&547632327676  B ?!  #    @NO&*!B! ',5+  : 2   $0*!-  m03CS%#32+"54763#"'&5476;2+"'&5476;/2#"'&547632#"'&5476  B ?!  #    @NO'& $ & $ : 2   # $ $# $ $mg03CS%#32+"54763#"'&5476;2+"'&5476;/2#"'&5476"327654'&  B ?!  #    @NOA@%3!'>%3!') #' %: 2   e5&;%2 '<%5#& "(fGLO7#"'&54763!#"'&=#3672#"'&5#3547632!"'&5476;5##"54763755s!   ~/ ) -  ])2_B @d   A5 N ,  {& ::)12!4UW"'&5476323254/"5&'&'&=47632632#"'&'&/&#"327676323:'$' Q1\ WMlED   +6\2"T/AI& 7 9aK2  ]#Dp BRH  T!  G/@@`, $&K9  &GBT7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=#"/&547632 )"  !   U &  D  4!    !  2! ' q!  Ep o  &GBS7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=#"'&54?632 )"  !   U &      4!    !  2! ' q!   op  &GBY7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=#"'&5476?#"' )"  !   U &   q    4!    !  2! ' q!  a      &BRb7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=2#"'&547632#"'&5476 )"  !   U &  \& $ & $ 4!    !  2! ' q!  +# $ $# $ $SG%732#!"'&5476;#"'&54763!2##"/&547632^e B  ee!  .     2   Up o SG%632#!"'&5476;#"'&54763!2##"'&54?632^e B  ee!  .       2   op SG%<32#!"'&5476;#"'&54763!2##"'&5476?#"'^e B  ee!  .  q     2    a     S%5E32#!"'&5476;#"'&54763!2#2#"'&547632#"'&5476^e B  ee!  .  & $ & $  2   ;# $ $# $ $&G$;7#"'&5476;5"'476;2+"'&547637327676=4'&+32#J  !; sLCFG} 1doL()-,MnJ B 2XOo/nIK ,$-H.H53 2P0T32+"'&567#"'&5476;#"'&5476;2###"'&#"#"'&547632327676#!  ! 6!  s#!  =c&*!B  &-1,    / x$  2$0* . CG12#"'&5476"327654'&#"/&547632,gR^URptRQUQqQ6,B1@O7-B1  UMZ}ZV[Y~ZVdG:La>/F:Kc?.Gp o CG02#"'&5476"327654'&#"'&54?632,gR^URptRQUQqQ6,B1@O7-B1;    UMZ}ZV[Y~ZVdG:La>/F:Kc?.op CG62#"'&5476"327654'&'#"'&5476?#"',gR^URptRQUQqQ6,B1@O7-B1@q    UMZ}ZV[Y~ZVdG:La>/F:Kc?.a     CD2#"'&5476"327654'&2#"'&#"#"'&547632327676,gR^URptRQUQqQ6,B1@O7-B1`&*!B! ',5+  UMZ}ZV[Y~ZVdG:La>/F:Kc?..$0*!-  C/?2#"'&5476"327654'&2#"'&547632#"'&5476,gR^URptRQUQqQ6,B1@O7-B1& $ & $ UMZ}ZV[Y~ZVdG:La>/F:Kc?.-# $ $# $ $dP*%#"'&5476?'&'476327672#"/,ggg ggggg gggggg N~$-67"'&54?&5476327672#"327654&#"6 ! 9CURqMH.4=UQqJ%*P6-,,Q6,D IXpZV0: APpZVG:K=)G:L@ NG2D"'&5&5476;2+32765#"'&5476;2#"/&547632T@@T= "  #6!*E&#!    k?11Ai0 8!1"  2Up o  NG2C"'&5&5476;2+32765#"'&5476;2#"'&54?632T@@T= "  #6!*E&#!      k?11Ai0 8!1"  2op  NG2I"'&5&5476;2+32765#"'&5476;2#"'&5476?#"'T@@T= "  #6!*E&#!  q    k?11Ai0 8!1"  2 a      N2BR"'&5&5476;2+32765#"'&5476;22#"'&547632#"'&5476T@@T= "  #6!*E&#!  v& $ & $ k?11Ai0 8!1"  2;# $ $# $ $CG3D4;27&5476;2+32+"'&5476;5'"#"'&54?632CY! &_^( !\!   A!  !  !A>    2 !" !   op  G6A732+"'&5476;#"'&5476;2+32#'327654'&+c  "      cbx4 ##.X"bX8(    (' &45&2 d** oH747632#"'&547632327654'&'&5476367654'&#"+"'&54763_F,;[4#qE%1G '  )%I7/ +I+B]!  dzN)A,:/%B|k06!3,8'$,) *>)3 *;*7I!5#"'&5476325&'"#"'&54767232#'5&#"32#"/&547632K[[6#'D-;W3A" RZ,!  t?0F)(Rd  '8#,1,L 0 P& 2 % To p *;*7I!5#"'&5476325&'"#"'&54767232#'5&#"32#"'&54?632K[[6#'D-;W3A" RZ,!  t?0F)(Rq   '8#,1,L 0 P& 2 % po*;*7M!5#"'&5476325&'"#"'&54767232#'5&#"32#"'&5476?#"'K[[6#'D-;W3A" RZ,!  t?0F)(Rq    '8#,1,L 0 P& 2 %  a     *;*7\!5#"'&5476325&'"#"'&54767232#'5&#"322#"'&#"#"'&547632327676K[[6#'D-;W3A" RZ,!  t?0F)(R&*"A  ',2,  '8#,1,L 0 P& 2 % <%0+!- *;*7GW!5#"'&5476325&'"#"'&54767232#'5&#"322#"'&547632#"'&5476K[[6#'D-;W3A" RZ,!  t?0F)(Ry& $ & $ '8#,1,L 0 P& 2 % :# $ $# $ $*;*7GW!5#"'&5476325&'"#"'&54767232#'5&#"322#"'&5476"327654'&K[[6#'D-;W3A" RZ,!  t?0F)(R@%3!'>%3!') #' %'8#,1,L 0 P& 2 % 5&;%2 '<%5#& "(dDQ[%#327632#"'&'#"'#"'&547676763254'&#"#"'&5476326325&#"3273&'&'"c* &) 3N2)3;g..;L+ G  )I/B24eX; * '"$65L"'&5476323254#"5&'&'47632632#"'&'&'&#"3276763289( $8M/Z[DbU:    )AK*(B' 57NK2  "X Eo|E3 "M!  +(<{   $ L8 !&(:%!32767632#"'&547632%!&'&#"#"/&547632&h"6X  #>sK6TIe}K;k&GU+D  X U=VkD;SA[1<5o p !&(:%!32767632#"'&547632%!&'&#"#"'&54?632&h"6X  #>sK6TIe}K;k&GU+   X U=VkD;SA[1<5]po!&(>%!32767632#"'&547632%!&'&#"#"'&5476?#"'&h"6X  #>sK6TIe}K;k&GU+q    X U=VkD;SA[1<5La     !&(8H%!32767632#"'&547632%!&'&#"2#"'&547632#"'&5476&h"6X  #>sK6TIe}K;k&GU+2& $ & $ X U=VkD;SA[1<5{# $ $# $ $>032#!"'&5476;5#"'&547637#"/&547632^z  "  zN#  #     o p >032#!"'&5476;5#"'&547637#"'&54?632^z  "  zN#        po>432#!"'&5476;5#"'&547637#"'&5476?#"'^z  "  zN#  pq       a     >.>32#!"'&5476;5#"'&5476372#"'&547632#"'&5476^z  "  zN#  & $ & $    # $ $# $ $*.6F#"'&547632&'#"'&5476?/&5476327632"327654'&-EOntMAOF_9: ?J\  2'"AMP/=*5O/>/Gk#'r@GL@WfE= O+2     ) 9$-?&4!)H);5Y4;676322+"56754#"32+"'&5476;5&#"'&#"#"'&547632327676"C^75 h/; YC6X2%  p  = &*"A! &,1+  204G)822/H   =%0+ !.*.12#"'&5476"327654'&#"/&547632/rLASIfuLAUJeW.?)6T.>)  NBYgE=NBYkD:d:!*D'8"+C'Jo p *.12#"'&5476"327654'&#"'&54?632/rLASIfuLAUJeW.?)6T.>)K   NBYgE=NBYkD:d:!*D'8"+C'po*.52#"'&5476"327654'&#"'&5476?#"'/rLASIfuLAUJeW.?)6T.>)7q    NBYgE=NBYkD:d:!*D'8"+C'a     *.D2#"'&5476"327654'&2#"'&#"#"'&547632327676/rLASIfuLAUJeW.?)6T.>)i&*"A  ',2,  NBYgE=NBYkD:d:!*D'8"+C'2%0+!- *./?2#"'&5476"327654'&2#"'&547632#"'&5476/rLASIfuLAUJeW.?)6T.>)& $ & $ NBYgE=NBYkD:d:!*D'8"+C'0# $ $# $ $*.!1!2#!"'&54762#"'&54762#"'&5476l  "  9,5,9,5,J  , -( .t, -( .=$-6#"'"'&54?&54763276723276547&#"$*4SIfB>8 06RJdH>0 vU.ݾ"T.+BLgE=: 2CNgE=1 z9!+"j8"+& ;-?"'&=#'&'476;327675#"'&5476;2+5#"/&547632j.  tX2%#"  ; _71M  I(8H  203o p  ;-?"'&=#'&'476;327675#"'&5476;2+5#"'&54?632j.  tX2%#"  ; _71~    I(8H  203}po ;-C"'&=#'&'476;327675#"'&5476;2+5#"'&5476?#"'j.  tX2%#"  ; _71q     I(8H  203la      ;-=M"'&=#'&'476;327675#"'&5476;2+52#"'&547632#"'&5476j.  tX2%#"  ; _71e& $ & $ I(8H  203# $ $# $ $3C-?4;232+"'&5476;7&'67327"#"'&54?632bC\! 4!  "  d7/=Z! ;rx>`   2 +F  lN,0 /po3;p/C732+"'&5476;#"'&5476;67632#"'&"327654'&'&:!  "  !  t>I vF7SC\QF?&(?%1W((&B  u 5O>Ug>151D!8$1#3C-=M4;232+"'&5476;7&'67327"2#"'&547632#"'&5476bC\! 4!  "  d7/=Z! ;rx>& $ & $ 2 +F  lN,0 /=# $ $# $ $m03C%#32+"54763#"'&5476;2+"'&5476;/32+"'&56  B ?!  #    @NO( ) : 2    "  &*;r*7G!5#"'&5476325&'"#"'&54767232#'5&#"3232+"'&56K[[6#'D-;W3A" RZ,!  t?0F)(R ) '8#,1,L 0 P& 2 %  "  &m?03R%#32+"54763#"'&5476;2+"'&5476;/23276767632#"'&5476  B ?!  #    @NO; 7D>3>P7(: 2   =42 #?-&9)0 *;*7V!5#"'&5476325&'"#"'&54767232#'5&#"3223276767632#"'&5476K[[6#'D-;W3A" RZ,!  t?0F)(R 7D>3>P7('8#,1,L 0 P& 2 % [42 #?-&9)0 0mGJM#"'&54767#"'&5476;'#32+"54763#"'&5476;2327632'jGF/ D    B ?!  "  E$  NO'78( :: 2  '. *0DBO#"'&54767#5#"'&5476325&'"#"'&547672323276325&#"32DGF/ :K[[6#'D-;W3A" RZ,!  &?$  ?0F)(R'78( '8#,1,L 0 P&  0'2 % !4G9J632#"'&'&'&'&#"32767632#"'&=476327#"'&54?632   +6\2"S0BH& 5EsTEXLlED    3 T!  G/@@`, $%2XHgBRH op 650B"32767632#"'&'&54763263#"'&'&'&#"'&54?6326_)B' @BpE=ZDbV: .  )M   ^C!+{   (! @=]{D4 2 (T;RoG;.y <$/N@ M)  &BR7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=32+"'&56 )"  !   U &  e ) 4!    !  2! ' q!   "  &!&r(8%!32767632#"'&547632%!&'&#"32+"'&56&h"6X  #>sK6TIe}K;k&GU+ ) X U=VkD;SA[1<5_ "  & &'&x(!&&H &BR7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=2#"'&5476 )"  !   U &  & $ 4!    !  2! ' q!  +# $ $!&(8%!32767632#"'&547632%!&'&#"2#"'&5476&h"6X  #>sK6TIe}K;k&GU+& $ X U=VkD;SA[1<5{# $ $ 0KG\#"'&54767!"'&5476;#"'&54763!#"'&=#3547632#"'&=#!547632327632KGF/ "  !   U &  U Z #  '78(  !  2! ' q!  4!  <(!0&6?#"'&547#"'&547632!32767632327632!&'&#"GF:K5TIe}K;h"6X  &o$  &GU+'7>+U=VkD;SA['X -:<5 &)BX7!547632!"'&5476;#"'&54763!#"'&=#3547632#"'&=7632'&'47632 )"  !   U &  p   4!    !  2! ' q!  a    !&(<%!32767632#"'&547632%!&'&#"7632'&'47632&h"6X  #>sK6TIe}K;k&GU+p  X U=VkD;SA[1<5`  !P6& ~*!3P& J!P?Dc%#"'&'&'4=4767632672#"'&'&'&#"3275#"'&5476;223276767632#"'&5476&fMO<NNzQ@    TU/5-4_E8d"  ! \ 7D>3>P7(6F?gGrSM  N! - /5P@U&,E  &42 #?-&9)0 !3P*:Y532++"'&5476;276=#"'&547632"327654'&23276767632#"'&5476t!  H3Dp"  mCBKpE7QAZRPF)9$-F+9$ 7D>3>P7($ ]6& 271P@XoD6d6#+D(6#*E(P42 #?-&9)0 !P& Y*!3PU& J!PUDV%#"'&'&'4=4767632672#"'&'&'&#"3275#"'&5476;2#"'&54?632&fMO<NNzQ@    TU/5-4_E8d"  ! R  R 6F?gGrSM  N! - /5P@U&,E  &~~ !3P*:L532++"'&5476;276=#"'&547632"327654'&#"'&54?632t!  H3Dp"  mCBKpE7QAZRPF)9$-F+9$=R  R $ ]6& 271P@XoD6d6#+D(6#*E(/~~ E6&~+ E_'KEG_32+"'&5476;5#32+"'&5476;5"'&547635&'476;2+35#"'&5476;22!  y  !  y!  !  2 e!    e! 4!  T     +-   ++  EpL32+63232+"'&5476;54/&#"32+"'&5476;#"'&5476O  !pb&S%532#!"'&5476;#"'&54763!2#32+"'&56^e B  ee!  .   )  2    "  &>r.32#!"'&5476;5#"'&54763732+"'&56^z  "  zN#   )     "  &S'&x,>&S0GA#"'&54767#"'&5476;#"'&54763!2+32327632GF.   ee!  .  ee  H$  '78'    */ >0o:>#"'&54767!"'&5476;5#"'&5476;32327632#5GF/ "  zN#  z )#$  v'78(   'iiS%532#!"'&5476;#"'&54763!2#2#"'&5476^e B  ee!  .  & $  2   ;# $ $>32#!"'&5476;5#"'&54763^z  "  zN#     SG%32#!"'&5476;#"'&54763!2#^e B  ee!  .   2   u3o!#"'&54763!+"'&5476;2765#5"  .G3Er"  oC*wQ 7\6' 2ii6e6&w~-u33#"'&54763!+"'&5476;2765#"'&5476?#"'"  .G3Er"  oCUq    Q 7\6' 2a      ZGHZ4;2#32+&'&'32+"'&5476;#"'&5476;2+7&#"'&54?632UBd! >UD   n=P<#  "  !  !  #R  R 3 2- 9 3l     ~~ !;p7I7#"5476;#"'&5476;7&5476;2+32+"547'#"'&54?632tB !  tO p!  v!!  vBgiR  R 2 ? ` 2[~~ 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2M!;G):3547632!"'&5476;#"'&5476;2##"'&54?632 ("  99!    ;    \!    op >H032#!"'&5476;#"'&54763%#"'&54?632^z  "  zN#     p   po!;G);3547632!"'&5476;#"'&5476;2##"'&54?632 ("  99!    R  R \!    ~~ >p032#!"'&5476;#"'&54763#"'&54?632^z  "  zN#  R  R p   ~~ !;V);3547632!"'&5476;#"'&5476;2#7#"'&54?632 ("  99!    R  R \!    0~~ >}032#!"'&5476;#"'&54763#"'&54?632^z  "  zN#  YR  R p   6} } !;G&yN />(p'yO ;GA76323547632!"5476;5#"'&5476?5#"'&5476;2#X  (B 96 h9!    |4 Q["  2g  <  >p86763232#!"'&5476;5"'&5476?5#"'&54763^4 !Uz  "  z4SK#  !p 1   / PG0A32+"'&567#"'&5476;#"'&5476;2###"'&54?632#!  ! 6!  s#!  =c      / x$  2op ;5G4;676322+"56754'#"32+"'&5476;5&#"'&54?632"C^75 h/; YC6P 60  p  =   204G)822/D-  poPG0B32+"'&567#"'&5476;#"'&5476;2###"'&54?632#!  ! 6!  s#!  =c^R  R   / x$  2~~~ ;5G4;676322+"56754'#"32+"'&5476;5&#"'&54?632"C^75 h/; YC6P 60  p  =0R  R 204G)822/D-  /~~ P)0F32+"'&567#"'&5476;#"'&5476;2##7632'&'47632#!  ! 6!  s#!  =cp     / x$  2a    ;5I4;676322+"56754'#"32+"'&5476;5&%7632'&'47632"C^75 h/; YC6P 60  p  = p  204G)822/D-  `  ;54;676322+"56754'#"32+"'&5476;5&"C^75 h/; YC6P 60  p  =204G)822/D-  5PGD%32+"'&567#"'&5476;#"'&5476;2##"'&54763232765#!  ! 6!  s#!  =C.>h 3  / x$  2_7'1/5>2#"'&547632327654'#"32+"'&5476;5&54;676Lh/C.>h 3P 60  p  =C^75 G)8_7'1/$D-  0204C/2#"'&5476"327654'&32+"'&56,gR^URptRQUQqQ6,B1@O7-B1 ) UMZ}ZV[Y~ZVdG:La>/F:Kc?. "  &*.r/2#"'&5476"327654'&32+"'&56/rLASIfuLAUJeW.?)6T.>) ) NBYgE=NBYkD:d:!*D'8"+C' "  &C'&x2*.&RCF3G2#"'&5476"327654'&#"'&5476?632#"'&5476?632,gR^URptRQUQqQ6,B1@O7-B1!f  f  f  f  UMZ}ZV[Y~ZVdG:La>/F:Kc?. m nm n*.3G2#"'&5476"327654'&#"'&5476?632#"'&5476?632/rLASIfuLAUJeW.?)6T.>)f f f  f NBYgE=NBYkD:d:!*D'8"+C'n nn ndG2?%3547632!"'&54763!#"'&=#3632#"'&5n  PD]LnN . 'wG(74(!  z^QuSD!  A7 N *(PP: e)9@%#32767632#"'#"'&547632632%"327654'&3&#"d@1 2IS46NR6.C2@M85PD57H))+*4%W JJM@WsG4PP==p6#,J'6#*N&\\+ kG5@Q732+"'&5476;#"'&5476;232+&'&/327654'&+#"'&54?632#!  "  !  y>%lA= !  O4M"`L\&3!p    z   I-<\;9a eN$d-, op 6;/A67632#"&#"32#!"'&5476;5#"'&547%#"'&54?632Y2 5- *#M5!  !  :#" B5   AC& $;+   0po kG5@R732+"'&5476;#"'&5476;232+&'&/327654'&+#"'&54?632#!  "  !  y>%lA= !  O4M"`L\&3!pR  R z   I-<\;9a eN$d-, ~~ 6;/A67632#"&#"32#!"'&5476;5#"'&547#"'&54?632Y2 5- *#M5!  !  :#" BR  R AC& $;+   0~~  kG5@V732+"'&5476;#"'&5476;232+&'&/327654'&+?632'&'47632#!  "  !  y>%lA= !  O4M"`L\&3!pkp   z   I-<\;9a eN$d-, a    6;/C67632#"&#"32#!"'&5476;5#"'&54?632'&'47632Y2 5- *#M5!  !  :#" Bp  AC& $;+   0`  >GSd#"'&'4'&'&#"#"'"=47632327654'&'&'&'&54763267632'#"'&54?632  <D @n);X:SSI3  ? "P$$QU,C M;QM5  A    X! ,(  /N^0 'BB! $ (! &J V4'! op IEW"'&'&#"#"'#"'&=47632327654'&'&'&547632632#"'&54?632)>?Ef+=Q * $W= & +RM "E M6KI8 /    !  !@G(  !" ,' FG'B%! Wpo>6&~6I&V>Up"'&5476323254'"#"5&'"=47632327654'&'&'&'&54763267632#"'&'4'&'&#"+2)$* 672  ?"Q%$OU,C L;QN5    <D Cm+;_/@K5  [BB! % (! &J V3(! !X! ,(  /Nc/K; I]"'&5476323254'"#"5&'#"'&=47632327654'&'&'&547632672#"'&'&#",5($* @* ' -QM "F M6KH8 / )>?Ei(AV.?K5  X  !" ,' GG'B%!    .CJ(K; >3Si#"'&'4'&'&#"#"'"=47632327654'&'&'&'&54763267632'7632'&'47632  <D @n);X:SSI3  ? "P$$QU,C M;QM5  p   X! ,(  /N^0 'BB! $ (! &J V4'! a    IEY"'&'&#"#"'#"'&=47632327654'&'&'&5476326327632'&'47632)>?Ef+=Q * $W= & +RM "E M6KI8 / p  !  !@G(  !" ,' FG'B%! `  *.G&z7 O&zW*.G+A32+"'&5476;##"'&=!#"'&='7632'&'47632]B    Ak  p     ]  !  ]a     }D3&54?672+327632#"'&=#"'&5476;547632֘ R  R" %3!') #' %k?11Ai0 8!1"  25&;%2 '<%5#& "( ;-=M"'&=#'&'476;327675#"'&5476;2+52#"'&5476"327654'&j.  tX2%#"  ; _71@%3!'>%3!') #' % I(8H  2035&;%2 '<%5#& "( NF2FZ"'&5&5476;2+32765#"'&5476;2#"'&5476?632#"'&5476?632T@@T= "  #6!*E&#!  f  f  f  f  k?11Ai0 8!1"  2m nm n ;-AU"'&=#'&'476;327675#"'&5476;2+5#"'&5476?632#"'&5476?632j.  tX2%#"  ; _71f f f  f  I(8H  203{n nn n 0NGM#"'&54767#"'&5&5476;2+32765#"'&5476;2#327632LF# C6l= "  #6!*E&#!  =+V#  )70$ !Az0 9!1"  2L7P; 0;F"'&=#'&'476;327675#"'&5476;2327632#"'&54767#5j.  tX2%#"  ; = $  GF/ 71 I(8H  2"0 '78( 03b6&~:X&ZC6&~<2C&\C3CS4;27&5476;2+32+"'&5476;5'"2#"'&547632#"'&5476CY! &_^( !\!   A!  !  !A>& $ & $ 2 !" !   ;# $ $# $ $IG,73547632!5##"'&=!#"'&54?632 :. 4    dH!  dF!  aop U*73632!5%##"'&=!#"'&54?632/N 6   d6 XS  mQ poI+73547632!5##"'&=!2#"'&5476 :. & $ dH!  dF!  a8# $ $U(73632!5%##"'&=!2#"'&5476/N & $ d6 XS  mQ*# $ $I)173547632!5##"'&=!'7632'&'47632 :. p   dH!  dF!  aa    U,73632!5%##"'&=!'7632'&'47632/N p  d6 XS  mQ`  K;o1%32#!"'&5476;5#"'&5476;547632#"'&#"+!  !  :/"  !.X,=P9* >3Td   %\& $#  1;p=%27654'&#"32+632#"'&'#"'&5476;#"'&5476CU)')DF('B$!  c?WmDFFDlK@t  !  V< )3)(('4M% {2ACecDA)#  ;G B327654'&+3254'&'&+'#"#"'&5476;2#!"'&5476;qT <f(%>d-  2eh8$<jP1D"  V-/ 6%   &:XB+8?/5\Z+ CG;p=%27654'&#"!2#!632#"'&'#"'&5476;#"'&5476CU)')DF('B$!  ?WmDFFDlK@t  !  V< )3)(('4M% {2ACecDA)#  !4U&UG!D67632#/&'&#"#"'&'&'&'&#"32767632#"'&=476321:&    +6\2"S0BH& 5EsTEXLlJ2I2   -e!  G/@@`, $%2XHgBRH6"C"32767632#"'&'&54763267632#/&'&#"#"'&'&'&6_)B' @BpE=ZDbK7/ :&     )^C!+{   (! @=]{D4G 2    -^!  &G&G 47327676=4'&+'32+"'&54763#"#"'&5476oL()-,MnusLCFG}! 1-  2Wd$-H.H53dXOo/nIK ,   &:LCGGX@!ep4"327654'&7!"'&54763!32+5"#"'&547632E('=&2E)'')P!  !  tCC mDFFDnW?_('5H&('47'(  #-ADddCA2*4.gX &G(3G>U[2+"3276767632#"'&'#"'&54767&'&54763267632#"'&'4'&'&#"3n  ;<%$8"*K+ 3IS>$; . M;QN4    <D .U !( $ !BB'J+9N/H V4'! !X! ,( &G@7#"'&54763232765#"'&54763!#"'&=!3547632#"'&=C.>h 3!   U  _7'1/   3!  q!  9$~?32+#"'&5476323276=#"'&5476;547632#"'&#"b9"  9C.>h 39"  !9A0=d )  _7'1/ 7V5(.$  (!R67632#/&'&#"#"'&'&'&#"3275#"'&5476;2#"'&'&'4=4767632 5:&     TU/5-4_E8d"  ! *fMO<NNzK:I 2   -N! - /5P@U&,E  & 6F?gGrSMepI675#"'&5476;#"'&'&=4'&'"32+"'&5476;#"'&5476;632>;)  t# 0??0.'!  p !  t/r# }FB" Q%%%#I s*#   ] i#G327632#"'&5#"'&54763^,LV3&N#  Gf< 0 F3D6 SG;5#"'&54763!2+32+32#!"'&5476;5#"'&54763e!  .  ee!  ee B  ee!  N    2  !;~A747632#"'&#"7&5476;2+32+"547'#"54763sA0=d ) O p!  v!!  vBgtB dgV5(.$  (? ` 2[2>p45#"'&5476;32+32#!"'&5476;5#"'&54763N#  e!  ez  "  ze!  N     Cq:#"'&54?'#"'&5476;27632+&'67'+"'47U Xd a=R S2 !\>:xr: !Z@1- . 8*,- ,00 2+oG>%+5"'#"'&5&'4;32767"'&5476;2767"'476;2oC]2#9--;H%9B^ 5 ^"#; X!  3922#119 *m-27" _)7$%_2 .PG4#"'&54763232765#"'&5476;#"'&5476;2##C.>h 3!  s#!  =c_7'1/ x$  23;54;676322+"5674'#"32+"'&5476;5&"C^75 h/; YC6P 60  p  =204G)8}22/D-  CU!2#"'&5476&'&#"!3276,gR^URptRQUQ!F*1Q6 [F$(Q6UMZ}ZV[Y~ZV\/G*7dU'H Y0"327654'&#"'&5476323254'&'47632,Q6,B1@O7-B1.URptRQUQqPD-  2G:La>/F:Kc?.#If}ZV[Y~ZV/   &:E*[0"327654'&#"'&5476323254'&'47632.W.?)6T.>)SIfuLAUJfSB-  2^:!*D'8"+C'!/5gE=NBYkD:,   &:EtC3276=4'&#""'&=4763263232+"'&5476;4#"g=F=Fu9!J8W8-AHT   p   .J2EDq*L)7Dq*L)uxEZ6N;8^"*  fFKk6N%K6767&/&7#"#'&'&54576763232763232+"'&5476;4'#"tM dC5R:H,e7%R:I71+[J&   p  (^e] QV! @U+a6'T8E*c6&88  G >327654'&'+"#"'&5476;2+32+"'&5476;vR@ -  2Wt=(21Q bc  "  9B   &:MJ1BI76 d  3;~M7327654'&'&#"567232#"'&'32+"'&5476;47632#"'&#"?%1W((&>?&(>I vG7SC\QF:!  "  A0=d ) D!8$1#15O>Ug>15  4V5(.$  (3>G M327654'&##"'&5476;#"'&5476;2+3232+&'&'#32RP k!  !  |  r$ C+ !  Wz !  QV    .XRR =J3 >UG6X@IGVX@IG'5!#"'&=#3547632!5 ᖗ :%a  !FH!  d 5OI%#"'&=#"'&5476;54763232+327632#"'&54763232765E={,#!  #  h 3G& X!  X "  \_7'1/.G3"#"'&54763!#"'&=#32+"'&5476;-  2X mB    A ! &:N!  ]   ~E547632#"'&#"32+327632#"'&=#"'&54763rA0=d )  2   &:G F lN,0 /IG1%3547632!57#"'&5476;7##"'&=!32#2i :j"!  qu w!  !  |d !  za U*%3632!57&'&5476;7##"'&=!#+7/NJ  LU i4 66 XSHS  mQf/,3G:#"'&'&576763327654'&+"'&547637##"'&=!%O(r>Iy_   @5,p= ~!  u NI*0x6K   @H ! !  za,3GGq_@6 V>+3632!57#"'&5476;674/&#"#"'&54767632 ,.*9!  %2>#  * >^k>,Ga 6 Xi )!0 ) ! +2 8H4F/g^n_gn##"'&547632#"'&547632    ,}  !  }  !  }~VGK!#"'&54763"'&5476;2+35476323276545#"'&5476;2##"C"    c  J % !  i!  )1   g"  !V :  _2&38o)GK3547632!"'&5476;#"'&5476;2##"'&5476;+"'&5476;2765#5g "  !    f"  G3Er"  oC*w\!     7\6' 2ii3(p!@#"'&5476;+"'&5476;2765#5'32+"'&5476;#"'&54763\"  G3Er"  oC/w~>  "  >.#  Q 7\6' 2ii   3Go P#5"'&5476;+"'&5476;27652+"'&54763"'&5476;5"'&5476;2#?l  [G3Er"  oC  R! '   ]r  M 1coii 7\6' 2N  '    .38o!Q#5#"'&5476;+"'&5476;2765'4'&#"2+"'&547635&54;676322#0w"  yG3Er"  oC  .   d  =C^ + p; oii 7\6' 28 0  020*2mD'$*;&DSD',>&CD'2*.&R ND'8 ;&X N'q$ ;'q N'v V ;~'v N 'U ;}' N'CV ;~'C!&HGm'q$*;'qmm'q&g$*;&qh&Df&qJ[d:&q SUG%#"'&'4=4767632672#"'&'&'&#3275#"'&5476;32#c=M<NNzF@    >V.5-4K98d"  "  o?4O?gGrSM  N! &.5P@U&,d d !3PD"327654'&+"'&5476;276=#"'&547632532+32#F)9$-F+9$&Vp"  mCBKpE7QAZR;t!  !  _6#+D(6#*E(8L 271P@XoD62$  !P0&x*!3P&J Z&&n.;_'pN)CU&2*'.&R)C&q[&2*'.:&q&R,3&&nqu36&Z!PE'v*!3P&vJ8G3%2=#"'&5476;+5##"'&5476;&'476;3532|X)  t;0G|Gj!  2 VGV! 4dH" W-% - +PE'C1;&CQmW'v*;'vfE'vVd&v" NS'v =&vmC'-$;&-Dm=g4@$*;g@D&C'-(&&-H &=g4@(!&g@HC'-,&-S=g4@,>g@CC'-2.&-RC=g4@2*.g@RkC'-5;&-U k=g4@56;g @UNC'-8;&-X N=g4@8 ;g@X>USe#"'&'4'&'&#"#"'"=47632327654'&'&'&'&54763267632#"'&54?632  <D @n);X:SSI3  ? "P$$QU,C M;QM5  R  R X! ,(  /N^0 'BB! $ (! &J V4'! N~~ IEW"'&'&#"#"'#"'&=47632327654'&'&'&547632632#"'&54?632)>?Ef+=Q * $W= & +RM "E M6KI8 / R  R !  !@G(  !" ,' FG'B%! i~~ *.G+=32+"'&5476;##"'&=!#"'&=#"'&54?632]B    Ak  xR  R   ]  !  ]~~  O7I327632#"'&=#"'&5476;54763232##"'&54?632h 3dF!  a~H!  _7'1/U5-%#"'&5476323276=!5%##"'&=!3632C.>h 3 / f_7'1/S  mQ6m&g$*;b&D #&G&z(!&&zHC'q$*.'qC'q.%*.'q.C&g2*.b&RCm'q&g2*.&qh&RC&q[<2C:&q\*;De!e3"2327654'&732+5"#"'&54763247632E('''4 E)'')!  tCC mDFFDnW? _('57&$('47'(2 #-ADddCA2!  !e;~>%27654'&#"'47632#"'&#"632#"'&'#"'&54763CU)')DF('B$A0=d ) ?WmDFFDlK@t  V< )3)(('4M%gV5(.$  (72ACecDA)# 65GFk@!5p@"2327654'&327632#"'&="#"'&5476325#"'&54763E('''4 E)''),LV3&CC mDFFDnW?!  _('57&$('47'(< 0 F3D1-ADddCA2| !~>"327654'&7547632#"'&#"32+5"#"'&547632E('=&2E)'')PA0=d ) !  tCC mDFFDnW_('5H&('47'(2:V5(.$  ( #-ADddCA!&GHG@!&HGIGX@Iu343!#"'&5476;5#"'&54763!32++"'&5476;2765!  "  . !   G3Er"  oC   \6' 2!3~D"327654'&7547632#"'&#"+"'&5476;276=#"'&547632F)9$-F+9$]A0=d ) H3Dp"  mCBKpE7QAZR_6#+D(6#*E(2:V5(.$  ($]6& 271P@XoD6!37"327654'&7+"'&5476;276=#"'&54763247632F)9$-F+9$H3Dp"  mCBKpE7QAZR; _6#+D(6#*E(W `]6& 271P@XoD62  CEKRE~M747632#"'&#"63232+"'&5476;54/&#"32+"'&54763_A0=d ) h 3,-$!  p A0=d ) o8#5#"'&5476;5#"'&5476;32+32#!"'&5476;Pv O!  ON#  O!  Oz  "  zoii+ S  6  i#327632#"'&=#"'&54763^,LV3&N#  < 0 F3D n%32+"'&5476;5#"'&5476;2#^J B  JJ!   Q 2   >pD5#"'&5476;327672"'32#!"'&5476;5&#"#"'&547672N#   #82z  "  z #':6{ . %<W  *" +=i5#p327632#"'&5#"'&54763^,LV3&N#  p< 0 F3D oP\3o>+5"'#"'&=&'4;327675"'&5476;27675"'476;2oC]2#9--;H%9B^ 5 ^"#; X!  392#119 *-2" )$%2 .F53L4;672632#"'&547632327654'&#"2+&'"2+"'&5675&C]2#9--;H%C.>h 3 5 ^"#; X!  392#119 *_7'1/E" )7$%2 .5;622+"56754'#"#"'&54763232765&54;676Lh/; YC6P 60C.>h 3=C^75 G)822/D-_7'1/_02045>2327632#"'&54'#"32+"'&5476;5&54;676Lh/,LV3&P 60  p  =C^75 G)8< 0 F3D$D-  0204?/2+"'&547635"'&5476;5"'&5476;2#  R! '   ]  M 1c  '    .*.C6;Uq6;q65=327632#"'&=#"'&547632327675#"'&54763!2#,LV3&Y2 5- #M!  )!  Q< 0 F3DOC& ;  63;/67632#"&#"32#!"'&5476;#"'&547Y2 5- *#M5!  !  :#" BAC& $;+   0M5;0%327632#"'&5#"'&547367632#"&#",LV3&#" BY2 5- *#M< 0 F3D_ 0AC& $;6(7547632#"'&#"32#!"'&54763A0=d ) !  !  dV5(.#  (  6G@K2>72+"'&547635"'&5476;232+&/327654/&+  O"    ~& C !  NJ-O 53   Y P6 v!d KRI5T7327632#"'&=47632327654'&'&'&547632632#"'&'&#"#",LV3& & +RM "E M6KI8 / )>?Ef+=Q * $M< 0 F3Dr" ,' FG'B%! "  !@G(9$~)747632#"'&#"#"'&5476323276A0=d ) C.>h 3BV5(.$  (z_7'1/3P~H%#"'&5476;5#"'&5476;547632#"'&#"32++"'&5476;2765*!  "  A0=d ) !   G3Er"  oC S V5(.$  ( \6' 29$~G]@ OW? 2O7327632#"'&5#"'&5476;54763232#/F:Kc?.:G!#"'&547635#2+"'&547635&'476;2#35"'&5476;22d!  !  d!  2 V!  !  V! 4!   ! NN !  ! - ! ;; !  + ! !;pN\pB)3547632!"'&5476;5#"'&5476;2# i"  !   Q!    !3~H"27674'&7547632#"'&#"32+"'&5476;5#"'&547632<(,*&~&+A%fA0=d ) !  !  :HTwF5TC]P<^)22$)1E!*CV5(.$  (  8M:OmA4.hV?7#"5476;567654'&'"#"'&=6763232+"'&5476;SB S 672 l?s:$A"<!  !  2 01"5 !  O4L0AM1  hVGm@}#"'&5476?#"'-q    _a     }7632'&'47632-p  J`   32#'&/4"5?62#F FFFK 32#'&/4F F}23276767632#"'&5476 7D>3>P7(42 #?-&9)0 h2#"'&5476,& $ # $ $2#"'&5476"327654'&,@%3!'>%3!') #' %5&;%2 '<%5#& "(0#"'&547673327632GF; bZ %  '7>+<(s $2#"'&#"#"'&547632327676&*"A ',2,  %0+!- }'#"'&5476?632#"'&5476?632#f f f  f nn nn n%Cv%#"'&5476?#"'q    _a      %"rq"r!2#!"'&56 ) r "  &%0xjYO*2"'&=4?67654'&#"#"'476>% *&#)509! - & #@#YO%%"'&=47632    \L #"'&=47632"'&=47632        %#&547632#"'%&547632#"'ff n n  n n  %.23276767632#"'&547672#"'&5476G 7D>3>P7(& $ 42 #?-&9)0 ;# $ $%G@@3254'&'47632"'#-  2IH   &:G 5G2X@5!3327632#"'&5d,LV3&< 0 F3D\?z0w(%632#"'&54C  < K_ok_ 5;327632#"'&5d,LV3&< 0 F3Db_+&j+ mU'+y$wZy&U'+y(EU'+y+U'+y,vCU'+y2pCU'+y<u;U'+y\#&j&+mG$ ;G% 8G MG)"54763#"'&5476;2%3 BB {?!  ا#  t2  d^ &G(IG=EG+CUC2#"'&5476"327654'&23547632"'&=##"'&=476,gR^URptRQUQqQ6,B1@O7-B1"s *$ s UMZ}ZV[Y~ZVdG:La>/F:Kc?.Y$ 10    SG, ZG.mG/732+"54763#"'&5476;2+"'&5476;  B ?!  #    d 2   ^oH0PG1#5G;Q%547632!54763223547632#"'&=##"'&=476%!#"'&=!#"'&5 !  ! E*m   m   !  ! dC!  !  C<1     CC!  !  CU2EG7#32+"'&5476;&'4763!232+"'&5476;!  y!  2 ! 4!  y    - +   G3IGf*.G7CG<TG NG;hGK#32+"'&5476;5"'&=#"5476;35#"'&5476;2+276=32#&F:H B  R=9= d) !  f  3d ={`B7+ 2 +E@T{2 +   - 2;G=7&'&5476;23547632#5327654'&+";#5476323U%JAa0{D-C*3 ! 5&[00!% ! 3v%]/1mF2E04;232+"'&'&5476;5&'67327"dC\! 4 !  {   /=Z! ;rx>2 +f fT,0 /*.~@"327654'&7&'&#"2;2#"'&547&547632632#"'&.W.?)6T.>)^x%Nf!rLASIfuLAM;b)1< / ^:!*D'8"+C' %NBYgE=NBYeC'D_$!B%! #IGX@\2p:+"'&'&5476;654'&#"'&54?##"'&=!32+ p  %4\ n(&n&i&#0W)6|N  mQ]_"F;3;122+4'#"32+"'&5476;5&54;676Lh/; _P 60  p  =C^75 G)8}2D-  0204So$2#"'&=4763&'&#"#3276,9!J2D9!J8>G=FoxEZPN%xEZPN;r)N(o)L(i#4$Cq'+"567'+"'47'#"'&5476;222 !\C:xr: !ZA1.d a< X- 200 2+NZ 3 2;C732+"'&'&5476;#"'&5476;327675#"'&'&5476;2+5#"!  p  )  tX2%#  ; _71)j " H 203XYu  }X47076;67674'&'&'&54767&54767##"'&=!'32+"+"'&*    \\2182#!Q   G- ,.' /Df%H # ! }    + nO@8 ;&  mT    ^ @$  *.R.*2.#3732+"'&'&5476347632#"'327654'&#"!    UJfrLASIfYE?)6T.>)5W. BkD:NBYgE=D'8"+C':!q`#&'&'&54'&'&#"2+"'#"'&=4767232767654'&'&'&'&547676;2676320& (?@F %;-B51  * (!IS3E+ K5  ;6   %F!$ H  #  $+M-   *Z'"327654'&3#"'&5476;2#.W.?)6T.>)-SIfuLAUJf!  ^:!*D'8"+C'=HgE=NBYkD: ! F(327632#"'&=#"'&54763!2#N,LV3&r!  \!  Q< 0 F3D !  !  K0#"'&5476;2+#"'&=#"'&5476;32765!  !  z'2+)  t.,#Q  % c#." 663\ ?#";27654'&+'54763232+#"'&=#"'&54763 _b d c1+ d !  A%Z'2!  !  ?"X?]QSl SD!d!  `7Ku: !  ^3Ew?,3JL32#"'&/2+"'&5476;7'&'&+"'&5476;27"'&5476;2#q !!  R!XQ  !  ` !  Z5GR  !  Q  ! |  ߰! ! Z}  2n~>3;47632276=32++#"'&=#"'&=#"'&5476,t4 ! = t  !L.> ! ]5&!  M!  * m5 !  G4G Ab747&'476;2+327676=4?63232767654'&'#"'&5476;2#"'&/"'&'&'&( m &0*    .&  n2() !3"'87.SD  DSZ0  ()(0ND  + CTH?a#b&j Kb&jx.&+RK&+xNA'+|R r.3254'&#"327654'&#'32#"'&54767#sk3T$"VJEv M8G;H=g+_* &)p0 ,x W2%Od[MAGW7&'&565676;2276747654'&'&#"36;2##"'&'&5476767632#"'&'&'&l  !  D4 5&B  N &M++$Li>2??[4// (1/V/5=*AD0+(#   5#,@zbhh4. 6B :%54'#3276#"/&=#"'&5476;;32"+#"'&5N#B.:% .}D+ )<(7  ! tA4C *^# ))5W. M.  ! H&2kD:NBYgE=D'8"+C':! &7&C,( &&jY(EFFM2#?67654745&'#"2+"'#&'54737##"=!#"'&5#6$" 2@.zH #69.d "&  (  @fb!  & 87'9%+"'&5476;#"'&54763!#"'&=!32#"'&54?632zB#  !!  !d!     22     3 po"6UB732767632#"'&=47632632#"'&'&'&'&#"32#U.>F( 6EsTEXLl:L  -5[3!  "\) #&2XHgBRH !T!  H$0 >U6SG,S&jY,S&jY,GL\2+"'&'&'54?6;#"'&'&=47622765&'5476;23327676=4'&'&+l4  &-9N Np'.4 " 2 ! 0@ * *@( % o,  X* /~ $ |Haq2+"'&'5476;5323+"'&'5476;&'5476;23+75#"'#&'5476;23#327676=4'&'&+l4  &-:M  !  x"  2 f!    f! +@ * *@( %     ,   ( $ ^GP2+"'&'5476;5&'#"323+"'#&'54737##"'&=!#"'&5#6h& 0 f"  H D   f! +>  @.{B3b' "&  (   fb!  &R7EW%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32#"'&54?632RBn*R:2$ #  !!  !"  $Bd! >TC  ! ̅   22V=      !3 2- poC7M_32+"'&5476;&'476;2+75#"'&5476;232+"'&5476;#"/&547632!  y!  2 e!    e! 4!  y    F)  - *  +  o p D'.M476;27&'4;2+"'&547637&23276767632#"'&54764\! ^^$DZ / 3 n*D6 7D>3>P7(+ 2 +*  )t ;42 #?-&9)0 CGQ!"'654'#'&'#&'5473#"'#&'5476;2+3#"'#&'5476;2+\5)0!  y  "  y: 2' *   '* mG$CG)02#!"'&5476;#"'&54763!#"'&=!327&+}+"  !   egV_ '    3IE ;G% 8G'%+"'&5476;#"'&54763!#"'&=!32zB#  !!  !d! 22     3 sWG)/%3#"'&=!#"'&=32765&'4763!23#h v f2 6! 4d  KK  (:- +, &G(oGa4;232+&'&#2+"'&547635"#"5476;6767'"'476;25"'&5476;2#7&B6! 8sU   XL" "a" "WXB Rs7 !6Bv% a %v3 1- -  /:2 72 3!  >UY3276767654'&#"#"'&=47632632#"'"=47632327654'&'&+"'&5476*< 3"L    4No?+- ;X:SSI3  ? "P$$";  U * +  !X!  !E.>N$/N^0 'BB! $ (! CGM32+"'&5476;&'476;2+75#"'&5476;232+"'&5476;!  y!  2 e!    e! 4!  y  F)  - *  +  C'Ml32+"'&5476;&'476;2+75#"'&5476;232+"'&5476;23276767632#"'&5476!  y!  2 e!    e! 4!  y   7D>3>P7(F)  - *  +  42 #?-&9)0 RGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2-  KG<7&'4763!232+"'&5476;##"'&=476323272 ! 4!  y  mpL)% X- +  n6!+  !oH0EG+CU2CG7#32+"'&5476;&'4763!232+"'&5476;!  y!  2 ! 4!  y    - +   G3!4U&*.G7DG.476;27&'4;2+"'&547637&4\! ^^$DZ / 3 n*D6+ 2 +*  )t TGCL27654/2#32#!"'&5476;5"'&547635#"'&54763!2+"3^Ya1w4)! `G d* 7Ib6  ] 9@mG!IT2+"'&54763"'&5476;232+"'&54763"'&5476;2+327654'&+1 BY! ! Y! E l5 2Q9P! (' # 4U?4 2   d) 7Ib5&    ;@ G)432+"'&5476;#"'&5476;2+327654'&'#bl5 2Q,;  !  "B cvR?v) 7Ib5  2 9@"6U?%#"'&5476;&'&#"#"'&=476327672#"'&5476323276"  ! H(25-"  X6zOG^RvsE6  (Fw4 Z*  !T! !YOrBzLA2&#J#zV8A7#32+"'&54763&'476;2+376763#"'&"254'&: !  b!  2 _!   9S3B(l0F<]m@.|f   - 1s8$|HZVH`FY˾[G1<%##"5476;67&5476;2+32+"5476;=#"3`(G,OB ! =AlS9P  !  "B !#pH ?$/^:82 a9;\]2#  2 ޡ*0*;D3$#3632#"'&5767673547632"327654'&e# >XlDFFDlB* I=7F(&B#/X(=%/2ACecDA`=[Y3*!  ((3N$>(H&T+3674'&2767'&/&#"5475"'4;2#'r,)ew']^D>=D6. {Q9  2022^I("^b"'2+"5675"'43!#"'&596 YC6;CQ P*22/22!  #6/735'276="'43!2#3#"'&=!"'&= ;CJ@8 d"  222~!    !~!&Hlj!#&'47675+"'&54763237'"'&5476;250/&547636;27&5476;2#+"547'0OG9 NBG    !E P [ P E!   !GBN0,=J2n ?22? n2J=-II%4'&+"'4;2767654'&#"#"'&=432632#"'#"'&=476323276C*;C53>) / 8Iu9 #+ Q * $W= & +RM 22     !%B<"+0 5 G(  !" ,'9675"'632372#2+"56752#"+"5675"'43;6ZB98 YC698YC6;CXCQ{o 222*22/|o *22/22119U23276767632#"'&547675"'632372#2+"56752#"+"5675"'43 7D>3>P7((;6ZB98 YC698YC6;CXC42 #?-&9)0 {o 222*22/|o *22/22114$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MG1747276="'43!2#2+"5675'#"'&52);CJ@93YC6r K#;' 222*02/[)m(%'#2+"5675'&56;732#2+"5675#g>B_>4 ASSA /9>_B9gd133. '11133.3%735"'632372#2#"+"5675#2#"+"5675"'43ԯ;6ZB98YC698YC6;CXCQJI222*22/>>*22/2211*.R.*)'2#"+"5675"'43!2#2#"+"56798YC6;CvB98YC6P*22/222*22/3;S65F>###"'&=!#"'&=#2+"567X  X96 YC6Q  !!  *22/2C\3| ?J#32765&'&'32+32+"'&5476;5#"'&5476;5#"'&5476;";5@@n ,"k*vG7SC\,:!  "  ,wF5SC^*!  tA%b @^f 5&dO>Ug>1s  sM:OkB5b : l C[9)%3#"'&=!"57635"'547325"'54732^ B /9BYC69BYC6d~!  2*12/*02/1(623276="'5632372#2+"5675#"'&="'43K. 96Z@96 YC6 8;CXCQU' T*22*22/)`U2211e5)"'7635&/6;2#35'&'6;2#35'&547322"@  A-G# y@A@yH-A 2!22, #22 %122e;%3#"'&=!"'7635&/6;2#35'&'6;2#35'&54732<$ ;@  A-G# y@A@yH-A d~!  2!22, #22 %12D )!23+"5675##"'&527654/#C6Q O,7C6X  vAV2/9{"C2/  !#a$>32+"5475"'4;227654/"#%&'6?#2+"547635%|D>=DXB 3g$/(0/AF& 3BEC(Q95/{20222.  )1 &222-T"2+"5475"'4;227674'.#D>=DXB 3wHFQ9Gp20222.#,,8%#&'4;&'&#"#"'&=47632632"#"'&547632329B_ A) ' 9WH6>BoC@  'C-2R   !M=WA[\>B "'   d*:47632#"'&5#2+"5675'&54323%"327654'&N5M2Z0Fv5B8?JB )>>D(  [AX:f6$p4E; L*79222/ &21+O\UjQf4$(07&'&5476732+"5475#+"'&5476;73L B 39BXD>JBv  !"m: u 1)s2.-2209F2  !&&C6H!&U&jH GpY!74'5&+"323+"'&'54;#"'76;5#"'#&'54;32+6;2+"'&'5476;2765*62!  !pB43! Bt :Ng0G3E'#  $F(.  2X 2z g=H@^5& 4b/"'2+"5675"'43!#"'&5#"'&54?63296 YC6;CQ     P*22/22!  'po,,8"3#32767632#"'&'&547632632#"'&'&'&,m$& 3C' @CoD>ZDbW9 * )^V &.I   '" ?>\yE5/ M!  IV>oL>U&ju3oM7B'"'54735'#"'&=473276?5"'54322#'272?6754#nB6lK#/);C(@ k& 2@Cp1-d)6;' /22 9Spd,oBM!"'54735#2#"+"'54735"=43#35"'7632372#2##'272?6754#=DXB 3wHFQ9Gp20222.# G33<W%'&567654'&'&#"323#"'&'32+"'&5476;#"'&5476;67232#"'[$<+(&>?&(?%1[-8QF:!  !  !  t>I vG7F' o$ =!61#1D!R5   -5O>U^<'  8'%+"'&5476;#"'&54763!547632!32zB#  !!  !rd! 22   3  b547632"'2+"5675"'43 96 YC6;C  !*22/22 8G'%+"'&5476;#"'&54763!#"'&=!32zB#  !!  !d! 22     3 O/7#"'&54;5"'43!#"'&="'32#2+"567' )';CQ 4 "496 YC6 (P22!  P $M*22/ 8G'%+"'&5476;#"'&54763!#"'&=!32zB#  !!  !d! 22     3 b"'2+"5675"'43!#"'&596 YC6;CQ P*22/22!  oGa4;232+&'&#2+"'&547635"#"5476;6767'"'476;25"'&5476;2#7&B6! 8sU   XL" "a" "WXB Rs7 !6Bv% a %v3 1- -  /:2 72 3!  lj!#&'47675+"'&54763237'"'&5476;250/&547636;27&5476;2#+"547'0OG9 NBG    !E P [ P E!   !GBN0,=J2n ?22? n2J=->UY3276767654'&#"#"'&=47632632#"'"=47632327654'&'&+"'&5476*< 3"L    4No?+- ;X:SSI3  ? "P$$";  U * +  !X!  !E.>N$/N^0 'BB! $ (! II%4'&+"'4;2767654'&#"#"'&=432632#"'#"'&=476323276C*;C53>) / 8Iu9 #+ Q * $W= & +RM 22     !%B<"+0 5 G(  !" ,'RGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2- 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MRGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2- 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MRGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2- 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MRGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2- 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MEG+9635"'632372#2+"5675#2#"+"5675"'43;6ZB98 YC698YC6;CXCQJI222*22/>>*22/2211EG+9635"'632372#2+"5675#2#"+"5675"'43;6ZB98 YC698YC6;CXCQJI222*22/>>*22/2211CG7#32+"'&5476;&'4763!232+"'&5476;!  y!  2 ! 4!  y    - +  9('2#"+"5675"'43!2#2+"56798YC6;CB98 YC6P*22/222*22/!4U&65F!4U&65F*.G7>###"'&=!#"'&=#2+"567X  X96 YC6Q  !!  *22/CG34;27&5476;2+32+"'&5476;5'"CY! &_^( !\!   A!  !  !A>2 !" !   X*%7#"'&5476;2+##"'&5476;2+.k !  !  h!  !  z  Q  CG34;27&5476;2+32+"'&5476;5'"CY! &_^( !\!   A!  !  !A>2 !" !   X*%7#"'&5476;2+##"'&5476;2+.k !  !  h!  !  z  Q   NG;C[sRG<)"'&547#"'&5476;2+3#"'&5476;2+3#"'&5n 4  y  ! y  !f +     A)%3#"'&=!"57635"'547325"'54732^ }B /9BYC69BYC6d~!  2*12/*02/&2GE%#"'&'5&'476;2+23275#"'&5476;2#32+"'&5476;-={*0 f" HE  f! -"  z  &2 5 ' "&  )  1(623276="'5632372#2+"5675#"'&="'43K. 96Z@96 YC6 8;CXCQU' T*22*22/)`U2211&2GE%#"'&'5&'476;2+23275#"'&5476;2#32+"'&5476;-={*0 f" HE  f! -"  z  &2 5 ' "&  )  1(623276="'5632372#2+"5675#"'&="'43K. 96Z@96 YC6 8;CXCQU' T*22*22/)`U2211&2GE%#"'&'5&'476;2+23275#"'&5476;2#32+"'&5476;-={*0 f" HE  f! -"  z  &2 5 ' "&  )  1(623276="'5632372#2+"5675#"'&="'43K. 96Z@96 YC6 8;CXCQU' T*22*22/)`U2211!4U&65F!4U&65FSG,o'a4;232+&'&#2+"'&547635"#"5476;6767'"'476;25"'&5476;2#7&23276767632#"'&5476B6! 8sU   XL" "a" "WXB Rs7 !6Bv% a %v 7D>3>P7(3 1- -  /:2 72 3!  442 #?-&9)0 lj!#&'47675+"'&54763237'"'&5476;250/&547636;27&5476;2#+"547'023276767632#"'&5476OG9 NBG    !E P [ P E!   !GBN0 7D>3>P7(,=J2n ?22? n2J=-42 #?-&9)0 RGE%+&'&#32+"'&5476;#"'&5476;2+7&54;2#32RBn*R:2$ #  !!  !"  $Bd! >TC  ! 22V=      !3 2- 4$63#"5476;5#"'&5476;7&5476;2+32+"547'tB !  tP p!   !  !vBN2 ? n 2MEG+9635"'632372#2+"5675#2#"+"5675"'43;6ZB98 YC698YC6;CXCQJI222*22/>>*22/2211&2GE%#"'&'5&'476;2+23275#"'&5476;2#32+"'&5476;-={*0 f" HE  f! -"  z  &2 5 ' "&  )  1(623276="'5632372#2+"5675#"'&="'43K. 96Z@96 YC6 8;CXCQU' T*22*22/)`U2211m'&x$*;&Dm&jY$*;U&jDfGLO7#"'&54763!#"'&=#3672#"'&5#3547632!"'&5476;5##"54763755s!   ~/ ) -  ])2_B @d   A5 N ,  {& ::)12dDQ[%#327632#"'&'#"'#"'&547676763254'&#"#"'&5476326325&#"3273&'&'"c* &) 3N2)3;g..;L+ G  )I/B24eX; * '"$ &'&x(!&&H"6U?%#"'&5476;&'&#"#"'&=476327672#"'&5476323276"  ! H(25-"  X6zOG^RvsE6  (Fw4 Z*  !T! !YOrBzLA2&#J#,,8%#&'4;&'&#"#"'&=47632632"#"'&547632329B_ A) ' 9WH6>BoC@  'C-2R   !M=WA[\>B "'   "6?O_%#"'&5476;&'&#"#"'&=476327672#"'&54763232762#"'&547632#"'&5476"  ! H(25-"  X6zOG^RvsE6  (Fw4& $ & $ Z*  !T! !YOrBzLA2&#J#$# $ $# $ $,,U8HX%#&'4;&'&#"#"'&=47632632"#"'&547632322#"'&547632#"'&54769B_ A) ' 9WH6>BoC@  'C& $ & $ -2R   !M=WA[\>B "'   # $ $# $ $oaq4;232+&'&#2+"'&547635"#"5476;6767'"'476;25"'&5476;2#7&'2#"'&547632#"'&5476B6! 8sU   XL" "a" "WXB Rs7 !6Bv% a %v& $ & $ 3 1- -  /:2 72 3!  # $ $# $ $lUjz!#&'47675+"'&54763237'"'&5476;250/&547636;27&5476;2#+"547'02#"'&547632#"'&5476OG9 NBG    !E P [ P E!   !GBN0& $ & $ ,=J2n ?22? n2J=-T# $ $# $ $>Yiy3276767654'&#"#"'&=47632632#"'"=47632327654'&'&+"'&54762#"'&547632#"'&5476*< 3"L    4No?+- ;X:SSI3  ? "P$$";  & $ & $ U * +  !X!  !E.>N$/N^0 'BB! $ (! # $ $# $ $IUIYi%4'&+"'4;2767654'&#"#"'&=432632#"'#"'&=4763232762#"'&547632#"'&5476C*;C53>) / 8Iu9 #+ Q * $W= & +RM & $ & $ 22     !%B<"+0 5 G(  !" ,'# $ $# $ $>UY3276767654'&#"#"'&=47632632#"'"=47632327654'&'&+"'&5476*< 3"L    4No?+- ;X:SSI3  ? "P$$";  U * +  !X!  !E.>N$/N^0 'BB! $ (! II%4'&+"'4;2767654'&#"#"'&=432632#"'#"'&=476323276C*;C53>) / 8Iu9 #+ Q * $W= & +RM 22     !%B<"+0 5 G(  !" ,'CM]32+"'&5476;&'476;2+75#"'&5476;232+"'&5476;32+"'&56!  y!  2 e!    e! 4!  y   ) F)  - *  +  [ "  &9-6F75"'632372#2+"56752#"+"5675"'43'32+"'&56;6ZB98 YC698YC6;CXCK ) Q{o 222*22/|o *22/2211 "  &CM]m32+"'&5476;&'476;2+75#"'&5476;232+"'&5476;2#"'&547632#"'&5476!  y!  2 e!    e! 4!  y  & $ & $ F)  - *  +  # $ $# $ $9U6FV75"'632372#2+"56752#"+"5675"'432#"'&547632#"'&5476;6ZB98 YC698YC6;CXC9& $ & $ Q{o 222*22/|o *22/2211# $ $# $ $C&jY2*.U&jRCU!2#"'&5476!32767&'&#",gR^URptRQUQF&+O7 F(.R6 UMZ}ZV[Y~ZVW*F$Z-H'1*.!2#"'&5476&'&#"!3276/rLASIfuLAUJCX. .D!T.NBYgE=NBYkD:; :P< 9C!1A2#"'&5476!32767&'&#"2#"'&547632#"'&5476,gR^URptRQUQF&+O7 F(.R6 G& $ & $ UMZ}ZV[Y~ZVW*F$Z-H'1# $ $# $ $*.U!1A2#"'&5476&'&#"!32762#"'&547632#"'&5476/rLASIfuLAUJCX. .D!T.& $ & $ NBYgE=NBYkD:; :P< 9# $ $# $ $"6?O_%#"'&5476;&'&#"#"'&=476327672#"'&54763232762#"'&547632#"'&5476"  ! H(25-"  X6zOG^RvsE6  (Fw4& $ & $ Z*  !T! !YOrBzLA2&#J#$# $ $# $ $,,U8HX%#&'4;&'&#"#"'&=47632632"#"'&547632322#"'&547632#"'&54769B_ A) ' 9WH6>BoC@  'C& $ & $ -2R   !M=WA[\>B "'   # $ $# $ $D.>476;27&'4;2+"'&547637&732+"'&564\! ^^$DZ / 3 n*D6 ) + 2 +*  )t "  &2C-&q\D.>N476;27&'4;2+"'&547637&72#"'&547632#"'&54764\! ^^$DZ / 3 n*D6& $ & $ + 2 +*  )t # $ $# $ $2CU&j\D5.BV476;27&'4;2+"'&547637&#"'&5476?632#"'&5476?6324\! ^^$DZ / 3 n*D6 f f f  f + 2 +*  )t n nn n2C&\&2EUe%#"'&'5&'476;2+23275#"'&5476;2#32+"'&5476;2#"'&547632#"'&5476-={*0 f" HE  f! -"  z  & $ & $ &2 5 ' "&  )  # $ $# $ $1(U6FV23276="'5632372#2+"5675#"'&="'432#"'&547632#"'&5476K. 96Z@96 YC6 8;CXCK& $ & $ QU' T*22*22/)`U2211# $ $# $ $m!ITdt2+"'&54763"'&5476;232+"'&54763"'&5476;2+327654'&+2#"'&547632#"'&54761 BY! ! Y! E l5 2Q9P! (' # 4U?41& $ & $  2   d) 7Ib5&    ;@# $ $# $ $aU$>N^32+"5475"'4;227654/"#%&'6?#2+"547632#"'&547632#"'&54765%|D>=DXB 3g$/(0/AF& 3BEC(& $ & $ Q95/{20222.  )1 &222-# $ $# $ $I2"'&547672"'&5476,v-<K2#"'&5476'2"'&54762"'&547672"'&5476#2"'&54767rvvv +32#"'4762"'&547672"'&5476<vv)8#"'&5476;2##"'&572"'&547672"'&5476.0ecvI2"'&5476,<2#"'&547632"'&5476z<-2"'&5476'2#"'&547632"'&5476,7zv32+"'&5476<$#"'&5476;2##"'&5.0ecW2#"'&5476W-2#"'&5476'2"'&54762"'&5476,rw;vI2"'&5476,@547632#"'&؈<|!2#!"'&5476n|!  !   !  ! E32+"'&5476Eg^n#"'&547632^  ,}  !  BW2#"'&5476%W1lW2#"'&5476OWw##"'&5476;2#"'&5476;25($)% ($)% $(% )?$)$)1 2"'&5476<6%67=#"'&5476;#/32+567'&547632v@ !  qZM7 !  qYKM ! X5M M ! Z4L<,%5&'&'&/#"'&5476;32#!"'&54763Y!  +6".-!  !  d&  ! #,O !  ! {5%5&'&'&+"'&5476;2'&/#"/&576767676Y+?!  ?i.!.$ -0 'R(  ! F'8xy  S "E<#"'&54763!2+#"'&5Y!  |!  - ! | !  ! !  <47547632#"'&#"'&=&'&'&'&+"'&5476;_  !  ! !  +6".2!  !  !  &  ! #,Oz#"'&5#"'&54763z ! N!  R!  J ! {#"'&5476;2+#"'&5M  M ! | !  ! !  <3#"'&=6767#"'&5476;#"'&=&'&'&/7 !  +6". ! |7 !  ! ! #-N!  ' , 9#"/&576?3"#'&'&54=#"'&5476;;6767676=^  #)KM+6!/ !  q?' |k+5#+#-O ! ' n#"'&=#"'&54763n ! H!  !   ! <8"#"'&5&'&'&'&+"'&5476; ! !  +6"./;!  &  ! #,O<1!#"'&5476;6767676=&'&'&'&+"'&5476;#"B!  & !  +6"-T& ! ~&  ! #-S)_ <u%#'&'&54?675!547632!  ! | ; M!  c&0 "35&'&'&##"'&5476;!76P 0&!  +6".@|P '  ! #-O"77#"'&5476;5&'&'&'&+0#"'&5#"'&5476;n\ 1).!  _  ! !  usm%-O ! ' } !  J ! 8z#"'&5#"'&54763z ! N!  !   ! {")"'&5476;5&'&'&/#"'&5476;  !  +6". ! '  ! #-N<13?675&'&'&##"'&5476;#&'&'576!P 0IP 0&!  +6", !nA*,|P _' P _'  ! #.Ik& n).Gm$<#/7#"'&5476;27676?#"'&5476;+"'&54763.5!  @4  &!  ' -M!  d !   ! 7 . ! <84032+5767#"'&5476;#"'&5&'&'&#!PT!  .&!  +6". !  0|P  ! t#- ! #-O;!  ' <A32+456767#"'&5476;#"+"'&5476;6767676=&'&'&#M!   "&!  +6"-#-O!  '  0I" ! X" ! #-S+6". ! ~& <8%75#"'&5476;#"'&5'5#"'&5476;,-!   O-!  _ ! !  U! ! x0'75#"'&5476;!"'&54763!%5#"'&5476;Ic-!  yyR!  3-!  'J  ! Zf ! < ! q28#5%#'&'&576?67676=!"'&54763!%#"'&547632p v!     ! s w ! [!  t!  <"#"'&=&'&'&'&+"'&5476; ! !  +6"./!  &  ! #,O396"5476;#"#!323&5476;2367676747' f& (,G]!  E$ ?! #!" |2! Q(- ) !  <#"+"'&5476;6?6575#"'&5476;#"'&=&'&'&'&#%@  -!  +6". ! |%+& !   ! #,O!  & $'#"'&5#"'&54763!#"'&5#"'&54763 ! N!   ! N!  R!  J ! R!  J ! *'#"'&5#"'&54763##"'&=#"'&54763 ! N!  ^ ! H!  R!  J ! !   ! *'#"'&=#"'&54763!#"'&=#"'&54763 ! H!   ! H!  !   ! !   ! ;]3#"'Q ] #;]3#"'3#"'Q Q ]# #mG'$*;'D ;&g%;'E `;G'J%R;p'<E ;G'qf%z;p'qXE!4E'v6M&vr &&g'!e'G `&G'J'!Rep'<G&G'qf'!zep'qXG #&G&z'!ep&zG&G' '!ep'G &'C9!&b'C &'v 9!&b'v  &G' (!&'H S&G'H(!C&'8H #&5'&z(!&&&zH &&g)K;'\I!P&qn[*!3P;&qJE&g+ E'eK`EG'J+ `Ep'JKE&jg+ E'jK#EG'zh+ #Ep'zhK EG')+ Ep')KSSG'H,>So'HLS'v V>~'v ZE'v.!;`'vN `ZG'J.!`;p'JN ZG'qf.!;p'qfN!`;G'#J/>`p'JO`;&q['#J/>`&qv'JO!;G'q#f/>p'qfO!;G'" />p' OoE'v0o&v*Po'g0ob&P`oH'J0`o'JPP&g1;b&Q`PG'J1`;'JQPG'qf1;'qfQPG' 1;' QC'v;W*.'v;C'j.1*.0'j.C'C9*.b'CC'v 9*.b'v  E'v33;&v(S &g33;b&S k&g56;b& U `kG'J56`;'JU `k&q['J56`l:'q'JU kG'qf56;'qfU>&Tg6Ib&NV>RU' <6IP':V>'YIX'>'Y"IX' #>R&Tg' <6IPb&N':V*.&g7 'xaW*`.G'J7 PO':W*.G'qf7 xO'qVW*.G' 7 O'W RNG'j<8 S;'j=X ENG':8 F;';X NG'8 ;'X N'v4,&d8 ;R'v,&X N'j, ;'j-m&r9Xo&Y`mG'J9`X'JYbE'C:X&CZbE'v :X&v Zb&jg:Xb&jZb&g:Xb&Z`bG'J:`X'JZ N&g;Cb&[ N&jg;Cb&j[C&g<2Cb&\ID'=U&]I`G'J=U`'J]IG'qf=U'qf] Ep'qfK'jxaWX&Z2C&\K;'\A`mG'J$*P;':D#m''$Q;&''Dm7'v*;'vm7'C*;'CIm''O;''m'd*;e'`mD''J$*P;&':Dm'v/*;W'vm'C2*;?'CMm''>P;''m'\*;\'`m5''J$*P;&':D `&G'J(!P&':H]&''(P&&''H &&r(!&o&H &7'v!&'v &7'C!&'CQ&''^&'' &'d!&e' `&D''J(!P&&':HY'',Y&''S`G'J,>`o'JLRCU'<2*P.':RYC''2\.&''RC7'v *.'v C7'C*.'CYC''Y.''C'd*.e'RCD''<2*P.&':RYI'v]*[&v^YI'C%]*[&C^^Y'']c[&' .^Y']*[&^RY'<]*P[':^ RNG'<8 S;'=XYN''8S;&''X L'vk &vl C'Ck &Cl]''k=&'l ' k &l R'<k S''=lCE'C<2C&C\`CG'J<C'}\YC''<Y2C&''\C&r<2Co&\*.I*.I%!"'&54763!2!  !   uI%!"'&54763!23!  !   uI\Z #"/}EZ\eZ 3#"'&547ᄍZb_ 73#"'&547ۄ  \Zb\Z #"/##"/EDEZW\Z 3#"'&547%3#"'&547 Z  W 73#"'&547%3#"'&547   b\Z^n'#"'&5#"'&5476;54763232#^ Z!  Z Y!  Q  k w"  w ^n=32+#"'&=#"'&5476;5#"'&5476;54763232#^Y!  !Y Z  ZZ!  Z Y!  Q w  w  w"  w 2#"'&5476+M,;)2I-:(<(3I,;(3I-?u#5#"'&5476;23#"'&5476;23#"'&5476;2m($)% ($)% ($)% $(% )$(% )$(% )Xj!1AQbr#"'&547%632%2#"'&5476"327654'&2#"'&5476"327654'&%2#"'&5476"327654'& m >"2$=#3$$ # T>"2$=#3$$ # >"2=#3$$ # yv u3$;#3$=#: $ %3$;#3$=#: $ %:3$;# 3$=#: $ %K_o 3#"'&547ۄ o SKo 3#"'&547'3#"'&547[ { o  K?o  3#"'&54?3#"'&547%3#"'&547  儍 o   K_oG@SKoG2@K?oGR@!V7"/7632  ڍ   ;%'&547632#"'&547  ٍ   _~%9K"'&'&547632#"'&5476;2 "'&'&547632#"'&5476;2 (' +2 H)#)%  (' +2 H)#)%  .') 3*$'% ).') 3*$'% )fD #"'&54767632Q  go7%#"'&=4767&'&=47632\ % % @(5#), ! 11 & 5$*8 $ @)#$  --g`o6#"'&54767676=4/&547676=4'&'&'&547632`5#), !11 % % @(8 $ @)#$  --  & 5$^~&"i~&"d1R.GGx_@}"2#"'&=4763276=4/",U!:+U!:- .-.}V&/9e-V&/9e-CN9CN9s+"54;5#575u$%$,O++Os ""!7恁q-+632#"'&5476323254'&#"#"'&=32(u%E&"&QV!  0W( "'  N!= :#-7$*$   A5 } 047632#'#"672#"'&7327654'&#"E8H5$=( -#;#>#N#K /&  (bB4 5(5"(P?3@$ %)s"=!#"'&547# a  X(<= !}(8#"'&547&547632'"327654'&"327654'&u;>(R";66 )C& *! (# &% -!$:B8:$#0;!11]     }.47632#"'&5476332767"'&7&'&#"3276>#L#/>U5$=(-#;# % ,  $P?/IQ;L 5&(5"; )'$Rd[{d[tdRud[dOdRdZdRdRd &GA5#"'&54763!#"'&=!32+32+32+"'&5476;5#"4;5#"43^!   d!  "  999g|   3|8*8i  i8*8!&VI32+32+3632#!"'&5476767#"4;&'#"4;&547632#"'&'&#"o`WT+( T 2 li^O F,;H4" (0g8863.' N  & +882Z/,! # C#F%47632#"+5476323676765'#"'&=&'&'&##"'&53 !  F!( ! &  3 !  C` ! 48&8!  !G !   E!  E$ !  !,QUM32+32+32767632#"'&'#"4;5#"4;67632632#"'&'&'&'&#"ǬR=$  0>gL+ X>O<> ! &0M'g8*8X $%2]5I8*8zD0  T! )L7&V774'&547632#"'&'&#"3632#!"'&547676F,;H4" (0+( T 2 "T: Z/,! # JN ;9.' N  & %dG1?O`2+##"'&=476322745#"'&5476;32+"'&5472#"'&5476"327654/&!  !jc; M !  ~ooN, '* '   G GcB  c O (  (/6-7+ ! $lG?32+"54;5##"=!"=2+"5475&'4;732+"5435#//v..#%$"J//?.$.I54J.!.?//8$%%$1..zz..1O$%% $$%%$~;G\;GG\G@ ZG.mgy~>Wi%327654'&#"#"'&5476320#"'&5476323254'&'&'&547632+"54;5#"'&54767#"'&547672+ (  4#(K#0@)&If 4\("9++,,90    ! !41!<3"& 4!""! L=  y~'fx3632!567654'&#""'&54767632327654'&#"#"'&5476320#"'&5476323254'&'&'&5476#"'&5476726m" #$ (8J%!;+ (  4#(K#0@)&If 4\("   ; +8D !#6%(&# ! !41!<3"& 4.=  ~-FX+632#"'&5476323254/#"#"'&=3232+"54;5#"'&54767#"'&547672h(u%E&"&QV!  4W("'  9++,,90   J!= :#-7$*$   A5 #!""! L=  ~'Ug3632!567654'&#""'&54767632+632#"'&5476323254/#"#"'&=32'#"'&5476726m" #$ (8J%!(u%E&"&QV!  4W("'     ; +8D !#6%(&#K!= :#-7$*$   A5 =  }@n327654'&#"#"'&5476320#"'&5476323254'&'&'&5476+632#"'&5476323254/#"#"'&=32'#"'&547672V+ (  4#(K# 0@)&Ig 3\("(u%E&"&QV!  4W("'      ! !41!<3"' 4!= :#-7$*$   A5 =  sEW+"54;5#575+632#"'&5476323254/#"#"'&=32'#"'&547672$%$,O++O5(u%E&"&QV!  4W("'     s ""!7恁C!= :#-7$*$   A5 =  [~/HZ%47632#'#"672#"'&7327654'&#"32+"54;5#"'&54767#"'&547672OE8H5$=(-#;#>#N#K /&  (9++,,90   bB4 5&(5"(P?3@$ %)!""! L=  [q-M]o+632#"'&5476323254'&#"#"'&=3247632#'#"672#"'&7327654'&#"#"'&547672(u%E&"&QV!  4W( "'  rE8H5$=(-#;#>#N#K /&  (=   N!= :#-7$*$   A5 LbB4 5&(5"(P?3@$ %)=  n~'7Pb%#"'&547&547632'"327654'&"327654'&32+"54;5#"'&54767#"'&5476723;>(R";66 )C&*! (# &% -!9++,,90   $:B8:$#0;!1"1]     !""! L=  n}@Xhx327654'&#"#"'&5476320#"'&5476323254'&'&'&5476#"'&547&547632'"327654'&"327654'&#"'&547672V+ (  4#(K# 0@)&Ig 3\(";>(R";66 )C&*! (# &% -!"    ! !41!<3"' 4$:B8:$#0;!1"1]     z=  nq-EUew+632#"'&5476323254'&#"#"'&=32#"'&547&547632'"327654'&"327654'&#"'&547672(u%E&"&QV!  4W( "'  V;>(R";66 )C&*! (# &% -!"   N!= :#-7$*$   A5 \$:B8:$#0;!1"1]     z=  ns)9I["=!#"'&547##"'&547&547632'"327654'&"327654'&#"'&547672& a  X;>(R";66 )C&*! (# &% -!"   (<= !$:B8:$#0;!1"1]     z=  3~*32+"54;5#"'&54767#"'&5476729++,,90   ~!""! L=  v:3#"'-632.1 +7  -  C&'   *#"'#&'47##"/#"'  ,( 8  .   844vH%#&'673'&54?672 #"/&547)1 +1  -  &'   *547276323 &5473632*,  248   .  f N05632#"'&547632&'&#"'&'"327654/&+^K[4Hk;)O5H*+c B7!G 6jVz=#O8Lo;& M 3 C9D S 3=&#"767632#"'"'&54?&=476323276=4cF  !-J2D/#!  ,8J8W98F L)7m,!%' FLi_N%F' ]Qu_N;L)7mIG33%!K[GdAIGGG@-+!!76;2#!"'54767&=47!2+"' ** )}4 52)); O34}, #*1}31*.J!2#!"'&5476l  "  J  S 32# #"'67!3.b'3.Qy+(a7+(3|4 52760'&#"!#"0;2+"'#"'&5476326;2T-.&"U%,.&#$ M;;Mj&N#.N<8X!##^dp8X^!##^d>8X!##p8^^##5^d^d8^##5^d8^##5^d8##5X 733d&>dX 733dXpX 733&>dX 733Xp^ %!533^dd^ %!533^d %!533pd %!533p8X 33#d>d>8X 33#dpp8X 7#33##2d&>d>8X 33##d^>d>&8X %#33>>d8X %##33^d2pXp8X 3##33^2dpX8X 33#pp8^ ##53^d d8^ ##53^d 8 %##533^d>d8 3##533^2d^d8 ##53 d8 7#533##2dp8 33##5d2p8 ##53 8X^!###Xd^d>8X ###5!Xd^^d>28X 35!###^d^2p8X!###Xdp8X^!###X^d>8X %##5!3>2d8X 7#535!##d2p8X!###XpX %!5333Xdd>X %#!5333Xd2>X =333!5ddp2X %!5333XdpX 33!5^>ddX 3#!533p^d2X 33!5#5p^p2dX %!5333Xp8X 7#5333##ddd>d>8X 7#5333##dd>d>8X 7#5333##dddpp8X 7#5333##ddpp8X 7#5333##dd>d>8X 7#5333##dd>d>8X 7#5333##d>d>8X 7#5333###2d>d2p8X %##5#5333^d2p2dp8X 333###5d2p2d>8X 3###53533^2dpd28X 7#5333##dpp8X 33###5dpp8X 7#5333##>d>8X %##5333pdp8X 7#5333##ppX^%#53#53XdddX%#53#53X8r ##r >>8 ## >>X5!!!!XXd,d8 ###ddd 8X 3##!^d^^ddd8X^ 7#!##d–d>&d>8X #!#3d–d^dd8^ #5!##53^d^dv^d8^ %###5!#^ddd>d8 !5!##53#^dȖd^dv^d>X %3!33#^dddX 333!3dd>d^>d&X  7!!33#3^>dȖddd^ 75#533!5ddd^vd 3!533^d>d^d>  %3!573#5^d>d&vd^>d8X 3#3##3^ddddd8X  3##33dd,dd >>d8X  3#3###33dddd d&8^ 3##535#5dd^^ddd8  ##533#dȖdd d8  ###57#533dddd >^ddd^8X !!##5!X^dXd^dd8X^ %####5!dddX>>dd8X !!3####5X^dddddd>^dX  =!3!533Xddd,dd^X 3!53333–ddd^dd>X  =!'33!#533Xdddddd^8X #5333#3###53dd^d^ddd^d8X 7#533##33dd,ddd>>d8X  33!#5333####5^dddddd^dd^d>^d8X^3#"#476ddod4^dJ,78^^GQX@^ QXXX GQX@:+XV4:GUX@:  ' 7 gVVVV,&4T44T4,^!!,^d,^ #^d ,X^X,8^,Y ,!!,, # ,X\,8,] X%!5!5!!,,,d28 33#d2, XG`X@8 GaX@,X !!X 8X!!XK}8X25!!X28X5!!X8X,!!X, 8X!!X8X&!!X&8X!!X8X !!X 8  !!  8 !!> 8w !!w 8, !!, 8 3# 8 3# 8K 3#KK ,8X !!,, 8& #'+/37;?CGKOSW[_cgkosw%3#'3#'3#%3#'3#'3#3#'3#'3#%3#'3#'3#3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#%3#'3#'3#222222222222,222222222222,222222222222,222222222222,222222222222222222222222222222222^222222222222222222222222222222<8X #'+/37;?CGKOSW[_cgkosw{%3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#22d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d2222222222222222222222222222222222222222222222222^222222222222222222222222222222222222222222222222222222222222222222x8X  #'+/37;?CGKOSW[_cgkosw{ #'+/37;?CGKOSW[_cgkosw{%3#'3#'3#'3#'3#%3+3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#'3#'3#'3#'3#'3#%3#22d22d22d22d2222222d22d22d22d2222d22d22d22d22d222222d22d22d22d2222d22d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222d22d22d22d2222222d22d22d22d222222222222222222222222222222222222222d22222222222222222222222,22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222d22222222222X !!X } 8X 3# KK 2&3!2 2&7!!!DXXDd 2& 753!!!μDXDDd 2& 3!!5%!5!!52dDDD 00X1332& )!3##!3#& 00X133dDDD 2& #'3!%#3#3#37#35#3#3735'35352111111222222X11111 3D1X000130011332& 3!%3'35'#352d~~JJ~ ~J~~2&GX@2& 3!%'3'7'#35''7'?5#2JJJJJJJ>JJJJ rJJJJJ>JJJ>J353735#53^^NN^2&,3!2,2&,7!5!!HTX|,)!,%#!!j|,THT?,3!22,?,7!7!!|Hw22X|,#5)5 #5%'!oox XX)7%'!7G<..<T 5 T'%nr5 oo %充  %'73/6 y % #5G@#5G@G@G@TGs@TGs@ Gs@ Gs@^ 7%^#5! ,    #5%7' ,  }  !7/2#"'&547672#"'&5476"327654'&.3.6/qNISNjtOHUNkZ7)C2BV7*A3l-6.6TMjrOJUMksNHTC2@Y7)C2BT8+HQ 77+z{{Q4!72#"'&5476"327654'&/qNISNjtOHUNkZ7)C2BV7*A3TMjrOJUMksNHTC2@Y7)C2BT8+!7$2#"'&547627&#"674'&/qNISNjtOHUN C B=TMjrOJUMksNHg8TX_j(5XR6!72#"'&5476/qNISNjtOHUNTMjrOJUMksNH!72#"'&547627654'&#/qNISNjtOHUNhV7*A3@TMjrOJUMksNHTC2BT8+!7GX@!7#5@!75@!72#"'&5476#53276)tPJTMjrOJSL#R7*C2BX7'RMjuOISNjrOJA3BV7*D2!72#"'&547635/qNISNjtOHUNOZ6TMjrOJUMksNHD&/ #,!"'&54763,uNFTKjUMitMF.7GZ@8X !!"327654'&X.8.6, 4.7.4XX#1!"327654'&2#"'&5476XtPJTMjrOJSLiQ7,C2BX6)D3X5RMjuOISNjrOJTA3CV7*D3BV6)2&!&  2&GX@2&X2&G@#"'&5476"327654/.B&6!)B&6"*,%(!7 (B&6!*B&<& *$%2&%3#!,XDd 2&X2&7!!DdXDd 2&X2& 3!#332vvXv DD#5%2#"'&5476'!-   woox     nX#5%'!o  XX#5GX@2& 3!#!+32Dvv vDv2&G@2&X2&GX@!7#2#"'&547635327654'&'/qNISNjtOHUNIP& H(/V7*B )TMjrOJUMksNH܂GmQ'C2BU7 !7G@!7X!7GX@X0 %'6354763#"/4763   ͂   Y   ̂   S1<)54763#"/476;'7##"'&5!21͂      ̂   4  $!7/2#"'&547672#"'&5476"327654'&-  !  qNISNjtOHUNkZ7)C2BV7*A3<!  TMjrOJUMksNHTC2@Y7)C2BT8+2& 35!%5!%5!2  dddddd2& 53%#55!%5!^ ddddd dddd2& 35!'53%#=!2dddddddddd2& 53%#553%#55!^,dddddddddddd2& 7#553!5!5,  dddddddddd2& 53%#553%#=!^,ddddd dddddddd2& %3+5373+53'!!^ddd dddddd2& 53%#553%#553%#5^,,ddddddddddddddd!79IY2#"'&5476#2#"'&5476"'47632"'&'&'&#"2#"'&5476"327654'&|  !   !  4$+@) . 7 fqNISNjtOHUNkZ7)C2BV7*A3!  !  2#/!+ )TMjrOJUMksNHTC2@Y7)C2BT8+!7;K[2#"'&5476#2#"'&547623276767632#"'&542#"'&5476"327654'&|  !   !   . 7 4$+@)qNISNjtOHUNkZ7)C2BV7*A3!  !  + )2#/!TMjrOJUMksNHTC2@Y7)C2BT8+!7?O"327654'&#"327654'&"327654'&#"#"'&'&'&2#"'&5476|"  !  "  !  >XSXPXKXXXuXSX*XX*XXSXSXSX6XBXKXBXiXKXSXjXXX*X*X8XhXLXX X!X X X X!XXSX6X X!XXXX XX X>X*X XXX XXIXXSX}XSXX}X*XX6X!X!XKX!X X>XuX!X>XXX*XX!X6XIX X XXXXXUXXXX>XXXSX!XIXXX$XXXvX!X*X*XX}X}X*XXXX X1XXXXzX!XXXXSXXXXXXXX!X X X X XSXSXSXSXXXXXXXXdX X X X X XXX X*X*X*X*X*X*XX6X!X!X!X!X>X>X>X>X*XX*X*X*X*X*X*XX X X X XXXXX*XX*XX*X!X6X!X6X!X6X!X6X X!XX!X X!X X!X X!X X!X X!X!X!X!X!X!X!X!X!XX XX XSX>XSX>XSX>XSX>XSX>XSXuX6XuX X!X4X!X>X!X>X!X>X!X>X X>XXXXXXXXXXX*XX*XX*XXX X6X X6X X6X>XIX>XIX>XIX>XIX*X X*X X*X X X X X X X X X X X X X XXXXXXIXUXIXUXIXUXKXXXXX!X!X6XXXX!X*X X>XX9X!XXiXSX!X>XXXXXXX*XXXXXX>XIXIX XX X*X X XXXIXUX,X,X6XXXXXXXXXX*XSX>XX*X X X X X X X X X X X!XX*XX*XXX X!X!X!X XXX*XX*X,XuX!X!XXXXX*XXX XXXXX*XXX X!XXXSX>XXXX*XXX X6XXX X X>XIX*X XX XIXUXX*X X!XX*XX*XX*XX*XXX*X!X!XX6X!X!X!X!XIXIXuX!X!X XXX>XiXnX>XiXXXXXX?X*X6X6X6X6XMX6X6XKXKXIX9XX9X X X XXXXUXhXhXhX!XX:X!XBX!XhXhX}X}XXX}XXXXsX}%%%%0YY%%\%%%\(Xvpu IS # I* S! *I\Si4 u*.q*F a NRG*  ">SSS  >  !* & "*3Tb#!I43*.6>1T,4!! b,I>>u 4 T b O b>I4444!6!6*> &1&1&1!6!6S4&1** !",",>I>I***",&1<1<<{<<{<,<<<0{<<<<<02<3$*** !6 ! !! !! ! ! ! ! ! K!!     S>S> ! ! !!>>!>!>**** 6 6 6 6>I>I>I>I>I* * * *  IUIUIU K*#Q**IO****MP** !]P ! ! !Q^ ! !YYS>*Y\**YY****^c** YS ]= YY**bWWb^^SS!_1 !7 fS-*S 3d**#*,,, 22222222222##TTy##TT^##!H!!!!!!!!!#.222222222###2222!!!!XS!22222222!!!pp00uVVVVFH"^ * f Z ` vt2h4jb(@0J:FL ( v ! !&!d""#(#$>$%&<&' '(()@)*`++,b,-..x///001j112n3.3456 77h8J89t99::;B;x>??R?@NA ACCDELF"GHHIJKL~MrNzOOPhQ.QRSTSTUTVVW6WXYZr[0[\]z^H_"`"abc cde>efg\ghi6jjkl$lmnHnop6pqrs<stuv^wHx:yyz{{{{{|}~4~>zp(4$( <Rhl:PHJLbz.L`^~|NV:B@Vl&^$|zj>.DZ>@8N@P˜¨<RžlP|^˺PVr.дъ^tҊӪ:x,הBHں:JݚzXp߆ߞߴ(@Xp2Ndz@,BZp0H^v*BXt$@\tRj2J`vJ`bX$DXt *P&:PJ^ "l: :   x      D V h z    . f  :  (> Rbr(@\l| ,<L\l|P  6Rh~ZXZjzhzf !r"#,#B#X#n##$&%%&N&d&z'R'(((((*+2, ,-.//0T0d01b1r2v3n4>5d6 666677778P9$949:;b<6<=>Z??@l@|AAAB|BCDnDEFvGGtHHHHHIIIIJpKKLBLMnMNvOOOOPQFQQR R R0RSTUnV0VFVWrWWXYNYZZ[[`\d]~^v_>_`aHabc(cdvdee$efNfffffggrhh|i iiijLjk|llm`nnnnnnopZqrssss(ssstruuuuuu2uHu^v4w6wLwbxxyz|}~dp~F "\0f(dV.JF$|j\h>t$H2Z*BZr,BZr2Pl $:Rj*BZr&>Vn&>Vn.F^v,Jj&>Vt 8Ph4Lbx0F\t(>Vn*BZp0Pn.Nl&>Vn ":Rj(@Xp "8Pf~ ":Ph~ ":Rh~ 0^\* ¢bPŔvf6LLȶȶȶȶɂR˄˄˄˄˄˄˄˖˨˺&8͢j:тђѨѸ:0Nת؜٠n޺DX@4FnX8 &TR$Bb:XvDh"Jr*Rx ,Px6Z,V>h8\&N~(P,^6f,d,f|6Rdv.D^v*D^xXNh>:P  0 J r      4 P v       " 8 N d z     r   ~ $>X 2H0DZ$8n2H\r$  BRb< xn@.jZ\nZx(22 LHX$-~-  F$$k, Z \ n Zx ( 2 2 L H X$"H ;&GHoH'1HO  H  "# HG  & H  ! H?$H &HGH" H 3 }( H  " H ; ( H   H ;  H   H $ i$ }$H $T O* * *H - -#-HC  " H "H?  " H   H/Copyleft 2002, 2003 Free Software Foundation.FreeMonoBoldPfaEdit 1.0 : Free Monospaced Bold : 8-9-2003Free Monospaced BoldVersion $Revision: 1.8 $ FreeMonoBoldThe use of this font is granted subject to GNU General Public License.http://www.gnu.org/copyleft/gpl.htmlThe quick brown fox jumps over the lazy dog.Copyleft 2002, 2003 Free Software Foundation.FreeMonoBoldPfaEdit 1.0 : Free Monospaced Bold : 8-9-2003Free Monospaced BoldVersion $Revision: 1.8 $ FreeMonoBoldThe use of this font is granted subject to GNU General Public License.http://www.gnu.org/copyleft/gpl.htmlThe quick brown fox jumps over the lazy dog.NegretaFree Mono Negretahttp://www.gnu.org/copyleft/gpl.htmltu nFree Mono New tu nhttp://www.gnu.org/copyleft/gpl.htmlfedFree Mono fedhttp://www.gnu.org/copyleft/gpl.htmlFettFree Mono Fetthttp://www.gnu.org/copyleft/gpl.htmlFree Mono http://www.gnu.org/copyleft/gpl.htmlNegritaFree Mono Negritahttp://www.gnu.org/copyleft/gpl.htmlLihavoituFree Mono Lihavoituhttp://www.gnu.org/copyleft/gpl.htmlGrasFree Mono Grashttp://www.gnu.org/copyleft/gpl.htmlFlkvrFree Mono Flkvrhttp://www.gnu.org/copyleft/gpl.htmlGrassettoFree Mono Grassettohttp://www.gnu.org/copyleft/gpl.htmlVetFree Mono Vethttp://www.gnu.org/copyleft/gpl.htmlHalvfetFree Mono Halvfethttp://www.gnu.org/copyleft/gpl.htmlPogrubionyFree Mono Pogrubionyhttp://www.gnu.org/copyleft/gpl.htmlNegritoFree Mono Negritohttp://www.gnu.org/copyleft/gpl.html>;C68@=K9Free Mono >;C68@=K9http://www.gnu.org/copyleft/gpl.htmlTu nFree Mono Tu nhttp://www.gnu.org/copyleft/gpl.htmlFetFree Mono Fethttp://www.gnu.org/copyleft/gpl.htmlKal1nFree Mono Kal1nhttp://www.gnu.org/copyleft/gpl.htmlpolkrepkoDovoljena je uporaba v skladu z licenco GNU General Public License.http://www.gnu.org/copyleft/gpl.html`erif bo za vajo spet kuhal doma e ~gance.#mFree Mono #mhttp://www.gnu.org/copyleft/gpl.htmlLodiaFree Mono Lodiahttp://www.gnu.org/copyleft/gpl.htmlNegritaFree Mono Negritahttp://www.gnu.org/copyleft/gpl.htmlNegritoFree Mono Negritohttp://www.gnu.org/copyleft/gpl.htmlNegritaFree Mono Negritahttp://www.gnu.org/copyleft/gpl.htmlGrasFree Mono Grashttp://www.gnu.org/copyleft/gpl.html2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~bcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<spaceexclamquotedbl numbersigndollarpercent ampersand quotesingle parenleft parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon semicolonlessequalgreaterquestionatABCDEFGHIJKLMNOPQRSTUVWXYZ bracketleft backslash bracketright asciicircum underscoregraveabcdefghijklmnopqrstuvwxyz braceleftbar braceright asciitilde softhyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexuni0162uni0163TcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni0190uni0191uni0193uni0195uni0196uni0197uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01ABuni01ACuni01ADuni01AEUhornuhornuni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01BBuni01C0uni01C1uni01C3uni01C7uni01C8uni01C9uni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccent Tcommaaccent tcommaaccentuni021Euni021Funi0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0250uni0251uni0252uni0253uni0254uni0256uni0257uni0258uni0259uni025Buni025Cuni025Funi0260uni0261uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Duni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0287uni0288uni0289uni028Cuni028Duni028Euni0290uni0294uni0295uni0296uni0297uni0298uni029Cuni029Euni029Funi02A0uni02A1uni02A2uni02D0uni02D1 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni031Buni0321uni0322uni0327uni0328uni0337uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1phi1uni03F1uni0400 afii10023 afii10051 afii10052 afii10053 afii10054 afii10055 afii10056 afii10057 afii10058 afii10059 afii10060 afii10061uni040D afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097uni0450 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109uni045D afii10110 afii10193uni048Cuni048Duni048Euni048F afii10050 afii10098uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8 afii10846uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9 afii57799 afii57801 afii57800 afii57802 afii57793 afii57794 afii57795 afii57798 afii57797 afii57806 afii57796 afii57807 afii57839 afii57645 afii57841 afii57842 afii57804 afii57803 afii57658uni05C4 afii57664 afii57665 afii57666 afii57667 afii57668 afii57669 afii57670 afii57671 afii57672 afii57673 afii57674 afii57675 afii57676 afii57677 afii57678 afii57679 afii57680 afii57681 afii57682 afii57683 afii57684 afii57685 afii57686 afii57687 afii57688 afii57689 afii57690 afii57716 afii57717 afii57718uni05F3uni05F4uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni2011 afii00208 quotereverseduni201Fminuteseconduni2034uni2035uni2036uni2037 exclamdbluni2045uni2046uni2048uni2049uni204Buni2064 zerosuperioruni2071uni2072uni2073 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni207Auni207Buni207Cparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferiorlira afii57636Eurouni2112 afii61352uni2126uni2127uni212Auni212Bonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdownemptysetgradientuni2215 proportional orthogonal equivalence revlogicalnotSF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595 filledboxH22073uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrttriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C9circleuni25CDH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni2607uni2608uni2609uni2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2639 smileface invsmilefaceuni2669 musicalnotemusicalnotedbluni266Cdotlessj commaaccentffxplanet-1.3.0/xplanet/fonts/README0000644000175000017500000000013410411352756013575 00000000000000The FreeMonoBold font is from http://www.nongnu.org/freefont and is released under the GPL. xplanet-1.3.0/xplanet/scattering/0000755000175000017500000000000011731372543014013 500000000000000xplanet-1.3.0/xplanet/scattering/earthRayleigh0000644000175000017500000001126711721724121016445 00000000000000# This file describes the Rayleigh scattering lookup tables. You will # need to create them and place them in the xplanet/scattering # directory. To create them: # xplanet -create_scattering_tables earthRayleigh -verbosity 1 # Tables will be created at each degree between 0 and 180 degrees for # the limb and between 0 and 90 degrees for the disk using the # incidence, emission, and tangent height values specified in the # blocks below. # The first block is the incidence angles, in degrees. The first line # must be INCIDENCE followed by the number of incidence angles. The # shadow height for incidence angle i is found using # # h = R * (1/sin(sza) - 1) # # The shadow height for an incidence angle of 120 degrees is about 1000 # km (for the Earth). # INCIDENCE 121 0.000 1.000 2.000 3.000 4.000 5.000 6.000 7.000 8.000 9.000 10.000 11.000 12.000 13.000 14.000 15.000 16.000 17.000 18.000 19.000 20.000 21.000 22.000 23.000 24.000 25.000 26.000 27.000 28.000 29.000 30.000 31.000 32.000 33.000 34.000 35.000 36.000 37.000 38.000 39.000 40.000 41.000 42.000 43.000 44.000 45.000 46.000 47.000 48.000 49.000 50.000 51.000 52.000 53.000 54.000 55.000 56.000 57.000 58.000 59.000 60.000 61.000 62.000 63.000 64.000 65.000 66.000 67.000 68.000 69.000 70.000 71.000 72.000 73.000 74.000 75.000 76.000 77.000 78.000 79.000 80.000 81.000 82.000 83.000 84.000 85.000 86.000 87.000 88.000 89.000 90.000 91.000 92.000 93.000 94.000 95.000 96.000 97.000 98.000 99.000 100.000 101.000 102.000 103.000 104.000 105.000 106.000 107.000 108.000 109.000 110.000 111.000 112.000 113.000 114.000 115.000 116.000 117.000 118.000 119.000 120.000 # # The next block is the emission angles. The first line must be # EMISSION followed by the number of emission angles. There's no # reason to go higher than 90 degrees, since those cases don't # intersect the disk and are considered limb rays. # EMISSION 91 0.000 1.000 2.000 3.000 4.000 5.000 6.000 7.000 8.000 9.000 10.000 11.000 12.000 13.000 14.000 15.000 16.000 17.000 18.000 19.000 20.000 21.000 22.000 23.000 24.000 25.000 26.000 27.000 28.000 29.000 30.000 31.000 32.000 33.000 34.000 35.000 36.000 37.000 38.000 39.000 40.000 41.000 42.000 43.000 44.000 45.000 46.000 47.000 48.000 49.000 50.000 51.000 52.000 53.000 54.000 55.000 56.000 57.000 58.000 59.000 60.000 61.000 62.000 63.000 64.000 65.000 66.000 67.000 68.000 69.000 70.000 71.000 72.000 73.000 74.000 75.000 76.000 77.000 78.000 79.000 80.000 81.000 82.000 83.000 84.000 85.000 86.000 87.000 88.000 89.000 90.000 # # This block contains tangent heights, in kilometers. The first line # must be TANGENT_HEIGHT followed by the number of tangent heights. # These values are only used in calculating the limb tables. # TANGENT_HEIGHT 101 0.000 1.000 2.000 3.000 4.000 5.000 6.000 7.000 8.000 9.000 10.000 11.000 12.000 13.000 14.000 15.000 16.000 17.000 18.000 19.000 20.000 21.000 22.000 23.000 24.000 25.000 26.000 27.000 28.000 29.000 30.000 31.000 32.000 33.000 34.000 35.000 36.000 37.000 38.000 39.000 40.000 41.000 42.000 43.000 44.000 45.000 46.000 47.000 48.000 49.000 50.000 51.000 52.000 53.000 54.000 55.000 56.000 57.000 58.000 59.000 60.000 61.000 62.000 63.000 64.000 65.000 66.000 67.000 68.000 69.000 70.000 71.000 72.000 73.000 74.000 75.000 76.000 77.000 78.000 79.000 80.000 81.000 82.000 83.000 84.000 85.000 86.000 87.000 88.000 89.000 90.000 91.000 92.000 93.000 94.000 95.000 96.000 97.000 98.000 99.000 100.000 # The name of each lookup table is constructed from the templates # below, using sprintf() and a phase angle (integer, in degrees). # # Lookup tables are stored as simple binary files or as PNG files. The # binary files are faster but take up more disk space. #TEMPLATES earthDisk%03d.png earthLimb%03d.png TEMPLATES earthDisk%03d.bin earthLimb%03d.bin # The following entries are only used when creating tables, not for # reading them. # You can use Disk and Limb tables calculated using different # parameters (such as scale height or atmospheric density), but they # must have the same emission and incidence angle values. # Red, green, and blue wavelengths, in nanometers WAVELENGTHS 3 700 510 440 # Planet radius, in kilometers RADIUS 6378.140 # Atmospheric scale height, in meters. SCALE_HEIGHT 8000 # Index of refraction of air INDEX_OF_REFRACTION 1.000293 # Density of air at the reference level (the lowest tangent height), # in molecules/cubic meter DENSITY 2.6867774e25 xplanet-1.3.0/xplanet/scattering/README0000644000175000017500000000132111722205367014607 00000000000000Rayleigh scattering is implented using lookup tables. Tables are calculated for fixed phase angles (the observer - point - sun angle). For lines of sight intersecting the disk, the tables are a 2D array of scattering intensities tabulated as a function of incidence (the zenith angle of the sun seen from the point of interest) and emission (the zenith angle of the observer seen from the point of interest) angles. The lookup tables can be calculated using the sample scattering file in the xplanet distribution: xplanet -create_scattering_tables earthRayleigh -verbosity 1 The comments in the scattering file describe its format. Once the tables have been created, place them in the xplanet/scattering directory. xplanet-1.3.0/xplanet/spice/0000755000175000017500000000000011731372543012753 500000000000000xplanet-1.3.0/xplanet/spice/voyager0000644000175000017500000000004010411356762014263 00000000000000-31 "Voyager 1" -32 "Voyager 2" xplanet-1.3.0/xplanet/spice/voyager.krn0000644000175000017500000000025110411356762015060 00000000000000# These kernel files are from # ftp://naif.jpl.nasa.gov/pub/naif/VOYAGER/kernels/spk/ vgr1_st.bsp # 1977 SEP 05 to 2049 DEC 31 vgr2_st.bsp # 1977 AUG 20 to 2049 DEC 31 xplanet-1.3.0/xplanet/spice/cassini0000644000175000017500000000022410411417337014240 00000000000000# show the Cassini orbiter with a trail covering the last 10 days, # relative to Saturn -82 relative_to=699 trail={-10,.01,.1} color={128,128,128} xplanet-1.3.0/xplanet/spice/mgs.krn0000644000175000017500000000057210411417337014174 00000000000000# These kernel files are from # ftp://naif.jpl.nasa.gov/pub/naif/MGS/kernels/spk/ # # Add more recent kernel files at the bottom. # # Phobos and Deimos mar033_2000-2025.bsp # 2000 JAN 01 to 2025 JAN 01 # Mars Global Surveyor spk_m_040212-040512_040213.bsp # 2004 FEB 12 to 2004 MAY 12 spk_m_040512-040812_040213.bsp # 2004 MAY 12 to 2004 AUG 12 xplanet-1.3.0/xplanet/spice/mgs0000644000175000017500000000013710411356762013404 00000000000000-94 image=mgs.png relative_to=499 trail={-.01,0.0001,.001} image=mgs.png # transparent={0,0,0} xplanet-1.3.0/xplanet/spice/asteroids.krn0000644000175000017500000000030310411356762015377 00000000000000# These kernel files are from # ftp://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/asteroids/ ceres-2003-2016.bsp # 2003 JAN 01 to 2016 JAN 01 vesta-2003-2013.bsp # 2003 JAN 01 to 2013 JAN 01 xplanet-1.3.0/xplanet/spice/asteroids0000644000175000017500000000004010411356762014604 000000000000002000001 "Ceres" 2000004 "Vesta" xplanet-1.3.0/xplanet/spice/cassini.krn0000644000175000017500000000163210411417337015035 00000000000000# These kernel files are from # ftp://naif.jpl.nasa.gov/pub/naif/CASSINI/kernels/spk/ # # Add more recent kernel files at the bottom. # # Saturn and its minor satellites, relative to Saturn barycenter sat128.bsp # 2001 DEC 25 to 2009 DEC 19 # Saturn and its major satellites, relative to Saturn barycenter 020514_SE_SAT105.bsp # 2002 JAN 12 to 2013 JAN 08 # Cassini orbiter, relative to the Sun 971103_SCEPH_LP0_SP0.bsp # 1997 OCT 15 to 2004 AUG 01 030201AP_SK_SM546_T45.bsp # 2003 JAN 01 to 2008 AUG 09 # Major planet barycenters and Sun, relative to Solar system # barycenter 981005_PLTEPH-DE405S.bsp # 1959 DEC 10 to 2020 JAN 16 # Cassini orbiter and probe, relative to the Sun 040622AP_OPK_04122_08222.bsp # 2004 MAY 01 to 2008 AUG 09 # Cassini orbiter, major planet barycenters and Sun, major satellites 040622AP_SCPSE_04122_08222.bsp # 2004 MAY 01 to 2008 AUG 09 xplanet-1.3.0/xplanet/spice/README0000644000175000017500000000730010423221014013532 00000000000000To compile Xplanet with spice support, use the --with-cspice option with the configure script. The location of the header files should be in your CPPFLAGS environment variable and the location of libcspice.a should be in the LIBS environment variable. The source code for the SPICE toolkit may be found at ftp://naif.jpl.nasa.gov/pub/naif/toolkit Remember to rename or copy cspice.a to libcspice.a so that the configure script will find it. SPICE kernels and other files go in this directory, or in a subdirectory named "spice" of a directory specified by -searchdir. Files for many missions may be found at ftp://naif.jpl.nasa.gov/pub/naif Most people will probably be interested in SPK (Spacecraft Kernel) files for each mission. Other files of interest are the leapsecond file (e.g. naif0007.tls) and the P_constants file (e.g. pck00007.tpc). Use the -spice_file option to use the SPICE kernels. For example, to look at Saturn as seen from the Cassini spacecraft: xplanet -spice_file cassini -origin naif-82 -target saturn A file named cassini must exist (it can be empty) as well as a file named cassini.krn containing a list of kernel files to read, one per line. You will have to figure out which kernel files you need. Kernel files are loaded in the order listed in the .krn file. If a particular body's ephemeris is in more than one kernel file, the last appropriate kernel file loaded will be used. In general, put the most recent kernel files last in the .krn file. To display the Mars Global Surveyor orbiting around Mars, seen from the earth: xplanet -spice_file mgs -origin earth -body mars Valid keywords are "align", "color", "font", "fontsize", "image", "relative_to", "thickness", "trail", and "transparent". In addition, a string to be plotted with the marker may be enclosed in either double quotes (""), or braces ({}). If a string is not supplied, the marker will take the name of the object from the SPICE kernel. If the "relative_to" keyword is not supplied, the position of the object is computed relative to the Sun. Normally the best thing to do is to compute the position of the object relative to the planet it orbits. The index must be the NAIF id. When using "relative_to", the right kernel files must be loaded to properly calculate the object's position relative to the desired body. For example, the kernel file 971103_SCEPH_LP0_SP0.bsp contains values to compute the position of the Cassini orbiter relative to the Sun. In order to compute its position relative to Saturn, you must supply the proper kernel files to compute Saturn's position relative to the Sun. Note that some kernel files give the position of the Saturn barycenter, which is the center of mass of the Saturn system, not Saturn itself. A few example lines in the spice file are given below. In all cases, the names of the appropriate SPICE kernels must be listed in the .krn file. -94 This plots the Mars Global Surveyor orbiter relative to the Sun. Since Xplanet uses a low precision ephemeris for Mars by default, it probably won't be in the right place relative to Mars. You can use -spice_ephemeris 499 (499 is the NAIF id for Mars) on the command line, or else use the "relative_to" keyword: -94 relative_to=499 "MGS" image=mgs.png trail={-.01,0.0001,.001} This draws the image mgs.png at the location of the MGS orbiter, with an orbit trail from 0.01 days in the past to 0.0001 days in the future. The trail is just a series of line segments connected every 0.001 days. Orbit trails also use the "relative_to" keyword, so if this is omitted, the trail will not go around Mars, but show the orbiter's path around the Sun, which is partly due to Mars moving in its orbit. If that description isn't clear, try it and see what I mean. xplanet-1.3.0/xplanet/ephemeris/0000755000175000017500000000000011731372543013631 500000000000000xplanet-1.3.0/xplanet/ephemeris/README0000644000175000017500000000061210411360232014412 00000000000000Put JPL digital ephemeris files (DE200, DE405, or DE406) here to use for computing planetary positions. Xplanet uses Bill Gray's code (http://www.projectpluto.com/jpl_eph.htm), which reads both big and little endian binary files. The ephemeris files found at ftp://ssd.jpl.nasa.gov/pub/eph/export/unix are big endian files, but you do not need to do any additional byte-swapping to use them. xplanet-1.3.0/xplanet/markers/0000755000175000017500000000000011731372543013314 500000000000000xplanet-1.3.0/xplanet/markers/brightStars0000644000175000017500000001101710411352756015451 00000000000000 -16.71611111 6.75247222 "Sirius" image=none -52.69583333 6.39919444 "Canopus" image=none 19.18250000 14.26102778 "Arcturus" image=none -60.83527778 14.65997222 "α Centauri" image=none 38.78361111 18.61563889 "Vega" image=none 45.99805556 5.27816667 "Capella" image=none -8.20166667 5.24230556 "Rigel" image=none 5.22500000 7.65502778 "Procyon" image=none -57.23666667 1.62858333 "Achernar" image=none 7.40694444 5.91952778 "Betelgeuse" image=none -60.37305556 14.06372222 "β Centauri" image=none 8.86833333 19.84638889 "Altair" image=none 16.50916667 4.59866667 "Aldebaran" image=none -26.43194444 16.49011111 "Antares" image=none -11.16138889 13.41988889 "Spica" image=none 28.02611111 7.75525000 "β Gem" image=none -29.62222222 22.96086111 "α PsA" image=none -59.68861111 12.79533333 "β Cru" image=none 45.28027778 20.69052778 "Deneb" image=none -63.09916667 12.44330556 "α Cru" image=none 11.96722222 10.13952778 "Regulus" image=none -28.97222222 6.97708333 "ε CMa" image=none -57.11333333 12.51941667 "γ Cru" image=none -37.10388889 17.56013889 "λ Sco" image=none 6.34972222 5.41886111 "γ Ori" image=none 28.60750000 5.43819444 "β Tau" image=none -69.71722222 9.22000000 "β Car" image=none -1.20194444 5.60355556 "ε Ori" image=none -46.96111111 22.13722222 "α Gru" image=none 55.95972222 12.90047222 "ε UMa" image=none -47.33666667 8.15888889 "γ Vel" image=none 49.86111111 3.40538889 "α Per" image=none 61.75083333 11.06213889 "α UMa" image=none -26.39333333 7.13986111 "δ CMa" image=none -34.38472222 18.40286111 "ε Sgr" image=none -59.50972222 8.37522222 "ε Car" image=none 49.31333333 13.79233333 "η UMa" image=none -42.99777778 17.62200000 "θ Sco" image=none 44.94750000 5.99213889 "β Aur" image=none -69.02777778 16.81108333 "α TrA" image=none 16.39916667 6.62852778 "γ Gem" image=none -56.73500000 20.42747222 "α Pav" image=none -54.70833333 8.74505556 "δ Vel" image=none -17.95583333 6.37833333 "β CMa" image=none 31.88833333 7.57666667 "α Gem" image=none -8.65861111 9.45977778 "α Hya" image=none 23.46250000 2.11955556 "α Ari" image=none 25.92027778 15.99172222 " " image=none 89.26416667 2.53019444 "α UMi" image=none -26.29666667 18.92108333 "σ Sgr" image=none -17.98666667 0.72650000 "β Cet" image=none -1.94277778 5.67930556 "ζ Ori" image=none 29.09055556 0.13980556 "α And" image=none 35.62055556 1.16219444 "β And" image=none -9.66972222 5.79594444 "κ Ori" image=none -36.37000000 14.11138889 "θ Cen" image=none 74.15555556 14.84508333 "β UMi" image=none 12.56000000 17.58225000 "α Oph" image=none -46.88472222 22.71113889 "β Gru" image=none 40.95555556 3.13613889 "β Per" image=none 14.57194444 11.81766667 "β Leo" image=none -48.95972222 12.69194444 "γ Cen" image=none 40.25666667 20.37047222 "γ Cyg" image=none -43.43250000 9.13327778 "λ Vel" image=none 56.53722222 0.67513889 "α Cas" image=none -0.29916667 5.53344444 "δ Ori" image=none 26.71472222 15.57813889 "α CrB" image=none 51.48888889 17.94344444 "γ Dra" image=none -40.00333333 8.05975000 "ζ Pup" image=none -59.27527778 9.28483333 "ι Car" image=none 42.32972222 2.06500000 "γ And" image=none 59.14972222 0.15297222 "β Cas" image=none 54.92527778 13.39875000 "ζ UMa" image=none -34.29333333 16.83605556 "ε Sco" image=none -53.46638889 13.66477778 "ε Cen" image=none -47.38833333 14.69883333 "α Lup" image=none -42.15777778 14.59177778 "η Cen" image=none -22.62166667 16.00555556 "δ Sco" image=none 56.38250000 11.03069444 "β UMa" image=none -42.30611111 0.43805556 "α Phe" image=none 9.87500000 21.73644444 "ε Peg" image=none -39.03000000 17.70813889 "κ Sco" image=none 28.08277778 23.06291667 "β Peg" image=none -15.72472222 17.17297222 "η Oph" image=none 53.69472222 11.89716667 "γ UMa" image=none 62.58555556 21.30966667 "α Cep" image=none -29.30305556 7.40158333 "η CMa" image=none 33.97027778 20.77019444 "ε Cyg" image=none 60.71666667 0.94513889 "γ Cas" image=none 15.20527778 23.07936111 "α Peg" image=none xplanet-1.3.0/xplanet/markers/mars0000644000175000017500000001051710411356762014124 00000000000000# Contributed by Nils Peter Sudmann #Mountains (all 18) 2.8 113.3 "Tharsis Montes" color=Gray -41.0 43.5 "Nereidum Montes" color=Gray -58.3 44.2 "Charitum Montes" color=Gray 40.9 197.4 "Phlegra Montes" color=Gray 2.7 271.2 "Libya Montes" color=Gray 25.1 188.7 "Tartarus Montes" color=Gray -45.5 317.5 "Hellespontus Montes" color=Gray 18.4 133.1 "Olympus Mons" color=Gray 39.9 170.5 "Erebus Montes" color=Gray -9.4 120.5 "Arsia Mons" color=Gray 11.3 104.5 "Ascraeus Mons" color=Gray 25.0 213.0 "Elysium Mons" color=Gray 0.3 112.8 "Pavonis Mons" color=Gray -8.0 80.7 "Geryon Montes" color=Gray 6.8 78.2 "Echus Montes" color=Gray -69.8 346.9 "Sisyphi Montes" color=Gray 3.9 188.9 "Hibes Montes" color=Gray -55.2 41.4 "Oceanidum Mons" color=Gray #Vallis (10 largest) -11.6 70.7 "Valles Marineris" color=azure 22.8 68.2 "Kasei Valles" color=azure 9.7 23.4 "Ares Vallis" color=azure 15.4 56.7 "Maja Valles" color=azure 11.5 38.5 "Simud Vallis" color=azure -41.6 258.3 "Reull Vallis" color=azure 8.6 32.2 "Tiu Vallis" color=azure 41.7 344.5 "Mamers Vallis" color=azure -7.4 151.6 "Mangala Valles" color=azure -21.0 182.7 "Ma'Adim Vallis" color=azure #terra (land mass, all 12) 25.0 330.0 "ARABIA TERRA" color=DarkOrange # align=above -45.0 0.0 "NOACHIS TERRA" color=DarkOrange # align=above -58.2 94.8 "AONIA TERRA" color=DarkOrange # align=above 4.2 46.3 "XANTHE TERRA" color=DarkOrange # align=above -14.3 278.5 "TYRRHENA TERRA" color=DarkOrange # align=above -52.9 262.2 "PROMETHEI TERRA" color=DarkOrange # align=above -34.0 215.0 "CIMMERIAN TERRA" color=DarkOrange # align=above -37.0 160.0 "SIRENUM TERRA" color=DarkOrange # align=above 41.3 70.5 "TEMPE TERRA" color=DarkOrange # align=above -16.2, 21.3 "MARGARITIFER TERRA" color=DarkOrange # align=above # 25.0 330.0 "Arabia Terra" color=DarkOrange #-45.0 0.0 "Noachis Terra" color=DarkOrange #-58.2 94.8 "Aonia Terra" color=DarkOrange # 4.2 46.3 "Xanthe Terra" color=DarkOrange #-14.3 278.5 "Tyrrhena Terra" color=DarkOrange #-52.9 262.2 "Promethei Terra" color=DarkOrange #-34.0 215.0 "Cimmeria Terra" color=DarkOrange #-37.0 160.0 "Sirenum Terra" color=DarkOrange # 41.3 70.5 "Tempe Terra" color=DarkOrange #-16.2, 21.3 "Margaritifer Terra" color=DarkOrange # -7.2 356.0 "Meridiani Terra" color=DarkOrange #-10.4 330.6 "Sabaea Terra" color=DarkOrange #craters (10 largest) -2.5 343.4 "Schiaparelli" -14.0 304.4 "Huygens" 23.8 327.9 "Cassini" 13.7 324.1 "Tikhonravov" 21.7 299.0 "Antoniadi" -1.8 303.6 "Schroeter" -14.9 230.1 "Herschel" -30.0 141.4 "Koval'sky" -50.0 168.6 "Copernicus" -40.8 157.9 "Newton" #plateau or high plain (11 largest -1 dropped) -13.9 138.0 "Daedalia Planum" color=DarkGreen # align=above -18.3 251.6 "Hesperia Planum" color=DarkGreen # align=above 9.6 66.6 "Lunae Planum" color=DarkGreen # align=above -20.9 94.6 "Solis Planum" color=DarkGreen # align=above -62.0 212.6 "Chronium Planum" color=DarkGreen # align=above 9.5 289.6 "Syrtis Major Planum" color=DarkGreen # align=above -80.3 155.1 "Australe Planum" color=DarkGreen # align=above -65.9 297.4 "Malea Planum" color=DarkGreen # align=above -9.6 62.2 "Ophir Planum" color=DarkGreen # align=above -85.0 180.0 "Boreum Planum" color=DarkGreen # align=above #planitia, low plain (all 11 -1 dropped) 14.3 241.1 "Elysium Planitia" color=LightGreen # align=below 47.6 277.3 "Utopia Planitia" color=LightGreen # align=below 46.4 152.1 "Arcadia Planitia" color=LightGreen # align=below 16.0 158.4 "Amazonis Planitia" color=LightGreen # align=below 54.6 30.0 "Acidalia Planitia" color=LightGreen # align=below -44.3 293.8 "Hellas Planitia" color=LightGreen # align=below 27.0 36.0 "Chryse Planitia" color=LightGreen # align=below 14.1 271.0 "Isidis Planitia" color=LightGreen # align=below -49.4 42.8 "Argyre Planitia" color=LightGreen # align=below 81.5 180.0 "Olympia Planitia" color=LightGreen # align=below #dunes (all 2) 77.5 46.0 "Hyperboreae Undae" color=LightGoldenrodYellow 81.0 83.1 "Abalos Undae" color=LightGoldenrodYellow #Landing Sites 22.27 47.97 "Viking 1 Lander" 47.67 225.74 "Viking 2 Lander" 19.33 33.55 "Mars Pathfinder" -14.66 184.63 "Spirit (MER-A)" 90.00 0.00 "North Pole" color=LightBlue # North Pole -90.00 0.00 "South Pole" color=LightBlue # South Pole xplanet-1.3.0/xplanet/markers/earth0000644000175000017500000003441410411417715014263 00000000000000# Longitudes and latitudes are from # http://www.getty.edu/research/tools/vocabulary/tgn/index.html # # The text string is read by strftime() if it contains time formatting # codes. A description of strftime() can be found at # http://www.opengroup.org/onlinepubs/007904975/functions/strftime.html # # The text strings must be encoded in UTF-8. If there is time # formatting information in the string and the timezone is defined, # the string is converted to native using iconv(), run through # strftime(), and then converted back to UTF-8. The locale is taken # from the environment. The "lang" keyword may also be used to # specify an alternate locale. Valid locales can be listed on most # systems using 'locale -a'. # # For example, the text string below will display the date and time # for Montreal in Japanese, provided your system supports the # ja_JP.eucJP locale. # # 45.50 -73.60 "Montréal %c" lang=ja_JP.eucJP timezone=America/Montreal # # Although I've provided timezone values for all of the cities below, # they may not work on all operating systems. The timezone is only # used if there are time formatting codes in the text string. # # Windows users will have to use the POSIX definition style # std offset dst [offset],start[/time],end[/time] # # For example, the Eastern US uses the following string: # timezone=EST+5EDT,M4.1.0/2,M10.5.0/2 # # New Zealand would use # timezone=NZST-12NZDT,M10.1.0/2,M3.3.0/3 # # The syntax is described at # http://www.opengroup.org/onlinepubs/007904975/functions/tzset.html # and # http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html -25.07 -130.08 "Adamstown" timezone=Pacific/Pitcairn # Pitcairn Island (UK) 61.22 -149.90 "Anchorage" timezone=America/Anchorage # USA -13.80 -171.75 "Apia" timezone=Pacific/Apia # Samoa -36.92 174.78 "Auckland %H:%M %Z (%a)" timezone=Pacific/Auckland # New Zealand 1.32 172.98 "Bairiki" timezone=Pacific/Tarawa # Kiribati 13.73 100.50 "Bangkok" timezone=Asia/Bangkok # Thailand 52.53 13.42 "Berlin" timezone=Europe/Berlin # Germany 4.63 -74.08 "Bogotá" timezone=America/Bogota # Colombia -34.67 -58.50 "Buenos Aires" timezone=America/Buenos_Aires # Argentina 30.05 31.25 "Cairo" timezone=Africa/Cairo # Egypt 51.08 -114.08 "Calgary" timezone=America/Edmonton # Canada -33.93 18.47 "Cape Town %H:%M %Z" timezone=Africa/Johannesburg # South Africa 10.50 -66.92 "Caracas" timezone=America/Caracas # Venezuela 33.65 -7.58 "Casablanca" timezone=Africa/Casablanca # Morocco 4.92 -52.30 "Cayenne" timezone=America/Cayenne # French Guiana -43.55 172.67 "Christchurch" timezone=Pacific/Auckland # New Zealand -10.50 105.67 "Christmas Island" timezone=Indian/Christmas # Australia 6.92 79.87 "Colombo" timezone=Asia/Colombo # Sri Lanka 14.63 -17.45 "Dakar" timezone=Africa/Dakar # Senegal 33.50 36.32 "Damascus" timezone=Asia/Damascus # Syria -6.85 39.30 "Dar es Salaam" timezone=Africa/Dar_es_Salaam # Tanzania -12.38 130.73 "Darwin" timezone=Australia/Darwin # Australia 28.67 77.22 "Delhi" timezone=Asia/Calcutta # India 39.73 -104.98 "Denver" timezone=America/Denver # USA 23.72 90.37 "Dhaka" timezone=Asia/Dhaka # Bangladesh -27.12 -109.37 "Easter Island" timezone=Pacific/Easter # Chile -3.75 -38.58 "Fortaleza" timezone=America/Fortaleza # Brazil -24.75 25.92 "Gaborone" timezone=Africa/Gaborone # Botswana 13.47 144.75 "Hagåtña" timezone=Pacific/Guam # Guam 32.30 -64.80 "Hamilton" timezone=Atlantic/Bermuda # Bermuda -17.83 31.05 "Harare" timezone=Africa/Harare # Zimbabwe 23.17 -82.35 "Havana" timezone=America/Havana # Cuba -42.90 147.30 "Hobart" timezone=Australia/Hobart # Australia 21.30 -157.85 "Honolulu %H:%M %Z (%a)" timezone=Pacific/Honolulu # USA 29.75 -95.35 "Houston" timezone=America/Chicago # USA 63.75 -68.50 "Iqaluit" timezone=America/Iqaluit # Canada 52.30 104.25 "Irkutsk" timezone=Asia/Irkutsk # Russia 41.03 28.95 "Istanbul" timezone=Asia/Istanbul # Turkey -6.13 106.75 "Jakarta" timezone=Asia/Jakarta # Indonesia 34.52 69.18 "Kabul" timezone=Asia/Kabul # Afghanistan 24.85 67.03 "Karachi" timezone=Asia/Karachi # Pakistan 27.70 85.32 "Kathmandu" timezone=Asia/Katmandu # Nepal 15.55 32.53 "Khartoum" timezone=Africa/Khartoum # Sudan -4.30 15.30 "Kinshasa" timezone=Africa/Kinshasa # Congo -16.50 -68.17 "La Paz" timezone=America/La_Paz # Bolivia 6.45 3.47 "Lagos" timezone=Africa/Lagos # Nigeria -12.05 -77.05 "Lima" timezone=America/Lima # Peru 51.50 -0.17 "London" timezone=Europe/London # UK 34.05 -118.23 "Los Angeles" timezone=America/Los_Angeles # USA -8.83 13.25 "Luanda" timezone=Africa/Luanda # Angola 40.42 -3.72 "Madrid" timezone=Europe/Madrid # Spain 14.62 120.97 "Manila" timezone=Asia/Manila # Philippines 19.40 -99.15 "Mexico City" timezone=America/Mexico_City # Mexico 25.20 -99.83 "Monterrey" timezone=America/Monterrey # Mexico 45.50 -73.60 "Montréal" timezone=America/Montreal # Canada 55.75 37.70 "Moscow" timezone=Europe/Moscow # Russia 2.03 45.35 "Muqdisho" timezone=Africa/Mogadishu # Somalia 20.98 -89.65 "Mérida" timezone=America/Merida # Mexico 12.17 14.98 "NDjamena" timezone=Africa/Ndjamena # Chad -1.28 36.83 "Nairobi" timezone=Africa/Nairobi # Kenya 40.70 -74.00 "New York" timezone=America/New_York # USA 13.53 2.08 "Niamey" timezone=Africa/Niamey # Niger 18.15 -15.97 "Nouakchott" timezone=Africa/Nouakchott # Mauritania -17.53 -149.57 "Papeete" timezone=Pacific/Tahiti # French Polynesia -31.97 115.82 "Perth %H:%M %Z" timezone=Australia/Perth # Australia -9.5 147.17 "Port Moresby" timezone=Pacific/Port_Moresby # Papua New Guinea 39.00 125.78 "P'yongyang" timezone=Asia/Pyonyang # North Korea -0.23 -78.50 "Quito" timezone=America/Guayaquil # Ecuador -8.10 -34.88 "Recife %H:%M %Z" timezone=America/Recife # Brazil 64.15 -21.97 "Reykjavik" timezone=Atlantic/Reykjavik # Iceland 24.65 46.77 "Riyadh" timezone=Asia/Riyadh # Saudi Arabia -33.45 -70.67 "Santiago" timezone=America/Santiago # Chile 37.53 127.00 "Seoul" timezone=Asia/Seoul # South Korea 31.10 121.37 "Shanghai" timezone=Asia/Shanghai # China 1.28 103.85 "Singapore" timezone=Asia/Singapore # Singapore -51.75 -57.93 "Stanley" timezone=Atlantic/Stanley # Falkland Islands -18.13 178.42 "Suva" timezone=Pacific/Fiji # Fiji -33.92 151.17 "Sydney" timezone=Australia/Sydney # Australia -23.55 -46.65 "São Paulo" timezone=America/Sao_Paulo # Brazil 35.67 51.43 "Tehran" timezone=Asia/Tehran # Iran 35.75 139.50 "Tokyo %H:%M %Z" timezone=Asia/Tokyo # Japan 32.90 13.18 "Tripoli" timezone=Africa/Tripoli # Libya 36.83 10.22 "Tunis" timezone=Africa/Tunis # Tunisia 47.90 106.87 "Ulaanbaatar" timezone=Asia/Ulaanbaatar # Mongolia 49.22 -123.10 "Vancouver" timezone=America/Vancouver # Canada 60.72 -135.05 "Whitehorse" timezone=America/Whitehorse # Canada -22.57 17.10 "Windhoek" timezone=Africa/Windhoek # Namibia 62.17 129.83 "Yakutsk" timezone=Asia/Yakutsk # Russia 62.50 -114.48 "Yellowknife" timezone=America/Yellowknife # Canada 90.00 0.00 "North Pole" color=LightBlue -90.00 0.00 "South Pole" color=LightBlue # 25.25 51.60 "Ad-Dawhah" timezone=Asia/Qatar # Qatar # 12.78 45.05 "`Adan" timezone=Asia/Aden # Yemen # 9.03 38.70 "Adis Abeba" timezone=Africa/Addis_Ababa # Ethiopia # 26.22 50.57 "Al-Manamah" timezone=Asia/Bahrain # Bahrain # 36.83 3.00 "Algiers" timezone=Africa/Algiers # Algeria # 43.25 76.95 "Almaty" timezone=Asia/Almaty # Kazakhstan # 31.95 35.93 "`Amman" timezone=Asia/Amman # Jordan #-18.87 47.50 "Antananarivo" timezone=Africa/Antananarivo # Madagascar #-25.27 -57.67 "Asunción" timezone=America/Asuncion # Paraguay # 33.35 44.42 "Baghdad" timezone=Asia/Baghdad # Iraq # 40.37 49.88 "Baku" timezone=Asia/Baku # Azerbaijan # 4.88 114.93 "Bandar Seri Begawan" timezone=Asia/Brunei # Brunei # 33.87 35.50 "Beirut" timezone=Asia/Beirut # Lebanon # 18.93 72.85 "Bombay" timezone=Asia/Calcutta # India #-27.50 153.00 "Brisbane" timezone=Australia/Brisbane # Australia # 44.43 26.10 "Bucharest" timezone=Europe/Bucharest # Romania # 22.50 88.33 "Calcutta" timezone=Asia/Calcutta # India # 13.08 80.30 "Chennai" timezone=Asia/Calcutta # India # 41.85 -87.65 "Chicago" timezone=America/Chicago # USA # 29.56 106.56 "Chongqing" timezone=Asia/Chungking # China # 25.20 55.27 "Dubai" timezone=Asia/Dubai # UAE # 44.63 -63.58 "Halifax" timezone=America/Halifax # Canada # 60.13 25.00 "Helsinki" timezone=Europe/Helsinki # Finland #-26.17 28.03 "Johannesburg" timezone=Africa/Johannesburg # South Africa # 3.17 101.70 "Kuala Lumpur" timezone=Asia/Kuala_Lumpur # Malaysia # 29.33 48.00 "Kuwait City" timezone=Asia/Kuwait # Kuwait # 28.13 -15.45 "Las Palmas de Gran Canaria" timezone=Atlantic/Canary # Spain #-15.43 28.33 "Lusaka" timezone=Africa/Lusaka # Zambia # -3.10 -60.00 "Manaus" timezone=America/Manaus # Brazil #-25.97 32.58 "Maputo" timezone=Africa/Maputo # Mozambique # 23.62 58.63 "Masqat" timezone=Asia/Muscat # Oman # 21.45 39.82 "Mecca" timezone=Asia/Riyadh # Saudi Arabia # 25.77 -80.18 "Miami" timezone=America/New_York # USA #-34.92 -56.17 "Montevideo" timezone=America/Montevideo # Uruguay #-11.67 43.27 "Moroni" timezone=Indian/Comoro # Comoro Islands #-22.27 166.43 "Noumea" timezone=Pacific/Noumea # New Caledonia # 55.07 83.08 "Novosibirsk" timezone=Asia/Novosibirsk # Russia # 59.93 10.75 "Oslo" timezone=Europe/Oslo # Norway # 8.95 -79.50 "Panama" timezone=America/Panama # Panama # 48.87 2.33 "Paris" timezone=Europe/Paris # France # 11.58 104.92 "Phnum Pénh" timezone=Asia/Phnom_Penh # Cambodia # 10.63 -61.52 "Port of Spain" timezone=America/Port_of_Spain # Trinidad and Tobago # -0.90 -89.60 "Puerto Baquerizo Moreno" timezone=Pacific/Galapagos # Ecuador # 16.78 96.17 "Rangoon" timezone=Asia/Rangoon # Myanmar # 41.88 12.50 "Rome" timezone=Europe/Rome # Italy # 18.48 -66.13 "San Juan" timezone=America/Puerto_Rico # Puerto Rico # 18.50 -69.95 "Santo Domingo" timezone=America/Santo_Domingo # Dominican Republic # 47.60 -122.32 "Seattle" timezone=America/Los_Angeles # USA # 59.33 18.08 "Stockholm" timezone=Europe/Stockholm # Sweden # 25.02 121.37 "Taipei" timezone=Asia/Taipei # Taiwan # 14.08 -87.23 "Tegucigalpa" timezone=America/Tegucigalpa # Honduras # 32.08 34.77 "Tel Aviv" timezone=Asia/Tel_Aviv # Israel # 43.70 -79.42 "Toronto" timezone=America/Montreal # Canada # -5.15 119.47 "Ujung Pandang" timezone=Asia/Ujung_Pandang # Indonesia xplanet-1.3.0/xplanet/markers/moon0000644000175000017500000000025010411352756014122 00000000000000 0.647 23.505 "Apollo 11" -3.036 -23.418 "Apollo 12" -3.66 -17.48 "Apollo 14" 26.083 3.65 "Apollo 15" -8.991 15.514 "Apollo 16" 20.167 30.767 "Apollo 17" xplanet-1.3.0/xplanet/markers/README0000644000175000017500000001110711660341663014114 00000000000000The format of each line is generally latitude, longitude, string, as in the example below: 33.943 -118.408 "Los Angeles" # USA Anything after a # is ignored. In addition, Xplanet supports the "align", "color", "font", "fontsize", "image", "max_radius", "min_radius", "position", "radius", and "transparent" keywords. If used, keywords must follow the text string. The "align" keyword is used to place the marker string in relation to the marker itself. Valid "align" values are "right", "left", "above", "below", or "center". If the "align" keyword is not specified, Xplanet will attempt to place the marker string so as not to overlap other markers. Valid values for "color", "font", and "fontsize" are the same as for the -color, -font, and -fontsize options, respectively. Valid values for "image" are either "none" or the name of an image file. If the "image" keyword is not specified, Xplanet will draw a circular marker. Xplanet looks for image files in the same places it looks for map files. The keywords "max_radius" and "min_radius" allow the user to specify a size for the body where the marker will not be drawn. For example, max_radius=0.40 means that this marker will not be drawn if the planet's radius is larger than 40% of the screen height. Similarly, min_radius=0.25 means that this marker will not be drawn if the planet's radius is less than 25% of the screen height. The keyword "opacity" controls the transparency of the marker. It can range from 0 to 100. A value of 100 is the default. The keyword "outlined" defaults to "true". This draws a black outline around the marker for better visibility against the background. Using "outlined=false" will not draw the outline. You may want to use this when drawing text against a transparent background. Valid values for "position" are "absolute", "pixel", or a body name (e.g. position=moon). Using "pixel" means that the given coordinates are pixel values, where positive values are relative to the top or left edges, and negative values are relative to the right or bottom edge. Using "absolute" means the pixel values are relative to the upper left corner, so negative values are off of the screen. If the "position" keyword is not specified, Xplanet assumes the two coordinates given in the marker file are latitude and then longitude. The "radius" keyword is used to place the marker at the specified distance from the planet's center, in units of the planetary radius. A radius value of 1 places the marker at the planet's surface. The "symbolsize" keyword controls the size in pixels of the circular marker. The default is 6. The "timezone" keyword is used to specify a value for the TZ environment variable when the marker is drawn. If this keyword is specified, the marker string is passed through strftime(3) before being displayed. See the earth marker file for more details. The "transparent" keyword is only meaningful in conjunction with "image". The format must be "transparent={R,G,B}" where the RGB values range from 0 to 255. Any pixels with this color value will be considered to be transparent. Delimiters (whitespace or tabs) are not permitted in any of these keyword/value pairs (except for with "transparent", as shown above). The text string may be enclosed in either quotes ("") or braces ({}). Some sample marker file entries are given below: 33.943 -118.408 "Los Angeles" align=below color=blue font=10x20 # USA 33.943 -118.408 {Los Angeles} align=below color=blue font=10x20 # USA Each of these will draw a circular marker at latitude 33.943, longitude -118.408, with a text label "Los Angeles" below it, colored blue and using font 10x20. 20 10 "This is xplanet" image=none position=pixel This draws the string "This is xplanet" at pixel coordinates y=20, x=10, with no marker. (0,0) is the upper left corner of the screen. If y or x is negative, it is taken to be the number of pixels from the bottom or right side of the screen, respectively. position=sun image=smile.png transparent={255,255,255} This draws the image "smile.png" at the subsolar point. Any pixels with the RGB values {255,255,255} will be considered transparent. Using "position=moon" will draw the image at the sublunar point. -1.12479 251.774 radius=1.09261 {HST} This draws a circular marker for the Hubble Space Telescope above latitude -1.12479, longitude 251.774 degrees, at a distance of 1.09261 earth radii from the center of the earth and labels it "HST". 40.70 -74.00 "New York %H:%M %Z" timezone=America/New_York This draws a marker with "New York" followed by the time in HH:MM ZZZ where ZZZ is the string for the time zone (either EST or EDT). xplanet-1.3.0/xplanet/rgb.txt0000644000175000017500000004344310411344513013101 00000000000000# Copyright 1985, 1998 The Open Group # # All Rights Reserved. # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of The Open Group shall # not be used in advertising or otherwise to promote the sale, use or # other dealings in this Software without prior written authorization # from The Open Group. 255 250 250 snow 248 248 255 ghost white 248 248 255 GhostWhite 245 245 245 white smoke 245 245 245 WhiteSmoke 220 220 220 gainsboro 255 250 240 floral white 255 250 240 FloralWhite 253 245 230 old lace 253 245 230 OldLace 250 240 230 linen 250 235 215 antique white 250 235 215 AntiqueWhite 255 239 213 papaya whip 255 239 213 PapayaWhip 255 235 205 blanched almond 255 235 205 BlanchedAlmond 255 228 196 bisque 255 218 185 peach puff 255 218 185 PeachPuff 255 222 173 navajo white 255 222 173 NavajoWhite 255 228 181 moccasin 255 248 220 cornsilk 255 255 240 ivory 255 250 205 lemon chiffon 255 250 205 LemonChiffon 255 245 238 seashell 240 255 240 honeydew 245 255 250 mint cream 245 255 250 MintCream 240 255 255 azure 240 248 255 alice blue 240 248 255 AliceBlue 230 230 250 lavender 255 240 245 lavender blush 255 240 245 LavenderBlush 255 228 225 misty rose 255 228 225 MistyRose 255 255 255 white 0 0 0 black 47 79 79 dark slate gray 47 79 79 DarkSlateGray 47 79 79 dark slate grey 47 79 79 DarkSlateGrey 105 105 105 dim gray 105 105 105 DimGray 105 105 105 dim grey 105 105 105 DimGrey 112 128 144 slate gray 112 128 144 SlateGray 112 128 144 slate grey 112 128 144 SlateGrey 119 136 153 light slate gray 119 136 153 LightSlateGray 119 136 153 light slate grey 119 136 153 LightSlateGrey 190 190 190 gray 190 190 190 grey 211 211 211 light grey 211 211 211 LightGrey 211 211 211 light gray 211 211 211 LightGray 25 25 112 midnight blue 25 25 112 MidnightBlue 0 0 128 navy 0 0 128 navy blue 0 0 128 NavyBlue 100 149 237 cornflower blue 100 149 237 CornflowerBlue 72 61 139 dark slate blue 72 61 139 DarkSlateBlue 106 90 205 slate blue 106 90 205 SlateBlue 123 104 238 medium slate blue 123 104 238 MediumSlateBlue 132 112 255 light slate blue 132 112 255 LightSlateBlue 0 0 205 medium blue 0 0 205 MediumBlue 65 105 225 royal blue 65 105 225 RoyalBlue 0 0 255 blue 30 144 255 dodger blue 30 144 255 DodgerBlue 0 191 255 deep sky blue 0 191 255 DeepSkyBlue 135 206 235 sky blue 135 206 235 SkyBlue 135 206 250 light sky blue 135 206 250 LightSkyBlue 70 130 180 steel blue 70 130 180 SteelBlue 176 196 222 light steel blue 176 196 222 LightSteelBlue 173 216 230 light blue 173 216 230 LightBlue 176 224 230 powder blue 176 224 230 PowderBlue 175 238 238 pale turquoise 175 238 238 PaleTurquoise 0 206 209 dark turquoise 0 206 209 DarkTurquoise 72 209 204 medium turquoise 72 209 204 MediumTurquoise 64 224 208 turquoise 0 255 255 cyan 224 255 255 light cyan 224 255 255 LightCyan 95 158 160 cadet blue 95 158 160 CadetBlue 102 205 170 medium aquamarine 102 205 170 MediumAquamarine 127 255 212 aquamarine 0 100 0 dark green 0 100 0 DarkGreen 85 107 47 dark olive green 85 107 47 DarkOliveGreen 143 188 143 dark sea green 143 188 143 DarkSeaGreen 46 139 87 sea green 46 139 87 SeaGreen 60 179 113 medium sea green 60 179 113 MediumSeaGreen 32 178 170 light sea green 32 178 170 LightSeaGreen 152 251 152 pale green 152 251 152 PaleGreen 0 255 127 spring green 0 255 127 SpringGreen 124 252 0 lawn green 124 252 0 LawnGreen 0 255 0 green 127 255 0 chartreuse 0 250 154 medium spring green 0 250 154 MediumSpringGreen 173 255 47 green yellow 173 255 47 GreenYellow 50 205 50 lime green 50 205 50 LimeGreen 154 205 50 yellow green 154 205 50 YellowGreen 34 139 34 forest green 34 139 34 ForestGreen 107 142 35 olive drab 107 142 35 OliveDrab 189 183 107 dark khaki 189 183 107 DarkKhaki 240 230 140 khaki 238 232 170 pale goldenrod 238 232 170 PaleGoldenrod 250 250 210 light goldenrod yellow 250 250 210 LightGoldenrodYellow 255 255 224 light yellow 255 255 224 LightYellow 255 255 0 yellow 255 215 0 gold 238 221 130 light goldenrod 238 221 130 LightGoldenrod 218 165 32 goldenrod 184 134 11 dark goldenrod 184 134 11 DarkGoldenrod 188 143 143 rosy brown 188 143 143 RosyBrown 205 92 92 indian red 205 92 92 IndianRed 139 69 19 saddle brown 139 69 19 SaddleBrown 160 82 45 sienna 205 133 63 peru 222 184 135 burlywood 245 245 220 beige 245 222 179 wheat 244 164 96 sandy brown 244 164 96 SandyBrown 210 180 140 tan 210 105 30 chocolate 178 34 34 firebrick 165 42 42 brown 233 150 122 dark salmon 233 150 122 DarkSalmon 250 128 114 salmon 255 160 122 light salmon 255 160 122 LightSalmon 255 165 0 orange 255 140 0 dark orange 255 140 0 DarkOrange 255 127 80 coral 240 128 128 light coral 240 128 128 LightCoral 255 99 71 tomato 255 69 0 orange red 255 69 0 OrangeRed 255 0 0 red 255 105 180 hot pink 255 105 180 HotPink 255 20 147 deep pink 255 20 147 DeepPink 255 192 203 pink 255 182 193 light pink 255 182 193 LightPink 219 112 147 pale violet red 219 112 147 PaleVioletRed 176 48 96 maroon 199 21 133 medium violet red 199 21 133 MediumVioletRed 208 32 144 violet red 208 32 144 VioletRed 255 0 255 magenta 238 130 238 violet 221 160 221 plum 218 112 214 orchid 186 85 211 medium orchid 186 85 211 MediumOrchid 153 50 204 dark orchid 153 50 204 DarkOrchid 148 0 211 dark violet 148 0 211 DarkViolet 138 43 226 blue violet 138 43 226 BlueViolet 160 32 240 purple 147 112 219 medium purple 147 112 219 MediumPurple 216 191 216 thistle 255 250 250 snow1 238 233 233 snow2 205 201 201 snow3 139 137 137 snow4 255 245 238 seashell1 238 229 222 seashell2 205 197 191 seashell3 139 134 130 seashell4 255 239 219 AntiqueWhite1 238 223 204 AntiqueWhite2 205 192 176 AntiqueWhite3 139 131 120 AntiqueWhite4 255 228 196 bisque1 238 213 183 bisque2 205 183 158 bisque3 139 125 107 bisque4 255 218 185 PeachPuff1 238 203 173 PeachPuff2 205 175 149 PeachPuff3 139 119 101 PeachPuff4 255 222 173 NavajoWhite1 238 207 161 NavajoWhite2 205 179 139 NavajoWhite3 139 121 94 NavajoWhite4 255 250 205 LemonChiffon1 238 233 191 LemonChiffon2 205 201 165 LemonChiffon3 139 137 112 LemonChiffon4 255 248 220 cornsilk1 238 232 205 cornsilk2 205 200 177 cornsilk3 139 136 120 cornsilk4 255 255 240 ivory1 238 238 224 ivory2 205 205 193 ivory3 139 139 131 ivory4 240 255 240 honeydew1 224 238 224 honeydew2 193 205 193 honeydew3 131 139 131 honeydew4 255 240 245 LavenderBlush1 238 224 229 LavenderBlush2 205 193 197 LavenderBlush3 139 131 134 LavenderBlush4 255 228 225 MistyRose1 238 213 210 MistyRose2 205 183 181 MistyRose3 139 125 123 MistyRose4 240 255 255 azure1 224 238 238 azure2 193 205 205 azure3 131 139 139 azure4 131 111 255 SlateBlue1 122 103 238 SlateBlue2 105 89 205 SlateBlue3 71 60 139 SlateBlue4 72 118 255 RoyalBlue1 67 110 238 RoyalBlue2 58 95 205 RoyalBlue3 39 64 139 RoyalBlue4 0 0 255 blue1 0 0 238 blue2 0 0 205 blue3 0 0 139 blue4 30 144 255 DodgerBlue1 28 134 238 DodgerBlue2 24 116 205 DodgerBlue3 16 78 139 DodgerBlue4 99 184 255 SteelBlue1 92 172 238 SteelBlue2 79 148 205 SteelBlue3 54 100 139 SteelBlue4 0 191 255 DeepSkyBlue1 0 178 238 DeepSkyBlue2 0 154 205 DeepSkyBlue3 0 104 139 DeepSkyBlue4 135 206 255 SkyBlue1 126 192 238 SkyBlue2 108 166 205 SkyBlue3 74 112 139 SkyBlue4 176 226 255 LightSkyBlue1 164 211 238 LightSkyBlue2 141 182 205 LightSkyBlue3 96 123 139 LightSkyBlue4 198 226 255 SlateGray1 185 211 238 SlateGray2 159 182 205 SlateGray3 108 123 139 SlateGray4 202 225 255 LightSteelBlue1 188 210 238 LightSteelBlue2 162 181 205 LightSteelBlue3 110 123 139 LightSteelBlue4 191 239 255 LightBlue1 178 223 238 LightBlue2 154 192 205 LightBlue3 104 131 139 LightBlue4 224 255 255 LightCyan1 209 238 238 LightCyan2 180 205 205 LightCyan3 122 139 139 LightCyan4 187 255 255 PaleTurquoise1 174 238 238 PaleTurquoise2 150 205 205 PaleTurquoise3 102 139 139 PaleTurquoise4 152 245 255 CadetBlue1 142 229 238 CadetBlue2 122 197 205 CadetBlue3 83 134 139 CadetBlue4 0 245 255 turquoise1 0 229 238 turquoise2 0 197 205 turquoise3 0 134 139 turquoise4 0 255 255 cyan1 0 238 238 cyan2 0 205 205 cyan3 0 139 139 cyan4 151 255 255 DarkSlateGray1 141 238 238 DarkSlateGray2 121 205 205 DarkSlateGray3 82 139 139 DarkSlateGray4 127 255 212 aquamarine1 118 238 198 aquamarine2 102 205 170 aquamarine3 69 139 116 aquamarine4 193 255 193 DarkSeaGreen1 180 238 180 DarkSeaGreen2 155 205 155 DarkSeaGreen3 105 139 105 DarkSeaGreen4 84 255 159 SeaGreen1 78 238 148 SeaGreen2 67 205 128 SeaGreen3 46 139 87 SeaGreen4 154 255 154 PaleGreen1 144 238 144 PaleGreen2 124 205 124 PaleGreen3 84 139 84 PaleGreen4 0 255 127 SpringGreen1 0 238 118 SpringGreen2 0 205 102 SpringGreen3 0 139 69 SpringGreen4 0 255 0 green1 0 238 0 green2 0 205 0 green3 0 139 0 green4 127 255 0 chartreuse1 118 238 0 chartreuse2 102 205 0 chartreuse3 69 139 0 chartreuse4 192 255 62 OliveDrab1 179 238 58 OliveDrab2 154 205 50 OliveDrab3 105 139 34 OliveDrab4 202 255 112 DarkOliveGreen1 188 238 104 DarkOliveGreen2 162 205 90 DarkOliveGreen3 110 139 61 DarkOliveGreen4 255 246 143 khaki1 238 230 133 khaki2 205 198 115 khaki3 139 134 78 khaki4 255 236 139 LightGoldenrod1 238 220 130 LightGoldenrod2 205 190 112 LightGoldenrod3 139 129 76 LightGoldenrod4 255 255 224 LightYellow1 238 238 209 LightYellow2 205 205 180 LightYellow3 139 139 122 LightYellow4 255 255 0 yellow1 238 238 0 yellow2 205 205 0 yellow3 139 139 0 yellow4 255 215 0 gold1 238 201 0 gold2 205 173 0 gold3 139 117 0 gold4 255 193 37 goldenrod1 238 180 34 goldenrod2 205 155 29 goldenrod3 139 105 20 goldenrod4 255 185 15 DarkGoldenrod1 238 173 14 DarkGoldenrod2 205 149 12 DarkGoldenrod3 139 101 8 DarkGoldenrod4 255 193 193 RosyBrown1 238 180 180 RosyBrown2 205 155 155 RosyBrown3 139 105 105 RosyBrown4 255 106 106 IndianRed1 238 99 99 IndianRed2 205 85 85 IndianRed3 139 58 58 IndianRed4 255 130 71 sienna1 238 121 66 sienna2 205 104 57 sienna3 139 71 38 sienna4 255 211 155 burlywood1 238 197 145 burlywood2 205 170 125 burlywood3 139 115 85 burlywood4 255 231 186 wheat1 238 216 174 wheat2 205 186 150 wheat3 139 126 102 wheat4 255 165 79 tan1 238 154 73 tan2 205 133 63 tan3 139 90 43 tan4 255 127 36 chocolate1 238 118 33 chocolate2 205 102 29 chocolate3 139 69 19 chocolate4 255 48 48 firebrick1 238 44 44 firebrick2 205 38 38 firebrick3 139 26 26 firebrick4 255 64 64 brown1 238 59 59 brown2 205 51 51 brown3 139 35 35 brown4 255 140 105 salmon1 238 130 98 salmon2 205 112 84 salmon3 139 76 57 salmon4 255 160 122 LightSalmon1 238 149 114 LightSalmon2 205 129 98 LightSalmon3 139 87 66 LightSalmon4 255 165 0 orange1 238 154 0 orange2 205 133 0 orange3 139 90 0 orange4 255 127 0 DarkOrange1 238 118 0 DarkOrange2 205 102 0 DarkOrange3 139 69 0 DarkOrange4 255 114 86 coral1 238 106 80 coral2 205 91 69 coral3 139 62 47 coral4 255 99 71 tomato1 238 92 66 tomato2 205 79 57 tomato3 139 54 38 tomato4 255 69 0 OrangeRed1 238 64 0 OrangeRed2 205 55 0 OrangeRed3 139 37 0 OrangeRed4 255 0 0 red1 238 0 0 red2 205 0 0 red3 139 0 0 red4 255 20 147 DeepPink1 238 18 137 DeepPink2 205 16 118 DeepPink3 139 10 80 DeepPink4 255 110 180 HotPink1 238 106 167 HotPink2 205 96 144 HotPink3 139 58 98 HotPink4 255 181 197 pink1 238 169 184 pink2 205 145 158 pink3 139 99 108 pink4 255 174 185 LightPink1 238 162 173 LightPink2 205 140 149 LightPink3 139 95 101 LightPink4 255 130 171 PaleVioletRed1 238 121 159 PaleVioletRed2 205 104 137 PaleVioletRed3 139 71 93 PaleVioletRed4 255 52 179 maroon1 238 48 167 maroon2 205 41 144 maroon3 139 28 98 maroon4 255 62 150 VioletRed1 238 58 140 VioletRed2 205 50 120 VioletRed3 139 34 82 VioletRed4 255 0 255 magenta1 238 0 238 magenta2 205 0 205 magenta3 139 0 139 magenta4 255 131 250 orchid1 238 122 233 orchid2 205 105 201 orchid3 139 71 137 orchid4 255 187 255 plum1 238 174 238 plum2 205 150 205 plum3 139 102 139 plum4 224 102 255 MediumOrchid1 209 95 238 MediumOrchid2 180 82 205 MediumOrchid3 122 55 139 MediumOrchid4 191 62 255 DarkOrchid1 178 58 238 DarkOrchid2 154 50 205 DarkOrchid3 104 34 139 DarkOrchid4 155 48 255 purple1 145 44 238 purple2 125 38 205 purple3 85 26 139 purple4 171 130 255 MediumPurple1 159 121 238 MediumPurple2 137 104 205 MediumPurple3 93 71 139 MediumPurple4 255 225 255 thistle1 238 210 238 thistle2 205 181 205 thistle3 139 123 139 thistle4 0 0 0 gray0 0 0 0 grey0 3 3 3 gray1 3 3 3 grey1 5 5 5 gray2 5 5 5 grey2 8 8 8 gray3 8 8 8 grey3 10 10 10 gray4 10 10 10 grey4 13 13 13 gray5 13 13 13 grey5 15 15 15 gray6 15 15 15 grey6 18 18 18 gray7 18 18 18 grey7 20 20 20 gray8 20 20 20 grey8 23 23 23 gray9 23 23 23 grey9 26 26 26 gray10 26 26 26 grey10 28 28 28 gray11 28 28 28 grey11 31 31 31 gray12 31 31 31 grey12 33 33 33 gray13 33 33 33 grey13 36 36 36 gray14 36 36 36 grey14 38 38 38 gray15 38 38 38 grey15 41 41 41 gray16 41 41 41 grey16 43 43 43 gray17 43 43 43 grey17 46 46 46 gray18 46 46 46 grey18 48 48 48 gray19 48 48 48 grey19 51 51 51 gray20 51 51 51 grey20 54 54 54 gray21 54 54 54 grey21 56 56 56 gray22 56 56 56 grey22 59 59 59 gray23 59 59 59 grey23 61 61 61 gray24 61 61 61 grey24 64 64 64 gray25 64 64 64 grey25 66 66 66 gray26 66 66 66 grey26 69 69 69 gray27 69 69 69 grey27 71 71 71 gray28 71 71 71 grey28 74 74 74 gray29 74 74 74 grey29 77 77 77 gray30 77 77 77 grey30 79 79 79 gray31 79 79 79 grey31 82 82 82 gray32 82 82 82 grey32 84 84 84 gray33 84 84 84 grey33 87 87 87 gray34 87 87 87 grey34 89 89 89 gray35 89 89 89 grey35 92 92 92 gray36 92 92 92 grey36 94 94 94 gray37 94 94 94 grey37 97 97 97 gray38 97 97 97 grey38 99 99 99 gray39 99 99 99 grey39 102 102 102 gray40 102 102 102 grey40 105 105 105 gray41 105 105 105 grey41 107 107 107 gray42 107 107 107 grey42 110 110 110 gray43 110 110 110 grey43 112 112 112 gray44 112 112 112 grey44 115 115 115 gray45 115 115 115 grey45 117 117 117 gray46 117 117 117 grey46 120 120 120 gray47 120 120 120 grey47 122 122 122 gray48 122 122 122 grey48 125 125 125 gray49 125 125 125 grey49 127 127 127 gray50 127 127 127 grey50 130 130 130 gray51 130 130 130 grey51 133 133 133 gray52 133 133 133 grey52 135 135 135 gray53 135 135 135 grey53 138 138 138 gray54 138 138 138 grey54 140 140 140 gray55 140 140 140 grey55 143 143 143 gray56 143 143 143 grey56 145 145 145 gray57 145 145 145 grey57 148 148 148 gray58 148 148 148 grey58 150 150 150 gray59 150 150 150 grey59 153 153 153 gray60 153 153 153 grey60 156 156 156 gray61 156 156 156 grey61 158 158 158 gray62 158 158 158 grey62 161 161 161 gray63 161 161 161 grey63 163 163 163 gray64 163 163 163 grey64 166 166 166 gray65 166 166 166 grey65 168 168 168 gray66 168 168 168 grey66 171 171 171 gray67 171 171 171 grey67 173 173 173 gray68 173 173 173 grey68 176 176 176 gray69 176 176 176 grey69 179 179 179 gray70 179 179 179 grey70 181 181 181 gray71 181 181 181 grey71 184 184 184 gray72 184 184 184 grey72 186 186 186 gray73 186 186 186 grey73 189 189 189 gray74 189 189 189 grey74 191 191 191 gray75 191 191 191 grey75 194 194 194 gray76 194 194 194 grey76 196 196 196 gray77 196 196 196 grey77 199 199 199 gray78 199 199 199 grey78 201 201 201 gray79 201 201 201 grey79 204 204 204 gray80 204 204 204 grey80 207 207 207 gray81 207 207 207 grey81 209 209 209 gray82 209 209 209 grey82 212 212 212 gray83 212 212 212 grey83 214 214 214 gray84 214 214 214 grey84 217 217 217 gray85 217 217 217 grey85 219 219 219 gray86 219 219 219 grey86 222 222 222 gray87 222 222 222 grey87 224 224 224 gray88 224 224 224 grey88 227 227 227 gray89 227 227 227 grey89 229 229 229 gray90 229 229 229 grey90 232 232 232 gray91 232 232 232 grey91 235 235 235 gray92 235 235 235 grey92 237 237 237 gray93 237 237 237 grey93 240 240 240 gray94 240 240 240 grey94 242 242 242 gray95 242 242 242 grey95 245 245 245 gray96 245 245 245 grey96 247 247 247 gray97 247 247 247 grey97 250 250 250 gray98 250 250 250 grey98 252 252 252 gray99 252 252 252 grey99 255 255 255 gray100 255 255 255 grey100 169 169 169 dark grey 169 169 169 DarkGrey 169 169 169 dark gray 169 169 169 DarkGray 0 0 139 dark blue 0 0 139 DarkBlue 0 139 139 dark cyan 0 139 139 DarkCyan 139 0 139 dark magenta 139 0 139 DarkMagenta 139 0 0 dark red 139 0 0 DarkRed 144 238 144 light green 144 238 144 LightGreen xplanet-1.3.0/xplanet/config/0000755000175000017500000000000011731372543013115 500000000000000xplanet-1.3.0/xplanet/config/overlay_clouds0000644000175000017500000000026710411344513016005 00000000000000[earth] "Earth" cloud_map=clouds.jpg cloud_threshold=0 map=earth.jpg # This image needs to be cloud-free night_map=night.jpg # This image needs to be cloud-free xplanet-1.3.0/xplanet/config/moon_orbit0000644000175000017500000000020210411352756015117 00000000000000[default] magnify=20 [earth] "Earth" color={28, 82, 110} [moon] "Moon" color={100, 100, 100} draw_orbit=true orbit={-.51,.5,2}xplanet-1.3.0/xplanet/config/earth_markers0000644000175000017500000000004210411352756015601 00000000000000[earth] "Earth" marker_file=earth xplanet-1.3.0/xplanet/config/README0000644000175000017500000002044611724306745013726 00000000000000The config file is divided into sections which start with a line like [body], where body is either default (everything in this section, which should be at the top, applies to all bodies unless overridden later), or a body name like saturn. Be careful to specify options that apply to only one planet under that planet's section, and not under [default]. For example, a common mistake is to put cloud_map=clouds.jpg under [default] and not under [earth]. Overlaying clouds on every planet is a huge waste of time! I won't explain the format of the config file beyond that; instead just look at the default supplied with xplanet. It should be straightforward. When making your own config file just modify a copy of the default config file. Each option is described below. The default values are the values used in the absence of a corresponding entry in the configuration file. arc_color Specify the default color for great arcs. This color will be overridden if a color is specified for an arc in the arc file. The color may be specified either as a name, a hexadecimal number, or as an RGB triple. For example, arc_color=red, arc_color=0xff0000, and arc_color={255,0,0} all mean the same thing. The default value is white. arc_file Specify a great arc file for this planet. This option may be used more than once. See the README and sample files in the xplanet/arcs directory for more information. The default is no arc files. arc_thickness Specify the default thickness for arcs. This also applies to the planet's orbit. This can be overridden in the arc file itself. bump_map Specify a bump map to use for relief shading. This is assumed to be an greyscale image file representing a digital elevation map with elevations ranging from 0 to 255. The default is no bump map. bump_scale Exaggerate the vertical relief for computing the shading. The default value is 1. bump_shade By default, the shadows in the bump map are colored using the night map. If a value for bump_shade is specified, the day map will be shaded by this value instead. Then areas in night will be colored using the night map, and areas in shadow will be colored according to bump_shade. As with shade, permissible values are 0 to 100. cloud_gamma Apply a gamma correction to the cloud image before overlaying. Each pixel's brightness is adjusted according to: new_value = 255 * [(old_value/255)^(1/gamma)] The default is 1 (no gamma correction). cloud_map Specify an image to overlay on the planet map. The default is no cloud map. cloud_ssec If true, assume the cloud map is an image downloaded from the Space Science and Engineering Center (SSEC) at the University of Wisconsin. The latest image (updated every three hours) can be obtained from http://www.ssec.wisc.edu/data/comp/latest_moll.gif. This image is a 640x350 pixel Mollweide composite image with ugly pink coastlines. Xplanet will reproject and resize the image as well as remove and fill in the coastlines. cloud_threshold Cloud pixel values below threshold will be ignored. The value for threshold should be between 0 and 255. The default is 90. color If an image map for the body is not found, use the specified color instead. The default is white, although a color is specified for most bodies in the default configuration file. draw_orbit If true, draw the body's orbit about its primary. The default is false. See "orbit" below on how to describe how the orbit is drawn. The default is to not draw orbits. grid Draw a longitude/latitude grid. The spacing of major grid lines and dots between major grid lines can be controlled with the grid1 and grid2 options (see below). The default is false. grid1 Specify the spacing of grid lines. Grid lines are drawn with a 90/grid1 degree spacing. The default value for grid1 is 6, corresponding to 15 degrees between major grid lines. grid2 Specify the spacing of dots along grid lines. Grid dots are drawn with a 90/(grid1 x grid2) degree spacing. The default value for grid2 is 15; combined with the default grid1 value of 6, this corresponds to placing grid dots on a one degree spacing. image Specify the image map to use. The default is body.jpg (e.g. earth.jpg, neptune.jpg) magnify Draw the body as if its radius were magnified by the specified factor. This is useful for a lot of moons, as normally they would be drawn as dots compared to their primary. The default is 1 (no magnification). map Same as the image option above. mapbounds={lat1,lon1,lat2,lon2} Assume that each map file read in has its northwest corner at lat1,lon1 and its southeast corner at lat2,lon2. This is useful if you have a high-res map but just want to show a small area. marker_color Specify the default color for all markers. This color will be overridden if a color is specified for a marker in the marker file. The default is red. marker_file Specify a file containing user defined marker data to display on the map. This option may be used more than once. The default is no marker file. See the README and sample files in the xplanet/markers directory for more information. marker_font Specify the default font for all markers for this body. This option may be overridden inside the marker file. The default is to use the value from the command line -font option. marker_fontsize Specify the default font size for all markers for this body. This option may be overridden inside the marker file. The default is to use the value from the command line -fontsize option. max_radius_for_label Don't draw a label for the body if its radius is greater than this value. The default is 3 pixels. min_radius_for_label Don't draw a label for the body if its radius is less than this value. The default is 0.01 pixel. min_radius_for_markers Don't draw markers on the body if its radius is less than this value. The default is 40 pixels. night_map Use night_file as the night map image. If this option is not specified, a default night map will be used for the earth. If this file is not found, or for the other planets, the night map will be a copy of the day map, modified as described under the shade option. orbit Specify the start, end, and increment for the orbit. The units are orbital period and degrees. The default is {-0.5,0.5,2}. Remember to set "draw_orbit=true". orbit_color Specify the color for the orbit. The default is white. random_origin If false, don't use this body with -origin random, major, or system. The default is true. random_target If false, don't use this body with -target random or major. The default is true. rayleigh_emission_weight Reduces the Rayleigh scattering as a function of the emission angle (which is 0 at the center of the disk and 90 at the edge). For a value of n, the weighting factor is sin(emission)^n. A value of 0 is the default, meaning there is no reduction in Rayleigh scattering. rayleigh_file A text file describing the lookup tables. See the earthRayleigh file in the xplanet/scattering directory for an example. rayleigh_limb_scale Exaggerate the size of the atmosphere when using Rayleigh scattering. The default value is 1. rayleigh_scale If > 0, rayleigh scattering is calculated using precomputed lookup tables (see the README in the xplanet/scattering directory for instructions). A value between 5 and 10 is typical. A rayleigh_file must be specified as well. satellite_file Specify a file containing a list of satellites to display. A file containing NORAD two line element (TLE) sets named satfile.tle must exist along with satfile. A good source of TLEs is www.celestrak.com. This option may be used more than once. The default is no satellite files. See the README and sample files in the xplanet/satellites directory for more information. shade If the night image file is not found, set the brightness of the night map to shade percent of the day map. If shade is 100, the day and night maps will be identical. The default value is 30. specular_map Use filename as a specular reflectance file. Normally it's just a greyscale image where the oceans are set to 255 and the land masses are set to 0. This is used to display the reflection of the sun off of the oceans. The default is no specular file. text_color Specify the color for the markers and body label. The default is red. twilight Let the day and night hemispheres blend into one another for pixels within the specified number of degrees of the terminator. The default value is 6. xplanet-1.3.0/xplanet/config/default0000644000175000017500000000776511724306745014426 00000000000000# This file contains options you might want to customize for each # body. It's best to leave this file alone and modify a copy. Use the # -config option to tell xplanet to read your copy. [default] # Values in this section apply to all # bodies unless overridden below. arc_color=white #arc_file= arc_thickness=1 #bump_map= bump_scale=1 cloud_gamma=1 #cloud_map= # specify this in the [earth] section, # or else all planets will be drawn # with clouds! cloud_ssec=false # true if the cloud map is from the # University of Wisconsin Space # Science and Engineering Center cloud_threshold=90 color={255,255,255} # fallback color in case an image map # isn't found draw_orbit=false # if true, draw this body's orbit # about its primary grid=false grid1=6 grid2=15 #image= magnify=1 # draw the body as if its radius were # magnified by this factor marker_color=red #marker_file= #marker_font= max_radius_for_label=3 # don't draw a label if the body's # radius in pixels is more than this min_radius_for_label=.01 # don't draw a label if the body's # radius in pixels is less than this min_radius_for_markers=40 # don't draw markers if the body's # radius in pixels is less than this #night_map= orbit={-.5,.5,2} # extent of orbit to draw, # {start, end, delta}, where # start and end are in units of period # of revolution and delta is angular # increment in degrees to evaluate # position orbit_color={255,255,255} # color for the orbit random_origin=true # Can this body be considered if # -origin random is used? random_target=true # Can this body be considered if # -target random is used? #satellite_file= shade=30 # 0 = black, 100 = same as dayside #specular_map= text_color={255,0,0} # color for text (markers & body label) twilight=6 # blend the day and night images for # pixels within this many degrees of # the terminator [sun] "Sun" color={255,255,166} max_radius_for_label=0 # never draw a label for the sun shade=100 # No night side! [mercury] "Mercury" color={100, 100, 100} min_radius_for_label=0 # always draw a label [venus] "Venus" color={161, 129, 70} min_radius_for_label=0 [earth] "Earth" color={28, 82, 110} # I have day and night maps of Australia centered on Alice Springs, # which are cropped from higher resolution maps. #map=alice_springs.png #night_map=alice_springs_night.png #mapbounds={-1.2,98.7107,-46.2,169.023} # lat1, lon1, lat2, lon2 #marker_file=earth min_radius_for_label=0 # see xplanet/config/README and xplanet/scattering/README to enable Rayleigh scattering #rayleigh_emission_weight=0 #rayleigh_limb_scale=1 #rayleigh_scale=5 #rayleigh_file=earthRayleigh #satellite_file=iss [moon] "Moon" color={100, 100, 100} [mars] "Mars" color={172, 123, 67} min_radius_for_label=0 [phobos] "Phobos" [deimos] "Deimos" [jupiter] "Jupiter" color={204, 163, 133} min_radius_for_label=0 [io] "Io" color={212, 182, 52} [europa] "Europa" color={140, 140, 140} [ganymede] "Ganymede" color={150, 150, 150} [callisto] "Callisto" color={70, 70, 70} [saturn] "Saturn" color={244, 199, 134} min_radius_for_label=0 [mimas] "Mimas" [enceladus] "Enceladus" [tethys] "Tethys" [dione] "Dione" [rhea] "Rhea" [titan] "Titan" color={252,94,7} [hyperion] "Hyperion" [iapetus] "Iapetus" [phoebe] "Phoebe" [uranus] "Uranus" color={105, 197, 238} min_radius_for_label=0 [miranda] "Miranda" [ariel] "Ariel" [umbriel] "Umbriel" [titania] "Titania" [oberon] "Oberon" [neptune] "Neptune" color={95, 133, 232} min_radius_for_label=0 [triton] "Triton" [nereid] "Nereid" [pluto] "Pluto" color={206, 180, 153} min_radius_for_label=0 [charon] "Charon" xplanet-1.3.0/xplanet/stars/0000755000175000017500000000000011731372543013004 500000000000000xplanet-1.3.0/xplanet/stars/BSC0000644000175000017500000172141210411352756013264 00000000000000# From the Bright Star Catalogue, 5th Revised Ed., # available online through VizieR. # Only the first three columns (Dec, RA, Mag) are used by Xplanet. # Dec RA Mag Name BSN HD SAO -16.7161 6.7525 -1.46 " 9Alp CMa" 2491 48915 151881 -52.6958 6.3992 -0.72 " Alp Car" 2326 45348 234480 19.1825 14.2610 -0.04 " 16Alp Boo" 5340 124897 100944 -60.8353 14.6600 -0.01 " Alp1Cen" 5459 128620 252838 38.7836 18.6156 0.03 " 3Alp Lyr" 7001 172167 67174 45.9981 5.2782 0.08 " 13Alp Aur" 1708 34029 40186 -8.2017 5.2423 0.12 " 19Bet Ori" 1713 34085 131907 5.2250 7.6550 0.38 " 10Alp CMi" 2943 61421 115756 -57.2367 1.6286 0.46 " Alp Eri" 472 10144 232481 7.4069 5.9195 0.50 " 58Alp Ori" 2061 39801 113271 -60.3731 14.0637 0.61 " Bet Cen" 5267 122451 252582 8.8683 19.8464 0.77 " 53Alp Aql" 7557 187642 125122 16.5092 4.5987 0.85 " 87Alp Tau" 1457 29139 94027 -26.4319 16.4901 0.96 " 21Alp Sco" 6134 148478 184415 -11.1614 13.4199 0.98 " 67Alp Vir" 5056 116658 157923 28.0261 7.7553 1.14 " 78Bet Gem" 2990 62509 79666 -29.6222 22.9609 1.16 " 24Alp PsA" 8728 216956 191524 45.2803 20.6905 1.25 " 50Alp Cyg" 7924 197345 49941 -59.6886 12.7953 1.25 " Bet Cru" 4853 111123 240259 -60.8356 14.6600 1.33 " Alp2Cen" 5460 128621 0 -63.0992 12.4433 1.33 " Alp1Cru" 4730 108248 251904 11.9672 10.1395 1.35 " 32Alp Leo" 3982 87901 98967 -28.9722 6.9771 1.50 " 21Eps CMa" 2618 52089 172676 -37.1039 17.5601 1.63 " 35Lam Sco" 6527 158926 208954 -57.1133 12.5194 1.63 " Gam Cru" 4763 108903 240019 6.3497 5.4189 1.64 " 24Gam Ori" 1790 35468 112740 28.6075 5.4382 1.65 "112Bet Tau" 1791 35497 77168 -69.7172 9.2200 1.68 " Bet Car" 3685 80007 250495 -1.2019 5.6036 1.70 " 46Eps Ori" 1903 37128 132346 -63.0994 12.4435 1.73 " Alp2Cru" 4731 108249 0 -46.9611 22.1372 1.74 " Alp Gru" 8425 209952 230992 55.9597 12.9005 1.77 " 77Eps UMa" 4905 112185 28553 -47.3367 8.1589 1.78 " Gam2Vel" 3207 68273 219504 49.8611 3.4054 1.79 " 33Alp Per" 1017 20902 38787 61.7508 11.0621 1.79 " 50Alp UMa" 4301 95689 15384 -26.3933 7.1399 1.84 " 25Del CMa" 2693 54605 173047 -34.3847 18.4029 1.85 " 20Eps Sgr" 6879 169022 210091 49.3133 13.7923 1.86 " 85Eta UMa" 5191 120315 44752 -59.5097 8.3752 1.86 " Eps Car" 3307 71129 235932 -42.9978 17.6220 1.87 " The Sco" 6553 159532 228201 44.9475 5.9921 1.90 " 34Bet Aur" 2088 40183 40750 -69.0278 16.8111 1.92 " Alp TrA" 6217 150798 253700 16.3992 6.6285 1.93 " 24Gam Gem" 2421 47105 95912 -56.7350 20.4275 1.94 " Alp Pav" 7790 193924 246574 -54.7083 8.7451 1.96 " Del Vel" 3485 74956 236232 -8.6586 9.4598 1.98 " 30Alp Hya" 3748 81797 136871 31.8883 7.5767 1.98 " 66Alp Gem" 2891 60179 0 -17.9558 6.3783 1.98 " 2Bet CMa" 2294 44743 151428 23.4625 2.1196 2.00 " 13Alp Ari" 617 12929 75151 25.9203 15.9917 2.00 " " 5958 143454 84129 89.2642 2.5302 2.02 " 1Alp UMi" 424 8890 308 -26.2967 18.9211 2.02 " 34Sig Sgr" 7121 175191 187448 -17.9867 0.7265 2.04 " 16Bet Cet" 188 4128 147420 -1.9428 5.6793 2.05 " 50Zet Ori" 1948 37742 132444 -9.6697 5.7959 2.06 " 53Kap Ori" 2004 38771 132542 29.0906 0.1398 2.06 " 21Alp And" 15 358 73765 35.6206 1.1622 2.06 " 43Bet And" 337 6860 54471 -36.3700 14.1114 2.06 " 5The Cen" 5288 123139 205188 12.5600 17.5822 2.08 " 55Alp Oph" 6556 159561 102932 74.1556 14.8451 2.08 " 7Bet UMi" 5563 131873 8102 -46.8847 22.7111 2.10 " Bet Gru" 8636 214952 231258 40.9556 3.1361 2.12 " 26Bet Per" 936 19356 38592 14.5719 11.8177 2.14 " 94Bet Leo" 4534 102647 99809 -48.9597 12.6919 2.17 " Gam Cen" 4819 110304 223603 40.2567 20.3705 2.20 " 37Gam Cyg" 7796 194093 49528 -43.4325 9.1333 2.21 " Lam Vel" 3634 78647 220878 -0.2992 5.5334 2.23 " 34Del Ori" 1852 36486 132220 26.7147 15.5781 2.23 " 5Alp CrB" 5793 139006 83893 51.4889 17.9434 2.23 " 33Gam Dra" 6705 164058 30653 56.5372 0.6751 2.23 " 18Alp Cas" 168 3712 21609 -40.0033 8.0598 2.25 " Zet Pup" 3165 66811 198752 -59.2753 9.2848 2.25 " Iot Car" 3699 80404 236808 42.3297 2.0650 2.26 " 57Gam1And" 603 12533 37734 54.9253 13.3987 2.27 " 79Zet UMa" 5054 116656 28737 59.1497 0.1530 2.27 " 11Bet Cas" 21 432 21133 -34.2933 16.8361 2.29 " 26Eps Sco" 6241 151680 208078 -47.3883 14.6988 2.30 " Alp Lup" 5469 129056 225128 -53.4664 13.6648 2.30 " Eps Cen" 5132 118716 241047 -42.1578 14.5918 2.31 " Eta Cen" 5440 127972 225044 -22.6217 16.0056 2.32 " 7Del Sco" 5953 143275 184014 56.3825 11.0307 2.37 " 48Bet UMa" 4295 95418 27876 9.8750 21.7364 2.39 " 8Eps Peg" 8308 206778 127029 -42.3061 0.4381 2.39 " Alp Phe" 99 2261 215093 -39.0300 17.7081 2.41 " Kap Sco" 6580 160578 209163 28.0828 23.0629 2.42 " 53Bet Peg" 8775 217906 90981 -15.7247 17.1730 2.43 " 35Eta Oph" 6378 155125 160332 53.6947 11.8972 2.44 " 64Gam UMa" 4554 103287 28179 62.5856 21.3097 2.44 " 5Alp Cep" 8162 203280 19302 -29.3031 7.4016 2.45 " 31Eta CMa" 2827 58350 173651 33.9703 20.7702 2.46 " 53Eps Cyg" 7949 197989 70474 60.7167 0.9451 2.47 " 27Gam Cas" 264 5394 11482 15.2053 23.0794 2.49 " 54Alp Peg" 8781 218045 108378 -55.0108 9.3686 2.50 " Kap Vel" 3734 81188 236891 4.0897 3.0380 2.53 " 92Alp Cet" 911 18884 110920 -47.2883 13.9257 2.55 " Zet Cen" 5231 121263 224538 20.5236 11.2351 2.56 " 68Del Leo" 4357 97603 81727 -10.5672 16.6193 2.56 " 13Zet Oph" 6175 149757 160006 -17.8222 5.5455 2.58 " 11Alp Lep" 1865 36673 150547 -17.5419 12.2634 2.59 " 4Gam Crv" 4662 106625 157176 -29.8803 19.0435 2.60 " 38Zet Sgr" 7194 176687 187600 -50.7225 12.1393 2.60 " Del Cen" 4621 105435 239689 -9.3831 15.2834 2.61 " 27Bet Lib" 5685 135742 140430 19.8417 10.3329 2.61 " 41Gam1Leo" 4057 89484 81298 37.2125 5.9954 2.62 " 37The Aur" 2095 40312 58636 -19.8056 16.0906 2.62 " 8Bet1Sco" 5984 144217 159682 20.8081 1.9107 2.64 " 6Bet Ari" 553 11636 75012 -34.0742 5.6608 2.64 " Alp Col" 1956 37795 196059 6.4256 15.7378 2.65 " 24Alp Ser" 5854 140573 121157 -23.3967 12.5731 2.65 " 9Bet Crv" 4786 109379 180915 18.3978 13.9114 2.68 " 8Eta Boo" 5235 121370 100766 60.2353 1.4303 2.68 " 37Del Cas" 403 8538 22268 -43.1339 14.9755 2.68 " Bet Lup" 5571 132058 225335 33.1661 4.9499 2.69 " 3Iot Aur" 1577 31398 57522 -37.2958 17.5127 2.69 " 34Ups Sco" 6508 158408 208896 -49.4200 10.7795 2.69 " Mu Vel" 4216 93497 222321 -69.1356 12.6197 2.69 " Alp Mus" 4798 109668 251974 27.0742 14.7498 2.70 " 36Eps Boo" 5506 129989 83500 -29.8281 18.3499 2.70 " 19Del Sgr" 6859 168454 186681 -37.0975 7.2857 2.70 " Pi Pup" 2773 56855 197795 10.6133 19.7710 2.72 " 50Gam Aql" 7525 186791 105223 -3.6944 16.2391 2.74 " 1Del Oph" 6056 146051 141052 61.5142 16.3999 2.74 " 14Eta Dra" 6132 148387 17074 -16.0417 14.8480 2.75 " 9Alp2Lib" 5531 130841 158840 -36.7122 13.3433 2.75 " Iot Cen" 5028 115892 204371 -64.3944 10.7159 2.76 " The Car" 4199 93030 251083 4.5672 17.7246 2.77 " 60Bet Oph" 6603 161096 122671 -5.9100 5.5906 2.77 " 44Iot Ori" 1899 37043 132323 21.4897 16.5037 2.77 " 27Bet Her" 6148 148856 84411 -41.1669 15.5857 2.78 " Gam Lup" 5776 138690 225938 -5.0864 5.1308 2.79 " 67Bet Eri" 1666 33111 131794 52.3014 17.5072 2.79 " 23Bet Dra" 6536 159181 30429 -58.7489 12.2524 2.80 " Del Cru" 4656 106490 239791 -77.2542 0.4292 2.80 " Bet Hyi" 98 2151 255670 31.6031 16.6881 2.81 " 40Zet Her" 6212 150680 65485 -24.3042 8.1257 2.81 " 15Rho Pup" 3185 67523 175217 -25.4217 18.4662 2.81 " 22Lam Sgr" 6913 169916 186841 -28.2161 16.5981 2.82 " 23Tau Sco" 6165 149438 184481 10.9592 13.0363 2.83 " 47Eps Vir" 4932 113226 100384 15.1836 0.2206 2.83 " 88Gam Peg" 39 886 91781 -20.7594 5.4707 2.84 " 9Bet Lep" 1829 36079 170457 31.8836 3.9022 2.85 " 44Zet Per" 1203 24398 56799 -55.5300 17.4217 2.85 " Bet Ara" 6461 157244 244725 -63.4306 15.9190 2.85 " Bet TrA" 5897 141891 253346 -60.2597 22.3084 2.86 " Alp Tuc" 8502 211416 255193 -61.5697 1.9795 2.86 " Alp Hyi" 591 12311 248474 24.1050 3.7914 2.87 " 25Eta Tau" 1165 23630 76199 45.1308 19.7496 2.87 " 18Del Cyg" 7528 186882 48796 -16.1272 21.7840 2.87 " 49Del Cap" 8322 207098 164644 22.5136 6.3827 2.88 " 13Mu Gem" 2286 44478 78297 31.8886 7.5767 2.88 " 66Alp Gem" 2890 60178 60198 40.0103 3.9642 2.89 " 45Eps Per" 1220 24760 56840 -21.0236 19.1627 2.89 " 41Pi Sgr" 7264 178524 187756 -25.5928 16.3531 2.89 " 20Sig Sco" 6084 147165 184336 -26.1142 15.9809 2.89 " 6Pi Sco" 5944 143018 183987 -68.6794 15.3152 2.89 " Gam TrA" 5671 135382 253097 8.2894 7.4525 2.90 " 3Bet CMi" 2845 58715 115456 38.3183 12.9338 2.90 " 12Alp2CVn" 4915 112413 63257 -5.5711 21.5260 2.91 " 22Bet Aqr" 8232 204867 145457 53.5064 3.0799 2.93 " 23Gam Per" 915 18925 23789 -50.6147 6.8323 2.93 " Tau Pup" 2553 50310 234735 30.2214 22.7167 2.94 " 44Eta Peg" 8650 215182 90734 -13.5086 3.9672 2.95 " 34Gam Eri" 1231 25025 149283 -16.5156 12.4977 2.95 " 7Del Crv" 4757 108767 157323 -49.8761 17.5307 2.95 " Alp Ara" 6510 158427 228069 -0.3197 22.0964 2.96 " 34Alp Aqr" 8414 209750 145862 23.7742 9.7642 2.98 " 17Eps Leo" 3873 84441 81004 25.1311 6.7322 2.98 " 27Eps Gem" 2473 48329 78682 13.8633 19.0902 2.99 " 17Zet Aql" 7235 177724 104461 43.8233 5.0328 2.99 " 7Eps Aur" 1605 31964 39955 -30.4242 18.0968 2.99 " 10Gam2Sgr" 6746 165135 209696 21.1425 5.6274 3.00 "123Zet Tau" 1910 37202 77336 34.9872 2.1591 3.00 " 4Bet Tri" 622 13161 55306 -22.6197 12.1687 3.00 " 2Eps Crv" 4630 105707 180531 -23.1717 13.3154 3.00 " 46Gam Hya" 5020 115659 181543 44.4986 11.1611 3.01 " 52Psi UMa" 4335 96833 43629 47.7875 3.7154 3.01 " 39Del Per" 1122 22928 39053 -37.3650 21.8988 3.01 " Gam Gru" 8353 207971 213374 -65.0719 9.7850 3.01 " Ups Car" 3890 85123 250695 -23.8333 7.0504 3.02 " 24Omi2CMa" 2653 53138 172839 -30.0633 6.3386 3.02 " 1Zet CMa" 2282 44402 196698 38.3083 14.5346 3.03 " 27Gam Boo" 5435 127762 64203 -40.1269 17.7931 3.03 " Iot1Sco" 6615 161471 228420 -2.9775 2.3224 3.04 " 68Omi Cet" 681 14386 129825 -42.4739 13.8269 3.04 " Mu Cen" 5193 120324 224471 41.4994 10.3721 3.05 " 34Mu UMa" 4069 89758 43310 71.8339 15.3455 3.05 " 13Gam UMi" 5735 137422 8220 -68.1081 12.7714 3.05 " Bet Mus" 4844 110879 252019 67.6617 19.2093 3.07 " 57Del Dra" 7310 180711 18222 27.9597 19.5120 3.08 " 6Bet1Cyg" 7417 183912 87301 -14.7814 20.3502 3.08 " 9Bet Cap" 7776 193495 163481 -38.0475 16.8645 3.08 " Mu 1Sco" 6247 151890 208102 5.9456 8.9232 3.11 " 16Zet Hya" 3547 76294 117264 -16.1936 10.8271 3.11 " Nu Hya" 4232 93813 156256 -36.7617 18.2938 3.11 " Eta Sgr" 6832 167618 209957 -47.2914 20.6261 3.11 " Alp Ind" 7869 196171 230300 -35.7683 5.8493 3.12 " Bet Col" 2040 39425 196240 34.3925 9.3509 3.13 " 40Alp Lyn" 3705 80493 61414 -42.1042 14.9860 3.13 " Kap Cen" 5576 132200 225344 -55.9903 16.9770 3.13 " Zet Ara" 6285 152786 244315 -57.0344 9.5204 3.13 " " 3803 82668 237067 -63.0197 11.5963 3.13 " Lam Cen" 4467 100841 251472 24.8392 17.2505 3.14 " 65Del Her" 6410 156164 84951 48.0417 8.9868 3.14 " 9Iot UMa" 3569 76644 42630 36.8092 17.2508 3.16 " 67Pi Her" 6418 156283 65890 41.2344 5.1086 3.17 " 10Eta Aur" 1641 32630 40026 51.6772 9.5476 3.17 " 25The UMa" 3775 82328 27289 65.7147 17.1464 3.17 " 22Zet Dra" 6396 155763 17365 -26.9908 18.7609 3.17 " 27Phi Sgr" 7039 173300 187239 -43.1961 6.6294 3.17 " Nu Pup" 2451 47670 218071 6.9614 4.8307 3.19 " 1Pi 3Ori" 1543 30652 112106 -22.3711 5.0910 3.19 " 2Eps Lep" 1654 32887 170051 -64.9753 14.7084 3.19 " Alp Cir" 5463 128898 252853 9.3750 16.9611 3.20 " 27Kap Oph" 6299 153210 121962 30.2269 21.2156 3.20 " 64Zet Cyg" 8115 202109 71070 77.6325 23.6558 3.21 " 35Gam Cep" 8974 222404 10818 -37.0433 17.8310 3.21 " " 6630 161892 209318 -40.6475 15.3562 3.22 " Del Lup" 5695 136298 225691 -0.8214 20.1884 3.23 " 65The Aql" 7710 191692 144150 70.5608 21.4777 3.23 " 8Bet Cep" 8238 205021 10057 -4.6925 16.3054 3.24 " 2Eps Oph" 6075 146791 141086 32.6894 18.9824 3.24 " 14Gam Lyr" 7178 176437 67663 -40.3047 2.9710 3.24 " The1Eri" 897 18622 216113 -74.2389 3.7873 3.24 " Gam Hyi" 1208 24512 256029 -43.3014 7.4872 3.25 " Sig Pup" 2878 59717 218755 -2.8989 18.3552 3.26 " 58Eta Ser" 6869 168723 142241 30.8608 0.6555 3.27 " 31Del And" 165 3627 54058 -15.8208 22.9108 3.27 " 76Del Aqr" 8709 216627 165375 -24.9994 17.3668 3.27 " 42The Oph" 6453 157056 185320 -26.6825 14.1062 3.27 " 49Pi Hya" 5287 123123 182244 -55.0450 4.5666 3.27 " Alp Dor" 1465 29305 233564 -61.9414 6.8032 3.27 " Alp Pic" 2550 50241 249647 22.5067 6.2479 3.28 " 7Eta Gem" 2216 42995 78135 58.9661 15.4155 3.29 " 12Iot Dra" 5744 137759 29520 -25.2819 15.0678 3.29 " 20Sig Lib" 5603 133216 183139 57.0325 12.2571 3.31 " 69Del UMa" 4660 106591 28315 -16.2056 5.2155 3.31 " 5Mu Lep" 1702 33904 150237 -46.7186 1.1014 3.31 " Bet Phe" 322 6595 215365 -27.6706 19.1157 3.32 " 40Tau Sgr" 7234 177716 187683 -61.6853 10.5337 3.32 " " 4140 91465 251006 -70.0381 10.2289 3.32 " Ome Car" 4037 89080 250885 -43.2392 17.2026 3.33 " Eta Sco" 6380 155203 227707 -9.7736 17.9838 3.34 " 64Nu Oph" 6698 163917 142004 15.4294 11.2373 3.34 " 70The Leo" 4359 97633 99512 -24.8597 7.8216 3.34 " 7Xi Pup" 3045 63700 174601 -56.3775 17.4232 3.34 " Gam Ara" 6462 157246 244726 58.2011 22.1809 3.35 " 21Zet Cep" 8465 210745 34137 -62.4739 4.2404 3.35 " Alp Ret" 1336 27256 248969 3.1147 19.4250 3.36 " 30Del Aql" 7377 182640 124603 -2.3969 5.4079 3.36 " 28Eta Ori" 1788 35411 132071 12.8956 6.7548 3.36 " 31Xi Gem" 2484 48737 96074 60.7181 8.5044 3.36 " 1Omi UMa" 3323 71369 14573 -0.5958 13.5782 3.37 " 79Zet Vir" 5107 118098 139420 -44.6894 15.3780 3.37 " Eps Lup" 5708 136504 225712 3.3975 12.9267 3.38 " 43Del Vir" 4910 112300 119674 6.4189 8.7796 3.38 " 11Eps Hya" 3482 74874 117112 63.6700 1.9066 3.38 " 45Eps Cas" 542 11415 12031 38.8403 3.0863 3.39 " 25Rho Per" 921 19058 56138 10.8314 22.6910 3.40 " 42Zet Peg" 8634 214923 108103 15.8708 4.4777 3.40 " 78The2Tau" 1412 28319 93957 -61.3322 10.2847 3.40 " " 4050 89388 250905 29.5789 1.8847 3.41 " 2Alp Tri" 544 11443 74996 -38.3969 16.0020 3.41 " Eta Lup" 5948 143118 207208 -41.6878 13.8251 3.41 " Nu Cen" 5190 120307 224469 -43.3183 1.4728 3.41 " Gam Phe" 429 9053 215516 -52.0992 15.2047 3.41 " Zet Lup" 5649 134505 242304 27.7206 17.7743 3.42 " 86Mu Her" 6623 161797 85397 -66.2031 20.7493 3.42 " Bet Pav" 7913 197051 254862 61.8389 20.7548 3.43 " 3Eta Cep" 7957 198149 19019 -4.8825 19.1041 3.44 " 16Lam Aql" 7236 177756 143021 23.4172 10.2782 3.44 " 36Zet Leo" 4031 89025 81265 57.8158 0.8183 3.44 " 24Eta Cas" 219 4614 21732 -58.9669 9.1828 3.44 " " 3659 79351 236693 33.3628 18.8347 3.45 " 10Bet Lyr" 7106 174638 67451 42.9144 10.2849 3.45 " 33Lam UMa" 4033 89021 43268 -10.1822 1.1432 3.45 " 31Eta Cet" 334 6805 147632 3.2358 2.7217 3.47 " 86Gam Cet" 804 16970 110707 12.4903 4.0113 3.47 " 35Lam Tau" 1239 25204 93719 19.4922 19.9793 3.47 " 12Gam Sge" 7635 189319 105500 33.3147 15.2584 3.47 " 49Del Boo" 5681 135722 64589 -27.9347 7.0286 3.47 " 22Sig CMa" 2646 52877 172797 -52.9822 7.9463 3.47 " Chi Car" 3117 65575 235635 14.3903 17.2441 3.48 " 64Alp1Her" 6406 156014 102680 24.6017 22.8334 3.48 " 48Mu Peg" 8684 216131 90816 33.0942 11.3080 3.48 " 54Nu UMa" 4377 98262 62486 -51.3169 22.8093 3.49 " Eps Gru" 8675 215789 247593 40.3906 15.0324 3.50 " 42Bet Boo" 5602 133208 45337 -15.9375 1.7345 3.50 " 52Tau Cet" 509 10700 147986 -21.1067 18.9622 3.51 " 37Xi 2Sgr" 7150 175775 187504 -45.9683 18.4496 3.51 " Alp Tel" 6897 169467 229023 9.1856 8.2753 3.52 " 17Bet Cnc" 3249 69267 116569 9.8922 9.6858 3.52 " 14Omi Leo" 3852 83808 98709 16.7628 10.1222 3.52 " 30Eta Leo" 3975 87737 98955 66.2006 22.8280 3.52 " 32Iot Cep" 8694 216228 20268 6.1978 22.1700 3.53 " 26The Peg" 8450 210418 127340 -3.4303 15.8270 3.53 " 32Mu Ser" 5881 141513 140787 19.1803 4.4769 3.53 " 74Eps Tau" 1409 28305 93954 21.9822 7.3354 3.53 " 55Del Gem" 2777 56986 79294 38.9222 16.7149 3.53 " 44Eta Her" 6220 150997 65504 9.9342 5.5856 3.54 " 39Lam Ori" 1879 36861 112921 -9.7633 3.7208 3.54 " 23Del Eri" 1136 23249 130686 -15.3986 17.6264 3.54 " 55Xi Ser" 6561 159876 160700 -31.8578 11.5500 3.54 " Xi Hya" 4450 100407 202558 -54.5678 9.9477 3.54 " Phi Vel" 3940 86440 237522 -14.8219 5.7826 3.55 " 14Zet Lep" 1998 38678 150801 -46.0578 14.3234 3.55 " Iot Lup" 5354 125238 224833 -8.8239 0.3238 3.56 " 8Iot Cet" 74 1522 128694 -14.7786 11.3224 3.56 " 12Del Crt" 4382 98430 156605 -33.7983 4.2982 3.56 " 41Ups4Eri" 1347 27376 194902 -36.2614 15.3634 3.56 " Phi1Lup" 5705 136422 206552 -51.5122 2.2752 3.56 " Phi Eri" 674 14228 232696 -66.1819 20.1454 3.56 " Del Pav" 7665 190248 254733 24.3981 7.7408 3.57 " 77Kap Gem" 2985 62345 79653 48.6283 1.6332 3.57 " 51 And" 464 9927 37375 72.7328 18.3509 3.57 " 44Chi Dra" 6927 170153 9087 -12.5447 20.3009 3.57 " 6Alp2Cap" 7754 192947 163427 -38.0175 16.8723 3.57 " Mu 2Sco" 6252 151985 208116 16.5403 7.3016 3.58 " 54Lam Gem" 2763 56537 96746 30.3714 14.5305 3.58 " 25Rho Boo" 5429 127665 64202 -28.1350 15.6171 3.58 " 39Ups Lib" 5794 139063 183619 -60.4011 12.3560 3.59 " Eps Cru" 4700 107446 251862 9.0289 3.4136 3.60 " 1Omi Tau" 1030 21120 111172 -6.8444 5.2934 3.60 " 20Tau Ori" 1735 34503 131952 -8.1833 1.4004 3.60 " 45The Cet" 402 8512 129274 33.9611 6.8798 3.60 " 34The Gem" 2540 50019 59570 47.1567 9.0604 3.60 " 12Kap UMa" 3594 77327 42661 -22.4483 5.7411 3.60 " 13Gam Lep" 1983 38393 170759 -40.4667 9.5117 3.60 " Psi Vel" 3786 82434 221234 1.7647 11.8449 3.61 " 5Bet Vir" 4540 102870 119076 -12.3542 10.1765 3.61 " 41Lam Hya" 3994 88284 155785 -37.9686 7.7542 3.61 " " 3017 63032 198398 15.3458 1.5247 3.62 " 99Eta Psc" 437 9270 92484 42.3261 23.0320 3.62 " 1Omi And" 8762 217675 52609 -42.3614 16.9097 3.62 " Zet2Sco" 6271 152334 227402 -52.9219 8.6716 3.62 " " 3447 74195 236164 -60.6839 17.5183 3.62 " Del Ara" 6500 158094 253945 -64.7239 17.7622 3.62 " Eta Pav" 6582 160635 254020 -71.5489 13.0378 3.62 " Del Mus" 4923 112985 257000 14.5953 20.6258 3.63 " 6Bet Del" 7882 196524 106316 24.0533 3.8194 3.63 " 27 Tau" 1178 23850 76228 27.2606 2.8331 3.63 " 41 Ari" 838 17573 75596 -66.7286 11.7601 3.64 " Lam Mus" 4520 102249 251575 -1.4494 12.6943 3.65 " 29Gam Vir" 4825 110379 138917 15.6275 4.3299 3.65 " 54Gam Tau" 1346 27371 93868 64.3758 14.0731 3.65 " 11Alp Dra" 5291 123299 16273 -58.4542 20.9135 3.65 " Bet Ind" 7986 198700 246784 53.8969 0.6162 3.66 " 17Zet Cas" 153 3360 21566 -21.1725 23.1574 3.66 " 88 Aqr" 8812 218594 191683 -29.7778 15.6443 3.66 " 40Tau Lib" 5812 139365 183649 -50.0917 18.1105 3.66 " The Ara" 6743 165024 245242 15.4219 15.7698 3.67 " 28Bet Ser" 5867 141003 101725 63.0619 9.5255 3.67 " 23 UMa" 3757 81937 14908 -1.4494 12.6943 3.68 " 29Gam Vir" 4826 110380 138917 29.1058 15.4638 3.68 " 3Bet CrB" 5747 137909 83831 -16.6622 21.6682 3.68 " 40Gam Cap" 8278 206088 164560 -33.1864 8.7265 3.68 " Alp Pyx" 3468 74575 199546 3.2822 23.2861 3.69 " 6Gam Psc" 8852 219615 128085 5.6050 4.8534 3.69 " 3Pi 4Ori" 1552 30836 112142 -21.7578 3.3253 3.69 " 16Tau4Eri" 1003 20720 168460 -62.5078 9.7541 3.69 " " 3884 84810 250683 24.1133 3.7479 3.70 " 17 Tau" 1142 23302 76131 29.2478 17.9627 3.70 " 92Xi Her" 6703 163993 85590 -51.6089 1.9326 3.70 " Chi Eri" 566 11937 232573 4.4778 15.8469 3.71 " 37Eps Ser" 5892 141795 121218 6.4067 19.9219 3.71 " 60Bet Aql" 7602 188512 125235 47.7794 11.7675 3.71 " 63Chi UMa" 4518 102224 43886 -14.1678 5.9401 3.71 " 16Eta Lep" 2085 40136 150957 1.8928 14.7708 3.72 "109 Vir" 5511 130109 120648 2.4406 4.9042 3.72 " 8Pi 5Ori" 1567 31237 112197 38.0456 21.2465 3.72 " 65Tau Cyg" 8130 202444 71121 43.9278 21.0822 3.72 " 62Xi Cyg" 8079 200905 50424 54.2847 5.9921 3.72 " 33Del Aur" 2077 40035 25502 9.5639 18.1225 3.73 " 72 Oph" 6771 165777 123142 -9.4583 3.5488 3.73 " 18Eps Eri" 1084 22049 130564 -10.3350 1.8577 3.73 " 55Zet Cet" 539 11353 148059 -40.5758 7.8703 3.73 " " 3080 64440 219082 9.7328 3.4528 3.74 " 2Xi Tau" 1038 21364 111195 -7.5797 22.8769 3.74 " 73Lam Aqr" 8698 216386 146362 -22.4114 21.4444 3.74 " 34Zet Cap" 8204 204075 190341 2.7072 17.7982 3.75 " 62Gam Oph" 6629 161868 122754 19.1531 16.3653 3.75 " 20Gam Her" 6095 147547 102107 41.0758 5.0413 3.75 " 8Zet Aur" 1612 32068 39966 56.8728 17.8921 3.75 " 32Xi Dra" 6688 163588 30631 58.4153 22.4862 3.75 " 27Del Cep" 8571 213306 34508 -47.0978 9.0693 3.75 " " 3614 78004 220803 17.5425 4.3822 3.76 " 61Del1Tau" 1373 27697 93897 25.3450 22.1169 3.76 " 24Iot Peg" 8430 210027 90238 55.8956 2.8449 3.76 " 15Eta Per" 834 17506 23655 -59.0414 16.8298 3.76 " Eta Ara" 6229 151249 244168 -62.4897 5.5604 3.76 " Bet Dor" 1922 37350 249311 -77.3900 21.6913 3.76 " Nu Oct" 8254 205478 257948 -9.4958 20.7946 3.77 " 2Eps Aqr" 7950 198001 144810 15.9119 20.6606 3.77 " 9Alp Del" 7906 196867 106357 42.5786 3.7532 3.77 " 41Nu Per" 1135 23230 39078 50.2825 22.5215 3.77 " 7Alp Lac" 8585 213558 34542 53.3686 19.2851 3.77 " 1Kap Cyg" 7328 181276 31537 -21.7417 19.0781 3.77 " 39Omi Sgr" 7217 177241 187643 -66.1369 8.4289 3.77 " Bet Vol" 3347 71878 250228 -58.8533 10.8916 3.78 " " 4257 94510 238574 -70.4989 7.1458 3.78 " Gam2Vol" 2736 55865 256374 20.5703 7.0685 3.79 " 43Zet Gem" 2650 52973 79031 27.7981 7.4288 3.79 " 60Iot Gem" 2821 58207 79374 46.7414 20.2272 3.79 " 31 Cyg" 7735 192577 49337 51.7297 19.4951 3.79 " 10Iot2Cyg" 7420 184006 31702 10.5375 15.5800 3.80 " 13Del Ser" 5788 138917 101623 10.5392 15.5800 3.80 " 13Del Ser" 5789 138918 101624 19.8406 10.3329 3.80 " 41Gam2Leo" 4058 89485 81299 44.8572 3.1583 3.80 " 27Kap Per" 941 19476 38609 46.0064 17.6578 3.80 " 85Iot Her" 6588 160762 46872 59.0386 9.8498 3.80 " 29Ups UMa" 3888 84999 27401 -2.6000 5.6458 3.81 " 48Sig Ori" 1931 37468 132406 -16.8364 10.4348 3.81 " 42Mu Hya" 4094 90432 155980 -20.8792 5.8554 3.81 " 15Del Lep" 2035 39364 170926 1.9839 16.5152 3.82 " 10Lam Oph" 6149 148857 121658 18.5342 19.7898 3.82 " 7Del Sge" 7536 187076 105259 36.8025 9.3141 3.82 " 38 Lyn" 3690 80081 61391 46.4581 23.6261 3.82 " 16Lam And" 8961 222107 53204 -30.5622 4.5925 3.82 " 52Ups2Eri" 1464 29291 195148 -58.7394 10.4646 3.82 " " 4114 90853 238085 28.7625 18.1257 3.83 "103Omi Her" 6779 166014 85750 32.2883 3.7386 3.83 " 38Omi Per" 1131 23180 56673 34.2150 10.8885 3.83 " 46 LMi" 4247 94264 62297 70.2678 19.8029 3.83 " 63Eps Dra" 7582 188119 9540 -42.1008 13.9712 3.83 " Phi Cen" 5248 121743 224577 -79.0447 14.7977 3.83 " Alp Aps" 5470 129078 257193 -1.3872 22.3609 3.84 " 48Gam Aqr" 8518 212061 146044 15.9622 4.4763 3.84 " 77The1Tau" 1411 28307 93955 21.7697 18.3950 3.84 "109 Her" 6895 169414 86003 26.2956 15.7124 3.84 " 8Gam CrB" 5849 140436 83958 69.3311 11.5234 3.84 " 1Lam Dra" 4434 100029 15532 -46.6489 8.6771 3.84 " " 3445 74180 220265 -48.2258 10.6217 3.84 " " 4167 92139 222199 -60.6447 8.9174 3.84 " " 3571 76728 250374 9.3067 10.5469 3.85 " 47Rho Leo" 4133 91316 118355 -8.2442 18.5868 3.85 " Alp Sct" 6973 171443 142408 15.6617 15.9409 3.85 " 41Gam Ser" 5933 142860 101826 -26.7728 7.2469 3.85 " 28Ome CMa" 2749 56139 173282 -33.4364 6.3686 3.85 " Del Col" 2296 44762 196735 -42.1219 10.2456 3.85 " " 4023 88955 221895 -51.0664 5.7881 3.85 " Bet Pic" 2020 39060 234134 -63.6856 16.2573 3.85 " Del TrA" 6030 145544 253474 -64.8069 3.7367 3.85 " Bet Ret" 1175 23817 248877 37.2506 17.9376 3.86 " 91The Her" 6695 163770 66485 -21.0589 18.2294 3.86 " 13Mu Sgr" 6812 166937 186497 -42.2944 4.2334 3.86 " Alp Hor" 1326 26967 216710 -48.5411 12.6284 3.86 " Tau Cen" 4802 109787 223560 24.3678 3.7638 3.87 " 20 Tau" 1149 23408 76155 38.4994 0.9459 3.87 " 37Mu And" 269 5448 54281 69.7883 12.5581 3.87 " 5Kap Dra" 4787 109387 7593 -14.3039 4.6363 3.87 " 53 Eri" 1481 29503 149781 -24.1839 6.9022 3.87 " 16Omi1CMa" 2580 50877 172542 -28.9869 3.2012 3.87 " Alp For" 963 20010 168373 -35.4706 5.5202 3.87 " Eps Col" 1862 36597 195924 -44.8036 13.9780 3.87 " Ups1Cen" 5249 121790 224585 -48.7378 15.1989 3.87 " Kap1Lup" 5646 134481 225525 -72.1331 12.5411 3.87 " Gam Mus" 4773 109026 256955 2.3142 9.2394 3.88 " 22The Hya" 3665 79469 117527 -5.6583 14.7177 3.88 "107Mu Vir" 5487 129502 140090 26.0069 9.8794 3.88 " 24Mu Leo" 3905 85503 81064 -29.2142 15.9481 3.88 " 5Rho Sco" 5928 142669 183957 -39.4075 13.5174 3.88 " " 5089 117440 204545 -45.7475 0.1569 3.88 " Eps Phe" 25 496 214983 -0.6669 12.3318 3.89 " 15Eta Vir" 4689 107259 138721 -8.8981 2.9405 3.89 " 3Eta Eri" 874 18322 130197 35.0833 19.9384 3.89 " 21Eta Cyg" 7615 188947 69116 46.3133 16.3290 3.89 " 22Tau Her" 6092 147394 46028 -54.4911 11.3501 3.89 " Pi Cen" 4390 98718 238986 -78.8972 16.5575 3.89 " Gam Aps" 6102 147675 257407 1.0056 19.8746 3.90 " 55Eta Aql" 7570 187929 125159 -3.9064 8.4277 3.90 " " 3314 71155 135896 -45.2467 23.1727 3.90 " Iot Gru" 8820 218670 231468 5.9892 4.0526 3.91 " 38Nu Tau" 1251 25490 111579 -1.1428 9.6643 3.91 " 35Iot Hya" 3845 83618 137035 -14.7894 15.5921 3.91 " 38Gam Lib" 5787 138905 159370 -46.0417 8.7671 3.91 " " 3487 75063 220422 -50.2306 12.4673 3.91 " Sig Cen" 4743 108483 223454 -58.9750 11.1432 3.91 " " 4337 96918 238813 5.2478 21.2637 3.92 " 8Alp Equ" 8131 202447 126662 30.9264 17.0048 3.92 " 58Eps Her" 6324 153808 65716 -55.2458 1.1398 3.92 " Zet Phe" 338 6882 232306 -3.3525 4.6053 3.93 " 48Nu Eri" 1463 29248 131346 -9.5511 7.6874 3.93 " 26Alp Mon" 2970 61935 134986 -17.8472 19.3612 3.93 " 44Rho1Sgr" 7340 181577 162512 10.5292 11.3987 3.94 " 78Iot Leo" 4399 99028 99587 18.1542 8.7447 3.94 " 47Del Cnc" 3461 74442 98087 41.1672 20.9529 3.94 " 58Nu Cyg" 8028 199629 50274 -43.6800 0.4367 3.94 " Kap Phe" 100 2262 215092 23.5656 22.7755 3.95 " 47Lam Peg" 8667 215665 90775 52.7625 2.9043 3.95 " 18Tau Per" 854 17878 23685 54.9217 13.3990 3.95 " 79Zet UMa" 5055 116657 28738 -19.2558 6.6114 3.95 " 7Nu 2CMa" 2429 47205 151702 -33.6272 15.8493 3.95 " 5Chi Lup" 5883 141556 207040 -49.0728 1.5209 3.95 " Del Phe" 440 9362 215536 -72.6061 7.6970 3.95 " Zet Vol" 3024 63295 256438 -20.6692 16.1134 3.96 " 9Ome1Sco" 5993 144470 184123 -28.9547 7.7301 3.96 " 3 Pup" 2996 62623 174400 -32.5086 6.8307 3.96 " 13Kap CMa" 2538 50013 197258 -34.0169 4.4006 3.96 " 43 Eri" 1393 28028 194984 -42.8153 5.9858 3.96 " Eta Col" 2120 40808 217650 -52.3686 12.1942 3.96 " Rho Cen" 4638 105937 239737 -72.9106 20.0099 3.96 " Eps Pav" 7590 188228 257757 2.9317 18.0108 3.97 " 67 Oph" 6714 164353 123013 39.1486 5.8582 3.97 " 32Nu Aur" 2012 39003 58502 41.7828 9.0107 3.97 " " 3579 76943 42642 -20.1006 23.3828 3.97 " 98 Aqr" 8892 220321 191858 -35.3083 8.6684 3.97 " Bet Pyx" 3438 74006 199490 -40.6161 19.3981 3.97 " Alp Sgr" 7348 181869 229659 -43.4956 22.4878 3.97 " Del1Gru" 8556 213009 231154 -62.3172 9.1879 3.97 " " 3663 79447 250471 -6.2747 6.2476 3.98 " 5Gam Mon" 2227 43232 133012 47.7144 20.2579 3.98 " 32 Cyg" 7751 192909 49385 72.4214 2.0572 3.98 " 50 Cas" 580 12216 4560 -67.9572 7.2805 3.98 " Del Vol" 2803 57623 249809 -58.2358 23.2905 3.99 " Gam Tuc" 8848 219571 247814 -21.0778 2.0001 4.00 " 59Ups Cet" 585 12274 167471 -37.7936 14.6993 4.00 " " 5471 129116 205839 -49.8903 2.8980 4.00 " " 868 18242 0 -66.3961 9.0408 4.00 " Alp Vol" 3615 78045 250422 -74.0317 10.4066 4.00 " " 4102 90589 256710 6.8633 23.9885 4.01 " 28Ome Psc" 9072 224617 128513 30.3686 20.4899 4.01 " 41 Cyg" 7834 195295 70095 33.8472 2.2886 4.01 " 9Gam Tri" 664 14055 55427 54.9881 13.4204 4.01 " 80 UMa" 5062 116842 28751 58.5653 16.0315 4.01 " 13The Dra" 5986 144284 29765 -13.5925 22.8265 4.01 " 71Tau2Aqr" 8679 216032 165321 -19.4606 16.1999 4.01 " 14Nu Sco" 6027 145502 159764 -27.7100 8.8422 4.01 " Gam Pyx" 3518 75691 176559 -44.4589 19.3773 4.01 " Bet1Sgr" 7337 181454 229646 -71.4281 18.7172 4.01 " Zet Pav" 6982 171759 257620 -0.1175 22.5893 4.02 " 62Eta Aqr" 8597 213998 146181 -3.2547 4.7584 4.02 " 57Mu Eri" 1520 30211 131468 -5.7389 19.0280 4.02 " 12 Aql" 7193 176678 142931 15.0683 18.9937 4.02 " 13Eps Aql" 7176 176411 104318 28.7600 8.7783 4.02 " 48Iot Cnc" 3475 74739 80416 45.5919 21.5664 4.02 " 73Rho Cyg" 8252 205435 51035 -24.7289 12.1402 4.02 " 1Alp Crv" 4623 105452 180505 -50.1556 16.3307 4.02 " Gam2Nor" 6072 146686 243643 2.4994 18.0909 4.03 " 70 Oph" 6752 165341 123107 6.5294 11.7643 4.03 " 3Nu Vir" 4517 102212 119035 11.3033 20.5536 4.03 " 2Eps Del" 7852 195810 106230 60.4422 5.0570 4.03 " 10Bet Cam" 1603 31910 13351 -57.1778 12.9099 4.03 " Mu 1Cru" 4898 112092 240366 -6.8375 4.1978 4.04 " 38Omi1Eri" 1298 26574 131019 35.7911 3.9828 4.04 " 46Xi Per" 1228 24912 56856 43.9461 18.9223 4.04 " 13 Lyr" 7157 175865 47919 47.7125 4.1444 4.04 " 48 Per" 1273 25940 39336 -64.0031 12.3073 4.04 " Zet Cru" 4679 106983 251841 6.0294 11.3523 4.05 " 77Sig Leo" 4386 98664 118804 49.6133 3.1511 4.05 " Iot Per" 937 19373 38597 51.8508 14.4199 4.05 " 23The Boo" 5404 126660 29137 -35.1736 14.7276 4.05 " " 5485 129456 205871 -37.8853 14.3426 4.05 " Psi Cen" 5367 125473 205453 -45.2797 15.1474 4.05 " Lam Lup" 5626 133955 225483 -49.4258 14.6314 4.05 " Rho Lup" 5453 128345 225071 24.2672 0.7890 4.06 " 34Zet And" 215 4502 74267 26.8958 7.5987 4.06 " 69Ups Gem" 2905 60522 79533 -53.1606 16.9931 4.06 " Eps1Ara" 6295 152980 244331 0.3286 2.6581 4.07 " 82Del Cet" 779 16582 110665 13.5144 4.9395 4.07 " 9Omi2Ori" 1580 31421 94218 15.7978 13.8246 4.07 " 5Ups Boo" 5200 120477 100725 50.6886 1.7277 4.07 " Phi Per" 496 10516 22554 -12.0386 6.9032 4.07 " 14The CMa" 2574 50778 152071 -17.2328 21.0991 4.07 " 23The Cap" 8075 200761 164132 -42.6492 8.7400 4.07 " " 3477 74772 220371 -58.8011 15.2919 4.07 " Bet Cir" 5670 135379 242384 -76.9197 8.3088 4.07 " Alp Cha" 3318 71243 256496 -6.0006 14.2669 4.08 " 99Iot Vir" 5338 124850 139824 19.8044 21.3681 4.08 " 1 Peg" 8173 203504 107073 58.7800 21.7251 4.08 " Mu Cep" 8316 206936 33693 -17.6839 11.4147 4.08 " 15Gam Crt" 4405 99211 156661 -18.2989 10.9962 4.08 " 7Alp Crt" 4287 95272 156375 -59.2294 9.5741 4.08 " " 3825 83183 237117 9.2906 5.6151 4.09 " 40Phi2Ori" 1907 37160 112958 18.1417 15.8123 4.09 " 35Kap Ser" 5879 141477 101752 41.4056 1.6133 4.09 " 50Ups And" 458 9826 37362 -23.6244 3.0399 4.09 " 11Tau3Eri" 919 18978 168249 -68.6594 2.3625 4.09 " Del Hyi" 705 15008 248545 12.9367 3.5146 4.11 " 5 Tau" 1066 21754 93469 -26.9192 20.8637 4.11 " 18Ome Cap" 7980 198542 189781 -37.9044 19.1579 4.11 " Alp CrA" 7254 178253 210990 -39.3408 19.1671 4.11 " Bet CrA" 7259 178345 211005 -39.8556 2.6778 4.11 " Iot Eri" 794 16815 215999 -43.7494 22.4960 4.11 " Del2Gru" 8560 213080 231161 -46.3733 7.8206 4.11 " " 3055 63922 219035 -61.1783 11.7752 4.11 " " 4522 102350 251579 -66.3169 15.6120 4.11 " Eps TrA" 5771 138538 253226 -67.9608 12.2928 4.11 " Eps Mus" 4671 106849 251830 -68.2669 2.6598 4.11 " Eps Hyi" 806 16978 248621 -78.6078 10.5911 4.11 " Gam Cha" 4174 92305 256731 8.7331 12.0868 4.12 " 9Omi Vir" 4608 104979 119213 9.6475 6.0397 4.12 " 61Mu Ori" 2124 40932 113389 49.2283 2.7367 4.12 " 13The Per" 799 16895 38288 -14.8467 9.8580 4.12 " 39Ups1Hya" 3903 85444 155542 -15.6333 7.0626 4.12 " 23Gam CMa" 2657 53244 152303 -52.7542 23.0147 4.12 " Zet Gru" 8747 217364 247680 5.6264 23.6658 4.13 " 17Iot Psc" 8969 222368 128310 25.6450 21.7441 4.13 " 10Kap Peg" 8315 206901 89949 37.7489 22.2662 4.13 " 1 Lac" 8498 211388 72191 -41.8683 19.9210 4.13 " Iot Sgr" 7581 188114 229927 -49.0708 18.4805 4.13 " Zet Tel" 6905 169767 229047 -7.8081 5.3991 4.14 " 29 Ori" 1784 35369 132067 31.3592 15.5488 4.14 " 4The CrB" 5778 138749 64769 44.3339 23.6735 4.14 " 19Kap And" 8976 222439 53264 48.4094 4.2483 4.14 " 51Mu Per" 1303 26630 39404 -25.2708 20.7682 4.14 " 16Psi Cap" 7936 197692 189664 -42.9892 8.6274 4.14 " " 3426 73634 220204 -0.4928 7.1978 4.15 " 22Del Mon" 2714 55185 134330 20.2122 6.4827 4.15 " 18Nu Gem" 2343 45542 78423 26.8778 15.9598 4.15 " 13Eps CrB" 5947 143107 84098 -16.7294 15.8971 4.15 " 46The Lib" 5908 142198 159563 -64.6136 12.1147 4.15 " Eta Cru" 4616 105211 251742 -81.3817 22.7676 4.15 " Bet Oct" 8630 214846 258941 5.7036 8.6276 4.16 " 4Del Hya" 3410 73262 116965 -7.7833 22.2806 4.16 " 43The Aqr" 8499 211391 145991 23.2633 6.0687 4.16 " 1 Gem" 2134 41116 77915 62.9317 0.5500 4.16 " 15Kap Cas" 130 2905 11256 -35.2556 16.6063 4.16 " " 6166 149447 207814 -24.1753 17.4395 4.17 " 44 Oph" 6486 157792 185401 -27.0436 22.6776 4.17 " 18Eps PsA" 8628 214748 191318 -36.2003 3.8242 4.17 " " 1195 24160 194559 23.9483 3.7721 4.18 " 23 Tau" 1156 23480 76172 31.7844 7.4852 4.18 " 62Rho Gem" 2852 58946 60118 46.0883 14.2731 4.18 " 19Lam Boo" 5351 125162 44965 12.1728 22.7782 4.19 " 46Xi Peg" 8665 215648 108165 20.5464 18.7610 4.19 "110 Her" 7061 173667 86406 57.0436 22.2506 4.19 " 23Eps Cep" 8494 211336 34227 -10.2736 14.2149 4.19 " 98Kap Vir" 5315 124294 158427 -34.4508 13.8241 4.19 " 2 Cen" 5192 120323 204875 5.9481 5.5131 4.20 " 32 Ori" 1839 36267 112849 42.4369 16.5684 4.20 " 35Sig Her" 6168 149630 46161 -22.8800 7.9476 4.20 " 11 Pup" 3102 65228 174852 -1.9428 5.6793 4.21 " 50Zet Ori" 1949 37743 0 -9.0878 23.2649 4.21 " 91Psi1Aqr" 8841 219449 146598 36.7072 10.4647 4.21 " 31Bet LMi" 4100 90537 62053 59.9403 3.4845 4.21 " " 1035 21291 24054 -32.5397 22.9325 4.21 " 23Del PsA" 8720 216763 214189 -4.7478 18.7863 4.22 " Bet Sct" 7063 173764 142618 -6.0489 23.2387 4.22 " 90Phi Aqr" 8834 219215 146585 22.2939 4.4228 4.22 " 65Kap1Tau" 1387 27934 76601 30.7197 20.7610 4.22 " 52 Cyg" 7942 197912 70467 62.9942 20.4930 4.22 " 2The Cep" 7850 195725 18897 71.3378 18.3460 4.22 " 43Phi Dra" 6920 170000 9084 -62.1875 18.8703 4.22 " Lam Pav" 7074 173948 254393 -65.3661 21.4407 4.22 " Gam Pav" 8181 203608 254999 32.9142 19.8427 4.23 " Chi Cyg" 7564 187796 68943 38.3186 2.8431 4.23 " 16 Per" 840 17584 55928 39.3947 21.2903 4.23 " 67Sig Cyg" 8143 202850 71165 48.1928 3.6082 4.23 " 37Psi Per" 1087 22192 38980 49.3094 21.7799 4.23 " 81Pi 2Cyg" 8335 207330 51293 82.0372 16.7661 4.23 " 22Eps UMi" 6322 153751 2770 -23.2497 3.7808 4.23 " 27Tau6Eri" 1173 23754 168827 -33.0439 13.7614 4.23 " 1 Cen" 5168 119756 204812 -34.7044 16.5230 4.23 " " 6143 148703 207732 -36.8022 16.1099 4.23 " The Lup" 5987 144294 207332 -64.8747 0.3345 4.23 " Zet Tuc" 77 1581 248163 -12.5083 20.2941 4.24 " 5Alp1Cap" 7747 192876 163422 -48.1031 7.8884 4.24 " " 3090 64760 219111 -77.5175 16.7179 4.24 " Bet Aps" 6163 149324 257424 10.1608 4.5942 4.25 " 88 Tau" 1458 29140 94026 11.8578 8.9748 4.25 " 65Alp Cnc" 3572 76756 98267 41.2647 4.6115 4.25 " 58 Per" 1454 29094 39639 43.1881 8.3806 4.25 " 31 Lyn" 3275 70272 42319 47.2419 1.1584 4.25 " 42Phi And" 335 6811 36972 75.6961 14.4587 4.25 " 5 UMi" 5430 127700 8024 86.2569 1.1458 4.25 " " 285 5848 181 -13.8586 2.7354 4.25 " 89Pi Cet" 811 17081 148575 -31.0678 10.4525 4.25 " Alp Ant" 4104 90610 201405 -47.7039 2.4498 4.25 " Kap Eri" 721 15371 215906 -51.4867 4.2671 4.25 " Gam Dor" 1338 27290 233457 1.5444 14.0274 4.26 " 93Tau Vir" 5264 122408 120238 9.1578 1.7566 4.26 "110Omi Psc" 510 10761 110110 27.8781 13.1979 4.26 " 43Bet Com" 4983 114710 82706 41.3575 12.5624 4.26 " 8Bet CVn" 4785 109358 44230 44.9350 16.1462 4.26 " 11Phi Her" 6023 145389 45911 45.9369 5.9989 4.26 " 35Pi Aur" 2091 40239 40756 -12.8753 17.6902 4.26 " 56Omi Ser" 6581 160613 160747 -79.3122 12.3058 4.26 " Bet Cha" 4674 106911 256924 -8.7542 5.1524 4.27 " 69Lam Eri" 1679 33328 131824 10.1142 2.7490 4.27 " 87Mu Cet" 813 17094 110723 12.5108 4.6360 4.27 " 90 Tau" 1473 29388 94044 16.1242 20.7776 4.27 " 12Gam2Del" 7948 197964 106476 -13.8697 22.1073 4.27 " 33Iot Aqr" 8418 209819 164861 -21.6328 3.5631 4.27 " 19Tau5Eri" 1088 22203 168634 -40.1789 12.8906 4.27 " " 4889 111968 203907 -43.0697 3.3321 4.27 " " 1008 20794 216263 -47.3458 8.1581 4.27 " Gam1Vel" 3206 68243 219501 -47.8750 15.3089 4.27 " Mu Lup" 5683 135734 225638 -49.9061 13.1152 4.27 " Xi 2Cen" 4942 113791 223909 0.4017 3.6146 4.28 " 10 Tau" 1101 22484 111292 6.3789 23.4661 4.28 " 10The Psc" 8916 220954 128196 7.8900 1.0491 4.28 " 71Eps Psc" 294 6186 109627 8.4600 2.4693 4.28 " 73Xi 2Cet" 718 15318 110543 22.8136 4.4385 4.28 " 69Ups Tau" 1392 28024 76608 22.9569 4.7041 4.28 " 94Tau Tau" 1497 29763 76721 28.8836 7.7219 4.28 " 75Sig Gem" 2973 62044 79638 -16.6128 16.5190 4.28 " 8Phi Oph" 6147 148786 159963 -16.8344 21.3708 4.28 " 32Iot Cap" 8167 203387 164346 -33.9081 11.8818 4.28 " Bet Hya" 4552 103192 202901 -43.5206 23.1147 4.28 " The Gru" 8787 218227 231444 -55.6033 10.6551 4.28 " " 4180 92449 238309 8.8922 4.2589 4.29 " 49Mu Tau" 1320 26912 111696 17.9281 4.4248 4.29 " 68Del3Tau" 1389 27962 93923 33.1783 22.1664 4.29 " 29Pi 2Peg" 8454 210459 72077 43.2681 23.6356 4.29 " 17Iot And" 8965 222173 53216 50.3514 4.1097 4.29 " 47Lam Per" 1261 25642 24412 61.1208 21.7575 4.29 " 10Nu Cep" 8334 207260 19624 64.6278 22.0632 4.29 " 17Xi Cep" 8417 209790 19827 66.3428 4.9008 4.29 " 9Alp Cam" 1542 30614 13298 81.3264 9.6181 4.29 " " 3751 81817 1551 -13.1767 5.3262 4.29 " 6Lam Lep" 1756 34816 150340 -29.8669 17.4559 4.29 " 45 Oph" 6492 157919 185412 -32.3461 22.5251 4.29 " 17Bet PsA" 8576 213398 213883 -38.6353 17.6091 4.29 " " 6546 159433 209019 -44.7997 19.3870 4.29 " Bet2Sgr" 7343 181623 229654 3.3986 8.7204 4.30 " 7Eta Hya" 3454 74280 117050 -0.8239 11.6158 4.30 " 91Ups Leo" 4471 100920 138298 24.4672 3.7535 4.30 " 19 Tau" 1145 23338 76140 36.8989 18.9084 4.30 " 12Del2Lyr" 7139 175588 67559 56.5678 20.2233 4.30 " 33 Cyg" 7740 192696 32378 22.9681 9.5287 4.31 " 4Lam Leo" 3773 82308 80885 37.3772 15.4082 4.31 " 51Mu 1Boo" 5733 137391 64686 -16.1961 12.5345 4.31 " 8Eta Crv" 4775 109085 157345 -29.3575 0.9768 4.31 " Alp Scl" 280 5737 166716 8.9256 7.4694 4.32 " 4Gam CMi" 2854 58972 115478 -1.1053 20.6390 4.32 " 71 Aql" 7884 196574 144649 77.7944 15.7343 4.32 " 16Zet UMi" 5903 142105 8328 -13.5478 8.7729 4.32 " 12 Hya" 3484 74918 154622 -19.6717 4.6740 4.32 " 54 Eri" 1496 29755 149818 -20.8686 16.1234 4.32 " 10Ome2Sco" 5997 144608 184135 -43.5756 14.8607 4.32 " Omi Lup" 5528 130807 225248 -63.7883 11.8281 4.32 " " 4537 102776 251602 -83.6678 14.4486 4.32 " Del Oct" 5339 124882 258698 2.7636 2.0341 4.33 "113Alp Psc" 596 12447 110291 36.0644 18.3310 4.33 " 1Kap Lyr" 6872 168775 66869 55.1497 1.1851 4.33 " 33The Cas" 343 6961 22070 -12.8469 17.3471 4.33 " 53Nu Ser" 6446 156928 160479 -23.4183 6.5309 4.33 " 4Xi 1CMa" 2387 46328 171895 -42.5675 15.6342 4.33 " Ome Lup" 5797 139127 226004 -48.9433 12.8852 4.33 " " 4888 111915 223731 -56.3867 14.3388 4.33 " " 5358 125288 241641 -59.7611 8.6769 4.33 " " 3457 74375 236181 -63.3128 12.0504 4.33 " The1Cru" 4599 104671 251705 4.1403 17.4419 4.34 " 49Sig Oph" 6498 157999 122387 -2.9839 8.1432 4.34 " 29Zet Mon" 3188 67594 135551 17.3500 21.7419 4.34 " 9 Peg" 8313 206859 107365 -30.1489 15.2972 4.34 " 2 Lup" 5686 135758 183346 -33.0258 21.7491 4.34 " 9Iot PsA" 8305 206742 213258 -45.6036 14.0287 4.34 " Ups2Cen" 5260 122223 224621 -57.5414 9.2701 4.34 " " 3696 80230 236787 19.7267 3.1938 4.35 " 57Del Ari" 951 19787 93328 29.4981 6.2563 4.35 " 44Kap Aur" 2219 43039 78143 58.4225 6.9546 4.35 " 15 Lyn" 2560 50522 26051 -40.3044 2.9712 4.35 " The2Eri" 898 18623 216114 -45.3794 14.4363 4.35 " Tau2Lup" 5396 126354 224920 -49.3553 9.6138 4.35 " " 3836 83446 221344 -63.6683 18.1430 4.35 " Pi Pav" 6745 165040 254147 -65.7356 5.7462 4.35 " Del Dor" 2015 39014 249346 -68.6172 8.1322 4.35 " Eps Vol" 3223 68520 250128 -77.4844 8.3440 4.35 " The Cha" 3340 71701 256503 5.8378 8.8072 4.36 " 13Rho Hya" 3492 75137 117146 8.9003 4.8435 4.36 " 2Pi 2Ori" 1544 30739 112124 -1.2864 19.6120 4.36 " 41Iot Aql" 7447 184930 143597 18.1814 18.7837 4.36 "111 Her" 7069 173880 104093 20.8144 18.1460 4.36 "102 Her" 6787 166182 85769 22.0819 4.0782 4.36 " 37 Tau" 1256 25604 76430 28.2683 12.4490 4.36 " 15Gam Com" 4737 108381 82313 33.7194 0.6147 4.36 " 29Pi And" 154 3369 54033 37.6050 18.7462 4.36 " 6Zet1Lyr" 7056 173648 67321 38.1336 19.2728 4.36 " 21The Lyr" 7314 180809 68065 47.7069 22.4922 4.36 " 5 Lac" 8572 213310 52055 47.9953 3.5096 4.36 " 35Sig Per" 1052 21552 38890 86.5864 17.5369 4.36 " 23Del UMi" 6789 166205 2937 -12.9414 5.2205 4.36 " 4Kap Lep" 1705 33949 150239 -35.2833 5.9589 4.36 " Gam Col" 2106 40494 196352 -41.1797 14.1008 4.36 " Chi Cen" 5285 122980 224673 -57.4631 0.7226 4.36 " Eta Phe" 191 4150 232162 -61.4939 18.3871 4.36 " Xi Pav" 6855 168339 254226 8.8467 2.2167 4.37 " 65Xi 1Cet" 649 13611 110408 9.9975 10.1318 4.37 " 31 Leo" 3980 87837 98964 17.4761 19.6841 4.37 " 6Bet Sge" 7488 185958 105133 18.0139 19.6683 4.37 " 5Alp Sge" 7479 185758 105120 29.3117 0.6426 4.37 " 30Eps And" 163 3546 74164 -17.0542 6.9356 4.37 " 20Iot CMa" 2596 51309 152126 -35.1406 6.2759 4.37 " Kap Col" 2256 43785 196643 -35.2764 19.9956 4.37 " The1Sgr" 7623 189103 211716 -37.8183 23.5495 4.37 " Bet Scl" 8937 221507 214615 -62.9581 0.5258 4.37 " Bet1Tuc" 126 2884 248201 -5.5389 13.1658 4.38 " 51The Vir" 4963 114330 139189 10.1653 16.9001 4.38 " 25Iot Oph" 6281 152614 102458 18.5944 5.5369 4.38 "119 Tau" 1845 36389 94628 2.3344 8.0377 4.39 " " 3145 66141 116260 -5.4528 4.8816 4.39 " 61Ome Eri" 1560 31109 131568 -9.1825 23.2984 4.39 " 93Psi2Aqr" 8858 219688 146620 39.1461 19.2293 4.39 " 20Eta Lyr" 7298 180163 68010 77.7114 20.1481 4.39 " 1Kap Cep" 7750 192907 9665 -20.6419 23.4341 4.39 " 99 Aqr" 8906 220704 191900 -21.1128 17.3501 4.39 " 40Xi Oph" 6445 156897 185296 -42.2258 11.0026 4.39 " " 4293 95370 222487 -52.9756 6.5829 4.39 " " 2435 47306 234589 -53.4497 21.3311 4.39 " The Ind" 8140 202730 246965 2.0914 15.0483 4.40 "110 Vir" 5601 133165 120809 23.4042 23.4230 4.40 " 68Ups Peg" 8905 220657 91253 -19.2450 8.1504 4.40 " 16 Pup" 3192 67797 153890 -24.9542 7.3118 4.40 " 30Tau CMa" 2782 57061 173446 -53.6222 6.8309 4.40 " " 2554 50337 234737 -54.9925 21.9653 4.40 " Del Ind" 8368 208450 247244 9.4894 5.5803 4.41 " 37Phi1Ori" 1876 36822 112914 -6.0142 0.0327 4.41 " 30 Psc" 9089 224935 147042 20.2761 5.9064 4.41 " 54Chi1Ori" 2047 39587 77705 26.1106 17.5123 4.41 " 76Lam Her" 6526 158899 85163 30.1894 17.9751 4.41 " 94Nu Her" 6707 164136 66524 30.2453 7.1857 4.41 " 46Tau Gem" 2697 54719 59858 31.5292 11.3031 4.41 " 53Xi UMa" 4375 98231 62484 75.3875 23.1316 4.41 " 33Pi Cep" 8819 218658 10629 -27.9603 14.8381 4.41 " 58 Hya" 5526 130694 182911 -32.5319 23.3137 4.41 " Gam Scl" 8863 219784 214444 -46.3025 1.8941 4.41 " Psi Phe" 555 11695 215696 -49.2450 7.9707 4.41 " " 3129 65818 219226 -0.0200 22.4806 4.42 " 55Zet2Aqr" 8559 213052 146108 -5.0278 20.7956 4.42 " 3 Aqr" 7951 198026 144814 14.7683 6.1262 4.42 " 67Nu Ori" 2159 41753 95259 20.1797 11.0388 4.42 " 60 Leo" 4300 95608 81637 23.4175 0.9534 4.42 " 38Eta And" 271 5516 74388 -12.1017 3.7690 4.42 " 26Pi Eri" 1162 23614 149158 -18.4564 16.4504 4.42 " 7Chi Oph" 6118 148184 159918 -39.5122 14.3839 4.42 " " 5378 125823 205497 -50.4569 14.5436 4.42 " Sig Lup" 5425 127381 241781 7.3531 15.7741 4.43 " 27Lam Ser" 5868 141004 121186 7.5850 0.8114 4.43 " 63Del Psc" 224 4656 109474 -7.6528 4.2545 4.43 " 40Omi2Eri" 1325 26965 131063 13.7283 14.6858 4.43 " 30Zet Boo" 5478 129247 101145 15.0744 20.7243 4.43 " 11Del Del" 7928 197461 106425 32.1900 20.3977 4.43 " 39 Cyg" 7806 194317 69950 34.8969 21.2986 4.43 " 66Ups Cyg" 8146 202904 71173 52.2292 22.3927 4.43 " 3Bet Lac" 8538 212496 34395 -18.2375 6.6315 4.43 " 8Nu 3CMa" 2443 47442 151730 3.3414 8.6459 4.44 " 5Sig Hya" 3418 73471 116988 4.5928 6.3961 4.44 " 8Eps Mon" 2298 44769 113810 5.4875 1.6905 4.44 "106Nu Psc" 489 10380 110065 24.6650 19.4784 4.44 " 6Alp Vul" 7405 183439 87261 -18.9328 0.2440 4.44 " 7 Cet" 48 1038 147169 -40.3481 8.2341 4.44 " " 3243 69142 219635 -59.3019 4.2747 4.44 " Eps Ret" 1355 27442 233463 -67.2336 18.9492 4.44 " Kap Pav" 7107 174694 254413 1.3053 18.0292 4.45 " 68 Oph" 6723 164577 123035 7.3789 19.5682 4.45 " 38Mu Aql" 7429 184406 124799 73.3556 19.2592 4.45 " 60Tau Dra" 7352 181984 9366 -11.8692 5.2050 4.45 " 3Iot Lep" 1696 33802 150223 -21.4664 16.5356 4.45 " 9Ome Oph" 6153 148898 184450 -22.2961 7.5676 4.45 " " 2906 60532 174009 -36.6594 8.3093 4.45 " " 3270 70060 199070 -39.6186 8.1893 4.45 " " 3225 68553 198908 -41.2539 9.0015 4.45 " " 3591 77258 220730 -41.8639 4.6760 4.45 " Alp Cae" 1502 29875 216926 -57.5578 10.5931 4.45 " " 4159 91942 238222 -80.5403 10.7630 4.45 " Del2Cha" 4234 93845 258593 2.8611 5.2215 4.46 " 17Rho Ori" 1698 33856 112528 26.1822 9.4109 4.46 " 1Kap Leo" 3731 81146 80807 29.7450 14.5780 4.46 " 28Sig Boo" 5447 128167 83416 44.2764 22.6753 4.46 " 11 Lac" 8632 214868 52251 -32.4058 2.8182 4.46 " Bet For" 841 17652 193931 -32.8756 22.8754 4.46 " 22Gam PsA" 8695 216336 214153 -39.5433 22.1019 4.46 " Lam Gru" 8411 209688 213543 -45.1736 11.8524 4.46 " " 4546 102964 223062 1.7142 4.9758 4.47 " 10Pi 6Ori" 1601 31767 112281 2.4122 6.7977 4.47 " 18 Mon" 2506 49293 114428 -3.6517 11.2777 4.47 " 74Phi Leo" 4368 98058 138102 29.0483 3.3390 4.47 " " 999 20644 75871 53.7522 4.9548 4.47 " 7 Cam" 1568 31278 24929 65.5261 3.8253 4.47 " " 1155 23475 12916 -18.5725 2.7517 4.47 " 1Tau1Eri" 818 17206 148584 -23.7431 23.1114 4.47 " 86 Aqr" 8789 218240 191651 -47.5550 16.4531 4.47 " Eps Nor" 6115 147971 226773 -50.6614 12.1348 4.47 " " 4618 105382 239687 14.2089 6.1990 4.48 " 70Xi Ori" 2199 42560 95362 35.2447 10.1238 4.48 " 21 LMi" 3974 87696 61874 50.2211 19.6074 4.48 " 13The Cyg" 7469 185395 31815 51.6047 9.1479 4.48 " 15 UMa" 3619 78209 27136 59.0108 6.3271 4.48 " 2 Lyn" 2238 43378 25665 -22.8258 11.1943 4.48 " 11Bet Crt" 4343 97277 179624 -32.5800 6.4695 4.48 " Lam CMa" 2361 45813 196857 -64.9664 22.4556 4.48 " Del Tuc" 8540 212581 255222 -72.6028 9.0858 4.48 " " 3643 78791 256582 -0.3717 10.1323 4.49 " 15Alp Sex" 3981 87887 137366 -4.3464 14.9531 4.49 " 16 Lib" 5570 132052 140240 10.0069 21.2414 4.49 " 7Del Equ" 8123 202275 126643 13.2278 6.7331 4.49 " 30 Gem" 2478 48433 96051 15.6183 4.4391 4.49 " 71 Tau" 1394 28052 93932 39.7150 22.2313 4.49 " " 8485 211073 72155 -14.5450 23.7120 4.49 "105Ome2Aqr" 8988 222661 165842 -38.8631 7.8774 4.49 " " 3084 64503 198545 -46.7594 7.2093 4.49 " " 2740 55892 218537 -56.7697 8.7785 4.49 " " 3498 75311 236268 1.7800 23.7008 4.50 " 18Lam Psc" 8984 222603 128336 7.3331 6.5484 4.50 " 13 Mon" 2385 46300 114034 17.4567 13.7877 4.50 " 4Tau Boo" 5185 120136 100706 24.7497 10.9269 4.50 " 54 Leo" 4259 94601 81583 52.0514 9.5804 4.50 " 26 UMa" 3799 82621 27298 -20.0375 16.4017 4.50 " 4Psi Oph" 6104 147700 159892 -25.0058 21.1188 4.50 " 24 Cap" 8080 200914 190025 -25.9372 7.8014 4.50 " Omi Pup" 3034 63462 174558 -26.8017 7.6470 4.50 " " 2948 61555 174198 -32.9886 22.1397 4.50 " 14Mu PsA" 8431 210049 213576 -56.0431 10.3486 4.50 " " 4074 89890 237959 -65.5772 23.9986 4.50 " Eps Tuc" 9076 224686 255619 29.2472 2.7985 4.51 " 39 Ari" 824 17361 75578 30.0897 1.1943 4.51 " 83Tau Psc" 352 7106 74546 43.1233 22.5081 4.51 " 6 Lac" 8579 213420 52079 57.5797 20.7559 4.51 " " 7955 198084 32862 67.8736 20.0470 4.51 " 67Rho Dra" 7685 190940 18676 -11.3717 21.1599 4.51 " 13Nu Aqr" 8093 201381 164182 -21.8072 21.4787 4.51 " 36 Cap" 8213 204381 190374 -29.7667 4.5585 4.51 " 50Ups1Eri" 1453 29085 169570 -35.9514 9.4874 4.51 " Eps Ant" 3765 82150 200416 -51.9211 20.7340 4.51 " Eta Ind" 7920 197157 246709 -56.1667 5.8305 4.51 " Gam Pic" 2042 39523 234154 -59.3208 15.3896 4.51 " Gam Cir" 5704 136415 242463 -62.1594 4.0149 4.51 " Gam Ret" 1264 25705 248925 9.4094 23.1167 4.52 " 55 Peg" 8795 218329 127976 19.6703 15.6925 4.52 " 21Iot Ser" 5842 140159 101682 27.8142 20.2628 4.52 " 23 Vul" 7744 192806 88428 36.7853 0.3055 4.52 " 25Sig And" 68 1404 53798 37.1458 17.3947 4.52 " 75Rho Her" 6485 157779 66001 39.1811 5.8196 4.52 " 29Tau Aur" 1995 38656 58465 49.4064 23.2092 4.52 " 7 And" 8830 219080 52787 67.4025 2.4844 4.52 " Iot Cas" 707 15089 12298 -13.3711 14.3185 4.52 "100Lam Vir" 5359 125337 158489 -27.1700 19.9491 4.52 " 59 Sgr" 7604 188603 188742 -61.3281 9.6558 4.52 " " 3856 83944 250653 3.8200 23.0646 4.53 " 4Bet Psc" 8773 217891 127934 -3.0742 6.0009 4.53 " " 2113 40657 132732 20.2189 11.7997 4.53 " 93 Leo" 4527 102509 81998 35.0597 2.8586 4.53 " 17 Per" 843 17709 55946 36.4908 20.7901 4.53 " 54Lam Cyg" 7963 198183 70505 41.0789 0.8302 4.53 " 35Nu And" 226 4727 36699 -34.9686 7.6228 4.53 " " 2937 61330 198195 -45.9544 18.1872 4.53 " Eps Tel" 6783 166063 228777 -60.9883 13.3772 4.53 " " 5035 116087 252284 -64.5358 13.4001 4.53 " " 5041 116243 252293 -5.0867 17.4439 4.54 " " 6493 157950 141665 12.0067 7.4966 4.54 " 6 CMi" 2864 59294 96952 26.9475 15.0741 4.54 " 43Psi Boo" 5616 133582 83645 33.3717 5.3030 4.54 " 16 Aur" 1726 34334 57853 48.2844 0.7454 4.54 " 22Omi Cas" 193 4180 36620 51.7903 14.2247 4.54 " 17Kap2Boo" 5329 124675 29046 57.4994 23.9064 4.54 " 7Rho Cas" 9045 224014 35879 58.8786 3.4986 4.54 " " 1040 21389 24061 70.9069 2.0326 4.54 " 48 Cas" 575 12111 4554 -19.7917 15.2037 4.54 " 24Iot1Lib" 5652 134759 159090 -22.9647 6.5843 4.54 " 5Xi 2CMa" 2414 46933 171982 -27.8308 17.7927 4.54 " 3 Sgr" 6616 161592 185755 -36.8586 15.3859 4.54 " Phi2Lup" 5712 136664 206580 -44.9586 15.5981 4.54 " " 5781 138769 225950 -62.9658 0.5260 4.54 " Bet2Tuc" 127 2885 248202 12.7606 23.4859 4.55 " 70 Peg" 8923 221115 108638 19.1011 14.8565 4.55 " 37Xi Boo" 5544 131156 101250 36.3975 9.5704 4.55 " 10 LMi" 3800 82635 61570 47.6483 21.1100 4.55 " 63 Cyg" 8089 201251 50456 76.9775 7.0011 4.55 " " 2527 49878 6022 -17.3361 0.0623 4.55 " 2 Cet" 9098 225132 147059 -24.1694 16.3439 4.55 " 19Omi Sco" 6081 147084 184329 -35.4833 5.0734 4.55 " Gam1Cae" 1652 32831 195532 38.4522 9.1088 4.56 " " 3612 77912 61254 69.8303 9.5747 4.56 " 24 UMa" 3771 82210 6897 71.3114 21.6987 4.56 " 11 Cep" 8317 206952 10126 -32.9944 13.8638 4.56 " 3 Cen" 5210 120709 204916 -45.2214 14.4356 4.56 " Tau1Lup" 5395 126341 224919 -61.4003 3.9791 4.56 " Del Ret" 1247 25422 248918 4.1214 5.6531 4.57 " 47Ome Ori" 1934 37490 113001 -1.1850 9.5330 4.57 " 32Tau2Hya" 3787 82446 136932 14.0333 16.4236 4.57 " 24Ome Her" 6117 148112 102153 23.6389 21.4991 4.57 " 2 Peg" 8225 204724 89752 46.5367 22.3504 4.57 " 2 Lac" 8523 212120 51904 49.4764 22.4086 4.57 " 4 Lac" 8541 212593 51970 -28.1303 23.8154 4.57 " Del Scl" 9016 223352 192167 -28.4572 18.1347 4.57 " " 6766 165634 186328 -55.0294 10.3269 4.57 " " 4063 89682 237916 -60.5667 10.7256 4.57 " " 4200 93070 251090 24.0797 19.8910 4.58 " 13 Vul" 7592 188260 87883 27.6122 5.8888 4.58 "136 Tau" 2034 39357 77675 72.1489 17.6990 4.58 " 31Psi1Dra" 6636 162003 8890 -25.8583 9.1341 4.58 " Kap Pyx" 3628 78541 177002 -27.7097 20.0443 4.58 " 62 Sgr" 7650 189763 188844 -40.2747 3.6183 4.58 " " 1106 22663 216405 -46.5478 9.8613 4.58 " " 3912 85622 221553 3.0956 5.4473 4.59 " 30Psi2Ori" 1811 35715 112775 -0.0203 22.4805 4.59 " 55Zet1Aqr" 8558 213051 146107 -4.8383 5.5898 4.59 " 42 Ori" 1892 37018 132320 22.6450 18.9125 4.59 "113 Her" 7133 175492 86567 27.0969 20.8688 4.59 " 31 Vul" 7995 198809 89228 54.0644 9.8684 4.59 " 30Phi UMa" 3894 85235 27408 65.7147 19.3445 4.59 " 58Pi Dra" 7371 182564 18299 -25.3272 15.8935 4.59 " 2 Sco" 5904 142114 183896 -27.9264 16.2051 4.59 " 13 Sco" 6028 145482 184221 -28.4111 7.7257 4.59 " 1 Pup" 2993 62576 174391 -37.3136 3.7139 4.59 " " 1143 23319 194475 -40.4967 19.1391 4.59 " Del CrA" 7242 177873 229513 -46.0850 0.6888 4.59 " Mu Phe" 180 3919 215194 -46.5056 17.5943 4.59 " 1Sig Ara" 6537 159217 228162 -2.7689 9.4858 4.60 " 31Tau1Hya" 3759 81997 136895 -7.0328 6.4803 4.60 " 11Bet Mon" 2356 45725 133316 16.9644 14.7540 4.60 " 35Omi Boo" 5502 129972 101184 23.7403 23.3439 4.60 " 62Tau Peg" 8880 220061 91186 64.3278 8.6702 4.60 " 4Pi 2UMa" 3403 73108 14616 65.9325 14.9597 4.60 " " 5589 132813 16558 -13.0647 10.0854 4.60 " 40Ups2Hya" 3970 87504 155713 -24.8836 19.6118 4.60 " 52 Sgr" 7440 184707 188337 -37.1378 10.9453 4.60 " Iot Ant" 4273 94890 201927 -38.7336 15.4223 4.60 " " 5724 137058 206616 -59.9208 13.2048 4.60 " " 4975 114529 240645 -60.3175 11.2100 4.60 " " 4352 97534 251316 -5.7075 0.0889 4.61 " 33 Psc" 3 28 128572 35.2508 20.5651 4.61 " 47 Cyg" 7866 196093 70203 38.6817 0.2849 4.61 " 24The And" 63 1280 53777 50.2956 4.3041 4.61 " " 1324 26961 24531 -15.9550 19.3621 4.61 " 46Ups Sgr" 7342 181615 162518 -18.3992 7.9978 4.61 " " 3131 65810 153687 -62.4242 11.1090 4.61 " " 4325 96566 251269 3.1875 1.8926 4.62 "111Xi Psc" 549 11559 110206 4.2036 18.9370 4.62 " 63The1Ser" 7141 175638 124068 -3.6903 18.0081 4.62 " 57Zet Ser" 6710 164259 142025 -7.2336 8.7279 4.62 " " 3459 74395 136221 -7.3014 5.5322 4.62 " 36Ups Ori" 1855 36512 132222 -8.1189 17.6307 4.62 " 57Mu Oph" 6567 159975 141772 42.4517 15.8779 4.62 " 1Chi Her" 5914 142373 45772 -10.0644 15.5696 4.62 " 37 Lib" 5777 138716 140609 -26.8036 7.6472 4.62 " " 2949 61556 174199 -37.4133 9.2625 4.62 " " 3684 79940 200163 -54.2642 11.5794 4.62 " " 4460 100673 239189 -59.1467 12.9109 4.62 " Lam Cru" 4897 112078 240368 7.3361 11.0836 4.63 " 63Chi Leo" 4310 96097 118648 -8.3717 16.4634 4.63 " 3Ups Oph" 6129 148367 141187 20.1383 6.0653 4.63 " 62Chi2Ori" 2135 41117 77911 21.3403 2.9869 4.63 " 48Eps Ari" 887 18519 75673 21.3403 2.9869 4.63 " 48Eps Ari" 888 18520 75673 23.0956 11.2534 4.63 " 72 Leo" 4362 97778 81736 26.0683 15.8266 4.63 " 10Del CrB" 5889 141714 84019 39.6117 3.1882 4.63 " 28Ome Per" 947 19656 56224 51.5453 22.6229 4.63 " 9 Lac" 8613 214454 34628 59.1811 0.9444 4.63 " 28Ups2Cas" 265 5395 21855 71.3322 3.8393 4.63 " Gam Cam" 1148 23401 5006 -49.6131 7.8844 4.63 " " 3089 64740 219106 -57.7753 16.0589 4.63 " Iot1Nor" 5961 143474 243279 4.3686 18.0044 4.64 " 66 Oph" 6712 164284 123005 8.7339 18.1218 4.64 " 71 Oph" 6770 165760 123140 21.5900 5.0516 4.64 "102Iot Tau" 1620 32301 76920 27.7536 20.0184 4.64 " 15 Vul" 7653 189849 88071 49.2114 7.4452 4.64 " 21 Lyn" 2818 58142 41764 -25.7514 15.8496 4.64 " 1 Sco" 5885 141637 183854 -27.8811 7.2764 4.64 " " 2766 56618 173360 -28.3694 7.5897 4.64 " " 2922 60863 174058 -39.9875 12.6646 4.64 " " 4817 110073 203681 -42.3125 18.5584 4.64 " The CrA" 6951 170845 229111 -44.6611 15.6865 4.64 " " 5825 139664 226064 -62.2783 18.5229 4.64 " Nu Pav" 6916 169978 254273 10.1508 4.9149 4.65 " 7Pi 1Ori" 1570 31295 94201 13.1778 6.9108 4.65 " 38 Gem" 2564 50635 96265 14.8444 4.5641 4.65 " 86Rho Tau" 1444 28910 94007 24.5836 1.2291 4.65 " 85Phi Psc" 360 7318 74571 37.2917 17.2945 4.65 " 69 Her" 6436 156729 65921 50.0522 23.0697 4.65 " 3 And" 8780 218031 52649 64.7233 13.8572 4.65 " 10 Dra" 5226 121130 16199 -10.7831 16.8306 4.65 " 20 Oph" 6243 151769 160118 -24.6125 3.8952 4.65 " 33Tau8Eri" 1213 24587 168925 -27.0425 18.3009 4.65 " " 6842 167818 186612 -30.9622 7.5118 4.65 " " 2881 59890 198064 -49.2297 16.0536 4.65 " Eta Nor" 5962 143546 226466 -51.4328 13.7776 4.65 " " 5172 119834 241157 -56.4889 12.7730 4.65 " " 4848 110956 240235 -63.0900 5.9017 4.65 " " 2102 40409 249390 0.3386 19.4420 4.66 " 32Nu Aql" 7387 182835 124628 1.3775 22.4213 4.66 " 52Pi Aqr" 8539 212571 127520 6.6142 12.0146 4.66 " 8Pi Vir" 4589 104321 119164 9.8956 6.6830 4.66 " 15 Mon" 2456 47839 114258 -7.9956 12.6541 4.66 " 26Chi Vir" 4813 110014 138892 21.0347 1.1909 4.66 " 84Chi Psc" 351 7087 74544 21.4686 8.7214 4.66 " 43Gam Cnc" 3449 74198 80378 25.1414 23.9626 4.66 " 84Psi Peg" 9064 224427 91611 27.7072 2.7242 4.66 " 35 Ari" 801 16908 75532 54.6817 13.6790 4.66 " 83 UMa" 5154 119228 28843 59.3883 18.8534 4.66 " 47Omi Dra" 7125 175306 31218 -24.0164 3.9988 4.66 " 36Tau9Eri" 1240 25267 169017 -26.3525 7.2376 4.66 " 27 CMa" 2745 56014 173264 -36.7342 7.3051 4.66 " " 2787 57150 197824 -48.8131 12.7098 4.66 " " 4831 110458 223614 -57.6389 10.4568 4.66 " " 4110 90772 238077 -59.1831 10.6459 4.66 " " 4177 92397 238295 16.7508 18.0009 4.67 " 93 Her" 6713 164349 103285 49.5089 3.4895 4.67 " 34 Per" 1044 21428 38872 51.1897 21.7016 4.67 " 80Pi 1Cyg" 8301 206672 33665 63.5136 9.1820 4.67 " 14Tau UMa" 3624 78362 14796 -10.6864 1.8264 4.67 " 53Chi Cet" 531 11171 148036 -14.9353 6.1026 4.67 " 18The Lep" 2155 41695 151110 -32.2578 21.0215 4.67 " Gam Mic" 8039 199951 212636 -34.4119 15.6628 4.67 " 3Psi1Lup" 5820 139521 206843 4.6492 9.6409 4.68 " " 3834 83425 117821 -1.3925 8.0204 4.68 " 28 Mon" 3141 65953 135380 -8.9342 18.3943 4.68 " Zet Sct" 6884 169156 142267 14.6742 20.5885 4.68 " 4Zet Del" 7871 196180 106274 15.4042 5.0761 4.68 " 11 Ori" 1638 32549 94290 69.6611 19.5393 4.68 " 61Sig Dra" 7462 185144 18396 -19.4661 21.6180 4.68 " 39Eps Cap" 8260 205637 164520 -20.1364 6.9271 4.68 " 19Pi CMa" 2590 51199 172579 -78.6958 16.3391 4.68 " Del1Aps" 6020 145366 257380 -2.1553 22.0553 4.69 " 31Omi Aqr" 8402 209409 145837 -6.2558 13.5328 4.69 " 74 Vir" 5095 117675 139390 -7.8542 21.6292 4.69 " 23Xi Aqr" 8264 205767 145537 10.1317 21.1724 4.69 " 5Gam Equ" 8097 201601 126593 14.7136 4.4434 4.69 " 73Pi Tau" 1396 28100 93935 15.9181 4.6546 4.69 " 92Sig2Tau" 1479 29488 94054 30.1533 19.6563 4.69 " 12Phi Cyg" 7478 185734 68637 -18.8303 22.7265 4.69 " 66 Aqr" 8649 215167 165252 -22.3439 9.4551 4.69 " " 3749 81799 177469 -22.4575 23.1652 4.69 " 89 Aqr" 8817 218640 191687 -28.8339 9.3867 4.69 " Lam Pyx" 3733 81169 177374 -29.2969 2.0748 4.69 " Nu For" 612 12767 167532 -29.5800 18.0837 4.69 " Gam1Sgr" 6742 164975 186237 -52.7236 8.9387 4.69 " " 3574 76805 236417 -56.7861 22.0560 4.69 " Eps Ind" 8387 209100 247287 -60.9811 12.7605 4.69 " Iot Cru" 4842 110829 252016 -67.6472 1.9156 4.69 " Eta2Hyi" 570 11977 248460 8.0442 10.0036 4.70 " 29Pi Leo" 3950 86663 118044 8.9075 2.9952 4.70 " 91Lam Cet" 896 18604 110889 -9.8022 11.6114 4.70 " 21The Crt" 4468 100889 138296 39.6628 2.9794 4.70 " 22Pi Per" 879 18411 56047 49.0161 13.5742 4.70 " 24 CVn" 5112 118232 44668 -14.5658 18.4866 4.70 " Gam Sct" 6930 170296 161520 -25.3647 7.6383 4.70 " " 2944 61429 174175 -26.2994 19.9307 4.70 " 58Ome Sgr" 7597 188376 188722 -34.7447 11.6702 4.70 " Omi Hya" 4494 101431 202695 8.4614 19.9041 4.71 " 59Xi Aql" 7595 188310 125210 -1.0922 5.4956 4.71 " 31 Ori" 1834 36167 132176 31.9761 10.6453 4.71 " 37 LMi" 4166 92125 62173 40.0992 5.3190 4.71 " 15Lam Aur" 1729 34411 40233 40.4836 4.2481 4.71 " 52 Per" 1306 26673 39409 43.1900 10.8996 4.71 " 45Ome UMa" 4248 94334 43512 50.2786 2.4271 4.71 " 65 And" 699 14872 23319 59.2319 1.5655 4.71 " 39Chi Cas" 442 9408 22397 84.3461 22.9069 4.71 " " 8748 217382 3816 -20.9144 23.5546 4.71 "101 Aqr" 8939 221565 191988 -21.2394 5.3408 4.71 " " 1762 34968 170327 -32.1725 21.2990 4.71 " Eps Mic" 8135 202627 212874 -42.6150 23.5846 4.71 " Iot Phe" 8949 221760 231675 -47.0778 7.8056 4.71 " " 3046 63744 219018 -48.4636 13.1046 4.71 " " 4940 113703 223900 -63.6867 13.9608 4.71 " " 5241 121474 252531 -70.5389 9.0940 4.71 " " 3642 78764 256583 -9.0525 18.7046 4.72 " Del Sct" 7020 172748 142515 -12.9269 8.1879 4.72 " 19 Pup" 3211 68290 153942 -25.9656 9.3582 4.72 " The Pyx" 3718 80874 177322 -45.1733 16.1082 4.72 " Del Nor" 5980 144197 226500 -47.0511 15.0853 4.72 " Pi Lup" 5605 133242 225426 -57.4728 5.0918 4.72 " Zet Dor" 1674 33262 233822 -62.9375 3.4896 4.72 " Kap Ret" 1083 22001 248819 -63.1656 12.0720 4.72 " The2Cru" 4603 104841 251717 -66.8147 11.8040 4.72 " Mu Mus" 4530 102584 251597 -0.3825 5.3627 4.73 " 22 Ori" 1765 35039 132028 -0.4453 17.2769 4.73 " 41 Oph" 6415 156266 141586 -5.0753 3.5103 4.73 " 17 Eri" 1070 21790 130528 -8.9833 20.8776 4.73 " 6Mu Aqr" 7990 198743 144895 28.7428 21.7357 4.73 " 78Mu 1Cyg" 8309 206826 89940 40.5725 13.2924 4.73 " 20 CVn" 5017 115604 44549 54.5222 0.5296 4.73 " 14Lam Cas" 123 2772 21489 62.0819 21.6320 4.73 " 9 Cep" 8279 206165 19541 -18.3508 11.7461 4.73 " 27Zet Crt" 4514 102070 156869 -18.8664 21.7110 4.73 " 43Kap Cap" 8288 206453 164593 -31.9278 13.8868 4.73 " 4 Cen" 5221 120955 204944 -37.6206 3.8100 4.73 " " 1190 24072 194551 -42.3622 16.8999 4.73 " Zet1Sco" 6262 152236 227375 -2.4847 11.0305 4.74 " 61 Leo" 4299 95578 137947 14.2506 4.8756 4.74 " 4Omi1Ori" 1556 30959 94176 17.7928 12.3453 4.74 " 11 Com" 4697 107383 100053 33.7961 10.4319 4.74 " 30 LMi" 4090 90277 62038 34.4442 13.8632 4.74 " " 5219 120933 63793 34.4531 19.5295 4.74 " 8 Cyg" 7426 184171 68447 37.3056 5.8507 4.74 " 31Ups Aur" 2011 38944 58496 47.5211 20.9971 4.74 " 59 Cyg" 8047 200120 50335 68.1300 1.4322 4.74 " 36Psi Cas" 399 8491 11751 83.1539 22.7914 4.74 " " 8702 216446 3794 -18.3114 13.3068 4.74 " 61 Vir" 5019 115617 157844 -19.6789 15.6991 4.74 " 43Kap Lib" 5838 139997 159442 -45.4925 23.6308 4.74 " " 8959 222095 231707 -71.9931 10.5056 4.74 " " 4138 91375 256722 19.2936 1.8922 4.75 " 5Gam2Ari" 546 11502 92681 40.4256 10.5539 4.75 " " 4132 91312 43379 51.3672 14.2694 4.75 " 21Iot Boo" 5350 125161 29071 68.1117 23.3104 4.75 " 34Omi Cep" 8872 219916 20554 -15.2447 2.5348 4.75 " 76Sig Cet" 740 15798 148445 -21.0042 2.8506 4.75 " 2Tau2Eri" 850 17824 168094 -34.7106 15.7114 4.75 " 4Psi2Lup" 5839 140008 206889 -42.0953 19.0519 4.75 " Zet CrA" 7188 176638 229461 -42.8917 2.6633 4.75 " " 789 16754 215996 -42.9872 8.1905 4.75 " " 3226 68601 219569 -53.4392 14.1652 4.75 " " 5297 123569 241496 -75.0669 2.8413 4.75 " Nu Hyi" 872 18293 255929 20.9778 15.8544 4.76 " 38Rho Ser" 5899 141992 84037 25.4683 23.1186 4.76 " 56 Peg" 8796 218356 91019 27.2642 1.3244 4.76 " 90Ups Psc" 383 7964 74637 32.1919 5.5455 4.76 " 25Chi Aur" 1843 36371 58164 36.4908 16.1495 4.76 " 16Tau CrB" 6018 145328 65108 46.0367 16.0466 4.76 " 6Ups Her" 5982 144206 45865 47.6544 15.0632 4.76 " 44 Boo" 5618 133640 45357 56.7058 3.0923 4.76 " " 918 18970 23791 67.6297 9.0424 4.76 " 8Rho UMa" 3576 76827 14742 -10.6094 0.7365 4.76 " 17Phi1Cet" 194 4188 147423 -12.7592 20.3444 4.76 " 8Nu Cap" 7773 193432 163468 -15.9736 13.4576 4.76 " 69 Vir" 5068 116976 157946 -23.8161 17.9966 4.76 " 4 Sgr" 6700 163955 186061 -48.2717 7.2439 4.76 " " 2762 56456 218567 -60.5817 20.5930 4.76 " Phi1Pav" 7848 195627 254823 -61.3025 8.1502 4.76 " " 3220 68456 250131 8.0372 6.7888 4.77 " 17 Mon" 2503 49161 114410 -1.1442 0.8835 4.77 " 20 Cet" 248 5112 129009 -3.0036 11.5053 4.77 " 87 Leo" 4432 99998 138238 21.3903 19.2703 4.77 " 1 Vul" 7306 180554 87010 57.0456 18.5429 4.77 " 45 Dra" 6978 171635 31039 -11.3731 16.0728 4.77 " Xi Sco" 5978 144070 159665 -23.5917 9.6881 4.77 " " 3858 83953 177840 -27.7539 14.3849 4.77 " 51 Hya" 5381 125932 182483 -37.9408 20.0593 4.77 " " 7652 189831 211767 -45.1872 14.3451 4.77 " " 5364 125442 224843 -47.3169 8.6870 4.77 " " 3452 74272 220284 -48.8036 0.5236 4.77 " Lam1Phe" 125 2834 215131 -49.4156 17.6732 4.77 " Lam Ara" 6569 160032 228257 1.8550 5.8740 4.78 " 56 Ori" 2037 39400 113220 -6.0019 5.5841 4.78 " " 1887 36960 132301 16.1939 4.5094 4.78 " " 1427 28527 93975 17.4094 12.9821 4.78 " 36 Com" 4920 112769 100357 25.5919 20.2544 4.78 " " 7739 192685 88410 36.7031 4.8772 4.78 " 2 Aur" 1551 30834 57475 38.1856 11.3189 4.78 " 55 UMa" 4380 98353 62491 44.3872 20.8874 4.78 " 57 Cyg" 8001 199081 50180 -17.8136 20.4810 4.78 " 11Rho Cap" 7822 194943 163614 -28.6139 16.3050 4.78 " " 6070 146624 184301 -35.8997 8.2249 4.78 " " 3237 68980 198957 -67.7706 17.3665 4.78 " Zet Aps" 6417 156277 253882 -77.0658 0.0266 4.78 " The Oct" 9084 224889 258207 4.6956 22.4643 4.79 " 35 Peg" 8551 212943 127540 -2.9547 3.9049 4.79 " 32 Eri" 1212 24555 130806 -9.5389 12.9059 4.79 " 40Psi Vir" 4902 112142 139033 19.4708 10.3289 4.79 " 40 Leo" 4054 89449 99065 23.5961 1.9655 4.79 " 9Lam Ari" 569 11973 75051 29.3075 22.6959 4.79 " 43Omi Peg" 8641 214994 90717 42.4889 6.6555 4.79 " 50Psi2Aur" 2427 47174 41239 72.3411 22.1634 4.79 " 24 Cep" 8468 210807 10265 -11.9750 9.3296 4.79 " 26 Hya" 3706 80499 155096 -12.5375 4.9988 4.79 " 64 Eri" 1611 32045 150064 -23.3156 7.2769 4.79 " " 2764 56577 173349 -25.1150 16.5034 4.79 " 22 Sco" 6141 148605 184429 -27.7694 9.7367 4.79 " The Ant" 3871 84367 177908 -30.3347 7.9611 4.79 " " 3113 65456 198636 -41.3467 22.2602 4.79 " Mu 1Gru" 8486 211088 231055 -64.8714 18.7575 4.79 " " 7012 172555 254358 5.4697 13.2934 4.80 " 60Sig Vir" 5015 115521 119855 -7.2131 5.6481 4.80 " 49 Ori" 1937 37507 132411 -8.8197 3.2639 4.80 " 13Zet Eri" 984 20320 130387 -9.5558 9.3414 4.80 " 27 Hya" 3709 80586 136768 17.4439 4.4016 4.80 " 64Del2Tau" 1380 27819 93907 20.2067 0.2434 4.80 " 89Chi Peg" 45 1013 91792 27.6247 13.1196 4.80 " 41 Com" 4954 113996 82659 50.5125 0.7011 4.80 " 19Xi Cas" 179 3901 21637 51.3886 23.9736 4.80 " " 9066 224490 35938 51.5622 12.4004 4.80 " 5 CVn" 4716 107950 28366 63.3450 3.7673 4.80 " " 1129 23089 12891 67.1347 9.1731 4.80 " 13Sig2UMa" 3616 78154 14788 68.7581 17.6159 4.80 " 28Ome Dra" 6596 160922 17576 69.3197 6.3141 4.80 " " 2209 42818 13788 -67.8944 13.2541 4.80 " Eta Mus" 4993 114911 252224 -2.2281 14.4700 4.81 "105Phi Vir" 5409 126868 139951 -7.1739 5.0240 4.81 " 65Psi Eri" 1617 32249 131700 22.6292 12.5809 4.81 " 23 Com" 4789 109485 82390 25.0081 15.0351 4.81 " 41Ome Boo" 5600 133124 83624 25.8461 12.3751 4.81 " 12 Com" 4707 107700 82273 26.5278 14.7237 4.81 " 34 Boo" 5490 129712 83488 28.3306 22.3554 4.81 " 32 Peg" 8522 212097 90440 35.5094 14.2999 4.81 " " 5361 125351 64053 38.0331 20.2964 4.81 " 34 Cyg" 7763 193237 69773 39.6214 9.5844 4.81 " " 3809 82741 61578 -20.5417 18.4225 4.81 " 21 Sgr" 6896 169420 186794 -23.9628 17.5236 4.81 " 51 Oph" 6519 158643 185470 -33.0072 0.4655 4.81 " Eta Scl" 105 2429 192545 -40.0906 17.8364 4.81 " Iot2Sco" 6631 161912 228466 -54.9686 6.1716 4.81 " Del Pic" 2212 42933 234359 -61.9822 22.5500 4.81 " Nu Tuc" 8582 213442 255247 -62.4047 9.3491 4.81 " " 3728 81101 250544 1.0292 16.3679 4.82 " 50Sig Ser" 6093 147449 121540 -4.2225 17.0177 4.82 " 30 Oph" 6318 153687 141483 15.5972 5.1617 4.82 " 15 Ori" 1676 33276 94359 21.2011 20.6420 4.82 " 29 Vul" 7891 196724 88944 25.9539 5.9666 4.82 "139 Tau" 2084 40111 77775 33.1000 17.2888 4.82 " 68 Her" 6431 156633 65913 34.2228 3.3122 4.82 " " 991 20468 56340 35.6575 15.8539 4.82 " 11Kap CrB" 5901 142091 64948 36.2950 13.6243 4.82 " 25 CVn" 5127 118623 63648 37.8592 2.1415 4.82 " 58 And" 620 13041 55289 45.9833 16.8206 4.82 " 52 Her" 6254 152107 46305 61.1242 0.8845 4.82 " " 244 5015 11444 65.5636 18.4331 4.82 " 42 Dra" 6945 170693 17888 71.2972 18.9066 4.82 " 52Ups Dra" 7180 176524 9283 77.5475 14.1475 4.82 " 4 UMi" 5321 124547 7958 -10.6781 22.5108 4.82 " 57Sig Aqr" 8573 213320 165134 -13.3844 10.6259 4.82 " " 4163 92055 156110 -14.1458 6.6546 4.82 " " 2450 47667 151751 -17.8164 23.6961 4.82 "104 Aqr" 8982 222574 165836 -40.8097 21.3460 4.82 " The1Mic" 8151 203006 230644 -44.5006 15.2137 4.82 " " 5651 134687 225539 -47.0511 15.0853 4.82 " Pi Lup" 5606 133243 225426 -48.4903 8.3754 4.82 " " 3294 70930 219848 -51.4508 12.4421 4.82 " " 4732 108257 239948 -63.5675 8.0056 4.82 " " 3159 66591 250069 -63.9611 10.7352 4.82 " " 4205 93194 251096 -64.4664 10.7039 4.82 " " 4196 92938 251078 3.3703 3.3227 4.83 " 96Kap1Cet" 996 20630 111120 -5.8461 18.9510 4.83 " Eta Sct" 7149 175751 142838 13.7283 14.6858 4.83 " 30Zet Boo" 5477 129246 101145 19.2958 1.8922 4.83 " 5Gam1Ari" 545 11503 92680 22.8044 16.0383 4.83 " 44Pi Ser" 5972 143894 84155 25.0917 14.1733 4.83 " 12 Boo" 5304 123999 83203 26.6622 18.7679 4.83 " " 7064 173780 86418 44.2317 2.2204 4.83 " 60 And" 643 13520 37867 45.4067 1.4609 4.83 " 48Ome And" 417 8799 37228 46.8158 20.2217 4.83 " 30 Cyg" 7730 192514 49332 54.0219 9.2698 4.83 " 18 UMa" 3662 79439 27191 58.9728 0.9167 4.83 " 26Ups1Cas" 253 5234 21832 64.5892 16.6820 4.83 " 18 Dra" 6223 151101 17188 -10.8594 11.4102 4.83 " 14Eps Crt" 4402 99167 156658 -20.2242 6.8925 4.83 " 15 CMa" 2571 50707 172520 -22.7450 18.9028 4.83 " 32Nu 1Sgr" 7116 174974 187426 -26.1956 19.9826 4.83 " 60 Sgr" 7618 189005 188778 -31.7033 17.8196 4.83 " " 6628 161840 209303 -33.0544 8.3564 4.83 " " 3282 70555 199118 -34.8953 5.2914 4.83 " Omi Col" 1743 34642 195721 -39.6558 7.1475 4.83 " " 2702 54893 197632 -41.6500 10.3721 4.83 " " 4080 89998 221998 -47.3850 1.9528 4.83 " " 574 12055 215715 -67.1853 5.2293 4.83 " The Dor" 1744 34649 249225 3.6175 11.0093 4.84 " 58 Leo" 4291 95345 118610 5.0586 22.0947 4.84 " 22Nu Peg" 8413 209747 127285 6.1439 1.5031 4.84 " 98Mu Psc" 434 9138 109926 9.2636 4.2323 4.84 " 47 Tau" 1311 26722 111674 11.4881 16.5434 4.84 " 29 Her" 6159 149161 102234 42.3308 2.0652 4.84 " 57Gam2And" 604 12534 37735 46.1142 20.8156 4.84 " 55 Cyg" 7977 198478 50099 51.5067 8.1409 4.84 " 27 Lyn" 3173 67006 26687 55.9806 10.5104 4.84 " 36 UMa" 4112 90839 27670 65.6522 3.3332 4.84 " " 985 20336 12704 75.7131 10.5849 4.84 " " 4126 91190 7164 -11.8722 2.6594 4.84 " 83Eps Cet" 781 16620 148528 -19.8550 21.0734 4.84 " 22Eta Cap" 8060 200499 189986 -38.3083 7.6576 4.84 " " 2961 61831 198253 -67.6167 2.7591 4.84 " Zet Hyi" 837 17566 248644 8.2583 11.7547 4.85 " 2Xi Vir" 4515 102124 119029 30.8919 16.3683 4.85 " 19Xi CrB" 6103 147677 65254 46.4989 4.3592 4.85 " 53 Per" 1350 27396 39483 49.0153 23.2958 4.85 " 8 And" 8860 219734 52871 56.7819 16.7549 4.85 " " 6237 151613 30076 59.4197 23.1103 4.85 " 1 Cas" 8797 218376 35147 -22.5269 1.9445 4.85 " 56 Cet" 565 11930 167416 -23.0244 7.4976 4.85 " " 2874 59612 173864 -25.2567 19.2590 4.85 " 42Psi Sgr" 7292 179950 187882 -37.8031 13.2009 4.85 " " 4979 114613 204227 -41.4144 22.7250 4.85 " Rho Gru" 8644 215104 231265 -49.5272 13.0592 4.85 " Xi 1Cen" 4933 113314 223870 -53.5003 22.7605 4.85 " Eta Gru" 8655 215369 247570 -64.3833 10.7809 4.85 " " 4222 93607 251120 3.3772 18.3478 4.86 " 74 Oph" 6866 168656 123377 5.5933 2.5979 4.86 " 78Nu Cet" 754 16161 110635 8.1617 14.6941 4.86 " 31 Boo" 5480 129312 120601 -3.5561 23.9779 4.86 " 27 Psc" 9067 224533 147008 16.3069 14.3292 4.86 " 20 Boo" 5370 125560 100980 16.5339 5.6883 4.86 "126 Tau" 1946 37711 94759 24.5675 5.8169 4.86 "132 Tau" 2002 38751 77592 38.4844 5.2238 4.86 " 11Mu Aur" 1689 33641 57755 -19.7611 19.7727 4.86 " 56 Sgr" 7515 186648 162964 -44.3422 17.9465 4.86 " " 6675 163145 228562 -51.8111 10.1490 4.86 " " 3990 88206 237736 -53.1139 8.7071 4.86 " " 3467 74560 236205 -58.0092 8.5888 4.86 " " 3414 73389 236106 -63.1225 12.4419 4.86 " " 4729 108250 251903 -63.6106 15.2941 4.86 " Eps Cir" 5666 135291 253088 -68.8761 1.2628 4.86 " Kap Tuc" 377 7788 248346 31.5292 11.3030 4.87 " 53Xi UMa" 4374 98230 62484 34.2242 2.2842 4.87 " 8Del Tri" 660 13974 55420 55.1731 17.5378 4.87 " 25Nu 2Dra" 6555 159560 30450 58.6519 23.7843 4.87 " 5Tau Cas" 9008 223165 35763 59.4417 6.7706 4.87 " 12 Lyn" 2470 48250 25939 74.3936 3.1990 4.87 " " 932 19275 4840 -10.2564 4.2399 4.87 " 39 Eri" 1318 26846 149478 -21.6833 17.7238 4.87 " 58 Oph" 6595 160915 185660 -33.8014 5.8852 4.87 " Lam Col" 2056 39764 196276 -34.1228 17.0804 4.87 " " 6334 154090 208377 -35.6419 18.7387 4.87 " " 7029 172910 210509 -37.1075 18.9787 4.87 " Eps CrA" 7152 175813 210781 -52.9386 18.9744 4.87 " Lam Tel" 7134 175510 245834 -66.7836 13.2869 4.87 " " 5002 115211 252240 10.2356 12.6981 4.88 " 30Rho Vir" 4828 110411 100211 18.5100 7.7687 4.88 " 81 Gem" 3003 62721 97221 21.9369 5.4606 4.88 "114 Tau" 1810 35708 77184 37.4883 4.8318 4.88 " " 1533 30504 57447 39.0503 22.6544 4.88 " 10 Lac" 8622 214680 72575 45.5289 1.3723 4.88 " 46Xi And" 390 8207 37155 55.1842 17.5363 4.88 " 24Nu 1Dra" 6554 159541 30447 55.7550 23.9835 4.88 " 8Sig Cas" 9071 224572 35947 -14.2794 15.9698 4.88 " 48 Lib" 5941 142983 159607 -15.9433 8.6954 4.88 " 9 Hya" 3441 74137 154552 -22.5114 3.3061 4.88 " 15 Eri" 994 20610 168452 -25.9325 9.9034 4.88 " " 3919 85859 178158 -41.7161 17.9632 4.88 " " 6682 163376 228578 -61.5300 20.6265 4.88 " Rho Pav" 7859 195961 254835 -2.5500 20.6121 4.89 " 70 Aql" 7873 196321 144624 21.0444 3.2484 4.89 " 58Zet Ari" 972 20150 75810 37.3544 19.7379 4.89 " 15 Cyg" 7517 186675 68778 50.9683 0.8139 4.89 " 25Nu Cas" 223 4636 21729 65.1347 16.9338 4.89 " 19 Dra" 6315 153597 17281 -12.2906 2.4325 4.89 " 72Rho Cet" 708 15130 148385 -15.4681 0.1878 4.89 " 6 Cet" 33 693 147133 -27.4125 10.6205 4.89 " " 4162 92036 179041 -27.6819 8.9254 4.89 " Del Pyx" 3556 76483 176697 -29.5611 8.6618 4.89 " Zet Pyx" 3433 73898 176253 -38.6025 16.0567 4.89 " " 5967 143699 207276 -45.1831 7.2204 4.89 " " 2746 56022 218546 -46.2269 20.8247 4.89 " Zet Ind" 7952 198048 230391 -53.7156 10.5227 4.89 " " 4134 91324 238146 8.8158 22.9205 4.90 " 50Rho Peg" 8717 216735 127839 -2.9444 6.3332 4.90 " " 2275 44131 133118 -8.2753 18.7254 4.90 " Eps Sct" 7032 173009 142546 21.2450 12.8883 4.90 " 35 Com" 4894 112033 82550 30.7850 13.0046 4.90 " 37 Com" 4924 112989 63288 34.5842 7.6528 4.90 " 71Omi Gem" 2930 61110 60247 38.5342 21.5796 4.90 " 72 Cyg" 8255 205512 71480 39.3206 7.1943 4.90 " 63 Aur" 2696 54716 59866 45.0942 6.9603 4.90 " 16 Lyn" 2585 50973 41463 48.9283 16.6458 4.90 " 42 Her" 6200 150450 46210 -14.5989 1.4270 4.90 " 46 Cet" 412 8705 147803 -28.2325 2.5641 4.90 " Ome For" 749 16046 167882 -33.7797 20.8328 4.90 " Alp Mic" 7965 198232 212472 -48.0992 19.5869 4.90 " Iot Tel" 7424 184127 229751 -65.2061 11.8642 4.90 " " 4549 103079 251617 1.4747 5.7079 4.91 " 51 Ori" 1963 37984 113056 -0.0439 4.5313 4.91 " 45 Eri" 1437 28749 131270 -2.8856 20.4942 4.91 " 69 Aql" 7831 195135 144495 12.6511 5.8258 4.91 "134 Tau" 2010 38899 94888 12.7408 17.0896 4.91 " 60 Her" 6355 154494 102584 21.2642 13.8286 4.91 " 6 Boo" 5201 120539 83015 25.2706 20.7479 4.91 " 30 Vul" 7939 197752 89084 40.1939 2.7041 4.91 " 12 Per" 788 16739 55793 49.2881 6.4150 4.91 " 46Psi1Aur" 2289 44537 41076 58.5489 23.5006 4.91 " " 8926 221253 35478 63.6256 21.9442 4.91 " " 8383 208816 19753 -16.3019 14.1807 4.91 " " 5301 123934 158401 -16.8767 10.6431 4.91 " Phi3Hya" 4171 92214 156122 -20.0519 5.0238 4.91 " " 1621 32309 169981 -31.5192 15.2437 4.91 " 1 Lup" 5660 135153 206445 -33.9994 12.8448 4.91 " " 4874 111597 203863 -40.5006 11.7753 4.91 " " 4523 102365 223020 -70.0844 16.4745 4.91 " Zet TrA" 6098 147584 253554 -78.2219 11.9937 4.91 " Eps Cha" 4583 104174 256894 -81.0078 14.3038 4.91 " Eta Aps" 5303 123998 258693 -4.2372 7.1705 4.92 " 20 Mon" 2701 54810 134282 -8.5189 15.0162 4.92 " 19Del Lib" 5586 132742 140270 34.3742 20.7863 4.92 " " 7956 198134 70499 40.1528 13.2286 4.92 " " 4997 115004 44519 50.7083 18.8871 4.92 " " 7137 175535 31241 52.4389 19.9272 4.92 " 24Psi Cyg" 7619 189037 32114 -19.8019 16.0907 4.92 " 8Bet2Sco" 5985 144218 159683 -32.5483 22.1691 4.92 " 15Tau PsA" 8447 210302 213602 -35.1919 14.7498 4.92 " " 5489 129685 205899 -58.4594 14.3769 4.92 " " 5371 125628 241673 -59.1033 13.2374 4.92 " " 4989 114837 240666 -59.2294 8.9496 4.92 " " 3582 77002 236436 -3.6797 7.9956 4.93 " 27 Mon" 3122 65695 135345 24.8692 15.1217 4.93 " 45 Boo" 5634 134083 83671 29.3617 23.7332 4.93 " 78 Peg" 8997 222842 91457 32.1456 19.0003 4.93 " 15Lam Lyr" 7192 176670 67682 34.5667 4.3402 4.93 " 54 Per" 1343 27348 57171 35.1831 2.9844 4.93 " 24 Per" 882 18449 56052 36.8397 20.1571 4.93 " 28 Cyg" 7708 191610 69518 56.3664 13.0122 4.93 " 78 UMa" 4931 113139 28601 -16.4844 6.0831 4.93 " 17 Lep" 2148 41511 151093 -37.0633 19.1070 4.93 " Gam CrA" 7226 177474 210928 -41.9936 4.1807 4.93 " Del Hor" 1302 26612 216682 -45.3081 8.8299 4.93 " " 3520 75710 220540 -48.2203 6.6438 4.93 " " 2462 47973 218093 -49.5839 7.0649 4.93 " " 2672 53811 218427 -59.6858 12.6991 4.93 " " 4823 110335 240161 -73.2217 10.5172 4.93 " " 4142 91496 256723 1.2556 23.4489 4.94 " 8Kap Psc" 8911 220825 128186 3.6589 13.5689 4.94 " 78 Vir" 5105 118022 120004 -2.2992 14.8503 4.94 " 11 Lib" 5535 130952 140176 16.4183 14.6788 4.94 " 29Pi 1Boo" 5475 129174 101138 20.5786 4.2877 4.94 " 50Ome2Tau" 1329 27045 76532 22.0964 5.3213 4.94 "109 Tau" 1739 34559 77097 27.5406 12.8616 4.94 " 31 Com" 4883 111812 82537 27.7942 8.0586 4.94 " Chi Gem" 3149 66216 79896 30.3031 2.2062 4.94 " 6 Tri" 642 13480 55347 37.8903 4.9876 4.94 " 4Ome Aur" 1592 31647 57548 38.4867 19.9310 4.94 " 22 Cyg" 7613 188892 69101 40.5769 1.6763 4.94 " 53Tau And" 477 10205 37418 43.3125 22.8672 4.94 " 15 Lac" 8699 216397 52436 47.0247 0.7245 4.94 " 20Pi Cas" 184 4058 36602 70.0219 12.5789 4.94 " 6 Dra" 4795 109551 7600 -10.0642 16.2000 4.94 " 15Psi Sco" 6031 145570 141022 -10.3222 15.4033 4.94 " 31Eps Lib" 5723 137052 159234 -10.5094 0.0750 4.94 " 3 Cet" 9103 225212 147066 -15.2636 7.6731 4.94 " " 2959 61772 153227 -19.0094 9.9145 4.94 " " 3923 85951 155588 -23.9156 9.7040 4.94 " " 3862 84117 177866 -25.4431 14.7667 4.94 " 54 Hya" 5497 129926 182855 -27.2936 11.0889 4.94 " Chi1Hya" 4314 96202 179514 -38.5700 9.2602 4.94 " " 3682 79917 200159 -44.0453 16.5681 4.94 " Mu Nor" 6155 149038 226900 -52.5339 7.5944 4.94 " " 2934 61248 235336 -52.8808 20.1231 4.94 " Xi Tel" 7673 190421 246443 -54.6306 16.2246 4.94 " Kap Nor" 6024 145397 243454 -62.0900 11.6816 4.94 " " 4499 101570 251535 1.8464 5.4124 4.95 " 25Psi1Ori" 1789 35439 112734 2.8561 11.4656 4.95 " 84Tau Leo" 4418 99648 118875 -1.1289 5.6807 4.95 " " 1952 37756 132445 -7.0275 19.6149 4.95 " 39Kap Aql" 7446 184915 143600 15.1975 20.2379 4.95 " 67Rho Aql" 7724 192425 105878 16.1306 6.2009 4.95 " 69 Ori" 2198 42545 95365 21.9614 18.3383 4.95 "106 Her" 6868 168720 85941 22.6100 19.8511 4.95 " 12 Vul" 7565 187811 87813 23.9453 12.2724 4.95 " 7 Com" 4667 106714 82211 27.2683 12.4400 4.95 " 14 Com" 4733 108283 82310 27.3508 4.3392 4.95 " 52Phi Tau" 1348 27382 76558 42.6136 1.6964 4.95 " " 483 10307 37434 43.3294 3.3574 4.95 " 32 Per" 1002 20677 38750 46.4203 23.7673 4.95 " 20Psi And" 9003 223047 53355 48.9517 20.5010 4.95 " 45Ome1Cyg" 7844 195556 49712 49.7336 22.9406 4.95 " " 8726 216946 52516 54.7497 15.9632 4.95 " " 5960 143466 29727 69.2011 12.5019 4.95 " 4 Dra" 4765 108907 15816 75.7553 16.2918 4.95 " 21Eta UMi" 6116 148048 8470 -10.5981 6.0307 4.95 " 3 Mon" 2128 40967 151037 -23.1181 13.1509 4.95 " 45Psi Hya" 4958 114149 181410 -48.7211 6.9378 4.95 " " 2608 51799 218324 3.3125 12.3392 4.96 " 16 Vir" 4695 107328 119341 21.5956 18.0251 4.96 " 95 Her" 6730 164669 85648 58.8461 19.9321 4.96 " " 7633 189276 32122 77.3494 15.5236 4.96 " 15The UMi" 5826 139669 8274 82.4114 7.5179 4.96 " " 2742 55966 1179 -17.7422 16.6929 4.96 " " 6196 150416 160046 -18.9531 19.2939 4.96 " 43 Sgr" 7304 180540 162413 -19.0167 7.3704 4.96 " " 2812 57821 152776 -23.8181 15.6714 4.96 " 42 Lib" 5824 139663 183686 -45.5314 1.2531 4.96 " Nu Phe" 370 7570 215428 -45.9150 18.5293 4.96 " Del1Tel" 6934 170465 229092 5.0922 9.0996 4.97 " 18Ome Hya" 3613 77996 117420 11.2997 9.5324 4.97 " 5Xi Leo" 3782 82395 98627 16.3597 4.4740 4.97 " 75 Tau" 1407 28292 93950 26.7658 7.8916 4.97 " 83Phi Gem" 3067 64145 79774 29.6214 19.4021 4.97 " 2 Cyg" 7372 182568 87159 31.4053 18.1984 4.97 "104 Her" 6815 167006 66737 33.9650 3.7063 4.97 " 40 Per" 1123 22951 56646 36.8064 20.2422 4.97 " 29 Cyg" 7736 192640 69678 65.5664 10.4022 4.97 " " 4072 89822 15163 -14.5239 7.5633 4.97 " " 2902 60414 153072 -18.1342 13.8312 4.97 " 89 Vir" 5196 120452 158186 -23.2814 13.4952 4.97 " " 5080 117287 181695 -29.4917 14.4696 4.97 " 52 Hya" 5407 126769 182570 -37.1208 5.9250 4.97 " Xi Col" 2087 40176 196316 -61.0789 4.0217 4.97 " Iot Ret" 1266 25728 248927 -70.2258 11.8324 4.97 " " 4538 102839 251604 4.2019 18.9374 4.98 " 63The2Ser" 7142 175639 124070 -9.6108 23.3160 4.98 " 95Psi3Aqr" 8865 219832 146635 13.7789 13.4738 4.98 " 70 Vir" 5072 117176 100582 14.0919 17.0522 4.98 " " 6337 154143 102553 25.9397 2.1570 4.98 " 14 Ari" 623 13174 75171 31.3253 23.5659 4.98 " 72 Peg" 8943 221673 73341 37.1825 13.5799 4.98 " " 5110 118216 63623 44.3861 1.6558 4.98 " 52Chi And" 469 10072 37406 49.0628 3.4675 4.98 " " 1034 21278 38849 58.2317 1.3347 4.98 " 34Phi Cas" 382 7927 22191 58.8006 18.3985 4.98 " 39 Dra" 6923 170073 30949 61.5153 6.2986 4.98 " 1 Lyn" 2215 42973 13787 62.2828 23.4140 4.98 " 4 Cas" 8904 220652 20614 -12.4753 8.6671 4.98 " 6 Hya" 3431 73840 154515 -23.7011 18.1954 4.98 " 11 Sgr" 6801 166464 186437 -24.5589 7.3112 4.98 " 29 CMa" 2781 57060 173444 6.1014 11.0124 4.99 " 59 Leo" 4294 95382 118615 9.2761 7.4275 4.99 " 2Eps CMi" 2828 58367 115425 -3.6903 1.7121 4.99 " " 500 10550 129465 -4.2392 7.0486 4.99 " 19 Mon" 2648 52918 134106 17.3833 5.4071 4.99 "111 Tau" 1780 35296 94526 29.8511 16.0241 4.99 " 14Iot CrB" 5971 143807 84152 33.7278 19.7738 4.99 " 17 Cyg" 7534 187013 68827 37.3856 5.4109 4.99 " 21Sig Aur" 1773 35186 57981 43.4828 11.3804 4.99 " 56 UMa" 4392 98839 43719 45.4403 12.7522 4.99 " " 4846 110914 44317 55.7069 5.9141 4.99 " 30Xi Aur" 2029 39283 25450 57.7050 19.2320 4.99 " 54 Dra" 7309 180610 31497 58.7103 7.7168 4.99 " 24 Lyn" 2946 61497 26474 68.6853 1.9333 4.99 " 46Ome Cas" 548 11529 12038 -15.7883 8.2222 4.99 " 20 Pup" 3229 68752 153993 -22.6714 18.9186 4.99 " 35Nu 2Sgr" 7120 175190 187445 -32.0564 20.0721 4.99 " " 7659 190056 211782 -34.0439 22.1406 4.99 " Ups PsA" 8433 210066 213577 -34.3672 6.8479 4.99 " " 2549 50235 197277 -37.0633 19.1070 4.99 " Gam CrA" 7227 177475 210928 -41.7444 15.9917 4.99 " " 5943 143009 226425 -44.7250 8.4910 4.99 " " 3359 72127 219996 -50.0683 16.2836 4.99 " Gam1Nor" 6058 146143 226619 -64.0714 2.9799 4.99 " Bet Hor" 909 18866 248701 -66.9017 10.3828 4.99 " " 4089 90264 250940 3.5444 5.3806 5.00 " 23 Ori" 1770 35149 112697 6.8358 9.6202 5.00 " 10 Leo" 3827 83240 117807 16.1589 7.2229 5.00 " 51 Gem" 2717 55383 96638 17.0469 16.1346 5.00 " 7Kap Her" 6008 145001 101951 18.0572 17.3386 5.00 " " 6452 157049 102757 18.6450 5.1242 5.00 "104 Tau" 1656 32923 94332 19.1422 19.8163 5.00 " 8Zet Sge" 7546 187362 105298 19.7733 19.5764 5.00 " 9 Vul" 7437 184606 104990 26.8256 12.4498 5.00 " 16 Com" 4738 108382 82314 33.0614 12.2750 5.00 " " 4668 106760 62928 43.4617 18.1247 5.00 " " 6791 166208 47237 43.9458 21.3076 5.00 " 68 Cyg" 8154 203064 50690 51.5978 5.1113 5.00 " 9 Aur" 1637 32537 25019 56.9453 23.0014 5.00 " " 8752 217476 35039 61.1089 3.9523 5.00 " " 1205 24480 12968 68.7681 16.4664 5.00 " 15 Dra" 6161 149212 17107 69.0761 10.7178 5.00 " " 4181 92523 15269 -14.0436 6.9352 5.00 " 18Mu CMa" 2593 51250 152123 -14.2217 23.6631 5.00 "102Ome1Aqr" 8968 222345 165818 -25.8653 16.0557 5.00 " " 5969 143787 184068 -31.9383 3.7041 5.00 " Del For" 1134 23227 194467 -36.1647 11.3869 5.00 " " 4396 98993 202391 -44.8681 9.1846 5.00 " " 3654 79186 220928 -47.9278 15.3690 5.00 " Nu 1Lup" 5698 136351 225703 -55.1431 12.3166 5.00 " " 4682 107079 239838 -64.2983 23.9598 5.00 " Eta Tuc" 9062 224392 255609 2.4094 14.2044 5.01 " " 5313 124224 120339 -5.4158 19.3425 5.01 " 26 Aql" 7333 181391 143286 -8.7031 13.6936 5.01 " 82 Vir" 5150 119149 139490 12.2053 22.3586 5.01 " 31 Peg" 8520 212076 107854 27.4919 13.9428 5.01 " 9 Boo" 5247 121710 83084 27.9161 7.4969 5.01 " 65 Gem" 2861 59148 79434 28.0575 20.9093 5.01 " 32 Vul" 8008 199169 89272 40.4136 21.6158 5.01 " 74 Cyg" 8266 205835 51101 46.9347 19.0240 5.01 " 16 Lyr" 7215 177196 48011 -12.1231 4.6482 5.01 " " 1483 29573 149789 -13.7183 6.2625 5.01 " " 2244 43445 151283 -21.1158 9.5535 5.01 " " 3808 82734 177642 -29.7203 0.0389 5.01 " Zet Scl" 9091 224990 0 -30.8983 21.7956 5.01 " 10The PsA" 8326 207155 213292 -34.7053 7.8710 5.01 " " 3079 64379 198540 -49.9442 8.5788 5.01 " " 3407 73155 220138 -51.2553 9.5691 5.01 " " 3819 83058 237107 -54.5600 13.6958 5.01 " " 5141 118991 241076 -65.5894 6.1875 5.01 " Eta2Dor" 2245 43455 249469 -73.6458 2.3812 5.01 " Kap Hyi" 715 15248 255880 2.0600 18.7472 5.02 " 4 Aql" 7040 173370 123879 18.3769 12.5855 5.02 " 24 Com" 4792 109511 100160 32.6878 5.2568 5.02 " 14 Aur" 1706 33959 57799 39.0186 12.4308 5.02 " 6 CVn" 4728 108225 63000 40.8331 15.5155 5.02 " 52Nu 1Boo" 5763 138481 45580 40.8994 15.5297 5.02 " 53Nu 2Boo" 5774 138629 45590 41.7814 6.8461 5.02 " 58Psi7Aur" 2516 49520 41380 44.5244 6.7181 5.02 " 55Psi4Aur" 2459 47914 41288 50.7811 17.8179 5.02 " 30 Dra" 6656 162579 30591 71.8239 15.2850 5.02 " 11 UMi" 5714 136726 8207 -15.4914 19.9658 5.02 " 61 Sgr" 7614 188899 163141 -23.4472 16.4264 5.02 " 5Rho Oph" 6112 147933 184382 -26.2750 5.0361 5.02 " " 1628 32436 169997 -37.2531 6.1254 5.02 " The Col" 2177 42167 196514 -47.0033 10.5491 5.02 " " 4143 91504 222136 -70.1264 21.2224 5.02 " Omi Pav" 8092 201371 257896 -2.7889 19.5111 5.03 " 36 Aql" 7414 183630 143482 -4.2281 22.6293 5.03 " 63Kap Aqr" 8610 214376 146210 -9.5583 5.9845 5.03 " 2 Mon" 2108 40536 132715 10.8644 17.3103 5.03 " " 6433 156681 102725 13.0475 4.4806 5.03 " 79 Tau" 1414 28355 93960 22.6483 2.1094 5.03 " 12Kap Ari" 613 12869 75146 25.0506 7.3913 5.03 " 57 Gem" 2808 57727 79352 28.6425 2.3158 5.03 " 10 Tri" 675 14252 75276 33.5069 10.9290 5.03 " 46 UMa" 4258 94600 62314 33.9581 5.3336 5.03 " 19 Aur" 1740 34578 57906 43.9419 1.1336 5.03 " 41 And" 324 6658 36950 46.0722 0.1720 5.03 " 22 And" 27 571 36123 50.0950 3.3188 5.03 " 31 Per" 989 20418 38714 50.9378 3.2701 5.03 " " 969 20123 23914 52.9881 19.8438 5.03 " 20 Cyg" 7576 188056 32042 63.0722 3.9571 5.03 " " 1204 24479 12969 64.3972 18.2316 5.03 " 36 Dra" 6850 168151 17828 73.1800 21.9875 5.03 " 16 Cep" 8400 209369 10216 -16.2172 4.8366 5.03 " 60 Eri" 1549 30814 149924 -20.1672 15.8889 5.03 " 45Lam Lib" 5902 142096 183895 -24.5086 19.4213 5.03 " 47Chi1Sgr" 7362 182369 188101 -32.1436 17.0313 5.03 " " 6316 153613 208324 -36.5928 7.2804 5.03 " " 2770 56779 197790 -37.8033 14.8809 5.03 " " 5543 131120 206037 -49.5778 5.0828 5.03 " Eta2Pic" 1663 33042 217164 -62.4894 11.7253 5.03 " " 4511 101947 251555 3.4867 23.7732 5.04 " 19 Psc" 9004 223075 128374 12.2722 6.2741 5.04 " 74 Ori" 2241 43386 95476 24.1161 20.6422 5.04 " 28 Vul" 7894 196740 88945 24.6564 16.8626 5.04 " 51 Her" 6270 152326 84651 30.1742 21.8307 5.04 " 14 Peg" 8343 207650 90040 30.5619 18.1171 5.04 " 99 Her" 6775 165908 66648 41.8817 16.4774 5.04 " 30 Her" 6146 148783 46108 44.0594 20.8347 5.04 " 56 Cyg" 7984 198639 50121 54.4875 2.0384 5.04 " 4 Per" 590 12303 22859 55.5394 18.7105 5.04 " 46 Dra" 7049 173524 31119 59.4144 22.1919 5.04 " 22Lam Cep" 8469 210839 34149 67.8069 23.7986 5.04 " " 9013 223274 20853 76.9628 17.8242 5.04 " 35 Dra" 6701 163989 8939 -14.5639 7.7658 5.04 " 4 Pup" 3015 62952 153372 -16.1986 13.2010 5.04 " 53 Vir" 4981 114642 157788 -26.2844 6.0543 5.04 " " 2140 41312 171180 -31.0872 11.5484 5.04 " " 4449 100393 202554 -53.5219 1.7684 5.04 " " 520 10939 232520 -76.5192 12.0796 5.04 " Kap Cha" 4605 104902 256899 5.3814 23.3391 5.05 " 7 Psc" 8878 220009 128126 -6.5503 6.1977 5.05 " " 2205 42690 132944 -8.1050 9.8751 5.05 " 8Gam Sex" 3909 85558 137199 10.0861 20.6522 5.05 " 7Kap Del" 7896 196755 126059 17.6747 7.6579 5.05 " 74 Gem" 2938 61338 97120 28.1181 7.4890 5.05 " 64 Gem" 2857 59037 79427 40.4303 10.9911 5.05 " 47 UMa" 4277 95128 43557 49.1217 18.3591 5.05 " " 6891 169305 47417 49.4650 7.3089 5.05 " " 2751 56169 41681 50.1047 20.0227 5.05 " 26 Cyg" 7660 190147 49098 53.0797 4.6652 5.05 " 3 Cam" 1467 29317 24743 68.1350 17.5328 5.05 " 27 Dra" 6566 159966 17526 79.2311 5.3760 5.05 " " 1686 33564 5496 -22.6619 8.6522 5.05 " " 3430 73752 176226 -37.1444 4.7010 5.05 " Bet Cae" 1503 29992 195239 -45.2664 8.1112 5.05 " " 3187 67582 219422 -51.6083 20.8584 5.05 " Iot Ind" 7968 198308 246762 -54.4236 19.3809 5.05 " Eta Tel" 7329 181296 246055 -62.1547 6.1176 5.05 " " 2196 42540 249451 -74.8878 13.4186 5.05 " Iot1Mus" 5042 116244 257041 1.7653 15.3219 5.06 " 5 Ser" 5694 136202 120946 -1.1961 3.2129 5.06 " 94 Cet" 962 19994 130355 -4.7622 6.4660 5.06 " 10 Mon" 2344 45546 133290 -7.7267 23.2808 5.06 " 92Chi Aqr" 8850 219576 146612 10.3314 23.7229 5.06 " 77 Peg" 8991 222764 108789 17.8931 0.4675 5.06 " 47 Psc" 103 2411 91910 22.2189 18.1005 5.06 " 98 Her" 6765 165625 85725 39.6700 18.7390 5.06 " 4Eps1Lyr" 7051 173582 67310 45.5250 19.6806 5.06 " " 7495 186155 48718 59.1556 4.0742 5.06 " " 1242 25291 24384 -14.3322 9.6718 5.06 " 38Kap Hya" 3849 83754 155388 -16.1239 19.7086 5.06 " 55 Sgr" 7489 186005 162915 -24.7731 5.3628 5.06 " " 1771 35162 170351 -34.1117 6.9736 5.06 " " 2619 52092 197427 -45.1733 7.7159 5.06 " " 2998 62644 218923 -51.1653 13.4903 5.06 " " 5071 117150 240883 -68.8433 6.1456 5.06 " Nu Dor" 2221 43107 249461 -80.1089 14.3730 5.06 " Eps Aps" 5336 124771 257142 9.7158 9.5327 5.07 " 6 Leo" 3779 82381 117751 -8.9983 6.7936 5.07 " " 2508 49331 133679 11.1433 3.8045 5.07 " 30 Tau" 1174 23793 93611 15.7997 4.6526 5.07 " 91Sig1Tau" 1478 29479 94051 16.9406 0.8163 5.07 " 64 Psc" 225 4676 92099 23.6144 20.1148 5.07 " 17 Vul" 7688 190993 88212 34.4758 5.4608 5.07 " 24Phi Aur" 1805 35620 58051 36.6358 15.6563 5.07 " 7Zet2CrB" 5834 139892 64834 81.1939 5.0057 5.07 " " 1523 30338 783 87.0200 7.6751 5.07 " " 2609 51802 1168 -11.3731 16.0728 5.07 " Xi Sco" 5977 144069 159665 -26.6014 17.2558 5.07 " 36 Oph" 6402 155886 185198 -26.9433 5.2568 5.07 " " 1723 34310 170238 -44.9539 4.5139 5.07 " Del Cae" 1443 28873 216850 -45.7572 18.5339 5.07 " Del2Tel" 6938 170523 229095 -57.0858 14.2492 5.07 " " 5316 124367 241563 -65.6133 8.3053 5.07 " " 3280 70514 250186 -74.9233 0.8098 5.07 " Lam Hyi" 236 4815 255710 6.9536 10.5800 5.08 " 48 Leo" 4146 91612 118376 -0.8914 5.4080 5.08 " 27 Ori" 1787 35410 132070 -5.4161 5.5897 5.08 " 43The2Ori" 1897 37041 132321 12.3139 23.3846 5.08 " 66 Peg" 8893 220363 108580 19.1203 23.8748 5.08 " 81Phi Peg" 9036 223768 108878 23.1883 10.7236 5.08 " 41 LMi" 4192 92825 81490 25.9250 21.8844 5.08 " 16 Peg" 8356 208057 90075 39.2122 11.0140 5.08 " 49 UMa" 4288 95310 62354 40.7772 17.1593 5.08 " " 6388 155410 46524 41.8192 22.7349 5.08 " 13 Lac" 8656 215373 52317 52.9244 16.6038 5.08 " 17 Dra" 6185 150117 30013 54.1686 0.6023 5.08 " " 144 3240 21551 58.9725 5.1024 5.08 " 11 Cam" 1622 32343 25001 73.6431 22.5961 5.08 " 31 Cep" 8615 214470 10425 -13.4589 23.3185 5.08 " 94 Aqr" 8866 219834 165625 -13.5517 21.8883 5.08 " 51Mu Cap" 8351 207958 164713 -20.6564 18.9557 5.08 " 36Xi 1Sgr" 7145 175687 187498 -23.7453 10.5669 5.08 " 44 Hya" 4145 91550 178979 -27.2611 14.2128 5.08 " 50 Hya" 5312 124206 182349 -36.3225 8.2329 5.08 " " 3240 69081 198969 -38.5111 7.7903 5.08 " " 3035 63465 198442 -42.6742 11.4764 5.08 " " 4423 99803 222813 -44.5575 17.1784 5.08 " " 6371 154948 227688 -45.7328 9.8325 5.08 " " 3898 85355 221523 -47.3700 10.1031 5.08 " " 3976 87783 221773 -59.5647 10.6056 5.08 " " 4164 92063 238242 -0.6369 10.5049 5.09 " 30Bet Sex" 4119 90994 137608 -9.0825 21.7501 5.09 " 46 Cap" 8311 206834 145637 11.0714 19.1163 5.09 " 18 Aql" 7248 178125 104488 20.7419 3.3792 5.09 " 63Tau2Ari" 1015 20893 75899 24.1367 3.8198 5.09 " 28 Tau" 1180 23862 76229 46.0211 9.8098 5.09 " " 3881 84737 43046 55.4519 3.5001 5.09 " " 1046 21447 24064 -18.7800 11.3894 5.09 " 13Lam Crt" 4395 98991 156646 -39.7553 13.4355 5.09 " " 5058 116713 204465 -44.1097 7.9551 5.09 " " 3116 65551 219197 -53.0886 8.4601 5.09 " " 3350 71935 236002 -60.9575 15.2824 5.09 " Del Cir" 5664 135240 253084 -63.0311 0.5455 5.09 " Bet3Tuc" 136 3003 248208 -68.6031 15.9249 5.09 " Kap TrA" 5891 141767 253342 -74.7531 6.1707 5.09 " Alp Men" 2261 43834 256274 1.0853 19.3090 5.10 " 23 Aql" 7319 180972 124487 2.2436 21.6593 5.10 " 25 Aqr" 8277 206067 126965 5.8200 14.4031 5.10 " " 5392 126248 120434 -1.2203 6.5605 5.10 " " 2395 46487 133404 -3.0275 0.0304 5.10 " 29 Psc" 9087 224926 147041 14.8989 12.2667 5.10 " 6 Com" 4663 106661 100012 17.8175 1.9559 5.10 " 8Iot Ari" 563 11909 92721 18.8397 4.8562 5.10 " 97 Tau" 1547 30780 94164 19.9911 20.0860 5.10 " 16Eta Sge" 7679 190608 105659 20.0453 18.1480 5.10 "101 Her" 6794 166230 85770 20.4436 7.3658 5.10 " 56 Gem" 2795 57423 79328 42.7578 23.0434 5.10 " 2 And" 8766 217782 52623 54.5850 10.8929 5.10 " 44 UMa" 4246 94247 27815 63.2167 3.7026 5.10 " " 1105 22649 12874 80.6986 4.1674 5.10 " " 1230 25007 650 -15.6031 18.9120 5.10 " " 7119 175156 161964 -18.1386 20.6675 5.10 " 15Ups Cap" 7900 196777 163779 -31.5061 13.2814 5.10 " " 5006 115310 204312 -38.6569 18.3718 5.10 " " 6862 168592 210048 -41.6275 22.2741 5.10 " Mu 2Gru" 8488 211202 231063 -44.6397 7.2257 5.10 " " 2748 56096 218549 -46.5292 8.8426 5.10 " " 3527 75821 220561 -51.0183 7.4394 5.10 " " 2862 59219 235192 -80.4397 22.3337 5.10 " Eps Oct" 8481 210967 258928 -3.0906 15.8543 5.11 " 36 Ser" 5895 141851 140801 -8.2314 4.5699 5.11 " 47 Eri" 1451 29064 131315 10.4156 19.8504 5.11 " 54Omi Aql" 7560 187691 105338 27.9653 19.5126 5.11 " 6Bet2Cyg" 7418 183914 87302 31.9342 2.9548 5.11 " 21 Per" 873 18296 56031 33.0914 3.8257 5.11 " 42 Per" 1177 23848 56727 39.0100 15.5875 5.11 " 6Mu CrB" 5800 139153 64790 43.2739 21.6698 5.11 " 75 Cyg" 8284 206330 51167 62.2800 22.0858 5.11 " 19 Cep" 8428 209975 19849 -23.3106 7.9849 5.11 " 12 Pup" 3123 65699 174932 -26.6028 17.2558 5.11 " 36 Oph" 6401 155885 185199 -26.7497 11.8125 5.11 " " 4532 102620 180208 -34.7322 3.8941 5.11 " " 1214 24626 194608 -34.7494 23.0583 5.11 " Pi PsA" 8767 217792 214275 -36.7428 7.3106 5.11 " " 2790 57219 197837 -42.4969 1.9061 5.11 " Phi Phe" 558 11753 215697 -43.9886 20.8081 5.11 " Iot Mic" 7943 197937 230379 -44.5161 20.5653 5.11 " Nu Mic" 7846 195569 230276 -53.3792 9.4384 5.11 " " 3753 81848 236972 -59.7378 3.0602 5.11 " Mu Hor" 934 19319 232981 -62.7808 14.9456 5.11 " The Cir" 5551 131492 252965 -64.9550 11.3894 5.11 " " 4401 99104 251383 -66.9011 5.8316 5.11 " Eps Dor" 2064 39844 249368 -80.9414 9.5648 5.11 " Zet Cha" 3860 83979 258538 -82.0189 23.8684 5.11 " Gam1Oct" 9032 223647 258989 8.4467 14.3896 5.12 " " 5386 126129 120426 8.6772 23.1587 5.12 " 57 Peg" 8815 218634 128001 9.4608 4.3978 5.12 " 66 Tau" 1381 27820 111791 -4.4561 5.1454 5.12 " 68 Eri" 1673 33256 131813 -4.6550 5.1127 5.12 " 66 Eri" 1657 32964 131777 -7.7806 0.2410 5.12 " " 46 1014 128655 13.1181 8.0846 5.12 " 8 Cnc" 3163 66664 97542 16.5775 12.7774 5.12 " 27 Com" 4851 111067 100252 17.8183 16.0206 5.12 " 5 Her" 5966 143666 101879 24.4994 17.3484 5.12 " 70 Her" 6457 157198 85021 25.6228 17.8137 5.12 " 87 Her" 6644 162211 85437 27.0750 14.7498 5.12 " 36Eps Boo" 5505 129988 0 28.8700 18.3503 5.12 "107 Her" 6877 168914 85957 38.7225 19.8428 5.12 " 19 Cyg" 7566 187849 68947 39.5072 18.4038 5.12 " 2Mu Lyr" 6903 169702 66943 56.8592 19.1946 5.12 " 53 Dra" 7295 180006 31468 65.7164 10.6991 5.12 " 38 UMa" 4178 92424 15261 68.8883 6.8951 5.12 " 43 Cam" 2511 49340 13986 -10.5603 19.5854 5.12 " 37 Aql" 7430 184492 162792 -20.0578 0.3629 5.12 " " 85 1760 166210 -21.6294 1.4934 5.12 " 48 Cet" 433 9132 167086 -33.9664 15.9482 5.12 " Xi 1Lup" 5925 142629 207144 -44.1625 17.4036 5.12 " " 6460 157243 227911 -44.2658 9.2731 5.12 " " 3692 80108 221014 -49.0050 9.5624 5.12 " " 3817 82984 221288 -60.5489 20.6674 5.12 " Phi2Pav" 7875 196378 254846 7.5644 8.4319 5.13 " " 3306 71115 116752 -4.1111 7.6213 5.13 " 25 Mon" 2927 61064 134899 -5.3897 5.5879 5.13 " 41The1Ori" 1895 37022 132314 -7.9231 1.2400 5.13 " 37 Cet" 366 7439 129193 10.9517 7.0606 5.13 " " 2649 52960 96429 36.7606 7.3674 5.13 " 65 Aur" 2793 57264 60010 44.4886 0.6129 5.13 " " 152 3346 36509 61.4233 9.2391 5.13 " 16 UMa" 3648 79028 14819 67.3467 15.2440 5.13 " " 5691 136064 16660 76.5606 19.1527 5.13 " 59 Dra" 7312 180777 9341 -21.5983 22.3599 5.13 " 47 Aqr" 8516 212010 191083 -29.4164 16.1839 5.13 " " 6017 145250 184197 -38.3236 18.7297 5.13 " Lam CrA" 7021 172777 210501 -41.0219 12.5960 5.13 " " 4794 109536 223542 -46.9919 8.2267 5.13 " " 3244 69144 219629 -52.7458 23.9822 5.13 " Pi Phe" 9069 224554 248087 -59.3761 20.0291 5.13 " " 7625 189124 246389 -59.4422 11.5295 5.13 " Omi1Cen" 4441 100261 239145 -61.9472 11.1428 5.13 " " 4338 96919 251286 -67.1097 16.7778 5.13 " " 6204 150549 253688 1.7669 7.8617 5.14 " 13Zet CMi" 3059 63975 116043 -2.2656 14.3257 5.14 "102Ups Vir" 5366 125454 139866 11.3364 3.5068 5.14 " 4 Tau" 1061 21686 93463 16.1244 20.7774 5.14 " 12Gam1Del" 7947 197963 106475 19.6906 6.0576 5.14 " 64 Ori" 2130 41040 95166 22.0456 9.1560 5.14 " 77Xi Cnc" 3627 78515 80666 27.2178 8.3344 5.14 " 18Chi Cnc" 3262 69897 80104 33.4156 7.7917 5.14 " 80Pi Gem" 3013 62898 60340 39.6131 18.7397 5.14 " 5Eps2Lyr" 7053 173607 67315 41.0556 9.9614 5.14 " 19 LMi" 3928 86146 43115 45.0144 22.1006 5.14 " " 8424 209945 51650 57.5236 19.8882 5.14 " 23 Cyg" 7608 188665 32085 66.8733 9.1399 5.14 " 11Sig1UMa" 3609 77800 14769 67.5719 6.8492 5.14 " 42 Cam" 2490 48879 13973 77.6164 12.2033 5.14 " " 4646 106112 7522 -10.9772 18.5840 5.14 " " 6970 171391 161632 -13.5656 12.3488 5.14 " " 4699 107418 157226 -16.8158 6.2949 5.14 " " 2260 43827 151322 -18.4028 18.5240 5.14 " " 6944 170680 161564 -33.8111 2.4671 5.14 " Phi For" 724 15427 193723 -44.7136 2.0284 5.14 " Chi Phe" 602 12524 215739 -46.6147 6.8318 5.14 " " 2548 50223 218235 -47.3722 16.2542 5.14 " The Nor" 6045 145842 226600 -48.9322 7.1799 5.14 " " 2719 55526 218514 -51.4025 7.0143 5.14 " " 2652 53047 234854 -58.9125 5.4387 5.14 " Lam Dor" 1836 36189 233981 -60.2006 18.9768 5.14 " Ome Pav" 7127 175329 254423 2.2936 19.2285 5.15 " 21 Aql" 7287 179761 124408 8.5825 16.7639 5.15 " 43 Her" 6228 151217 121843 -1.5031 13.9117 5.15 " 90 Vir" 5232 121299 139613 23.5086 20.2584 5.15 " 22 Vul" 7741 192713 88416 36.1472 2.5351 5.15 " 14 Tri" 736 15656 55635 36.3178 19.4359 5.15 " 4 Cyg" 7395 183056 68301 43.7267 8.8658 5.15 " 35 Lyn" 3508 75506 42576 49.6819 13.3040 5.15 " 21 CVn" 5023 115735 44556 50.2222 3.3105 5.15 " 29 Per" 987 20365 23944 -12.3917 6.5231 5.15 " " 2379 46184 151602 -15.9972 14.8448 5.15 " 8Alp1Lib" 5530 130819 158836 -24.9722 13.9753 5.15 " 47 Hya" 5250 121847 182134 -28.0469 15.5770 5.15 " 36 Lib" 5775 138688 183580 -36.2519 13.7823 5.15 " " 5174 119921 204835 -41.0672 15.0886 5.15 " " 5607 133340 225435 -42.4342 12.0610 5.15 " " 4600 104731 223193 -42.6386 11.1213 5.15 " " 4327 96616 222581 -51.8342 17.7357 5.15 " Mu Ara" 6585 160691 244981 -59.5158 11.5302 5.15 " Omi2Cen" 4442 100262 239146 -61.2833 11.6168 5.15 " " 4475 101021 251486 -61.8264 11.6354 5.15 " " 4487 101189 251505 -66.7608 20.6992 5.15 " Ups Pav" 7881 196519 254854 -67.5219 12.3687 5.15 " Zet2Mus" 4703 107566 251866 -77.0239 21.0786 5.15 " Alp Oct" 8021 199532 257879 0.4864 20.6569 5.16 " 1 Aqr" 7897 196758 126062 3.6144 1.2967 5.16 " 89 Psc" 378 7804 109793 6.8111 21.3816 5.16 " 10Bet Equ" 8178 203562 126749 8.7200 23.1956 5.16 " 59 Peg" 8826 218918 128022 9.8356 22.8734 5.16 " 49Sig Peg" 8697 216385 127810 11.9444 19.4162 5.16 " 31 Aql" 7373 182572 104807 19.7986 19.4246 5.16 " 4 Vul" 7385 182762 104818 31.4247 1.1852 5.16 " 82 Psc" 349 7034 54493 40.0081 17.8884 5.16 " 90 Her" 6677 163217 47037 57.0828 10.5860 5.16 " 37 UMa" 4141 91480 27695 72.8183 2.6339 5.16 " " 743 15920 4694 -30.2531 17.9848 5.16 " " 6693 163755 0 -39.7039 18.5393 5.16 " " 6942 170642 210277 -41.4911 15.2678 5.16 " " 5667 135345 225600 -49.8228 8.7279 5.16 " " 3476 74753 220361 -51.1986 12.9512 5.16 " " 4913 112409 240407 -52.3408 19.1055 5.16 " Rho Tel" 7213 177171 245921 -54.7272 21.0873 5.16 " Mu Ind" 8055 200365 246854 -59.0836 8.9900 5.16 " " 3598 77370 236475 -62.9158 8.2544 5.16 " " 3260 69863 250164 -66.3731 10.2252 5.16 " " 4025 88981 250880 1.8422 15.4773 5.17 " 10 Ser" 5746 137898 121020 5.3978 19.6532 5.17 " 44Sig Aql" 7474 185507 124903 -3.7122 2.9437 5.17 " " 875 18331 130199 -3.7456 4.3947 5.17 " 42Xi Eri" 1383 27861 131176 -9.1833 15.5741 5.17 " " 5780 138764 140614 13.7214 20.9269 5.17 " 17 Del" 8011 199253 106665 15.4281 15.4298 5.17 " 9Tau1Ser" 5739 137471 101545 34.9828 20.3109 5.17 " 35 Cyg" 7770 193370 69806 44.3944 0.4705 5.17 " " 104 2421 36390 44.6950 19.6105 5.17 " " 7468 185351 48649 54.9203 1.1379 5.17 " 30Mu Cas" 321 6582 22024 55.8456 2.3726 5.17 " 9 Per" 685 14489 23256 72.2525 9.7159 5.17 " 27 UMa" 3839 83506 6936 72.3203 21.7178 5.17 " " 8324 207130 10131 -13.8981 7.8629 5.17 " 9 Pup" 3064 64096 153500 -32.3064 5.7666 5.17 " Mu Col" 1996 38666 196149 -40.9339 7.7283 5.17 " " 3002 62713 218932 -45.5778 7.9644 5.17 " " 3121 65685 219218 -51.7281 8.4253 5.17 " " 3330 71510 235962 -52.1075 18.8777 5.17 " Kap Tel" 7087 174295 245772 -52.1089 5.8481 5.17 " " 2049 39640 234169 -56.7497 7.0717 5.17 " " 2683 54118 234902 -57.1683 12.9102 5.17 " Mu 2Cru" 4899 112091 240367 -60.5869 7.9938 5.17 " " 3153 66342 250063 -63.9728 11.4287 5.17 " " 4413 99453 251402 -64.0317 15.0801 5.17 " Eta Cir" 5593 132905 253005 -65.3978 11.6582 5.17 " " 4492 101379 251522 -67.9161 6.9974 5.17 " " 2662 53501 249704 2.0106 11.2882 5.18 " 75 Leo" 4371 98118 118764 12.4458 2.7493 5.18 " 38 Ari" 812 17093 93083 16.0456 5.1949 5.18 " " 1684 33554 94377 21.5953 18.0250 5.18 " 95 Her" 6729 164668 85647 24.2153 7.0402 5.18 " 42Ome Gem" 2630 52497 78999 25.8969 5.6623 5.18 "125 Tau" 1928 37438 77360 26.0986 12.4051 5.18 " 13 Com" 4717 107966 82291 26.2625 19.3808 5.18 " 3 Vul" 7358 182255 87136 28.6947 20.2374 5.18 " 21 Vul" 7731 192518 88391 37.5175 7.7776 5.18 " " 2999 62647 60328 37.9686 0.3520 5.18 " 27Rho And" 82 1671 53828 46.2039 10.7258 5.18 " " 4191 92787 43444 64.8719 21.3228 5.18 " 6 Cep" 8171 203467 19313 70.6225 1.7155 5.18 " 42 Cas" 480 10250 4470 -14.0475 21.6925 5.18 " 42 Cap" 8283 206301 164580 -17.1508 11.9336 5.18 " 30Eta Crt" 4567 103632 156988 -17.2283 7.8281 5.18 " 6 Pup" 3044 63697 153454 -18.9089 23.8559 5.18 "108 Aqr" 9031 223640 165918 -28.9817 0.3587 5.18 " Iot Scl" 84 1737 166207 -32.3417 21.1069 5.18 " " 8076 200763 212716 -47.2347 8.9812 5.18 " " 3588 77140 220717 -50.2267 23.7878 5.18 " Sig Phe" 9006 223145 248018 -75.3669 12.1305 5.18 " " 4617 105340 256905 -9.1672 6.6990 5.19 " " 2469 48217 133585 11.4261 4.9130 5.19 " 6 Ori" 1569 31283 94197 37.0428 19.9987 5.19 " 25 Cyg" 7647 189687 69231 40.6722 7.4024 5.19 " 66 Aur" 2805 57669 41738 50.0067 2.4069 5.19 " 64 And" 694 14770 38005 53.6119 4.2786 5.19 " " 1314 26764 24512 62.5994 15.7778 5.19 " " 5886 141653 16848 63.5844 22.6442 5.19 " 30 Cep" 8627 214734 20190 -10.6444 0.8354 5.19 " 19Phi2Cet" 235 4813 147470 -10.7403 13.1316 5.19 " 49 Vir" 4955 114038 157739 -23.7878 0.5063 5.19 " " 118 2696 166318 -53.0550 8.6660 5.19 " " 3442 74146 236157 -76.3411 5.5314 5.19 " Gam Men" 1953 37763 256201 0.2992 6.4538 5.20 " " 2334 45416 113905 -3.5928 0.5875 5.20 " 13 Cet" 142 3196 128839 -5.7050 18.7914 5.20 " " 7066 173819 142620 -5.7222 7.0323 5.20 " " 2639 52666 134076 15.1336 15.8449 5.20 " " 5894 141850 101771 15.3228 8.9541 5.20 " 62Omi1Cnc" 3561 76543 98247 19.1564 6.2475 5.20 " 71 Ori" 2220 43042 95432 27.6000 4.1101 5.20 " 41 Tau" 1268 25823 76455 32.4186 8.9924 5.20 " 64Sig3Cnc" 3575 76813 61177 33.7992 16.3726 5.20 " 20Nu 1CrB" 6107 147749 65257 39.9025 6.6470 5.20 " 52Psi3Aur" 2420 47100 59319 57.1281 9.7755 5.20 " " 3870 84335 27377 59.6375 7.2652 5.20 " 18 Lyn" 2715 55280 26248 59.8883 5.9161 5.20 " 31 Cam" 2027 39220 25447 69.3228 11.6008 5.20 " 2 Dra" 4461 100696 15567 74.9547 20.5251 5.20 " 73 Dra" 7879 196502 9802 -15.0392 23.3776 5.20 " 97 Aqr" 8890 220278 165658 -16.2569 15.1104 5.20 " 21Nu Lib" 5622 133774 159028 -20.7083 22.5782 5.20 " 59Ups Aqr" 8592 213845 191235 -23.8164 2.3757 5.20 " Kap For" 695 14802 167736 -24.2869 17.3002 5.20 " 39Omi Oph" 6424 156349 185238 -31.0706 6.7412 5.20 " 10 CMa" 2492 48917 197149 -36.4844 8.3558 5.20 " " 3283 70556 199119 -40.2642 8.6720 5.20 " " 3439 74067 220252 -42.3372 7.0674 5.20 " " 2666 53704 218424 -60.1142 14.9263 5.20 " " 5546 131342 242111 -61.6336 16.5137 5.20 " " 6125 148291 253582 -63.3997 5.1261 5.20 " " 1695 33684 249198 -70.3869 8.6514 5.20 " The Vol" 3460 74405 256535 0.1961 18.4535 5.21 " 59 Ser" 6918 169985 123497 -2.7392 10.4913 5.21 " 29Del Sex" 4116 90882 137600 -6.7092 6.0704 5.21 " " 2142 41335 132793 17.6453 6.7068 5.21 " 26 Gem" 2466 48097 96015 38.7458 21.1152 5.21 " 61 Cyg" 8085 201091 70919 43.0456 12.0352 5.21 " 67 UMa" 4594 104513 44002 56.7958 22.6439 5.21 " " 8621 214665 34651 58.4172 6.4469 5.21 " 5 Lyn" 2293 44708 25733 -10.1650 13.5495 5.21 " 76 Vir" 5100 117818 139401 -22.2158 12.3427 5.21 " 5Zet Crv" 4696 107348 180700 -32.7806 8.8310 5.21 " " 3512 75605 199678 -41.4869 1.1300 5.21 " Ups Phe" 331 6767 215374 -44.1228 8.1600 5.21 " " 3204 68217 219502 -52.3836 14.7837 5.21 " " 5495 129893 241992 -54.5500 2.6777 5.21 " Zet Hor" 802 16920 232857 0.5531 5.9804 5.22 " 60 Ori" 2103 40446 113321 6.0733 19.1500 5.22 " 19 Aql" 7266 178596 124318 7.6733 12.7603 5.22 " 32 Vir" 4847 110951 119574 9.4242 13.2796 5.22 " 59 Vir" 5011 115383 119847 10.0111 4.2434 5.22 " " 1315 26793 111680 17.4642 2.8215 5.22 " 42Pi Ari" 836 17543 93127 17.5294 13.1665 5.22 " 42Alp Com" 4968 114378 100443 17.5294 13.1665 5.22 " 42Alp Com" 4969 114379 100443 21.4450 7.4623 5.22 " 63 Gem" 2846 58728 79403 24.9381 20.0337 5.22 " 16 Vul" 7657 190004 88098 27.9275 8.9277 5.22 " 58Rho2Cnc" 3540 76219 80511 32.9014 18.9504 5.22 " " 7162 176051 67612 39.2364 23.5215 5.22 " 14 And" 8930 221345 73311 48.7894 6.7943 5.22 " 57Psi6Aur" 2487 48781 41346 76.1150 2.0920 5.22 " 49 Cas" 592 12339 4565 -11.5303 6.4029 5.22 " " 2305 44951 151458 -11.8375 16.2308 5.22 " 17Chi Sco" 6048 145897 159793 -14.9547 20.6546 5.22 " 14Tau Cap" 7889 196662 163771 -19.9431 13.2663 5.22 " 57 Vir" 5001 115202 157823 -32.4997 11.6956 5.22 " " 4503 101666 202717 -36.0631 11.4248 5.22 " " 4409 99322 202428 -41.2306 16.8594 5.22 " " 6245 151804 227313 -50.9869 0.8448 5.22 " Rho Phe" 242 4919 232203 -56.8528 6.4912 5.22 " " 2389 46355 234541 2.1964 15.8382 5.23 " 34Ome Ser" 5888 141680 121215 2.7636 2.0341 5.23 "113Alp Psc" 595 12446 0 4.2936 20.9846 5.23 " 1Eps Equ" 8034 199766 126428 -2.4733 4.6267 5.23 " 51 Eri" 1474 29391 131358 -2.7825 2.9783 5.23 " " 892 18543 130215 -7.5981 16.4621 5.23 " " 6128 148349 141186 11.5444 6.5301 5.23 " " 2375 46089 95788 13.6225 18.9849 5.23 " 11 Aql" 7172 176303 104308 28.7381 1.3521 5.23 " 91 Psc" 389 8126 74647 29.0014 4.1168 5.23 " 42Psi Tau" 1269 25867 76461 29.7517 0.5020 5.23 " 28 And" 114 2628 74041 32.5017 19.1238 5.23 " 17 Lyr" 7261 178449 67835 41.8044 5.3634 5.23 " 20Rho Aur" 1749 34759 40269 61.8750 17.5832 5.23 " 26 Dra" 6573 160269 17546 64.5861 3.4112 5.23 " " 1009 20797 12743 -17.4669 3.6048 5.23 " 20 Eri" 1100 22470 149063 -35.8911 9.9812 5.23 " Eta Ant" 3947 86629 200926 -45.4108 8.6991 5.23 " " 3456 74371 220300 -46.6086 7.7921 5.23 " " 3037 63578 219000 -47.9375 8.1620 5.23 " " 3213 68324 219515 -50.6336 17.4333 5.23 " Kap Ara" 6468 157457 244734 -52.1883 9.0291 5.23 " " 3605 77653 236518 -56.7572 10.7826 5.23 " " 4221 93563 238468 -61.2731 14.3310 5.23 " " 5349 125158 252703 -64.1697 11.2126 5.23 " " 4355 97583 251320 -64.2633 10.7749 5.23 " " 4220 93549 251117 5.2467 16.7962 5.24 " 45 Her" 6234 151525 121865 7.5753 1.2289 5.24 " 86Zet Psc" 361 7344 109739 -6.3531 9.2783 5.24 " 23 Hya" 3681 79910 136725 -8.0689 10.2938 5.24 " 22Eps Sex" 4042 89254 137469 -8.1806 18.0514 5.24 " 69Tau Oph" 6734 164765 142050 10.6681 9.1291 5.24 " 76Kap Cnc" 3623 78316 98378 20.2686 1.7083 5.24 "107 Psc" 493 10476 74883 30.6822 10.7644 5.24 " 42 LMi" 4203 93152 62236 40.3533 15.6304 5.24 " 54Phi Boo" 5823 139641 45643 40.3650 20.2820 5.24 " " 7759 193092 49410 46.5406 21.4908 5.24 " 71 Cyg" 8228 204771 50934 56.8394 22.1969 5.24 " " 8472 210855 34151 65.4386 12.9246 5.24 " 8 Dra" 4916 112429 15941 67.2092 23.0591 5.24 " " 8779 218029 20398 69.4325 14.2011 5.24 " " 5334 124730 16305 -18.2769 23.7367 5.24 "106 Aqr" 8998 222847 165854 -20.1389 10.8915 5.24 " " 4251 94388 156301 -20.3247 18.8278 5.24 " 29 Sgr" 7078 174116 187324 -20.6517 21.2605 5.24 " 28Phi Cap" 8127 202320 190173 -22.0061 0.7457 5.24 " " 197 4247 166528 -23.2628 21.7002 5.24 " 41 Cap" 8285 206356 190559 -23.8747 3.7943 5.24 " 28Tau7Eri" 1181 23878 168836 -26.0875 14.7958 5.24 " 56 Hya" 5516 130259 182882 -37.4250 15.7106 5.24 " " 5837 139980 206887 -37.6967 6.5393 5.24 " " 2399 46568 196917 -39.2972 7.9912 5.24 " " 3140 65925 198668 -40.4061 18.7957 5.24 " Mu CrA" 7050 173540 229285 -46.7328 15.4901 5.24 " " 5742 137709 225825 -62.5064 3.3036 5.24 " Zet2Ret" 1010 20807 248774 -63.3864 4.3648 5.24 " Eta Ret" 1395 28093 249009 1.9144 7.5350 5.25 " 7Del1CMi" 2880 59881 115581 2.2672 2.5250 5.25 " " 737 15694 110589 6.9419 7.4672 5.25 " 5Eta CMi" 2851 58923 115477 -1.1631 3.7418 5.25 " 24 Eri" 1146 23363 130698 -6.1539 16.9099 5.25 " 23 Oph" 6280 152601 141431 15.8267 7.5601 5.25 " 68 Gem" 2886 60107 97016 17.8267 18.3803 5.25 " " 6885 169191 103655 20.4792 16.5093 5.25 " " 6152 148897 84416 32.5508 18.8314 5.25 " 9Nu 2Lyr" 7102 174602 67446 33.5683 17.0268 5.25 " 59 Her" 6332 154029 65736 35.7989 13.0957 5.25 " 14 CVn" 4943 113797 63338 40.2256 22.6913 5.25 " 12 Lac" 8640 214993 72627 40.2397 9.6394 5.25 " 42 Lyn" 3829 83287 42958 43.5775 6.7790 5.25 " 56Psi5Aur" 2483 48682 41330 49.4581 14.1381 5.25 " 13 Boo" 5300 123782 44905 54.5564 15.1046 5.25 " " 5635 134190 29407 69.1094 16.3635 5.25 " " 6126 148293 17062 -12.7078 13.4453 5.25 " 68 Vir" 5064 116870 157938 -13.9272 5.3917 5.25 " 8 Lep" 1783 35337 150396 -17.9383 0.2028 5.25 " " 37 787 147144 -18.2117 20.4553 5.25 " 10Pi Cap" 7814 194636 163592 -32.3269 1.7024 5.25 " Pi Scl" 497 10537 193263 -35.1331 0.1956 5.25 " The Scl" 35 739 192388 -39.2103 7.3093 5.25 " " 2791 57240 197836 -43.2275 9.2401 5.25 " " 3674 79735 220978 -43.3689 13.1898 5.25 " " 4973 114474 223966 -44.1103 18.4051 5.25 " " 6875 168905 228982 -47.4683 17.3878 5.25 " Iot Ara" 6451 157042 227886 -47.6417 11.5988 5.25 " " 4466 100825 222895 -52.8117 13.8680 5.25 " " 5207 120642 241239 -54.5003 17.6349 5.25 " Pi Ara" 6549 159492 244896 -57.2406 10.8753 5.25 " " 4250 94367 238557 -4.8558 5.5943 5.26 " 45 Ori" 1901 37077 132336 -7.6008 3.0712 5.26 " 10Rho3Eri" 925 19107 130269 -8.9703 4.5699 5.26 " " 1452 29065 131316 10.0100 15.6082 5.26 " 16 Ser" 5802 139195 101640 12.4447 9.9704 5.26 " 27Nu Leo" 3937 86360 98876 15.0953 4.3434 5.26 " 58 Tau" 1356 27459 93876 21.3528 11.6797 5.26 " 92 Leo" 4495 101484 81941 25.5794 3.8386 5.26 " " 1188 23985 76256 29.1642 15.2414 5.26 " 48Chi Boo" 5676 135502 83729 64.6214 1.9939 5.26 " " 567 11946 12076 82.5586 10.5179 5.26 " " 4084 90089 1714 -19.6133 22.7925 5.26 " 68 Aqr" 8670 215721 165293 -19.6589 12.0142 5.26 " " 4590 104337 157042 -37.9297 6.7893 5.26 " " 2518 49591 197215 -39.4253 21.2175 5.26 " " 8104 201772 212793 -51.0511 9.3016 5.26 " " 3703 80456 236824 -58.2250 8.5876 5.26 " " 3415 73390 236105 -58.9014 19.9517 5.26 " " 7587 188162 246349 -62.8067 2.8171 5.26 " Nu Hor" 852 17848 248656 6.4542 5.8001 5.27 " 52 Ori" 1999 38710 113150 -6.0886 3.1093 5.27 " " 935 19349 130284 -7.8231 6.3286 5.27 " 7 Mon" 2273 44112 133114 11.8267 19.7094 5.27 " 47Chi Aql" 7497 186203 105168 21.2108 2.2134 5.27 " 17Eta Ari" 646 13555 75204 21.7611 6.8592 5.27 " 36 Gem" 2529 49908 78805 24.4461 18.3196 5.27 "105 Her" 6860 168532 85921 26.2306 18.9960 5.27 " " 7181 176527 86673 28.0222 6.5867 5.27 " 49 Aur" 2398 46553 78524 43.8544 14.1322 5.27 " " 5299 123657 44901 47.0072 1.5017 5.27 " 49 And" 430 9057 37275 49.8200 9.9286 5.27 " 31 UMa" 3917 85795 27430 50.4339 7.7345 5.27 " " 2969 61931 26488 55.6283 11.7821 5.27 " " 4521 102328 28142 56.7414 9.2639 5.27 " 17 UMa" 3660 79354 27185 62.7856 22.0835 5.27 " 20 Cep" 8426 209960 19847 64.8211 20.0246 5.27 " 64 Dra" 7676 190544 18658 65.1406 4.3445 5.27 " " 1327 27022 13098 74.0856 18.7630 5.27 " " 7117 174980 9241 86.1081 22.2196 5.27 " " 8546 212710 3721 -26.2550 8.6312 5.27 " Eta Pyx" 3420 73495 176189 -32.3397 6.6299 5.27 " " 2447 47536 197019 -50.2392 6.4970 5.27 " " 2384 46273 234539 -55.5697 9.2383 5.27 " " 3679 79846 236749 -59.7328 4.7392 5.27 " Kap Dor" 1530 30478 233664 -64.0581 16.4659 5.27 " Iot TrA" 6109 147787 253555 -78.6672 16.3408 5.27 " Del2Aps" 6021 145388 257381 0.3958 2.3657 5.28 " 69 Cet" 689 14652 110495 -1.5497 4.0256 5.28 " 35 Eri" 1244 25340 130878 11.4239 19.9373 5.28 " 61Phi Aql" 7610 188728 105438 11.5953 19.2969 5.28 " 25Ome1Aql" 7315 180868 104691 20.8336 18.0398 5.28 " 96 Her" 6738 164852 85672 21.1469 3.3538 5.28 " 61Tau1Ari" 1005 20756 75886 22.1997 4.4236 5.28 " 67Kap2Tau" 1388 27946 76602 31.4389 4.4351 5.28 " " 1390 27971 57229 33.3589 2.2656 5.28 " 7 Tri" 655 13869 55397 36.1003 19.1217 5.28 " 18Iot Lyr" 7262 178475 67834 50.6953 3.9435 5.28 " 43 Per" 1210 24546 24314 52.3517 3.0145 5.28 " " 890 18537 23763 57.5444 5.3911 5.28 " 16 Cam" 1751 34787 25161 73.0400 1.6419 5.28 " 40 Cas" 456 9774 4453 83.4128 12.8204 5.28 " " 4893 112028 2102 -15.1714 21.2625 5.28 " 29 Cap" 8128 202369 164263 -15.4478 23.7078 5.28 " " 8987 222643 165841 -19.1186 20.3232 5.28 " 7Sig Cap" 7761 193150 163445 -24.0461 8.4177 5.28 " " 3315 71176 175783 -26.5858 7.3142 5.28 " " 2786 57146 173453 -30.7239 2.2151 5.28 " Mu For" 652 13709 193573 -33.0167 18.5661 5.28 " " 6960 171034 210312 -51.2333 10.2230 5.28 " " 4017 88824 237804 -65.8153 10.1452 5.28 " " 3995 88323 250836 -79.1094 2.5279 5.28 " Mu Hyi" 776 16522 255898 -82.2239 0.1672 5.28 " Gam3Oct" 30 636 258215 -87.6058 18.9130 5.28 " Chi Oct" 6721 164461 258799 2.2247 7.9724 5.29 " 14 CMi" 3110 65345 116182 7.7161 4.2259 5.29 " 46 Tau" 1309 26690 111672 -1.8972 8.7875 5.29 " " 3486 74988 136276 10.1006 14.2474 5.29 " 15 Boo" 5330 124679 100934 13.8997 5.7953 5.29 "133 Tau" 1993 38622 94864 17.2856 21.8357 5.29 " 13 Peg" 8344 207652 107425 22.9489 21.7679 5.29 " 12 Peg" 8321 207089 89972 25.9128 12.4819 5.29 " 17 Com" 4752 108662 82330 29.6694 2.4694 5.29 " 12 Tri" 717 15257 75382 38.4453 6.6091 5.29 " " 2405 46687 59280 43.3650 4.7151 5.29 " 59 Per" 1494 29722 39699 48.9842 12.3302 5.29 " 3 CVn" 4690 107274 44127 49.2133 3.3870 5.29 " " 1011 20809 38768 56.0156 16.6334 5.29 " " 6199 150449 30026 63.1197 22.0647 5.29 " 18 Cep" 8416 209772 19828 68.7786 1.1776 5.29 " 31 Cas" 336 6829 11612 -14.4258 6.7809 5.29 " 11 CMa" 2504 49229 151919 -18.6781 23.7669 5.29 "107 Aqr" 9002 223024 165867 -34.6678 5.7042 5.29 " " 1973 38170 196098 -41.1792 21.5350 5.29 " Xi Gru" 8229 204783 230726 -45.6900 11.7622 5.29 " " 4519 102232 223009 -45.8436 17.4476 5.29 " " 6477 157661 227971 -52.6353 5.9139 5.29 " " 2094 40292 234199 -53.2369 17.0524 5.29 " Eps2Ara" 6314 153580 244388 -64.1722 10.4813 5.29 " " 4120 91056 250979 -72.2556 22.4102 5.29 " Nu Ind" 8515 211998 258033 -73.4000 8.3679 5.29 " Eta Vol" 3334 71576 256505 -74.8944 9.2904 5.29 " " 3720 80951 256599 -82.7192 21.8484 5.29 " Lam Oct" 8280 206240 258914 5.6800 21.7043 5.30 " 7 Peg" 8289 206487 127002 -0.9067 22.0798 5.30 " 32 Aqr" 8410 209625 145853 10.7683 7.7712 5.30 " 11 CMi" 3008 62832 97224 10.9475 23.8770 5.30 " 82 Peg" 9039 223781 108879 11.6697 7.4162 5.30 " 1 CMi" 2820 58187 96871 16.1431 6.2570 5.30 " 72 Ori" 2223 43153 95447 20.4183 5.1301 5.30 "106 Tau" 1658 32977 76971 21.5817 8.1294 5.30 " 10Mu 2Cnc" 3176 67228 79959 27.0608 2.6781 5.30 " 33 Ari" 782 16628 75510 34.2639 2.6174 5.30 " " 758 16210 0 47.3800 2.3213 5.30 " 62 And" 670 14212 37948 50.4717 23.6523 5.30 " 18 And" 8967 222304 35642 56.7572 4.8001 5.30 " 4 Cam" 1511 30121 24829 66.7450 11.7079 5.30 " 3 Dra" 4504 101673 15606 -12.3156 5.3331 5.30 " 7Nu Lep" 1757 34863 150345 -21.1936 21.1427 5.30 " 25Chi Cap" 8087 201184 190050 -22.9414 6.9297 5.30 " " 2595 51283 172588 -24.6422 14.9056 5.30 " 12 Lib" 5548 131430 182983 -25.7139 11.9118 5.30 " " 4558 103462 180288 -34.6978 19.9976 5.30 " The2Sgr" 7624 189118 211717 -38.6317 21.0494 5.30 " Zet Mic" 8048 200163 212666 -61.1153 11.4431 5.30 " " 4415 99556 251406 0.9983 4.6205 5.31 " " 1469 29335 111928 5.3431 20.3863 5.31 " " 7794 194013 125747 -1.0625 17.5066 5.31 " " 6516 158614 141702 -3.4431 8.8227 5.31 " 14 Hya" 3500 75333 136308 22.3258 20.9712 5.31 " 33 Vul" 8032 199697 89332 25.7842 7.7352 5.31 " 76 Gem" 2983 62285 79650 37.1167 21.4559 5.31 " 70 Cyg" 8215 204403 71358 39.3369 11.4845 5.31 " 57 UMa" 4422 99787 62572 46.0569 3.5406 5.31 " 36 Per" 1069 21770 38924 48.8350 21.4477 5.31 " " 8216 204411 50867 51.0658 2.2268 5.31 " " 645 13530 23047 -11.2667 0.9337 5.31 " 22Phi3Cet" 267 5437 147519 -12.8161 10.1683 5.31 " " 3991 88215 155780 -14.1489 14.8220 5.31 " 7Mu Lib" 5523 130559 158821 -19.1658 6.1282 5.31 " 19 Lep" 2168 42042 151142 -25.0525 1.7608 5.31 " Eps Scl" 514 10830 167275 -28.6894 5.6291 5.31 " Nu 2Col" 1935 37495 170613 -32.0731 23.6773 5.31 " Mu Scl" 8975 222433 214701 -32.6750 8.0712 5.31 " " 3170 66888 198764 -40.4989 7.2044 5.31 " " 2727 55719 218525 -45.7239 12.2341 5.31 " " 4652 106321 223297 -46.5972 5.7743 5.31 " " 2008 38871 217521 -50.4814 4.7129 5.31 " Lam Pic" 1516 30185 233638 -52.5431 2.6234 5.31 " Eta Hor" 778 16555 232835 -63.0586 12.7140 5.31 " " 4830 110432 252002 -64.4853 13.4205 5.31 " " 5048 116457 252304 -66.9442 20.0312 5.31 " Mu 2Pav" 7612 188887 254707 -71.3144 5.0453 5.31 " Bet Men" 1677 33285 256154 8.2458 11.7986 5.32 " 4 Vir" 4528 102510 119058 -7.6853 3.0451 5.32 " 9Rho2Eri" 917 18953 130254 13.3075 11.2644 5.32 " 73 Leo" 4365 97907 99525 22.4989 23.5578 5.32 " 71 Peg" 8940 221615 91340 24.3953 9.8647 5.32 " 22 Leo" 3900 85376 81054 24.6711 20.2797 5.32 " 24 Vul" 7753 192944 88451 31.7017 16.8828 5.32 " 53 Her" 6279 152598 65627 31.8125 23.3653 5.32 " 64 Peg" 8887 220222 73205 43.2178 9.2301 5.32 " 36 Lyn" 3652 79158 42759 65.7183 6.2142 5.32 " 36 Cam" 2165 41927 13756 66.5972 12.9986 5.32 " 9 Dra" 4928 113092 15960 68.4742 8.2136 5.32 " " 3182 67447 14456 -14.7961 6.7665 5.32 " " 2498 49048 151895 -21.0742 22.2383 5.32 " 41 Aqr" 8480 210960 190986 -24.8064 14.4135 5.32 " " 5390 126218 182517 -33.8558 14.9291 5.32 " " 5558 131625 206099 -35.4128 12.3932 5.32 " " 4712 107832 203420 -36.1011 20.1866 5.32 " " 7703 191408 211885 -56.8361 12.9325 5.32 " " 4908 112244 240385 -57.7972 22.4157 5.32 " " 8531 212330 247441 -57.9836 9.6785 5.32 " " 3863 84121 237221 2.5081 4.8897 5.33 " 5 Ori" 1562 31139 112179 4.9394 15.2532 5.33 " 3 Ser" 5675 135482 120916 5.4356 4.0624 5.33 " 40 Tau" 1253 25558 111585 7.7792 4.9133 5.33 " " 1571 31296 112203 10.5853 17.2077 5.33 " 37 Oph" 6393 155644 102646 12.5511 6.2625 5.33 " 73 Ori" 2229 43247 95457 12.8475 15.6965 5.33 " 20Chi Ser" 5843 140160 101683 13.6756 13.2877 5.33 " " 5013 115478 100497 20.4411 8.5451 5.33 " 33Eta Cnc" 3366 72292 80243 30.9611 7.5857 5.33 " " 2896 60318 60204 34.2017 11.6842 5.33 " 61 UMa" 4496 101501 62655 34.6047 22.2133 5.33 " " 8475 210889 72132 38.3375 2.8952 5.33 " 20 Per" 855 17904 55975 39.4586 0.6853 5.33 " 32 And" 175 3817 54079 46.3872 23.1276 5.33 " 4 And" 8804 218452 52711 59.4486 6.8847 5.33 " 14 Lyn" 2520 49618 26012 -16.2011 7.4111 5.33 " " 2825 58343 152834 -19.9308 13.2364 5.33 " 55 Vir" 4995 114946 157806 -24.9122 7.8171 5.33 " " 3043 63660 174592 -38.0100 10.3915 5.33 " " 4086 90132 201346 -39.4014 9.2826 5.33 " " 3694 80170 200185 -39.8744 19.8641 5.33 " " 7552 187474 229903 -41.8169 16.5282 5.33 " " 6142 148688 226855 -47.5208 8.8974 5.33 " " 3551 76360 220636 -47.9292 8.4846 5.33 " " 3358 72108 219985 -49.5722 16.3744 5.33 " " 6083 147152 226693 -56.0233 18.2854 5.33 " " 6819 167128 245369 -68.4247 19.1646 5.33 " " 7221 177389 254475 2.5958 5.3198 5.34 " 21 Ori" 1746 34658 112624 8.4983 5.1314 5.34 " 14 Ori" 1664 33054 112440 -1.1561 5.5587 5.34 " " 1868 36695 132255 -5.7333 1.7665 5.34 " " 513 10824 129490 -7.9394 19.2113 5.34 " 20 Aql" 7279 179406 143134 10.5453 10.8209 5.34 " 53 Leo" 4227 93702 99305 14.9414 9.2538 5.34 " 82Pi 2Cnc" 3669 79554 98456 21.4733 1.0947 5.34 " 74Psi1Psc" 310 6456 74482 -12.8314 22.2800 5.34 " 42 Aqr" 8496 211361 164974 -18.0272 23.6929 5.34 "103 Aqr" 8980 222547 165834 -24.2822 18.0475 5.34 " 7 Sgr" 6724 164584 186163 -28.9919 10.3021 5.34 " " 4049 89353 178644 -32.9892 18.5180 5.34 " " 6936 170479 210257 -36.6694 18.3814 5.34 " " 6870 168733 210061 -44.2681 4.3213 5.34 " " 1364 27588 216749 -48.6928 12.1374 5.34 " " 4620 105416 223235 -64.2275 5.5499 5.34 " " 1917 37297 249309 -64.5150 10.7713 5.34 " " 4219 93540 251115 -69.5053 21.4791 5.34 " " 8196 203881 255003 -76.6628 14.9647 5.34 " " 5540 131109 257212 0.7153 15.3506 5.35 " 6 Ser" 5710 136514 120955 3.1114 7.2389 5.35 " " 2729 55751 115119 6.0500 3.7612 5.35 " 29 Tau" 1153 23466 111400 -1.0350 2.5359 5.35 " 75 Cet" 739 15779 129959 -1.5919 5.5448 5.35 " " 1861 36591 132234 -7.5181 5.8561 5.35 " 55 Ori" 2031 39291 132591 14.0217 9.7289 5.35 " 16Psi Leo" 3866 84194 98733 18.0944 8.5266 5.35 " 31The Cnc" 3357 72094 97881 18.4333 16.9228 5.35 " 54 Her" 6293 152879 102476 19.8839 7.9278 5.35 " 85 Gem" 3086 64648 79799 21.1422 4.3239 5.35 " 53 Tau" 1339 27295 76548 29.3106 10.2707 5.35 " 23 LMi" 4024 88960 81258 34.6875 2.5963 5.35 " 15 Tri" 750 16058 55687 42.4128 19.5781 5.35 " " 7444 184875 48601 53.4731 4.6661 5.35 " 2 Cam" 1466 29316 24744 57.1692 6.7804 5.35 " 13 Lyn" 2477 48432 25947 58.4058 12.4992 5.35 " 74 UMa" 4760 108844 28405 59.9992 6.2613 5.35 " 40 Cam" 2201 42633 13772 60.7594 22.2005 5.35 " " 8479 210939 19932 75.4339 18.7728 5.35 " 50 Dra" 7124 175286 9250 -28.1431 17.3893 5.35 " 43 Oph" 6459 157236 185350 -30.0017 2.0208 5.35 " Pi For" 594 12438 193455 -31.8089 7.4122 5.35 " " 2834 58535 197964 -39.8100 20.8945 5.35 " " 7987 198716 212522 -40.6494 9.5387 5.35 " " 3807 82694 221262 -43.5003 7.9494 5.35 " " 3114 65460 219189 -46.2433 16.4951 5.35 " " 6131 148379 226813 -56.3625 19.8003 5.35 " Nu Tel" 7510 186543 246271 -60.3119 2.4150 5.35 " Lam Hor" 714 15233 248555 -66.7931 8.8430 5.35 " " 3537 76143 250347 -68.3292 12.0774 5.35 " " 4604 104878 251720 -80.1242 22.8397 5.35 " Xi Oct" 8663 215573 258946 2.8269 4.0694 5.36 " " 1257 25621 111590 3.5381 13.7177 5.36 " 84 Vir" 5159 119425 120082 3.7669 5.5713 5.36 " 38 Ori" 1872 36777 112904 8.1342 11.6410 5.36 " 1Ome Vir" 4483 101153 118965 -7.7725 8.1925 5.36 " " 3212 68312 135611 -9.3903 6.3141 5.36 " " 2267 43993 133091 16.6347 19.9337 5.36 " 10 Sge" 7609 188727 105436 21.4383 0.6654 5.36 " 55 Psc" 167 3690 74182 31.9236 10.0169 5.36 " 20 LMi" 3951 86728 61808 35.9725 20.1061 5.36 " 27 Cyg" 7689 191026 69413 38.4828 6.1098 5.36 " 40 Aur" 2143 41357 58749 49.6725 7.4989 5.36 " 22 Lyn" 2849 58855 41808 52.3536 18.5658 5.36 " " 6983 171779 31051 53.4522 6.3628 5.36 " 45 Aur" 2264 43905 25681 58.9358 6.1664 5.36 " 37 Cam" 2152 41597 25597 -30.6864 7.2558 5.36 " " 2756 56342 197756 -42.7106 18.9380 5.36 " " 7122 175219 229383 -46.3975 1.0470 5.36 " " 299 6245 215343 -49.1011 11.2092 5.36 " " 4350 97495 222639 -62.8758 14.7548 5.36 " " 5482 129422 252869 -80.7869 9.4025 5.36 " Iot Cha" 3795 82554 258530 3.6553 11.9991 5.37 " 7 Vir" 4585 104181 119156 5.7894 22.3410 5.37 " 30 Peg" 8513 211924 127453 8.1903 0.3433 5.37 " 41 Psc" 80 1635 109152 -3.4669 16.1640 5.37 " " 6016 145206 141001 -7.8211 22.3366 5.37 " 46Rho Aqr" 8512 211838 146023 11.7056 4.7671 5.37 " " 1519 30210 94111 17.5167 20.0009 5.37 " 13 Sge" 7645 189577 105522 25.6292 4.3764 5.37 " 59Chi Tau" 1369 27638 76573 32.9339 15.3635 5.37 " 50 Boo" 5718 136849 64656 35.1031 9.5257 5.37 " 8 LMi" 3769 82198 61540 39.6128 18.7397 5.37 " 5Eps2Lyr" 7054 173608 0 43.1386 15.9105 5.37 " 2 Her" 5932 142780 45788 45.8339 8.6836 5.37 " 34 Lyn" 3422 73593 42490 46.1558 21.0197 5.37 " 60 Cyg" 8053 200310 50359 47.8714 3.9328 5.37 " " 1207 24504 39195 48.5856 17.6104 5.37 " 82 Her" 6574 160290 46838 -16.3858 4.1549 5.37 " " 1288 26326 149412 -17.7353 13.3836 5.37 " 63 Vir" 5044 116292 157899 -22.3922 18.7724 5.37 " 28 Sgr" 7046 173460 187255 -34.0147 22.1655 5.37 " " 8444 210271 213599 -34.1731 7.7597 5.37 " " 3018 63077 198404 -39.7103 15.4125 5.37 " Ups Lup" 5719 136933 206597 -43.1861 18.6597 5.37 " " 6991 171967 229172 -49.5192 14.5058 5.37 " " 5413 126983 224972 -53.6278 22.3043 5.37 " " 8501 211415 247400 -53.9650 23.0777 5.37 " Kap Gru" 8774 217902 247711 -61.7753 1.1219 5.37 " Iot Tuc" 332 6793 248324 -71.5150 8.3303 5.37 " Kap1Vol" 3301 71046 256497 -0.2689 4.0435 5.38 " " 1249 25457 130893 -0.9303 3.3062 5.38 " 95 Cet" 992 20559 130408 -4.1939 6.1107 5.38 " " 2154 41692 132841 -6.0711 9.4630 5.38 " " 3750 81809 136872 13.0272 20.5658 5.38 " 3Eta Del" 7858 195943 106248 15.4756 0.7758 5.38 " 57 Psc" 211 4408 92072 17.3608 18.9707 5.38 " " 7165 176155 104296 19.1722 1.4376 5.38 " 93Rho Psc" 413 8723 92436 20.2944 0.5432 5.38 " 52 Psc" 131 2910 74084 21.7736 4.3269 5.38 " 56 Tau" 1341 27309 76551 24.0394 5.5909 5.38 "121 Tau" 1875 36819 77285 25.5375 17.3361 5.38 " " 6455 157087 85016 29.4631 19.5808 5.38 " 9 Cyg" 7441 184759 87385 50.5336 19.0038 5.38 " " 7210 177003 31311 53.3967 19.0820 5.38 " 51 Dra" 7251 178207 31371 75.1606 12.3139 5.38 " " 4687 107193 7540 77.2814 2.0854 5.38 " 47 Cas" 581 12230 4562 -10.2633 4.9973 5.38 " 63 Eri" 1608 32008 150060 -19.3019 15.6485 5.38 " 41 Lib" 5814 139446 159411 -20.5547 8.1217 5.38 " " 3183 67456 175206 -20.6397 4.3442 5.38 " " 1367 27616 169354 -20.7283 18.2536 5.38 " 15 Sgr" 6822 167264 186543 -26.3267 16.1354 5.38 " " 6001 144690 184144 -27.8342 7.3914 5.38 " " 2822 58215 173622 -37.3433 18.9446 5.38 " " 7129 175362 210734 -39.5628 10.5869 5.38 " " 4153 91793 201533 -49.1514 5.0468 5.38 " Eta1Pic" 1649 32743 217140 -52.8097 14.9381 5.38 " " 5556 131562 242120 -58.7872 13.7003 5.38 " " 5140 118978 241080 -59.2158 10.7113 5.38 " " 4198 92964 238379 -69.6903 6.4246 5.38 " Pi 2Dor" 2377 46116 249550 0.6650 16.4761 5.39 " " 6136 148513 121623 1.4078 11.4006 5.39 " 79 Leo" 4400 99055 118831 7.2597 18.3193 5.39 " " 6857 168387 123353 7.8708 4.6517 5.39 " " 1480 29499 111954 9.1225 18.6077 5.39 " " 6985 171802 123690 9.8219 23.1671 5.39 " 58 Peg" 8821 218700 128007 9.9425 6.2852 5.39 " 75 Ori" 2247 43525 113675 -1.9853 18.4947 5.39 " 60 Ser" 6935 170474 142348 14.3900 17.2442 5.39 " 64Alp2Her" 6407 156015 102681 19.2269 14.4409 5.39 " 22 Boo" 5405 126661 101025 30.5794 8.9041 5.39 " 57 Cnc" 3532 75959 61125 32.4678 17.3443 5.39 " 72 Her" 6458 157214 65963 33.7036 16.3748 5.39 " 21Nu 2CrB" 6108 147767 65259 35.9353 17.1339 5.39 " " 6377 155103 65812 44.4044 14.6473 5.39 " 33 Boo" 5468 129002 45153 50.3400 20.7035 5.39 " 51 Cyg" 7929 197511 32809 60.7356 4.3632 5.39 " " 1335 27245 13113 61.9956 20.0924 5.39 " 66 Dra" 7701 191277 18700 64.2475 0.8454 5.39 " " 233 4775 11424 80.5522 20.7926 5.39 " " 8016 199437 3467 -10.7636 19.8463 5.39 " 51 Aql" 7553 187532 163036 -11.2942 7.1113 5.39 " " 2678 53974 152394 -15.1447 6.8161 5.39 " " 2522 49662 151962 -15.8317 18.3358 5.39 " " 6858 168415 161348 -24.5331 15.8983 5.39 " " 5906 142165 183900 -27.9417 2.8317 5.39 " Gam2For" 845 17729 168082 -32.2022 7.3922 5.39 " " 2823 58286 197938 -40.5869 11.5604 5.39 " " 4453 100493 222863 -52.0861 7.3441 5.39 " " 2815 57917 235116 -57.6761 12.3804 5.39 " " 4706 107696 239901 -65.4681 0.7079 5.39 " Rho Tuc" 187 4089 248237 -68.6894 9.2881 5.39 " " 3712 80671 250526 2.1278 23.1447 5.40 " 5 Psc" 8807 218527 127993 -1.8044 15.7682 5.40 " 25 Ser" 5863 140873 140740 -7.0344 6.4804 5.40 " 11Bet Mon" 2357 45726 133317 11.1461 4.7405 5.40 " " 1507 30034 94095 13.7244 4.5104 5.40 " 83 Tau" 1430 28556 93979 20.1750 5.9304 5.40 " " 2063 39816 77730 30.4925 5.6439 5.40 " 26 Aur" 1914 37269 58280 40.7297 1.8881 5.40 " 55 And" 543 11428 37587 42.8183 19.6574 5.40 " 14 Cyg" 7483 185872 48691 50.8233 22.1861 5.40 " " 8463 210715 34143 59.7550 16.2876 5.40 " " 6086 147232 29874 59.9458 13.4742 5.40 " " 5085 117376 16080 61.8311 0.4132 5.40 " 12 Cas" 93 2011 11172 -37.6222 3.8098 5.40 " " 1189 24071 194550 -39.1931 16.4004 5.40 " " 6094 147513 207622 -45.4664 19.2727 5.40 " " 7289 179886 229584 -51.2658 6.7813 5.40 " " 2523 49689 234705 -62.0775 4.6127 5.40 " " 1492 29712 249066 -70.9633 6.8575 5.40 " Iot Vol" 2602 51557 256344 9.0567 9.4743 5.41 " 2Ome Leo" 3754 81858 117717 -2.5003 1.2767 5.41 " 39 Cet" 373 7672 129204 11.6261 8.9321 5.41 " 60 Cnc" 3550 76351 98235 13.0042 14.3212 5.41 " 18 Boo" 5365 125451 100975 13.7283 10.2780 5.41 " 37 Leo" 4035 89056 99034 20.9586 16.9153 5.41 " " 6287 152815 84687 23.2853 18.3691 5.41 " " 6882 169110 85975 26.4808 4.1805 5.41 " 44 Tau" 1287 26322 76485 27.6086 21.4611 5.41 " 35 Vul" 8217 204414 89720 33.3036 16.0174 5.41 " 15Rho CrB" 5968 143761 65024 33.7483 5.3167 5.41 " " 1732 34452 57884 35.8103 9.5943 5.41 " 11 LMi" 3815 82885 61586 45.6014 9.4778 5.41 " " 3743 81688 42876 73.9181 8.0032 5.41 " " 3075 64307 6378 74.8475 0.7961 5.41 " 23 Cas" 208 4382 4226 -15.6728 15.7346 5.41 " 44Eta Lib" 5848 140417 159466 -20.8244 1.9961 5.41 " 57 Cet" 583 12255 167466 -20.8519 21.4027 5.41 " 33 Cap" 8183 203638 190295 -27.7997 0.1929 5.41 " Kap2Scl" 34 720 166103 -46.1339 14.6223 5.41 " " 5450 128266 225062 -50.8003 2.7093 5.41 " Iot Hor" 810 17051 232864 -57.6964 11.7886 5.41 " " 4526 102461 239373 -68.7764 20.8217 5.41 " Sig Pav" 7934 197635 254871 -70.1233 17.3683 5.41 " Iot Aps" 6411 156190 257491 -72.5033 19.8237 5.41 " " 7498 186219 257736 -0.0697 11.2293 5.42 " 69 Leo" 4356 97585 118731 -0.8850 2.3701 5.42 " 70 Cet" 691 14690 129858 -3.6989 19.0485 5.42 " 14 Aql" 7209 176984 142959 -4.0314 19.0827 5.42 " 15 Aql" 7225 177463 142996 -6.9006 14.4783 5.42 "106 Vir" 5410 126927 139957 17.0861 7.5301 5.42 " " 2877 59686 96985 17.9622 5.4528 5.42 "115 Tau" 1808 35671 94554 28.9922 0.9639 5.42 " 68 Psc" 274 5575 74395 33.2475 12.5608 5.42 " " 4783 109317 63070 33.4689 18.6103 5.42 " " 6997 172044 67164 55.2217 0.7548 5.42 " " 196 4222 21677 63.0672 5.5028 5.42 " 17 Cam" 1802 35583 13518 79.4797 8.0797 5.42 " " 3082 64486 6392 -15.4003 1.5997 5.42 " 50 Cet" 459 9856 147901 -17.2967 10.7811 5.42 " " 4214 93397 156221 -19.5775 8.5253 5.42 " " 3367 72310 154359 -23.9781 15.8988 5.42 " " 5907 142184 183901 -27.6194 21.2215 5.42 " " 8110 201901 190129 -27.9878 0.1558 5.42 " Kap1Scl" 24 493 166083 -28.4536 22.0139 5.42 " 12Eta PsA" 8386 209014 190822 -36.2322 6.5637 5.42 " " 2411 46815 196945 -37.5658 16.4088 5.42 " " 6100 147628 207637 -38.5336 7.6877 5.42 " " 2981 62226 198298 -39.1569 22.8506 5.42 " " 8685 216149 214134 -41.4925 1.4113 5.42 " " 408 8651 215492 -59.1931 19.8458 5.42 " " 7531 186957 246293 -85.6631 8.9448 5.42 " Zet Oct" 3678 79837 258515 0.1283 2.0532 5.43 " 60 Cet" 607 12573 129655 0.9628 22.9909 5.43 " 2 Psc" 8742 217264 127881 9.8294 5.1554 5.43 " 16 Ori" 1672 33254 112467 -4.8367 1.0507 5.43 " 25 Cet" 296 6203 129094 -7.6936 23.0861 5.43 " 83 Aqr" 8782 218060 146498 -8.1581 6.5306 5.43 " " 2381 46229 133369 -8.5475 16.2020 5.43 " 16 Sco" 6033 145607 141024 11.3778 20.6303 5.43 " 5Iot Del" 7883 196544 106322 21.9614 2.6469 5.43 " 32Nu Ari" 773 16432 75495 23.0256 19.2954 5.43 " 2 Vul" 7318 180968 87036 29.6542 9.1334 5.43 " 72Tau Cnc" 3621 78235 80650 44.2969 2.7348 5.43 " 14 Per" 800 16901 38289 48.6842 22.9512 5.43 " " 8731 217050 52526 49.3544 0.6528 5.43 " " 164 3574 36550 55.9028 22.8295 5.43 " " 8688 216174 34858 62.2144 23.8139 5.43 " 6 Cas" 9018 223385 20869 66.7903 12.7929 5.43 " 7 Dra" 4863 111335 15902 73.9467 5.2062 5.43 " " 1643 32650 5455 80.8242 4.4508 5.43 " " 1317 26836 691 -17.8600 13.7904 5.43 " 87 Vir" 5181 120052 158165 -17.9853 21.2993 5.43 " 30 Cap" 8137 202671 164286 -18.2008 14.2567 5.43 " " 5332 124683 158448 -23.9622 19.4249 5.43 " 49Chi3Sgr" 7363 182416 188105 -24.8314 15.9763 5.43 " " 5942 142990 183982 -27.7669 22.2386 5.43 " 16Lam PsA" 8478 210934 190985 -31.9239 7.3835 5.43 " " 2819 58155 197925 -35.8047 11.0817 5.43 " " 4313 96146 202067 -36.3639 7.8843 5.43 " " 3085 64572 198553 -38.8122 7.4849 5.43 " " 2875 59635 198045 -39.6864 18.7492 5.43 " " 7031 172991 210518 -39.9150 0.4740 5.43 " " 109 2490 215103 -44.3969 15.6034 5.43 " " 5784 138816 225957 0.3306 17.4805 5.44 " " 6507 158352 122418 -6.9239 4.1729 5.44 " 37 Eri" 1290 26409 131001 15.9308 7.1394 5.44 " 45 Gem" 2684 54131 96535 20.3108 15.9096 5.44 " " 5924 142574 84070 28.9708 6.7460 5.44 " 28 Gem" 2480 48450 78692 41.6028 18.9145 5.44 " " 7146 175740 47909 48.6253 23.3249 5.44 " 11 And" 8874 219945 52907 49.2203 20.5219 5.44 " 46Ome2Cyg" 7851 195774 49741 63.5053 4.8681 5.44 " " 1527 30442 13291 66.8092 21.4628 5.44 " 7 Cep" 8227 204770 19432 67.8103 16.1055 5.44 " " 6025 145454 16962 70.8711 3.8205 5.44 " " 1138 23277 5000 -21.7131 18.2378 5.44 " 14 Sgr" 6816 167036 186509 -28.0806 11.1455 5.44 " " 4334 96819 179577 -32.6433 15.0498 5.44 " " 5595 132955 206239 -39.0414 12.4729 5.44 " " 4748 108541 203508 -47.7472 11.6261 5.44 " " 4476 101067 222917 -52.3728 15.6471 5.44 " " 5798 139129 242793 -53.8111 16.2786 5.44 " " 6055 146003 243526 -56.3172 11.9709 5.44 " " 4576 103961 239533 6.6719 18.6109 5.45 " " 6987 171834 123693 -0.3019 7.1899 5.45 " 21 Mon" 2707 55057 134316 -1.1269 6.9068 5.45 " " 2572 50747 133870 -2.1292 10.8955 5.45 " " 4253 94402 137871 19.3186 21.6293 5.45 " 5 Peg" 8267 205852 107288 23.4211 3.8058 5.45 " " 1172 23753 76215 24.4528 9.0456 5.45 " 69Nu Cnc" 3595 77350 80595 32.9103 8.9491 5.45 " 59Sig2Cnc" 3555 76398 61146 37.9469 15.9299 5.45 " 12Lam CrB" 5936 142908 64974 40.3681 19.9539 5.45 " " 7628 189178 49011 45.1819 20.8885 5.45 " " 8003 199098 50182 47.5647 7.9119 5.45 " 26 Lyn" 3066 64144 42058 50.0489 4.3204 5.45 " " 1330 27084 39457 55.2814 7.3811 5.45 " 19 Lyn" 2784 57103 26312 72.0050 17.9198 5.45 " 34Psi2Dra" 6725 164613 8961 77.7347 3.3388 5.45 " " 961 19978 4875 79.5647 6.7706 5.45 " " 2401 46588 5946 -14.3592 4.6555 5.45 " " 1487 29613 149797 -14.3600 7.3495 5.45 " " 2796 57478 152749 -23.8619 2.9566 5.45 " 4 Eri" 883 18454 168183 -27.1389 12.6284 5.45 " " 4803 109799 180965 -32.6292 5.6638 5.45 " " 1958 37811 196061 -36.7678 15.4551 5.45 " " 5736 137432 206660 -41.8064 16.9005 5.45 " " 6260 152234 227377 -42.6739 16.3216 5.45 " Lam Nor" 6071 146667 226650 -50.3211 13.7940 5.45 " " 5176 119971 241177 -50.6061 5.3228 5.45 " Zet Pic" 1767 35072 233926 -51.5172 9.5014 5.45 " " 3784 82419 237042 -53.6686 9.6201 5.45 " " 3840 83520 237149 -58.7333 10.6241 5.45 " " 4169 92207 238271 -62.1919 4.2469 5.45 " " 1340 27304 248973 -69.5269 0.9167 5.45 " Lam2Tuc" 270 5457 248281 -76.7761 9.7724 5.45 " Nu Cha" 3902 85396 256658 -79.4203 6.9429 5.45 " The Men" 2689 54239 256355 3.2922 5.5207 5.46 " 33 Ori" 1842 36351 112861 8.1972 4.0657 5.46 " " 1254 25570 111586 -4.6475 19.6298 5.46 " 42 Aql" 7460 185124 143621 -8.7878 9.1599 5.46 " 20 Hya" 3641 78732 136622 -9.3133 14.1119 5.46 " 95 Vir" 5290 123255 139736 12.1978 4.6676 5.46 " 93 Tau" 1484 29589 94063 14.1372 10.5366 5.46 " 46 Leo" 4127 91232 99172 17.0581 5.5373 5.46 " " 1847 36408 94630 21.0625 12.6520 5.46 " 26 Com" 4815 110024 82421 24.2894 3.7467 5.46 " 16 Tau" 1140 23288 76126 24.5672 12.5168 5.46 " 21 Com" 4766 108945 82346 26.0500 17.9237 5.46 " 89 Her" 6685 163506 85545 34.3358 15.4382 5.46 " " 5741 137704 64701 39.7086 16.3320 5.46 " " 6091 147365 65233 52.9214 13.6584 5.46 " 82 UMa" 5142 119024 28832 59.2939 14.8573 5.46 " " 5552 131507 29315 65.1322 22.4515 5.46 " 26 Cep" 8561 213087 20075 81.4228 20.4707 5.46 " 75 Dra" 7901 196787 3408 83.3406 4.5000 5.46 " " 1304 26659 693 -10.7778 2.3671 5.46 " " 692 14691 148354 -11.4097 14.9461 5.46 " 15Xi 2Lib" 5564 131918 158915 -11.5650 22.1771 5.46 " 38 Aqr" 8452 210424 164910 -15.5858 7.2707 5.46 " " 2758 56405 152641 -23.6025 12.1844 5.46 " 3 Crv" 4635 105850 180546 -24.0058 0.8779 5.46 " " 247 5098 166647 -24.6306 6.9594 5.46 " " 2607 51733 172644 -27.4914 7.1721 5.46 " " 2708 55070 173122 -37.2536 21.9397 5.46 " " 8366 208321 213414 -44.2067 18.2646 5.46 " " 6818 167096 228851 -45.9128 8.7752 5.46 " " 3494 75149 220442 -47.0778 5.5026 5.46 " " 1856 36553 217368 -48.1169 18.4483 5.46 " " 6894 169405 229021 -60.4964 15.3136 5.46 " " 5680 135591 253101 -85.1233 12.9163 5.46 " Iot Oct" 4870 111482 258654 -1.0094 20.2205 5.47 " 66 Aql" 7720 192107 144181 -4.0819 17.9466 5.47 " " 6686 163532 141979 -8.7447 9.2781 5.47 " 24 Hya" 3683 79931 136728 10.6106 2.4136 5.47 " 24Xi Ari" 702 14951 92932 23.6283 0.9161 5.47 " 36 And" 258 5286 74359 24.1058 4.0727 5.47 " 36 Tau" 1252 25555 76425 25.1506 5.4879 5.47 "118 Tau" 1821 35943 77201 33.4378 20.8983 5.47 " " 8005 199101 70645 37.1467 17.3946 5.47 " 75Rho Her" 6484 157778 66000 44.0250 3.2965 5.47 " 30 Per" 982 20315 38704 45.5261 11.0041 5.47 " " 4280 95212 43562 47.2208 2.9972 5.47 " " 885 18474 38493 48.0236 3.5357 5.47 " " 1063 21699 38917 49.8264 5.7650 5.47 " 27Omi Aur" 1971 38104 40583 51.4289 7.2232 5.47 " " 2703 54895 26223 56.6992 9.3620 5.47 " " 3698 80390 27219 65.1450 8.5767 5.47 " 2 UMa" 3354 72037 14590 70.7708 22.4336 5.47 " " 8557 213022 10366 -14.3017 19.6262 5.47 " " 7454 184985 162827 -16.5333 16.0054 5.47 " 49 Lib" 5954 143333 159625 -23.1106 6.1089 5.47 " " 2163 41841 171236 -33.4319 20.6722 5.47 " " 7893 196737 212333 -35.6761 2.8446 5.47 " Eta3For" 851 17829 193944 -39.1319 22.4776 5.47 " Nu Gru" 8552 212953 213850 -41.3361 18.2202 5.47 " " 6804 166596 228815 -42.1533 8.4311 5.47 " " 3326 71459 219910 -42.8589 16.6063 5.47 " " 6164 149404 226953 -42.9158 12.9221 5.47 " " 4906 112213 223760 -62.8536 8.6219 5.47 " " 3432 73887 250288 -71.6022 9.4518 5.47 " " 3777 82350 256623 -73.0808 9.5268 5.47 " " 3821 83095 256634 -74.9369 4.9198 5.47 " Eta Men" 1629 32440 256145 -75.0442 18.3934 5.47 " Phi Oct" 6829 167468 257584 -78.9633 8.6888 5.47 " Eta Cha" 3502 75416 256543 -79.3614 5.8380 5.47 " Kap Men" 2125 40953 256248 -80.4697 10.7544 5.47 " Del1Cha" 4231 93779 258592 -88.9564 21.1462 5.47 " Sig Oct" 7228 177482 258857 4.4317 22.4994 5.48 " 37 Peg" 8566 213235 127551 5.0211 16.2209 5.48 " 9 Her" 6047 145892 121431 -5.3614 3.8782 5.48 " 30 Eri" 1202 24388 130789 -9.4519 12.5630 5.48 " 21 Vir" 4781 109309 138845 10.8392 20.9739 5.48 " 18 Del" 8030 199665 106712 14.1947 10.7737 5.48 " 52 Leo" 4209 93291 99282 15.6919 4.5108 5.48 " 81 Tau" 1428 28546 93978 17.1536 4.9562 5.48 " " 1585 31539 94227 21.4253 18.8712 5.48 "112 Her" 7113 174933 86521 24.1089 12.4908 5.48 " 18 Com" 4753 108722 82333 30.5542 18.5472 5.48 " " 6968 171301 67090 35.3994 0.6225 5.48 " " 157 3421 54038 36.4014 18.1339 5.48 " " 6793 166229 66666 37.2719 14.8416 5.48 " " 5541 131111 64355 42.7922 5.3044 5.48 " " 1722 34269 40214 55.6583 19.0121 5.48 " 49 Dra" 7218 177249 31323 56.8119 9.9977 5.48 " " 3939 86378 27464 61.0825 11.5391 5.48 " " 4439 100203 15542 75.8775 16.1804 5.48 " 19 UMi" 6079 146926 8446 -12.1931 7.7991 5.48 " 5 Pup" 3029 63336 153414 -13.2019 11.6445 5.48 " 24Iot Crt" 4488 101198 156802 -26.5897 9.4985 5.48 " " 3770 82205 177546 -27.4300 14.0397 5.48 " " 5265 122430 182182 -28.3239 12.7335 5.48 " " 4839 110666 181063 -33.2594 16.9531 5.48 " 27 Sco" 6288 152820 208232 -38.5131 5.5476 5.48 " " 1877 36848 195948 -39.3772 16.7799 5.48 " " 6221 151078 208020 -40.3206 8.8276 5.48 " " 3514 75630 220531 -41.2314 12.1485 5.48 " " 4625 105521 223242 -46.6339 17.3176 5.48 " " 6416 156274 227816 -52.7481 13.3438 5.48 " " 5026 115823 240762 -53.4397 8.6566 5.48 " " 3440 74071 236151 -59.4239 12.5279 5.48 " " 4768 108968 240027 7.2478 16.8387 5.49 " 47 Her" 6250 151956 121895 -0.8922 19.3432 5.49 " 27 Aql" 7336 181440 143292 -2.7617 23.7990 5.49 " 20 Psc" 9012 223252 146915 -3.5567 21.4214 5.49 " 21 Aqr" 8199 203926 145384 -6.7725 7.7673 5.49 " " 3014 62902 135079 15.0819 2.8582 5.49 " 43Sig Ari" 847 17769 93144 17.7292 5.7906 5.49 "130 Tau" 1990 38558 94858 18.8914 10.7735 5.49 " 51 Leo" 4208 93257 99281 20.7689 22.9578 5.49 " 51 Peg" 8729 217014 90896 25.7719 19.7286 5.49 " 10 Vul" 7506 186486 87633 26.8089 20.1967 5.49 " 19 Vul" 7718 192004 88330 30.9836 19.9772 5.49 " " 7640 189395 69188 35.0811 3.9413 5.49 " " 1215 24640 56824 41.1550 21.7184 5.49 " " 8306 206749 51221 79.4186 3.1022 5.49 " " 881 18438 4810 -12.8781 21.4032 5.49 " 18 Aqr" 8187 203705 164364 -14.4836 5.8268 5.49 " " 2021 39070 150845 -15.4700 19.7260 5.49 " " 7496 186185 162931 -24.0325 18.5649 5.49 " 24 Sgr" 6961 171115 186981 -30.9067 16.3257 5.49 " " 6077 146836 207558 -35.8775 7.9031 5.49 " " 3091 64802 198575 -43.6800 18.8140 5.49 " Eta1CrA" 7062 173715 229299 -50.8164 1.7683 5.49 " " 519 10934 232519 -62.0022 18.1739 5.49 " Iot Pav" 6761 165499 254157 -73.3894 15.5252 5.49 " Kap1Aps" 5730 137387 257289 -87.4822 23.4677 5.49 " Tau Oct" 8862 219765 258970 5.1561 5.2456 5.50 " " 1709 34043 112556 -8.3694 16.2604 5.50 " 18 Sco" 6060 146233 141066 11.9739 0.7837 5.50 " 58 Psc" 213 4482 92080 12.6544 8.4455 5.50 " 27 Cnc" 3319 71250 97819 15.8742 5.4627 5.50 "116 Tau" 1814 35770 94566 19.2403 1.4449 5.50 " 94 Psc" 414 8763 92444 19.6092 4.1528 5.50 " 43Ome1Tau" 1283 26162 93785 24.2653 5.1352 5.50 "103 Tau" 1659 32990 76974 24.7242 3.4051 5.50 " 64 Ari" 1022 21017 75912 29.3222 17.8397 5.50 " " 6654 162555 85464 31.8044 1.0470 5.50 " 69Sig Psc" 291 6118 54374 33.2839 2.0494 5.50 " 3Eps Tri" 599 12471 55218 33.7186 10.4024 5.50 " 28 LMi" 4081 90040 62019 38.5428 13.7833 5.50 " " 5186 120164 63739 39.5814 15.3771 5.50 " " 5726 137071 64667 59.4869 12.6065 5.50 " " 4800 109729 28444 70.1328 22.1775 5.50 " " 8474 210884 19922 71.2422 13.6197 5.50 " " 5139 118904 7854 78.8242 22.4980 5.50 " 29Rho2Cep" 8591 213798 10402 84.2522 10.4949 5.50 " " 4062 89571 1701 -11.3036 11.0541 5.50 " " 4305 95808 156421 -13.5197 5.2945 5.50 " " 1737 34538 150304 -14.8656 18.5454 5.50 " " 6959 170975 161587 -16.8528 15.5487 5.50 " 35Zet4Lib" 5764 138485 159335 -22.3994 15.2731 5.50 " " 5678 135534 183328 -22.4275 6.1494 5.50 " " 2180 42301 171293 -22.5219 0.7699 5.50 " " 210 4398 166555 -31.0469 19.0736 5.50 " " 7211 177074 210883 -31.3825 5.9391 5.50 " Sig Col" 2092 40248 196330 -31.5519 1.0407 5.50 " Sig Scl" 293 6178 192884 -38.3953 21.9883 5.50 " " 8379 208737 213452 -39.1992 20.7722 5.50 " " 7933 197630 212416 -42.1539 6.1314 5.50 " Pi 2Col" 2181 42303 217730 -43.1911 9.6337 5.50 " " 3842 83548 221355 -45.3217 14.5024 5.50 " " 5412 126981 224969 -49.1367 11.5824 5.50 " " 4462 100708 222883 -58.9919 12.4580 5.50 " " 4739 108396 239960 -59.1781 7.0543 5.50 " " 2674 53921 234890 -70.9881 16.5720 5.50 " " 6135 148488 257409 -76.7967 14.0888 5.50 " The Aps" 5261 122250 257112 1.2161 16.8569 5.51 " 21 Oph" 6255 152127 121911 3.3242 18.1779 5.51 " " 6800 166460 123212 -1.1864 15.5494 5.51 " 11 Ser" 5772 138562 140596 -5.1714 4.9401 5.51 " 62 Eri" 1582 31512 131614 -6.4222 2.2831 5.51 " 67 Cet" 666 14129 129798 -8.5236 2.0075 5.51 " " 587 12292 129624 -9.6975 20.9483 5.51 " 7 Aqr" 8015 199345 144968 11.1456 0.1673 5.51 " 34 Psc" 26 560 91750 13.3961 0.0950 5.51 " 86 Peg" 4 87 91701 26.3256 10.7172 5.51 " 40 LMi" 4189 92769 81485 29.6161 15.3357 5.51 " 1Omi CrB" 5709 136512 83768 32.3072 20.6841 5.51 " 49 Cyg" 7921 197177 70362 35.2058 15.0517 5.51 " " 5609 133392 64476 38.0397 4.1435 5.51 " 50 Per" 1278 25998 57006 39.9744 17.3621 5.51 " " 6469 157482 46664 52.3608 15.7141 5.51 " " 5857 140728 29628 52.9750 18.8597 5.51 " " 7123 175225 31217 53.2197 8.3968 5.51 " " 3277 70313 26819 57.4514 23.7839 5.51 " " 9010 223173 35761 59.4386 20.9904 5.51 " " 8049 200205 33048 -12.2825 19.2210 5.51 " " 7282 179497 162326 -12.4267 13.7656 5.51 " 86 Vir" 5173 119853 158152 -16.9344 4.7934 5.51 " 58 Eri" 1532 30495 149888 -29.4622 22.9933 5.51 " " 8740 217236 191550 -36.8653 1.5489 5.51 " " 445 9525 193173 -42.5478 21.4504 5.51 " " 8202 204018 230692 -46.5475 22.7613 5.51 " " 8657 215405 231278 -48.0008 0.5948 5.51 " Lam2Phe" 147 3302 215157 -48.0992 8.7044 5.51 " " 3462 74455 220313 -50.1961 8.2261 5.51 " " 3247 69194 235819 -65.3064 13.1353 5.51 " The Mus" 4952 113904 252162 -69.6250 0.3442 5.51 " Pi Tuc" 83 1685 248167 -77.5117 22.2974 5.51 " Psi Oct" 8471 210853 258020 1.9556 11.1151 5.52 " 65 Leo" 4319 96436 118668 5.6497 1.1395 5.52 " 80 Psc" 330 6763 109697 7.2781 20.0690 5.52 " 63Tau Aql" 7669 190327 125403 -2.7550 15.0222 5.52 " " 5590 132833 140276 -5.2111 6.6098 5.52 " " 2418 47054 133469 14.3056 5.8414 5.52 "135 Tau" 2016 39019 94904 15.9519 17.6996 5.52 " " 6594 160910 103033 18.4097 11.5081 5.52 " 86 Leo" 4433 100006 99637 24.3194 19.9086 5.52 " " 7601 188485 87908 24.5642 17.7079 5.52 " 83 Her" 6602 161074 85344 26.9042 20.1760 5.52 " 18 Vul" 7711 191747 88295 27.6075 3.3700 5.52 " 62 Ari" 1012 20825 75892 30.5567 3.2557 5.52 " " 971 20149 56285 41.0861 5.3374 5.52 " " 1738 34557 40248 53.6683 10.6516 5.52 " " 4165 92095 27724 55.1475 1.8665 5.52 " 1 Per" 533 11241 22690 55.2592 4.9175 5.52 " 5 Cam" 1555 30958 24904 60.6928 21.7904 5.52 " 12 Cep" 8339 207528 19642 -17.1542 18.1301 5.52 " " 6769 165687 161093 -19.6706 15.5435 5.52 " " 5762 138413 159330 -19.9669 6.3038 5.52 " " 2266 43955 151334 -23.6353 3.3567 5.52 " " 1016 20894 168482 -26.9856 19.4978 5.52 " " 7398 183275 188192 -31.9086 19.7670 5.52 " " 7507 186500 211541 -37.9133 20.8502 5.52 " " 7971 198357 212488 -41.3100 8.0458 5.52 " " 3162 66624 219339 -52.7217 23.4435 5.52 " Omi Gru" 8907 220729 247874 -53.1000 8.7052 5.52 " " 3466 74535 236202 -53.7406 1.7081 5.52 " " 506 10647 232501 -65.1006 10.6698 5.52 " " 4185 92664 251059 -65.4953 16.5958 5.52 " The TrA" 6151 148890 253614 -68.8203 23.0812 5.52 " " 8769 217831 255395 -77.3883 3.2660 5.52 " Iot Hyi" 1025 21024 255973 -82.2147 10.0121 5.52 " Mu 1Cha" 3983 87971 258554 -0.1675 14.9592 5.53 " " 5573 132132 120758 -3.8186 15.8158 5.53 " " 5875 141378 140775 -5.2106 3.6773 5.53 " 22 Eri" 1121 22920 130652 -7.8317 2.6000 5.53 " 80 Cet" 759 16212 130004 12.3747 19.3276 5.53 " 28 Aql" 7331 181333 104722 14.1553 6.5600 5.53 " " 2391 46374 95830 15.6467 11.9279 5.53 " 95 Leo" 4564 103578 99869 16.7892 19.9626 5.53 " 11 Sge" 7622 189090 105471 18.2119 0.1507 5.53 " 87 Peg" 22 448 91734 18.4006 23.6324 5.53 " 75 Peg" 8963 222133 108732 22.9964 4.4549 5.53 " 72 Tau" 1399 28149 76613 28.7933 21.8750 5.53 " 15 Peg" 8354 207978 90065 45.3747 21.6007 5.53 " " 8262 205730 51079 45.4408 22.2304 5.53 " " 8487 211096 51783 50.3067 19.5220 5.53 " " 7427 184293 31737 52.9003 16.6032 5.53 " 16 Dra" 6184 150100 30012 60.4594 21.5165 5.53 " " 8243 205139 19466 -12.8406 18.9899 5.53 " " 7166 176162 162052 -18.6667 4.7356 5.53 " " 1513 30127 149856 -24.7625 22.3919 5.53 " 49 Aqr" 8529 212271 191105 -30.7286 18.1683 5.53 " " 6780 166023 209803 -33.5483 17.2554 5.53 " " 6397 155806 208585 -34.1439 6.3434 5.53 " " 2288 44506 196707 -37.7375 6.2837 5.53 " " 2263 43899 196653 -40.8244 23.3027 5.53 " Phi Gru" 8859 219693 231539 -41.3861 21.1071 5.53 " Eta Mic" 8069 200702 230523 -50.3372 0.0222 5.53 " " 9082 224865 248103 -53.1081 8.0844 5.53 " " 3180 67364 235735 -66.6614 19.2867 5.53 " " 7278 179366 254515 -69.6294 21.8464 5.53 " Omi Ind" 8333 207241 255087 -70.0933 8.4547 5.53 " " 3370 72337 250235 -71.9025 3.0376 5.53 " The Hyi" 939 19400 255945 -79.0942 7.4272 5.53 " Eps Men" 2919 60816 256415 -2.3936 2.2132 5.54 " 66 Cet" 650 13612 129752 -5.8247 15.3521 5.54 " " 5707 136479 140474 -6.5225 22.0546 5.54 " 30 Aqr" 8401 209396 145836 -7.1772 8.8596 5.54 " 15 Hya" 3523 75737 136345 12.0764 21.9490 5.54 " 17 Peg" 8373 208565 107528 12.9594 14.2348 5.54 " 14 Boo" 5323 124570 100925 14.4144 15.9541 5.54 " Phi Ser" 5940 142980 101834 17.0403 5.6177 5.54 "122 Tau" 1905 37147 94700 20.0808 17.4470 5.54 " " 6502 158148 85095 24.4461 20.3676 5.54 " 25 Vul" 7789 193911 88580 26.6194 12.3388 5.54 " " 4693 107325 82250 31.8014 2.4577 5.54 " 11 Tri" 712 15176 55570 37.3939 16.4234 5.54 " 25 Her" 6123 148283 65290 41.0294 5.3806 5.54 " " 1760 34904 40290 53.2136 23.2784 5.54 " " 8853 219623 35285 75.7569 8.3256 5.54 " " 3216 68375 6487 -12.5344 8.4450 5.54 " " 3324 71377 154257 -13.7992 8.1777 5.54 " 18 Pup" 3202 68146 153924 -19.2900 19.1380 5.54 " " 7249 178175 162229 -29.1558 7.4664 5.54 " " 2863 59256 173799 -30.1678 3.7989 5.54 " Rho For" 1184 23940 194535 -33.5458 16.1646 5.54 " " 6007 144987 207403 -35.6642 13.8924 5.54 " " 5222 120987 204955 -36.3383 7.5642 5.54 " " 2911 60606 198130 -36.9458 17.7142 5.54 " " 6583 160668 209172 -43.6081 7.0659 5.54 " " 2667 53705 218421 -46.5953 18.8742 5.54 " " 7092 174387 229336 -55.3461 15.1878 5.54 " " 5637 134270 242287 -59.4144 9.2154 5.54 " " 3673 79698 236723 -62.5753 3.2962 5.54 " Zet1Ret" 1006 20766 248770 -70.9311 4.7178 5.54 " Mu Men" 1541 30612 256122 1.3808 4.4756 5.55 " " 1415 28375 111845 2.9081 6.4557 5.55 " " 2333 45415 113906 2.9303 23.8661 5.55 " 22 Psc" 9033 223719 128427 -0.2761 6.4543 5.55 " " 2335 45433 133269 -0.2967 3.7490 5.55 " 25 Eri" 1150 23413 130704 -3.4964 23.2595 5.55 " " 8840 219402 146593 -5.1244 23.3233 5.55 " 96 Aqr" 8868 219877 146639 -5.5069 20.8691 5.55 " 5 Aqr" 7985 198667 144889 -8.4114 16.0132 5.55 " 50 Lib" 5959 143459 140897 -8.9844 13.1424 5.55 " " 4957 114113 139175 17.3086 8.0131 5.55 " 3 Cnc" 3128 65759 97472 19.6586 1.1637 5.55 " 81Psi3Psc" 339 6903 92283 20.7392 1.1326 5.55 " 79Psi2Psc" 328 6695 74506 28.6286 19.1105 5.55 " " 7253 178233 86819 30.4931 6.4761 5.55 " 48 Aur" 2332 45412 59128 34.4739 7.1032 5.55 " " 2660 53329 59773 44.4717 20.9721 5.55 " " 8035 199870 50298 50.9208 4.3365 5.55 " " 1333 27192 24544 55.7058 23.9524 5.55 " " 9059 224355 35917 57.8639 12.3474 5.55 " 70 UMa" 4701 107465 28346 60.3628 0.9464 5.55 " " 266 5408 11484 61.2231 0.0269 5.55 " " 9085 224893 21009 64.2028 1.1904 5.55 " " 342 6960 11615 68.8803 20.3350 5.55 " " 7804 194258 18817 -10.4461 12.0124 5.55 " " 4587 104304 157041 -11.2419 17.5796 5.55 " " 6544 159358 160653 -15.3631 13.5477 5.55 " 75 Vir" 5099 117789 157998 -20.8636 5.5188 5.55 " 10 Lep" 1849 36473 170506 -28.8536 23.0221 5.55 " " 8754 217484 191581 -29.5583 0.5614 5.55 " " 138 3059 166367 -32.6628 17.2844 5.55 " " 6409 156098 208626 -32.8300 12.4477 5.55 " " 4735 108323 203477 -33.9117 6.0212 5.55 " " 2131 41047 196413 -36.2383 18.3914 5.55 " " 6874 168838 210075 -41.8644 9.0224 5.55 " " 3600 77475 220760 -43.0958 11.6888 5.55 " " 4502 101615 222960 -44.7550 9.7751 5.55 " " 3886 84816 221484 -46.2453 14.6053 5.55 " " 5444 128068 225054 -50.6411 16.9717 5.55 " " 6289 152824 244313 -67.4892 22.4771 5.55 " " 8547 212728 255227 -67.8417 2.2374 5.55 " Pi 1Hyi" 667 14141 248518 -71.9864 12.8291 5.55 " " 4862 111315 256983 6.6608 3.2073 5.56 " " 958 19926 111044 -2.4650 2.9948 5.56 " 5 Eri" 899 18633 130228 -5.9150 9.5757 5.56 " 33 Hya" 3814 82870 136964 11.3414 5.2678 5.56 " 18 Ori" 1718 34203 94426 11.6606 14.6954 5.56 " 32 Boo" 5481 129336 101152 14.2083 7.7009 5.56 " " 2967 61913 97157 14.5958 19.4895 5.56 " " 7407 183492 104896 15.7453 16.7563 5.56 " " 6227 151203 102365 21.4653 1.0949 5.56 " 74Psi1Psc" 311 6457 74483 22.0842 17.1050 5.56 " " 6364 154733 84835 27.9678 5.8495 5.56 " " 2013 39004 77625 31.1617 9.6119 5.56 " " 3820 83069 61594 31.7444 19.0828 5.56 " " 7237 177808 67782 32.5158 15.7331 5.56 " 9Pi CrB" 5855 140716 64870 35.0486 7.6424 5.56 " 70 Gem" 2924 60986 60243 48.1317 7.6868 5.56 " " 2939 61363 41934 57.1683 23.2214 5.56 " " 8832 219134 35236 57.9775 1.6354 5.56 " " 461 9900 22456 58.0006 22.0346 5.56 " 14 Cep" 8406 209481 33990 60.1336 23.3757 5.56 " " 8894 220369 35361 62.8744 17.2091 5.56 " " 6421 156295 17391 70.8881 23.2605 5.56 " " 8851 219586 10671 76.7936 16.0587 5.56 " " 6034 145622 8417 78.9639 16.4286 5.56 " " 6173 149681 8527 -10.5233 17.1633 5.56 " " 6375 155078 160324 -14.5842 6.1595 5.56 " " 2183 42341 151178 -16.2719 22.9126 5.56 " 77 Aqr" 8711 216640 165376 -30.6072 10.4932 5.56 " Del Ant" 4118 90972 201442 -34.7869 14.3721 5.56 " " 5376 125745 205485 -43.0589 14.3360 5.56 " " 5362 125383 224838 -53.6658 14.2212 5.56 " " 5308 124147 241543 -53.8917 9.7284 5.56 " " 3875 84461 237268 -69.9842 6.3773 5.56 " Pi 1Dor" 2352 45669 249532 2.5353 18.9546 5.57 " 64 Ser" 7158 175869 124089 3.0569 3.6642 5.57 " 12 Tau" 1115 22796 111334 6.6153 18.9243 5.57 " " 7135 175515 124050 -7.0597 10.4290 5.57 " " 4092 90362 137557 10.7461 13.6596 5.57 " " 5138 118889 100654 12.1417 1.6183 5.57 "102Pi Psc" 463 9919 92536 15.0836 19.2556 5.57 " " 7300 180262 104655 16.4564 11.4268 5.57 " 81 Leo" 4408 99285 99601 20.5419 12.2026 5.57 " 5 Com" 4643 106057 82182 23.8558 21.3512 5.57 " " 8165 203344 89640 24.9922 19.8671 5.57 " " 7573 187982 87840 27.8936 8.4410 5.57 " 22Phi1Cnc" 3304 71093 80181 32.3850 23.4141 5.57 " 67 Peg" 8903 220599 73241 37.5800 3.6855 5.57 " " 1113 22780 56628 47.8319 20.7970 5.57 " " 7969 198345 50073 48.1511 15.0905 5.57 " 47 Boo" 5627 133962 45370 52.0200 0.4043 5.57 " " 91 1976 21366 65.0189 1.1948 5.57 " 32 Cas" 345 6972 11617 83.8078 4.4703 5.57 " " 1289 26356 685 -11.1936 3.5994 5.57 " " 1098 22409 149057 -19.9244 16.6983 5.57 " " 6202 150453 160052 -21.7225 0.8003 5.57 " " 220 4622 166585 -24.7672 0.6224 5.57 " " 159 3443 166418 -37.2306 5.4709 5.57 " " 1835 36187 195887 -39.9581 5.9146 5.57 " " 2082 40091 196309 -42.0306 1.9941 5.57 " " 588 12296 215726 -43.6136 9.2085 5.57 " " 3661 79416 220952 -44.8486 21.5565 5.57 " " 8236 204960 230737 -52.3731 0.5744 5.57 " " 140 3158 232091 -56.9878 11.8695 5.57 " " 4551 103101 239443 -57.9344 16.1552 5.57 " Iot2Nor" 5994 144480 243368 -62.4489 11.9611 5.57 " " 4573 103884 251659 -62.7453 9.8488 5.57 " " 3914 85656 250721 -70.8781 11.1139 5.57 " " 4329 96706 256800 -78.9894 3.1256 5.57 " " 981 20313 255962 -84.4653 15.7213 5.57 " Rho Oct" 5729 137333 258731 0.6050 22.0181 5.58 " 28 Aqr" 8390 209128 127235 1.7578 2.3004 5.58 " " 672 14214 110456 5.4469 15.7565 5.58 " " 5859 140775 121170 6.0083 20.7968 5.58 " 13 Del" 7953 198069 126222 8.4439 11.9175 5.58 " 6 Vir" 4559 103484 119111 9.1289 22.4856 5.58 " 36 Peg" 8562 213119 127544 -9.8394 1.1014 5.58 " 28 Cet" 317 6530 147606 12.5686 20.9274 5.58 " 16 Del" 8012 199254 106666 15.6381 4.5024 5.58 " 80 Tau" 1422 28485 93970 22.4642 17.9308 5.58 " " 6687 163547 85552 25.0431 2.2619 5.58 " 21 Ari" 657 13872 75238 30.2878 15.3867 5.58 " 2Eta CrB" 5727 137107 64673 31.4372 4.8202 5.58 " " 1529 30454 57441 33.1722 22.1538 5.58 " 27Pi 1Peg" 8449 210354 72064 34.9886 10.5586 5.58 " 34 LMi" 4137 91365 62121 36.4664 18.1664 5.58 " " 6807 166640 66703 36.9717 18.8954 5.58 " 11Del1Lyr" 7131 175426 67537 37.0000 20.3079 5.58 " 36 Cyg" 7769 193369 69803 37.7150 1.3946 5.58 " 47 And" 395 8374 54655 45.7950 20.3682 5.58 " " 7798 194152 49531 47.2400 7.2639 5.58 " " 2721 55575 41644 49.8483 3.4812 5.58 " " 1037 21362 38862 59.3200 10.8566 5.58 " 42 UMa" 4236 93875 27793 64.3900 2.0501 5.58 " 53 Cas" 589 12301 12097 64.6039 8.9437 5.58 " 6 UMa" 3531 75958 14703 66.6575 20.7197 5.58 " 4 Cep" 7945 197950 19004 87.3075 23.4502 5.58 " " 8938 221525 3916 -11.3658 21.7756 5.58 " 48Lam Cap" 8319 207052 164639 -12.8303 12.5595 5.58 " " 4779 109272 157361 -13.5883 10.5166 5.58 " " 4123 91120 156029 -20.0792 8.3559 5.58 " " 3279 70442 154150 -20.5831 13.0628 5.58 " " 4935 113415 181357 -21.2753 1.6477 5.58 " " 473 10148 167198 -22.4025 19.3439 5.58 " " 7327 181240 187992 -23.1500 16.9467 5.58 " 24 Oph" 6291 152849 184822 -24.4825 4.6686 5.58 " " 1495 29737 169650 -25.1808 22.2290 5.58 " " 8470 210848 190976 -27.0381 7.2475 5.58 " " 2750 56160 173283 -29.6636 10.4914 5.58 " " 4117 90957 178888 -35.4517 8.3048 5.58 " " 3266 70002 199061 -40.3536 6.1695 5.58 " " 2203 42682 217753 -42.1950 9.3641 5.58 " " 3726 81034 221103 -47.3036 21.8044 5.58 " " 8323 207129 230846 -54.8775 10.4469 5.58 " " 4107 90677 238067 -58.3414 16.7888 5.58 " " 6219 150898 244133 -85.7861 13.6821 5.58 " Kap Oct" 5084 117374 258674 2.7244 17.5226 5.59 " " 6524 158837 122465 3.2903 7.5532 5.59 " 8Del2CMi" 2887 60111 115610 4.8347 19.2753 5.59 " 22 Aql" 7303 180482 124455 6.8067 12.6992 5.59 " 31 Vir" 4829 110423 119538 -1.9053 7.4885 5.59 " " 2865 59311 134740 -3.9875 8.4409 5.59 " 2 Hya" 3321 71297 135916 -5.1175 9.4233 5.59 " 28 Hya" 3738 81420 136832 14.0353 4.3327 5.59 " 57 Tau" 1351 27397 93872 14.1717 5.8729 5.59 "137 Tau" 2033 39317 94945 26.4619 20.6180 5.59 " 27 Vul" 7880 196504 88903 30.2058 21.1441 5.59 " " 8094 201433 70968 30.4150 23.3471 5.59 " 63 Peg" 8882 220088 73187 36.0419 12.0276 5.59 " " 4593 104438 62802 36.4600 3.7421 5.59 " " 1133 23193 56675 40.2364 23.5771 5.59 " 15 And" 8947 221756 73346 41.6039 22.9399 5.59 " 16 Lac" 8725 216916 52512 42.1594 18.2608 5.59 " " 6845 167965 47342 43.6256 11.6391 5.59 " 59 UMa" 4477 101107 43837 46.2408 17.3392 5.59 " 74 Her" 6464 157325 46645 49.8447 14.4772 5.59 " 24 Boo" 5420 127243 29165 50.1514 2.3495 5.59 " 63 And" 682 14392 37960 61.5211 2.9325 5.59 " " 860 17948 12517 64.1961 0.1074 5.59 " 10 Cas" 7 144 10978 68.0431 1.7057 5.59 " 43 Cas" 478 10221 11919 -12.6747 3.4933 5.59 " " 1062 21688 148985 -13.5614 0.8238 5.59 " " 227 4730 147464 -21.7767 19.4387 5.59 " 50 Sgr" 7375 182629 188121 -25.4139 6.9766 5.59 " " 2616 52018 172669 -27.6517 4.0937 5.59 " " 1275 25945 169110 -30.3653 9.1657 5.59 " Eps Pyx" 3644 78922 200047 -35.4214 19.3278 5.59 " " 7316 180885 211175 -36.7800 6.5900 5.59 " " 2424 47144 196978 -38.9167 1.0217 5.59 " Xi Scl" 288 6055 192870 -40.7883 15.3157 5.59 " " 5687 135876 225647 -41.5886 13.1098 5.59 " " 4941 113778 223905 -42.0497 20.3743 5.59 " Kap1Sgr" 7779 193571 230177 -56.4106 7.8185 5.59 " " 3062 64067 235539 -56.8492 23.4221 5.59 " " 8901 220572 247867 -57.6336 8.8602 5.59 " " 3536 76113 236339 -71.4369 0.0781 5.59 " " 9108 225253 255631 -72.2567 11.4031 5.59 " " 4406 99264 256834 -5.8689 6.5397 5.60 " " 2386 46304 133382 -7.0344 6.4804 5.60 " 11Bet Mon" 2358 45727 0 -8.5894 9.1451 5.60 " 19 Hya" 3630 78556 136604 10.2400 5.5871 5.60 " " 1883 36881 94671 13.1197 22.0182 5.60 " 20 Peg" 8392 209166 107587 22.6161 13.1063 5.60 " 40 Com" 4949 113866 82651 38.3147 12.9334 5.60 " 12Alp1CVn" 4914 112412 63256 40.1506 13.3386 5.60 " 23 CVn" 5032 116010 44570 44.6500 22.0491 5.60 " " 8407 209515 51595 46.7144 21.4221 5.60 " " 8208 204153 50824 52.8394 0.5281 5.60 " " 124 2774 21486 55.3486 13.5687 5.60 " 81 UMa" 5109 118214 28803 61.6969 22.8563 5.60 " " 8696 216380 20281 65.6978 5.7073 5.60 " " 1916 37289 13570 70.3597 23.4546 5.60 " " 8918 220974 10737 -10.4856 3.7261 5.60 " " 1139 23281 149132 -12.5742 3.9917 5.60 " " 1235 25165 149299 -13.0483 4.4852 5.60 " " 1423 28497 149674 -16.1792 13.7416 5.60 " 83 Vir" 5165 119605 158131 -17.1417 10.1193 5.60 " " 3977 87808 155739 -22.6689 21.3835 5.60 " " 8172 203475 190285 -28.8233 23.1392 5.60 " " 8802 218434 191674 -30.7567 18.4171 5.60 " 18 Sgr" 6888 169233 210116 -33.2889 7.8265 5.60 " " 3052 63852 198487 -34.8953 17.8898 5.60 " " 6658 162587 209416 -36.0503 7.7200 5.60 " " 2994 62578 198343 -40.0519 13.6635 5.60 " " 5136 118799 204712 -43.1125 10.2587 5.60 " " 4036 89062 221910 -51.8261 6.5217 5.60 " " 2400 46569 234551 -60.3033 7.9630 5.60 " " 3138 65907 250035 -61.5492 10.1561 5.60 " " 3999 88366 250840 -63.0556 18.2614 5.60 " " 6805 166599 254189 -73.1900 14.8871 5.60 " " 5520 130458 257206 0.1092 23.9129 5.61 " " 9047 224062 146973 0.2736 19.9124 5.61 " 58 Aql" 7596 188350 125219 4.3528 3.0396 5.61 " 93 Cet" 910 18883 110921 5.5028 21.0763 5.61 " 3 Equ" 8066 200644 126518 8.7847 10.4209 5.61 " 44 Leo" 4088 90254 118286 9.9350 5.5857 5.61 " 39Lam Ori" 1880 36862 0 -3.7511 8.4097 5.61 " 1 Hya" 3297 70958 135877 -9.1833 7.8363 5.61 " " 3047 63752 135158 23.6056 18.5918 5.61 " " 6980 171745 86224 31.1583 17.5154 5.61 " " 6528 158974 66103 33.5358 3.4082 5.61 " " 1019 20995 56419 33.8075 3.4724 5.61 " " 1041 21402 56475 43.2978 1.6777 5.61 " " 476 10204 37419 50.4622 20.9750 5.61 " " 8040 199955 33034 62.6536 5.3396 5.61 " " 1720 34255 13460 84.9111 3.5389 5.61 " " 965 20084 550 -10.3292 5.4171 5.61 " " 1799 35536 150420 -11.3800 0.9789 5.61 " 23Phi4Cet" 279 5722 147546 -12.7925 4.0730 5.61 " " 1265 25723 149351 -23.0861 7.4498 5.61 " " 2855 58978 173752 -24.1231 3.3263 5.61 " " 1004 20729 168462 -24.3878 5.0648 5.61 " " 1645 32667 170029 -34.0581 10.8325 5.61 " " 4238 93905 201805 -34.6825 15.7789 5.61 " " 5860 140784 206962 -38.8922 23.1149 5.61 " Ups Gru" 8790 218242 214313 -41.8375 14.2452 5.61 " " 5318 124433 224791 -43.4339 18.8264 5.61 " Eta2CrA" 7068 173861 229307 -45.2719 19.5560 5.61 " " 7416 183806 229741 -53.0153 8.6715 5.61 " " 3448 74196 236165 -53.4614 4.8487 5.61 " Iot Pic" 1563 31203 233709 -55.5400 6.7885 5.61 " " 2526 49877 234710 -56.3700 6.3822 5.61 " Nu Pic" 2320 45229 234473 -64.3392 11.9799 5.61 " " 4578 104035 251664 -68.1953 14.4184 5.61 " " 5379 125835 252735 -4.1036 2.0612 5.62 " " 611 12642 129665 -5.3236 7.0681 5.62 " " 2655 53208 134133 -5.7447 17.5583 5.62 " " 6534 159170 141730 12.1158 7.2424 5.62 " " 2728 55730 96672 13.1872 3.1066 5.62 " " 931 19270 93276 19.9011 2.3021 5.62 " 22The Ari" 669 14191 92877 22.4958 13.6840 5.62 " 2 Boo" 5149 119126 82946 27.9094 18.9037 5.62 " " 7132 175443 86558 28.4075 17.5304 5.62 " 78 Her" 6533 159139 85182 31.1903 13.8108 5.62 " " 5195 120420 63760 36.6439 15.9827 5.62 " " 5957 143435 65001 38.4403 20.4595 5.62 " 40 Cyg" 7826 195050 70056 39.7578 9.7001 5.62 " 43 Lyn" 3851 83805 61636 47.0275 19.8664 5.62 " " 7589 188209 48917 57.4892 21.6493 5.62 " " 8281 206267 33626 69.2833 15.6275 5.62 " " 5844 140227 16794 83.7072 0.9148 5.62 " " 240 4853 143 -24.6739 7.7428 5.62 " " 3004 62747 174433 -26.2658 15.9250 5.62 " 4 Sco" 5917 142445 183931 -29.4850 23.9911 5.62 " " 9073 224630 192294 -32.7164 6.5765 5.62 " " 2415 46936 196955 -33.9642 15.9484 5.62 " Xi 2Lup" 5926 142630 207145 -36.7078 6.4003 5.62 " " 2316 45145 196774 -45.9286 22.3856 5.62 " Pi 2Gru" 8524 212132 231111 -46.1939 9.8555 5.62 " " 3910 85563 221547 -59.6361 22.0975 5.62 " Kap2Ind" 8409 209529 247303 -64.7125 21.8334 5.62 " " 8331 207229 255080 0.3722 15.2636 5.63 " 4 Ser" 5679 135559 120920 4.1586 6.0829 5.63 " 66 Ori" 2145 41380 113430 5.5211 16.5433 5.63 " 28 Her" 6158 149121 121676 8.4856 0.0416 5.63 " 32 Psc" 9093 225003 128547 8.5697 2.1892 5.63 " 64 Cet" 635 13421 110390 9.8917 16.1271 5.63 " 45 Ser" 6004 144874 101939 11.8100 9.7731 5.63 " 18 Leo" 3877 84561 98755 14.5447 19.2741 5.63 " " 7307 180555 104668 15.1319 14.7683 5.63 " " 5512 130144 101200 17.6478 8.2035 5.63 " 16Zet1Cnc" 3208 68257 97645 18.0231 2.9406 5.63 " 46Rho3Ari" 869 18256 93195 20.0978 19.4370 5.63 " 5 Vul" 7390 182919 104831 22.4781 3.9478 5.63 " 32 Tau" 1218 24740 76339 25.9356 2.0609 5.63 " 10 Ari" 605 12558 75114 29.8589 18.3492 5.63 "108 Her" 6876 168913 85956 33.4972 23.5773 5.63 " 73 Peg" 8948 221758 73345 36.4250 16.1967 5.63 " " 6046 145849 65132 39.0394 2.1813 5.63 " 59 And" 628 13294 55330 45.2686 13.0979 5.63 " " 4945 113847 44465 49.6286 14.9397 5.63 " " 5581 132254 45288 54.7853 11.5847 5.63 " " 4457 100615 28064 63.8522 1.7958 5.63 " " 511 10780 11983 65.2581 18.9404 5.63 " " 7187 176598 18079 -15.6761 1.5772 5.63 " 49 Cet" 451 9672 147886 -17.8644 7.4522 5.63 " " 2853 58954 152894 -21.1739 7.8619 5.63 " " 3068 64152 174679 -23.6967 12.5049 5.63 " " 4759 108821 180850 -25.2153 7.0183 5.63 " " 2640 52670 172763 -25.5778 6.3989 5.63 " " 2311 45018 171688 -25.6244 14.7896 5.63 " 55 Hya" 5514 130158 182875 -32.1786 9.6194 5.63 " " 3833 83380 200561 -37.6311 5.8759 5.63 " " 2053 39720 196266 -37.8294 21.4397 5.63 " " 8200 203949 212998 -55.5150 9.3639 5.63 " " 3732 81157 236887 -57.3031 7.9148 5.63 " " 3105 65273 235615 -57.9122 16.2638 5.63 " " 6040 145782 243509 -58.4761 23.4542 5.63 " " 8909 220790 247882 -61.6919 13.6201 5.63 " " 5113 118261 252387 2.6861 21.7872 5.64 " 11 Peg" 8328 207203 127060 -0.8919 17.0923 5.64 " " 6353 154445 141513 -5.3333 11.8506 5.64 " " 4544 102928 138445 12.6808 8.7201 5.64 " 45 Cnc" 3450 74228 98069 14.3056 5.5651 5.64 " 35 Ori" 1864 36653 94652 16.7772 4.3903 5.64 " 63 Tau" 1376 27749 93900 16.8411 22.8840 5.64 " " 8703 216489 108231 19.2567 17.5563 5.64 " " 6541 159332 102912 21.2322 19.2548 5.64 " 1 Sge" 7301 180317 86987 24.8392 3.7527 5.64 " 18 Tau" 1144 23324 76137 29.6567 8.2191 5.64 " 15 Cnc" 3215 68351 80016 29.9744 9.7259 5.64 " 15 Leo" 3861 84107 61656 32.2186 20.0767 5.64 " " 7678 190603 69362 33.8586 16.2447 5.64 " 17Sig CrB" 6063 146361 65165 35.2456 1.7010 5.64 " " 490 10390 54912 39.2653 14.9936 5.64 " 40 Boo" 5588 132772 64449 56.2850 6.4405 5.64 " " 2291 44691 25731 59.5711 8.2973 5.64 " 29 Lyn" 3235 68930 26756 59.9864 21.1967 5.64 " " 8119 202214 33210 65.0208 8.6532 5.64 " 3Pi 1UMa" 3391 72905 14609 68.4656 7.5146 5.64 " " 2830 58425 14211 77.5469 18.4958 5.64 " " 7006 172340 9151 79.6739 1.2046 5.64 " " 333 6798 4341 82.5119 14.8390 5.64 " " 5596 133002 2459 -11.7733 6.3569 5.64 " " 2284 44458 151401 -16.7164 15.4709 5.64 " 32Zet1Lib" 5743 137744 159280 -18.2311 19.6176 5.64 " " 7443 184835 162816 -19.0328 6.8886 5.64 " " 2565 50644 152055 -26.3511 7.7134 5.64 " " 2988 62412 174356 -26.9867 23.3543 5.64 " " 8883 220096 191840 -29.2611 11.5379 5.64 " " 4444 100287 179968 -32.7158 10.7120 5.64 " " 4194 92845 201665 -38.9956 18.4742 5.64 " " 6910 169853 210197 -40.4364 11.5467 5.64 " " 4447 100378 222856 -42.4228 20.3981 5.64 " Kap2Sgr" 7787 193807 230184 -47.8792 14.9422 5.64 " " 5559 131657 225306 -80.8136 6.6674 5.64 " Zet Men" 2559 50506 258451 1.7856 9.7732 5.65 " " 3879 84607 117901 4.8797 8.0205 5.65 " " 3136 65900 116244 8.0319 18.4274 5.65 " " 6902 169689 123462 8.2572 22.0192 5.65 " 19 Peg" 8393 209167 127239 -0.5122 6.2595 5.65 " " 2233 43318 133028 -3.1144 19.8885 5.65 " " 7575 188041 143883 -3.3961 2.6283 5.65 " 81 Cet" 771 16400 130026 -8.4183 10.1822 5.65 " 18 Sex" 3996 88333 137395 -9.8533 20.5399 5.65 " " 7845 195564 163665 10.8183 13.4869 5.65 " 71 Vir" 5081 117304 100592 13.4133 6.8404 5.65 " 35 Gem" 2525 49738 96179 19.3294 21.0077 5.65 " " 8044 200044 106747 21.5792 4.3064 5.65 " 51 Tau" 1331 27176 76541 22.6322 17.0161 5.65 " " 6325 153834 84758 23.6017 6.8667 5.65 " " 2533 49968 78816 28.8231 17.3135 5.65 " " 6443 156874 85001 32.5725 22.5005 5.65 " 38 Peg" 8574 213323 72406 38.2839 21.7238 5.65 " 79 Cyg" 8307 206774 71643 42.0814 1.1719 5.65 " 44 And" 340 6920 36984 45.5983 16.5298 5.65 " " 6162 149303 46147 46.1803 7.6088 5.65 " " 2903 60437 41879 60.0483 17.4281 5.65 " " 6511 158460 17472 -13.0603 23.6277 5.65 " " 8958 222093 165804 -16.9761 5.4079 5.65 " " 1792 35505 150416 -24.7192 19.6005 5.65 " 51 Sgr" 7431 184552 188326 -24.8469 19.0410 5.65 " " 7195 176704 187599 -25.1642 23.0016 5.65 " " 8743 217303 191554 -27.6572 14.9776 5.65 " 59 Hya" 5577 132219 183058 -32.1594 8.5079 5.65 " " 3362 72227 199308 -32.1725 6.0723 5.65 " " 2149 41534 196459 -38.7261 18.5564 5.65 " Kap2CrA" 6953 170867 210295 -47.6992 10.3380 5.65 " " 4066 89736 221970 -48.3178 15.3634 5.65 " Nu 2Lup" 5699 136352 225697 -48.7631 16.6890 5.65 " " 6187 150136 227049 -49.6517 16.6945 5.65 " " 6188 150168 227058 -52.4456 20.2386 5.65 " " 7714 191829 246495 -54.5969 17.0017 5.65 " " 6297 153053 244338 -71.5053 8.3335 5.65 " Kap2Vol" 3302 71066 256499 -73.4467 15.6726 5.65 " Kap2Aps" 5782 138800 257307 -75.8967 11.6210 5.65 " Pi Cha" 4479 101132 256857 -80.4692 5.6194 5.65 " Pi Men" 2022 39091 258421 -83.0383 15.0796 5.65 " Pi 2Oct" 5545 131246 258714 -83.2278 15.0308 5.65 " Pi 1Oct" 5525 130650 258713 10.0817 8.7458 5.66 " 49 Cnc" 3465 74521 98089 16.4628 19.6215 5.66 " 4Eps Sge" 7463 185194 105061 21.4097 20.4279 5.66 " " 7811 194577 88664 21.9492 10.0469 5.66 " " 3952 87015 81154 25.8703 12.1976 5.66 " 4 Com" 4640 105981 82178 32.4742 8.8763 5.66 " 51Sig1Cnc" 3519 75698 61102 33.7294 20.2566 5.66 " " 7743 192787 69701 40.6603 12.2688 5.66 " 2 CVn" 4666 106690 44097 44.9678 3.8346 5.66 " " 1176 23838 39134 45.6819 3.7665 5.66 " " 1141 23300 39085 48.7408 4.8526 5.66 " " 1535 30557 39799 51.9586 15.3348 5.66 " " 5715 136729 29487 53.4014 8.6395 5.66 " " 3400 73017 26935 57.8150 18.9458 5.66 " 48 Dra" 7175 176408 31284 58.6236 21.3211 5.66 " " 8164 203338 33318 74.9881 0.7608 5.66 " 21 Cas" 192 4161 4216 -10.1072 6.7775 5.66 " " 2502 49147 151911 -11.7739 5.9121 5.66 " " 2065 39853 150932 -13.0567 1.4477 5.66 " 47 Cet" 421 8829 147812 -13.7581 10.9049 5.66 " " 4255 94481 156310 -14.0564 22.7952 5.66 " 69Tau1Aqr" 8673 215766 165298 -16.3758 4.9837 5.66 " " 1604 31925 150052 -18.7289 18.5033 5.66 " " 6933 170433 161540 -19.4125 7.5554 5.66 " " 2899 60341 153062 -20.7486 9.4868 5.66 " " 3763 82077 177521 -27.5975 12.8073 5.66 " " 4860 111295 181114 -33.0814 22.6476 5.66 " " 8616 214484 213981 -33.7039 20.0056 5.66 " " 7631 189245 211724 -46.7744 7.2710 5.66 " " 2771 56813 218589 -56.0856 8.1593 5.66 " " 3218 68434 235784 -62.0011 23.2827 5.66 " " 8843 219482 255446 1.2853 21.7028 5.67 " 26 Aqr" 8287 206445 126997 5.4200 6.0828 5.67 " 63 Ori" 2144 41361 113429 5.7717 21.6422 5.67 " 4 Peg" 8270 205924 126956 6.5347 3.8667 5.67 " 31 Tau" 1199 24263 111469 6.9556 0.5399 5.67 " 51 Psc" 132 2913 109262 8.6503 10.5839 5.67 " 49 Leo" 4148 91636 118380 9.5400 12.7729 5.67 " 33 Vir" 4849 111028 119580 9.9978 4.0295 5.67 " " 1243 25330 111566 -0.4828 9.0328 5.67 " " 3596 77353 136511 -0.6211 19.6787 5.67 " 45 Aql" 7480 185762 143678 -6.0092 5.5836 5.67 " " 1886 36959 132298 11.3317 13.2420 5.67 " " 4998 115046 100473 15.5814 8.9598 5.67 " 63Omi2Cnc" 3565 76582 98250 16.0314 20.0583 5.67 " " 7664 190229 105615 23.1014 19.9863 5.67 " 14 Vul" 7641 189410 88016 26.3011 15.1399 5.67 " 46 Boo" 5638 134320 83682 37.2517 1.9359 5.67 " 56 And" 557 11749 55107 41.7169 20.6990 5.67 " " 7926 197392 49946 45.5014 17.9989 5.67 " " 6728 164646 47121 47.4178 20.9305 5.67 " " 8020 199478 50246 47.8642 0.7407 5.67 " " 189 4142 36617 48.3008 4.6900 5.67 " " 1482 29526 39688 53.4206 17.3626 5.67 " " 6479 157681 30354 56.5822 10.8531 5.67 " 43 UMa" 4235 93859 27791 58.4236 2.1446 5.67 " " 618 12953 22959 61.6967 16.3964 5.67 " " 6130 148374 17073 67.1667 0.0783 5.67 " " 9104 225216 10956 -28.4175 16.2044 5.67 " 12 Sco" 6029 145483 184217 -29.7433 19.4490 5.67 " " 7380 182681 188127 -31.4464 0.2691 5.67 " " 57 1187 192430 -36.1350 14.6837 5.67 " " 5466 128974 205823 -39.5069 17.2045 5.67 " " 6381 155259 208521 -47.6792 11.0753 5.67 " " 4311 96113 222538 -51.2164 6.0137 5.67 " " 2138 41214 234251 -60.6569 15.3862 5.67 " " 5700 136359 253136 -64.6764 10.3180 5.67 " " 4065 89715 250917 -70.6275 13.4306 5.67 " " 5049 116458 257042 2.1022 23.6065 5.68 " 16 Psc" 8954 221950 128281 5.5686 4.5690 5.68 " " 1448 28978 111896 -0.4164 5.3588 5.68 " " 1764 35007 132024 -0.7094 20.0731 5.68 " 62 Aql" 7667 190299 144045 12.4475 2.6105 5.68 " 31 Ari" 763 16234 93022 14.9461 1.0848 5.68 " 72 Psc" 308 6397 92230 16.0789 7.0044 5.68 " 41 Gem" 2615 52005 96363 17.0894 12.6162 5.68 " 25 Com" 4801 109742 100176 19.6683 21.8937 5.68 " " 8358 208108 107474 24.6583 11.1470 5.68 " 67 Leo" 4332 96738 81692 26.1744 21.4094 5.68 " " 8198 203925 89685 30.3344 20.6499 5.68 " " 7904 196852 70323 32.4528 21.3472 5.68 " " 8166 203358 71230 46.9622 5.1786 5.68 " " 1668 33167 40077 70.8081 7.0226 5.68 " " 2581 50885 6041 76.2264 22.5378 5.68 " " 8599 214035 10414 80.0042 18.0026 5.68 " 41 Dra" 6810 166866 8996 -11.8492 5.1897 5.68 " " 1693 33664 150206 -14.5508 16.4964 5.68 " " 6140 148604 159948 -16.2489 8.1579 5.68 " " 3194 67880 153898 -23.1536 8.4153 5.68 " " 3308 71141 175777 -24.2517 14.8219 5.68 " " 5521 130529 182898 -24.8406 12.3893 5.68 " 6 Crv" 4711 107815 180747 -30.1250 21.1003 5.68 " Del Mic" 8070 200718 212709 -30.7656 4.7192 5.68 " " 1509 30080 195250 -33.5294 0.1343 5.68 " " 13 344 192367 -48.6011 7.6384 5.68 " " 2957 61715 218852 -50.3786 3.5430 5.68 " " 1090 22231 233152 -50.9500 23.0188 5.68 " " 8749 217403 247683 -63.1108 23.4836 5.68 " " 8919 221006 255497 -73.1731 21.1562 5.68 " " 8061 200525 257890 0.7172 14.7584 5.69 "108 Vir" 5501 129956 120642 2.0872 13.3616 5.69 " " 5037 116160 119899 3.1197 18.1650 5.69 " " 6797 166285 123198 3.6756 3.3519 5.69 " 97Kap2Cet" 1007 20791 111142 14.6511 6.3345 5.69 " " 2269 44033 95543 16.3175 17.5609 5.69 " " 6542 159353 102917 16.4378 9.6174 5.69 " 8 Leo" 3826 83189 98673 18.1053 18.9351 5.69 " " 7148 175743 104272 18.5403 5.5588 5.69 "120 Tau" 1858 36576 94649 18.8083 16.2580 5.69 " 16 Her" 6065 146388 102040 19.7003 3.7053 5.69 " 13 Tau" 1126 23016 93557 20.0117 2.7061 5.69 " 34Mu Ari" 793 16811 93062 20.5656 17.8069 5.69 " " 6638 162076 85429 20.8961 12.4953 5.69 " 20 Com" 4756 108765 82336 26.2914 19.0215 5.69 " " 7202 176871 86707 39.3908 6.6443 5.69 " 51 Aur" 2419 47070 59316 40.5997 19.8437 5.69 " " 7567 187879 48892 41.0772 21.7064 5.69 " 77 Cyg" 8300 206644 51207 48.7206 14.8281 5.69 " 39 Boo" 5538 131041 45231 49.2042 1.9760 5.69 " 3 Per" 568 11949 37665 49.3833 20.4506 5.69 " 43 Cyg" 7828 195068 49643 49.3889 21.3668 5.69 " " 8185 203644 50761 63.9803 20.3532 5.69 " " 7805 194298 18826 69.2375 9.7041 5.69 " " 3838 83489 14966 -13.8969 19.4227 5.69 " " 7367 182477 162595 -14.8464 7.8719 5.69 " 10 Pup" 3073 64238 153520 -20.0844 21.5808 5.69 " 37 Cap" 8245 205289 190461 -21.3597 18.9000 5.69 " 33 Sgr" 7114 174947 187422 -25.2311 7.1619 5.69 " " 2704 54912 173101 -28.6928 13.5433 5.69 " " 5097 117716 181737 -29.9075 1.6023 5.69 " Tau Scl" 462 9906 193201 -32.0306 6.5442 5.69 " " 2397 46547 196919 -41.4981 13.4489 5.69 " " 5060 116835 224148 -48.2150 0.5072 5.69 " " 120 2726 215119 -48.7436 15.1993 5.69 " Kap2Lup" 5647 134482 225526 -53.2122 8.5347 5.69 " " 3386 72737 236062 -54.3253 19.4634 5.69 " " 7370 182509 246110 -58.5997 16.4709 5.69 " " 6114 147977 243836 -67.7464 2.2579 5.69 " Pi 2Hyi" 678 14287 248521 -70.4972 7.1451 5.69 " Gam1Vol" 2735 55864 256373 -80.2139 4.2997 5.69 " Del Men" 1426 28525 258372 -80.9142 8.4055 5.69 " " 3393 72922 258496 -84.7697 1.6244 5.69 " " 525 11025 258273 -0.1597 5.3951 5.70 " " 1781 35299 132057 -0.9739 1.2470 5.70 " 38 Cet" 368 7476 129196 -2.0489 8.7674 5.70 " " 3478 74794 136254 -8.8197 4.1799 5.70 " " 1293 26464 131005 -9.7486 21.4203 5.70 " 19 Aqr" 8195 203875 145382 12.8086 5.9814 5.70 " " 2099 40369 95075 14.1225 12.8151 5.70 " 29 Com" 4865 111397 100283 17.9328 13.8869 5.70 " 7 Boo" 5225 121107 100751 19.5003 2.1771 5.70 " 15 Ari" 631 13325 92822 20.5728 15.3068 5.70 " " 5692 136138 83755 23.4947 16.1939 5.70 " 10 Her" 6039 145713 84240 28.9372 12.2918 5.70 " " 4673 106887 82219 28.9639 22.0930 5.70 " 23 Peg" 8419 209833 90217 31.9267 18.7310 5.70 " " 7044 173417 67293 34.9317 11.8283 5.70 " " 4536 102713 62718 43.6419 14.6368 5.70 " " 5464 128902 45145 49.2958 23.1293 5.70 " 5 And" 8805 218470 52713 53.7286 13.8975 5.70 " 86 UMa" 5238 121409 28928 54.4328 13.7766 5.70 " 84 UMa" 5187 120198 28885 55.7128 12.4597 5.70 " 73 UMa" 4745 108502 28394 58.3275 1.5572 5.70 " " 439 9352 22389 59.3331 23.1623 5.70 " 2 Cas" 8822 218753 35186 61.8503 4.2816 5.70 " " 1305 26670 13075 -12.2303 10.6090 5.70 " " 4158 91889 156095 -14.4928 7.6011 5.70 " " 2921 60855 153118 -16.3950 7.3245 5.70 " " 2788 57167 152724 -16.7406 4.9186 5.70 " " 1579 31414 149985 -18.0614 0.7954 5.70 " " 218 4585 147451 -18.6600 6.6063 5.70 " 6Nu 1CMa" 2423 47138 151694 -24.2856 10.0725 5.70 " " 3965 87427 178367 -25.2967 9.6167 5.70 " " 3830 83332 177748 -26.2964 20.9465 5.70 " " 8013 199260 189856 -31.7061 6.8398 5.70 " " 2545 50123 197263 -32.5817 17.5785 5.70 " " 6535 159176 208977 -47.2203 18.4988 5.70 " " 6922 170069 229064 -47.9692 22.9466 5.70 " Tau3Gru" 8722 216823 231364 -48.6844 8.1527 5.70 " " 3203 68161 219493 -49.0750 0.1053 5.70 " " 6 142 214963 -54.3672 7.8749 5.70 " " 3088 64722 235579 -56.5017 0.6962 5.70 " Xi Phe" 183 3980 232152 -58.7542 6.5329 5.70 " Mu Pic" 2412 46860 234564 -62.6494 11.8409 5.70 " " 4541 102878 251605 -62.8642 17.4003 5.70 " " 6440 156838 253903 -62.8714 0.8939 5.70 " " 257 5276 248276 -72.4008 16.0988 5.70 " " 5955 143346 257357 -78.3519 3.4997 5.70 " " 1109 22676 255998 0.5878 3.6131 5.71 " " 1099 22468 111291 1.8547 12.6396 5.71 " " 4807 109896 119508 5.1003 6.2878 5.71 " " 2251 43587 113683 8.1883 9.4748 5.71 " 3 Leo" 3755 81873 117718 -0.1406 15.0303 5.71 " " 5594 132933 120798 -0.6958 2.6872 5.71 " 84 Cet" 790 16765 130055 -4.2761 21.9029 5.71 " " 8360 208111 145731 -8.2272 19.9104 5.71 " 57 Aql" 7593 188293 143898 14.1153 15.7881 5.71 " 31Ups Ser" 5870 141187 101739 14.5494 22.6813 5.71 " " 8631 214850 108094 15.2797 2.2176 5.71 " 19 Ari" 648 13596 92841 16.3011 17.4087 5.71 " " 6481 157740 102805 16.3883 14.9532 5.71 " " 5575 132146 101299 17.5944 23.1785 5.71 " " 8824 218792 108443 24.2742 21.3997 5.71 " " 8190 203803 89678 24.3278 17.7227 5.71 " 84 Her" 6608 161239 85360 27.8975 7.2659 5.71 " 53 Gem" 2738 55870 79221 29.8967 20.0604 5.71 " " 7670 190360 88133 32.2306 18.0971 5.71 " " 6768 165683 66626 32.6067 6.8281 5.71 " " 2512 49380 59521 37.3122 2.5941 5.71 " " 748 16028 55684 42.5867 4.8799 5.71 " " 1550 30823 39826 42.9539 22.2457 5.71 " " 8489 211211 51797 55.7969 21.8669 5.71 " " 8357 208095 33819 56.6250 22.5613 5.71 " " 8594 213930 34574 57.8606 4.2856 5.71 " " 1313 26755 24514 62.5072 8.3215 5.71 " " 3245 69148 14500 70.2000 12.2524 5.71 " " 4659 106574 7532 -10.1250 18.7787 5.71 " " 7055 173638 161817 -13.6369 20.0329 5.71 " 63 Sgr" 7649 189741 163195 -18.5597 3.3114 5.71 " " 997 20631 148897 -22.7742 6.1633 5.71 " " 2186 42443 171317 -23.8403 7.1229 5.71 " " 2690 54309 173002 -25.2742 2.9934 5.71 " Zet For" 901 18692 168209 -27.2878 11.0993 5.71 " Chi2Hya" 4317 96314 179522 -30.4703 6.6619 5.71 " " 2460 47946 197057 -33.7372 10.9872 5.71 " " 4282 95221 201976 -35.6814 3.4593 5.71 " Chi2For" 1054 21574 194312 -36.9906 6.6205 5.71 " " 2446 47500 197014 -39.6786 5.3900 5.71 " " 1793 35515 195807 -40.3572 3.9064 5.71 " " 1219 24744 216546 -40.8397 16.7452 5.71 " " 6214 150742 227146 -43.4458 19.4900 5.71 " " 7392 183007 229712 -45.1914 8.6765 5.71 " " 3444 74167 220261 -45.2839 9.9049 5.71 " " 3925 85980 221592 -47.3725 11.5870 5.71 " " 4463 100733 222887 -48.8100 0.0179 5.71 " Tau Phe" 9081 224834 231895 -52.1611 13.9201 5.71 " " 5230 121190 241294 -53.4597 13.1273 5.71 " " 4951 113902 240573 -54.9656 8.9200 5.71 " " 3570 76653 236405 -60.7894 1.6967 5.71 " " 505 10615 248421 -64.5314 15.4592 5.71 " " 5725 137066 253174 -66.0397 6.1026 5.71 " Eta1Dor" 2194 42525 249448 -67.6525 13.9136 5.71 " " 5218 120913 252511 5.5231 4.1890 5.72 " 45 Tau" 1292 26462 111648 5.8069 12.1676 5.72 " 11 Vir" 4629 105702 119249 -3.9572 0.5007 5.72 " 12 Cet" 117 2637 128791 -4.9878 22.9197 5.72 " " 8716 216718 146388 -6.0650 5.6099 5.72 " " 1911 37209 132359 -6.7389 4.5652 5.72 " 46 Eri" 1449 29009 131309 -7.9822 8.5912 5.72 " 3 Hya" 3398 72968 136076 11.8158 19.8117 5.72 " 52Pi Aql" 7544 187259 105282 13.3150 20.6455 5.72 " 8The Del" 7892 196725 106342 14.0772 4.3676 5.72 " 60 Tau" 1368 27628 93892 14.4883 5.7870 5.72 "131 Tau" 1989 38545 94855 17.6972 17.7856 5.72 " " 6627 161833 103106 21.6200 4.4669 5.72 " " 1403 28226 76618 29.0769 3.1602 5.72 " 55 Ari" 944 19548 75757 29.8067 16.8442 5.72 " 50 Her" 6258 152173 84641 33.5867 4.1831 5.72 " " 1286 26311 57047 34.0347 10.9162 5.72 " " 4256 94497 62310 41.0353 0.2252 5.72 " 23 And" 41 905 36173 48.1839 7.4810 5.72 " " 2844 58661 41797 62.2575 20.3269 5.72 " 71 Dra" 7792 193964 18807 72.2056 9.5816 5.72 " 22 UMa" 3768 82189 6898 80.1364 17.3269 5.72 " " 6529 158996 2859 -10.7958 18.5238 5.72 " " 6946 170740 161569 -12.3694 15.3978 5.72 " " 5720 136956 159227 -14.4019 23.8426 5.72 " " 9029 223559 165915 -15.0531 19.4364 5.72 " " 7378 182645 162609 -16.4178 4.9218 5.72 " " 1581 31444 149988 -21.2836 4.7512 5.72 " " 1521 30238 169727 -27.1542 6.1763 5.72 " " 2200 42621 171339 -36.8325 1.7008 5.72 " " 498 10538 193261 -43.5078 18.5323 5.72 " " 6937 170521 229094 -46.8497 7.2461 5.72 " " 2761 56455 218570 -48.8303 7.6122 5.72 " " 2940 61391 218841 -50.2439 9.9143 5.72 " " 3927 86087 237483 -58.0606 10.1963 5.72 " " 4009 88661 237776 -60.3297 12.8549 5.72 " " 4876 111613 252054 -64.4044 23.7367 5.72 " " 8996 222820 255557 2.1022 8.4265 5.73 " " 3305 71095 116747 2.4994 6.1494 5.73 " " 2174 42111 113507 3.9933 18.1594 5.73 " 73 Oph" 6795 166233 123187 6.1942 18.4663 5.73 " " 6928 170200 123516 8.5342 16.1411 5.73 " 47 Ser" 6010 145002 121383 -5.3961 13.5920 5.73 " 80 Vir" 5111 118219 139428 25.3756 6.9218 5.73 " 37 Gem" 2569 50692 78866 25.5072 8.1742 5.73 " 14Psi Cnc" 3191 67767 79995 29.6453 9.9934 5.73 " " 3942 86513 81129 31.7461 11.6929 5.73 " 62 UMa" 4501 101606 62658 34.1306 4.4081 5.73 " 55 Per" 1377 27777 57212 37.5944 18.7467 5.73 " 7Zet2Lyr" 7057 173649 67324 38.3444 7.6707 5.73 " " 2935 61294 60257 39.6342 22.5979 5.73 " 8 Lac" 8603 214168 72509 40.4592 14.7290 5.73 " " 5493 129846 45190 47.9019 6.0163 5.73 " 36 Aur" 2101 40394 40778 51.2367 19.5722 5.73 " " 7451 184960 31782 53.5633 21.1710 5.73 " " 8106 201834 33185 54.4289 5.6098 5.73 " " 1866 36678 25276 61.9622 8.8896 5.73 " 5 UMa" 3505 75486 14691 77.9958 6.6747 5.73 " " 2363 45866 5919 -11.2867 3.4669 5.73 " " 1050 21530 148972 -11.9108 23.7878 5.73 " " 9009 223170 165880 -12.0147 18.3867 5.73 " " 6881 169033 161415 -18.3286 9.1512 5.73 " " 3638 78702 154950 -18.5575 5.7227 5.73 " " 1975 38206 150739 -19.7478 9.1996 5.73 " " 3653 79181 154989 -24.9975 14.7204 5.73 " 4 Lib" 5484 129433 182795 -26.1525 5.0878 5.73 " " 1655 32890 170050 -26.1714 21.6031 5.73 " 8 PsA" 8253 205471 190478 -27.0328 20.2548 5.73 " " 7722 192310 189065 -35.1864 12.4227 5.73 " " 4724 108114 203450 -36.7556 16.1212 5.73 " " 5991 144415 207341 -38.1394 7.6622 5.73 " " 2963 61878 198265 -46.9344 9.8450 5.73 " " 3904 85483 221538 -47.3597 3.7544 5.73 " " 1169 23719 216470 -52.7875 12.8494 5.73 " " 4872 111588 240314 -55.0558 15.8519 5.73 " " 5873 141318 243044 -57.7122 17.0735 5.73 " " 6320 153716 244401 -60.9039 15.2768 5.73 " " 5661 135160 253082 -65.0778 18.8105 5.73 " The Pav" 7036 173168 254374 -82.1700 23.9591 5.73 " Gam2Oct" 9061 224362 258996 1.1811 16.6951 5.74 " 14 Oph" 6205 150557 121790 -2.2719 6.8212 5.74 " " 2521 49643 133718 13.0239 19.4400 5.74 " " 7389 182900 104832 15.3361 7.0382 5.74 " " 2632 52556 96403 15.4133 11.4950 5.74 " 85 Leo" 4426 99902 99629 19.1883 0.9098 5.74 " 66 Psc" 254 5267 92145 22.9603 17.4018 5.74 " 73 Her" 6480 157728 85062 23.5772 1.9308 5.74 " 7 Ari" 559 11763 75030 24.6133 13.6164 5.74 " " 5123 118508 82905 30.2086 5.4523 5.74 " " 1804 35600 58040 36.3094 11.1553 5.74 " " 4333 96813 62427 36.3517 22.9290 5.74 " " 8723 216831 72851 41.2436 17.5520 5.74 " " 6550 159501 46792 45.6319 8.9472 5.74 " " 3545 76291 42612 46.1161 14.8219 5.74 " 38 Boo" 5533 130945 45226 49.3683 14.5777 5.74 " " 5452 128333 45121 53.0469 0.4184 5.74 " " 96 2054 21381 53.8917 10.0768 5.74 " " 3954 87141 27503 54.6306 15.5992 5.74 " " 5818 139493 29588 55.2050 16.4070 5.74 " " 6127 148330 29931 61.5333 0.2825 5.74 " " 60 1239 11084 62.5267 18.6260 5.74 " " 7018 172728 17958 73.2681 5.3037 5.74 " " 1683 33541 5483 -13.8592 12.5433 5.74 " " 4776 109141 157350 -19.4003 9.5390 5.74 " " 3796 82573 155273 -19.7022 7.6114 5.74 " " 2928 61068 153149 -20.4047 6.9174 5.74 " 17 CMa" 2588 51055 172569 -21.4156 14.9578 5.74 " " 5568 131977 183040 -32.3711 6.4776 5.74 " " 2364 45871 196861 -33.5700 11.6097 5.74 " " 4469 100893 202622 -36.8583 17.9821 5.74 " " 6691 163652 209545 -38.2533 19.0549 5.74 " " 7197 176723 210859 -40.2117 14.6123 5.74 " " 5449 128207 205751 -45.0667 10.5326 5.74 " " 4135 91355 222126 -47.4411 14.7748 5.74 " " 5494 129858 225178 -54.9711 19.8771 5.74 " " 7548 187420 246311 -57.3217 3.2092 5.74 " " 977 20234 233037 -58.5036 16.7726 5.74 " " 6215 150745 244122 -59.6194 11.2252 5.74 " " 4361 97670 238877 -60.5264 7.9385 5.74 " " 3120 65662 250019 -63.7044 2.7576 5.74 " Gam Hor" 833 17504 248642 -68.3075 12.3700 5.74 " Zet1Mus" 4704 107567 251868 4.3936 22.4437 5.75 " 34 Peg" 8548 212754 127529 5.2806 0.8064 5.75 " " 222 4628 109471 7.4711 7.1304 5.75 " " 2682 54079 114947 -0.3094 18.6267 5.75 " " 6993 171978 142444 -1.3192 6.8053 5.75 " " 2514 49434 133687 -2.3247 16.6060 5.75 " 12 Oph" 6171 149661 141269 -3.9014 7.2364 5.75 " " 2731 55775 134391 -5.1639 13.4092 5.75 " 66 Vir" 5050 116568 139324 -5.3872 22.2851 5.75 " 44 Aqr" 8504 211434 145993 -7.6628 3.0194 5.75 " 8Rho1Eri" 907 18784 130243 -7.8594 2.5785 5.75 " 77 Cet" 752 16074 129984 -8.9967 23.8807 5.75 " " 9040 223807 146953 -9.5697 0.2485 5.75 " " 51 1064 128660 11.7289 22.9866 5.75 " 52 Peg" 8739 217232 108307 19.4756 22.1246 5.75 " " 8435 210074 107675 19.7906 6.2004 5.75 " 68 Ori" 2193 42509 95359 19.9556 13.6779 5.75 " 1 Boo" 5144 119055 82942 23.1133 6.1622 5.75 " 3 Gem" 2173 42087 78050 24.0811 8.5251 5.75 " 30Ups1Cnc" 3355 72041 80229 25.5056 17.0385 5.75 " " 6333 154084 84776 27.0819 0.0362 5.75 " 85 Peg" 9088 224930 91669 35.3642 9.3072 5.75 " " 3686 80024 61387 42.5661 15.9252 5.75 " 4 Her" 5938 142926 45790 42.9119 23.4521 5.75 " 13 And" 8913 220885 53039 46.7978 15.6378 5.75 " " 5830 139798 45650 49.9778 21.5491 5.75 " " 8246 205314 51019 52.3206 19.4572 5.75 " 7Iot1Cyg" 7408 183534 31673 52.8694 4.9353 5.75 " " 1561 31134 24919 53.8017 17.7331 5.75 " " 6618 161693 30538 54.2839 9.0668 5.75 " " 3592 77309 27105 55.8506 11.4325 5.75 " " 4407 99283 28017 57.8997 2.3000 5.75 " 8 Per" 661 13982 23143 62.0786 20.1930 5.75 " 68 Dra" 7727 192455 18751 62.8044 22.3035 5.75 " 25 Cep" 8511 211833 19991 68.4433 10.6967 5.75 " " 4176 92354 15260 82.5311 20.7098 5.75 " 76 Dra" 8002 199095 3458 -10.3267 7.4895 5.75 " " 2867 59381 152941 -10.9264 17.6360 5.75 " " 6568 160018 160708 -11.3247 1.6958 5.75 " " 492 10453 147962 -17.3739 18.2866 5.75 " " 6838 167720 161260 -17.5864 8.3652 5.75 " " 3281 70523 154159 -18.2414 8.9201 5.75 " " 3554 76376 154745 -18.8600 18.3564 5.75 " " 6863 168608 161376 -22.7950 5.0458 5.75 " 1 Lep" 1634 32503 170010 -24.9892 17.0026 5.75 " 26 Oph" 6310 153363 184897 -30.0447 2.6026 5.75 " Iot1For" 767 16307 193795 -35.1139 8.4665 5.75 " " 3343 71801 199260 -44.3261 12.1483 5.75 " " 4624 105509 223241 -46.0475 9.3733 5.75 " " 3730 81136 221109 -46.1556 8.7886 5.75 " " 3496 75276 220464 -51.8914 23.4036 5.75 " " 8898 220440 247858 -52.2972 17.4660 5.75 " " 6483 157753 244763 -53.1858 19.5483 5.75 " " 7411 183552 246151 -53.2631 21.2628 5.75 " " 8114 202103 246929 -62.5208 4.4627 5.75 " " 1435 28732 249029 -65.0378 15.9828 5.75 " " 5920 142514 253362 -66.5878 14.2774 5.75 " " 5320 124471 252678 -67.9414 16.2849 5.75 " " 6037 145689 253481 -69.1639 19.9781 5.75 " " 7579 188097 254693 -69.4014 13.8632 5.75 " " 5194 120404 252481 -78.7914 23.7446 5.75 " " 8995 222806 258179 -5.4281 7.8800 5.76 " " 3072 64235 135205 -7.0253 1.5619 5.76 " " 448 9562 129371 21.6961 13.9775 5.76 " 10 Boo" 5255 121996 83103 22.1953 16.5204 5.76 " " 6154 149009 84423 24.5547 3.7651 5.76 " 21 Tau" 1151 23432 76159 27.6381 7.4093 5.76 " 59 Gem" 2816 57927 79366 29.5700 5.3535 5.76 " " 1752 34790 77124 33.9597 4.4104 5.76 " 56 Per" 1379 27786 57216 36.9961 19.9134 5.76 " " 7606 188650 69072 41.2294 10.3696 5.76 " " 4067 89744 43309 44.5461 22.7695 5.76 " " 8666 215664 52348 48.6506 3.8941 5.76 " " 1198 24240 39175 49.5103 21.3247 5.76 " " 8161 203245 50713 55.3972 20.3069 5.76 " " 7781 193592 32455 55.3978 14.5419 5.76 " " 5442 128000 29191 59.9694 3.7119 5.76 " " 1112 22764 24169 -13.5294 22.4075 5.76 " 50 Aqr" 8534 212430 165044 -14.8536 18.5608 5.76 " " 6962 171130 161605 -24.4633 11.4941 5.76 " " 4428 99922 179935 -26.3328 15.1718 5.76 " " 5641 134373 183237 -31.5983 20.6899 5.76 " " 7909 196917 212345 -35.9772 5.2413 5.76 " " 1721 34266 195683 -37.1472 8.7477 5.76 " " 3479 74824 199573 -38.2608 7.6633 5.76 " " 2964 61899 198268 -38.9292 12.2237 5.76 " " 4648 106231 203250 -44.1297 17.3133 5.76 " " 6420 156293 227813 -46.6442 8.2000 5.76 " " 3232 68808 219587 -48.1772 6.4288 5.76 " " 2348 45572 217922 -51.2653 21.0060 5.76 " " 8027 199623 246820 -53.2317 11.2276 5.76 " " 4360 97651 238878 -56.1947 1.6633 5.76 " " 487 10361 232490 -57.5231 18.4991 5.76 " " 6908 169836 245510 -60.3286 12.8894 5.76 " " 4887 111904 252069 -60.4828 15.9350 5.76 " " 5905 142139 253353 -63.9289 21.1425 5.76 " " 8073 200751 254941 -66.9494 20.0064 5.76 " Mu 1Pav" 7603 188584 254702 -67.0842 15.1583 5.76 " " 5621 133683 253031 1.0761 23.8243 5.77 " 21 Psc" 9022 223438 128401 1.9397 0.4234 5.77 " 44 Psc" 97 2114 109192 3.0600 11.5728 5.77 " 89 Leo" 4455 100563 118929 4.2197 16.6774 5.77 " 37 Her" 6195 150378 121776 4.6147 10.2134 5.77 " 19 Sex" 4004 88547 118164 6.1014 17.8873 5.77 " " 6670 162917 122880 6.1308 4.3448 5.77 " " 1360 27497 111756 8.3803 6.8804 5.77 " " 2551 50277 114556 8.8528 17.3993 5.77 " " 6476 157617 122346 9.3736 3.5433 5.77 " 6 Tau" 1079 21933 111246 -0.5408 6.8472 5.77 " " 2530 49933 133760 -3.9831 21.5882 5.77 " " 8251 205423 145510 -4.7514 18.1042 5.77 " " 6756 165438 142085 11.5561 13.2091 5.77 " " 4986 114780 100460 13.4806 7.6977 5.77 " " 2965 61885 97154 14.4464 14.9370 5.77 " " 5567 131951 101293 15.3117 2.7425 5.77 " 37Omi Ari" 809 17036 93082 16.9286 18.5179 5.77 " " 6955 170878 103800 17.2389 5.4671 5.77 "117 Tau" 1816 35802 94573 19.8267 21.8595 5.77 " " 8348 207840 107445 24.2508 19.1107 5.77 " " 7250 178187 86817 24.3100 17.6253 5.77 " 79 Her" 6571 160181 85264 28.2506 20.8578 5.77 " " 7988 198726 89216 34.3592 3.8649 5.77 " " 1191 24131 56761 38.1822 23.3481 5.77 " 12 And" 8885 220117 73190 38.4075 19.7911 5.77 " " 7543 187235 68859 38.9253 10.5018 5.77 " 32 LMi" 4113 90840 62076 45.2281 7.3549 5.77 " " 2776 56963 41708 48.8597 18.9131 5.77 " " 7154 175824 47913 53.9108 4.5338 5.77 " 1 Cam" 1417 28446 24672 55.1058 2.7174 5.77 " 11 Per" 785 16727 23555 59.0475 8.0224 5.77 " " 3106 65301 26618 78.6439 13.4491 5.77 " " 5091 117566 7821 -12.3578 9.1532 5.77 " " 3636 78668 154953 -16.3294 4.8090 5.77 " 59 Eri" 1538 30606 149901 -17.4661 6.4770 5.77 " " 2359 45765 151546 -22.7806 18.0318 5.77 " " 6716 164402 186135 -25.0103 14.0000 5.77 " 48 Hya" 5257 122066 182152 -26.6464 14.7993 5.77 " 57 Hya" 5517 130274 182883 -27.0119 7.5764 5.77 " " 2916 60666 174033 -31.4564 7.4847 5.77 " " 2873 59550 198042 -41.0067 21.4069 5.77 " The2Mic" 8180 203585 230667 -41.1056 23.2496 5.77 " " 8835 219263 231512 -41.1511 16.9162 5.77 " " 6272 152408 227425 -43.4247 18.1138 5.77 " " 6749 165189 228708 -43.4247 18.1138 5.77 " " 6750 165190 0 -44.6733 12.5784 5.77 " " 4788 109409 223527 -46.8806 13.3494 5.77 " " 5029 115912 224080 -46.8992 13.8631 5.77 " " 5206 120640 224489 -49.0883 15.1239 5.77 " " 5617 133631 225456 -53.2094 15.8353 5.77 " " 5869 141168 243022 -55.1400 16.3403 5.77 " " 6073 146690 243654 -60.1778 15.9256 5.77 " " 5900 142049 253349 -60.6736 17.4052 5.77 " " 6447 156942 253908 -61.9503 9.4242 5.77 " " 3752 81830 250575 -64.2489 10.7309 5.77 " " 4204 93163 251095 -80.9650 20.5549 5.77 " " 7785 193721 258861 -84.9942 0.2221 5.77 " " 47 1032 258217 -85.9672 22.5271 5.77 " Ups Oct" 8505 211539 258932 1.7892 5.4986 5.78 " " 1833 36166 112830 9.1858 7.0942 5.78 " " 2663 53510 114899 -4.8369 22.4019 5.78 " 51 Aqr" 8533 212404 146067 -5.6739 4.8101 5.78 " " 1536 30562 131504 -8.6650 5.1389 5.78 " " 1671 33224 131806 -9.4531 2.6701 5.78 " " 784 16673 130047 10.0222 13.1534 5.78 " " 4960 114256 100436 11.6244 22.1771 5.78 " " 8458 210502 107712 15.7903 7.9498 5.78 " 1 Cnc" 3095 64960 97399 18.2033 18.5868 5.78 " " 6977 171623 103879 21.7028 22.1306 5.78 " 25 Peg" 8438 210129 90252 23.8544 13.4185 5.78 " " 5057 116706 82825 26.6739 22.0865 5.78 " " 8415 209761 90214 26.8567 7.1898 5.78 " 47 Gem" 2700 54801 79141 27.5522 12.8215 5.78 " 30 Com" 4869 111469 82515 28.6150 4.6888 5.78 " " 1490 29646 76707 29.1503 16.2791 5.78 " 18Ups CrB" 6074 146738 84281 32.6933 6.2056 5.78 " " 2189 42471 58852 36.4194 8.5788 5.78 " 33 Lyn" 3377 72524 60907 40.8833 7.3006 5.78 " 64 Aur" 2753 56221 41679 46.6939 20.5653 5.78 " " 7870 196178 49804 52.8822 22.0307 5.78 " " 8403 209419 33985 56.4881 20.7394 5.78 " " 7944 197939 32849 60.5511 1.7221 5.78 " 44 Cas" 491 10425 11941 65.7456 2.6267 5.78 " " 747 16024 12361 81.4483 2.7966 5.78 " " 774 16458 433 -11.2514 7.2187 5.78 " " 2723 55589 152570 -12.7456 16.1268 5.78 " 11 Sco" 6002 144708 159715 -13.7519 7.4190 5.78 " " 2832 58461 152840 -15.8344 9.3259 5.78 " " 3704 80479 155091 -16.5289 0.0721 5.78 " " 9101 225197 147064 -17.9231 20.9133 5.78 " 19 Cap" 8000 199012 163975 -21.1961 21.4541 5.78 " 35 Cap" 8207 204139 190349 -21.8128 6.1160 5.78 " " 2166 41933 171251 -23.1417 15.6300 5.78 " " 5806 139254 183637 -25.2178 7.4237 5.78 " " 2841 58612 173697 -26.4950 13.6134 5.78 " " 5120 118349 181790 -33.0800 5.5876 5.78 " " 1909 37192 195986 -34.3967 6.3281 5.78 " " 2279 44323 196686 -35.1397 5.5521 5.78 " " 1881 36874 195952 -35.4906 8.2370 5.78 " " 3242 69123 198979 -42.6342 3.4986 5.78 " " 1075 21882 216347 -51.7561 10.2244 5.78 " " 4020 88842 237807 -60.1644 17.8599 5.78 " " 6624 161814 254057 -60.2836 7.8202 5.78 " " 3070 64185 249975 -60.3542 8.8969 5.78 " " 3560 76538 250369 -64.5511 18.7270 5.78 " " 7004 172211 254353 -70.4317 22.4196 5.78 " " 8527 212211 258034 -73.7414 5.5791 5.78 " " 1964 37993 256208 0.4953 6.6848 5.79 " " 2461 47964 114269 4.7478 10.7225 5.79 " 35 Sex" 4193 92841 118449 6.7086 9.7694 5.79 " " 3876 84542 117898 8.0606 11.2338 5.79 " " 4358 97605 118735 8.8208 0.2497 5.79 " 35 Psc" 50 1061 109087 9.3133 23.8559 5.79 " 80 Peg" 9030 223637 128421 9.5222 5.7811 5.79 " " 1987 38527 113124 -3.4464 5.4899 5.79 " " 1830 36134 132170 -3.8119 12.9943 5.79 " 44 Vir" 4921 112846 139086 -8.5742 19.9023 5.79 " 56 Aql" 7584 188154 143894 -8.8978 10.8384 5.79 " 41 Sex" 4237 93903 137823 -9.0400 22.2813 5.79 " " 8500 211392 145992 16.0333 4.6359 5.79 " 89 Tau" 1472 29375 94043 23.9486 4.9635 5.79 " 99 Tau" 1586 31553 76858 25.7831 2.2628 5.79 " 20 Ari" 656 13871 75239 26.7631 22.4862 5.79 " " 8564 213179 90544 27.2569 3.2039 5.79 " 56 Ari" 954 19832 75788 28.9842 6.6397 5.79 " 53 Aur" 2425 47152 78571 32.6903 1.8116 5.79 " " 523 11007 54994 32.9114 0.3460 5.79 " " 79 1632 53825 40.8553 13.2589 5.79 " 19 CVn" 5004 115271 44531 42.0781 23.3312 5.79 " 10 And" 8876 219981 52914 46.6133 16.6031 5.79 " " 6183 150030 46184 50.7928 1.8693 5.79 " 2 Per" 536 11291 22696 57.1408 3.2633 5.79 " " 964 20041 23903 58.2636 1.1426 5.79 " " 326 6676 22032 60.3261 0.6076 5.79 " " 146 3283 11291 60.6406 20.2244 5.79 " " 7742 192781 18766 63.2914 22.2062 5.79 " " 8483 211029 19937 63.3414 15.3773 5.79 " " 5737 137443 16713 64.2086 15.5155 5.79 " " 5785 138852 16754 72.1569 17.6994 5.79 " 31Psi1Dra" 6637 162004 8891 72.3914 13.4356 5.79 " " 5073 117187 7814 75.3717 22.6203 5.79 " " 8625 214710 10440 86.9681 17.5133 5.79 " 24 UMi" 6811 166926 2940 -11.5569 7.4644 5.79 " " 2859 59067 152909 -16.3767 18.9253 5.79 " " 7126 175317 161984 -17.0839 6.8394 5.79 " " 2535 49980 151992 -20.3561 4.1934 5.79 " " 1300 26591 169206 -32.5431 1.4495 5.79 " " 423 8879 193122 -34.5783 2.6163 5.79 " Lam2For" 772 16417 193811 -37.1794 16.4707 5.79 " " 6122 148247 207688 -38.9111 12.3958 5.79 " " 4714 107860 203424 -40.5839 15.1367 5.79 " " 5624 133880 225474 -40.8933 7.1186 5.79 " " 2691 54475 218465 -41.4783 23.0665 5.79 " " 8771 217842 231419 -42.2331 13.1858 5.79 " " 4970 114435 223960 -44.1606 8.4854 5.79 " " 3356 72067 219982 -46.5839 9.1926 5.79 " " 3658 79275 220937 -46.9219 17.6879 5.79 " " 6572 160263 228279 -56.7794 11.3856 5.79 " " 4398 99022 239017 -59.4258 9.8534 5.79 " " 3913 85655 237418 -60.9639 9.0127 5.79 " " 3604 77615 250417 -62.8236 4.5594 5.79 " " 1475 29399 249054 -64.5769 13.6697 5.79 " " 5130 118666 252400 -66.1958 7.8281 5.79 " " 3081 64484 249978 -69.2683 16.9927 5.79 " " 6276 152564 253756 -79.5044 8.7653 5.79 " " 3543 76236 256552 -81.5800 4.3494 5.79 " Nu Men" 1456 29116 258378 0.8900 6.5877 5.80 " " 2409 46769 114097 1.9503 19.4836 5.80 " 35 Aql" 7400 183324 124675 8.4286 5.3621 5.80 " " 1763 34989 112667 9.8711 5.8341 5.80 " " 2014 39007 113179 11.3864 22.0553 5.80 " 21 Peg" 8404 209459 107625 11.4303 11.4164 5.80 " " 4404 99196 99598 15.2633 14.2912 5.80 " " 5352 125180 100956 17.0700 20.0684 5.80 " 15 Sge" 7672 190406 105635 17.4336 1.5986 5.80 " " 457 9780 92531 17.7931 20.3393 5.80 " " 7780 193579 105991 20.6686 2.9681 5.80 " 47 Ari" 878 18404 75662 24.4203 6.1923 5.80 " 5 Gem" 2185 42398 78079 25.4578 1.1721 5.80 " " 341 6953 74530 27.7811 11.6050 5.80 " " 4465 100808 81893 28.6158 14.8329 5.80 " " 5532 130917 83551 32.2253 21.4690 5.80 " " 8220 204485 71371 44.4292 23.6256 5.80 " " 8962 222109 53202 51.8872 7.4159 5.80 " " 2804 57646 26333 54.4703 17.0888 5.80 " 21Mu Dra" 6370 154906 30239 56.6114 21.9148 5.80 " 13 Cep" 8371 208501 33864 57.1992 10.7287 5.80 " 39 UMa" 4187 92728 27748 57.9750 3.8954 5.80 " " 1192 24141 24276 61.3142 0.0851 5.80 " " 9110 225289 10962 67.2017 3.7669 5.80 " " 1124 23005 12890 68.8886 2.8663 5.80 " " 829 17463 12472 76.9058 12.0875 5.80 " " 4609 104985 7500 -11.6167 22.8913 5.80 " 74 Aqr" 8704 216494 165359 -11.8983 14.9064 5.80 " 13Xi 1Lib" 5554 131530 158887 -16.1242 20.6757 5.80 " " 7905 196857 163783 -16.9292 1.8811 5.80 " " 547 11522 148078 -25.9067 19.2205 5.80 " " 7277 179323 187835 -28.0653 17.9450 5.80 " " 6680 163318 185975 -30.9489 6.7587 5.80 " " 2501 49131 197177 -35.5136 6.0909 5.80 " " 2160 41759 196483 -36.0628 7.7360 5.80 " " 3007 62781 198366 -36.1850 15.9559 5.80 " " 5929 142691 207152 -36.4969 7.6455 5.80 " " 2954 61641 198237 -38.3189 7.2755 5.80 " " 2769 56733 197785 -39.8700 12.6003 5.80 " " 4796 109573 203621 -44.3722 11.2208 5.80 " " 4354 97576 222647 -47.5517 0.7627 5.80 " " 209 4391 215232 -50.9700 8.5978 5.80 " " 3413 73340 236110 -52.4100 6.7649 5.80 " " 2515 49517 234699 -56.5247 12.4983 5.80 " " 4754 108732 239999 -56.5253 17.3852 5.80 " " 6442 156854 244685 -57.2597 9.6839 5.80 " " 3864 84152 237224 -60.2811 6.4038 5.80 " " 2345 45557 249535 3.3714 7.5711 5.81 " 9Del3CMi" 2901 60357 115644 6.1853 10.9337 5.81 " 56 Leo" 4267 94705 118576 7.7297 2.6098 5.81 " " 766 16247 110640 9.5867 17.5769 5.81 " 53 Oph" 6548 159480 122526 -2.1517 8.5671 5.81 " " 3383 72660 136044 -3.2092 4.5437 5.81 " " 1441 28843 131279 15.0400 4.9306 5.81 " " 1576 31373 94212 18.4639 15.6985 5.81 " 22Tau7Ser" 5845 140232 101686 19.8914 19.4413 5.81 " " 7391 182955 104839 24.7686 19.4825 5.81 " 8 Vul" 7406 183491 87267 25.0503 4.9693 5.81 " 98 Tau" 1590 31592 76862 25.1086 15.1432 5.81 " " 5640 134335 83685 37.7242 1.1862 5.81 " 45 And" 348 7019 54494 39.8994 3.5597 5.81 " " 1078 21912 56538 40.3769 22.9019 5.81 " " 8712 216646 52471 44.7492 22.8945 5.81 " " 8708 216608 52465 50.7286 20.9404 5.81 " " 8025 199611 33004 52.4256 19.1405 5.81 " " 7275 179094 31413 53.1911 12.2915 5.81 " " 4672 106884 28327 55.8267 15.8713 5.81 " " 5922 142531 29698 56.7775 12.4176 5.81 " 71 UMa" 4726 108135 28375 70.2647 1.5205 5.81 " 38 Cas" 427 9021 4422 -18.5197 22.1497 5.81 " 35 Aqr" 8439 210191 164888 -20.9031 3.8099 5.81 " " 1187 23978 168851 -20.9261 6.3164 5.81 " " 2271 44081 171549 -23.1531 14.7686 5.81 " " 5499 129944 182857 -23.5050 18.6419 5.81 " " 6990 171961 187080 -26.1161 13.7602 5.81 " " 5167 119752 181931 -29.2633 11.5378 5.81 " " 4443 100286 179967 -29.7586 6.1015 5.81 " " 2164 41843 171231 -32.3675 11.1648 5.81 " " 4339 97023 202149 -42.8606 23.1659 5.81 " " 8814 218630 231464 -43.8072 10.9998 5.81 " " 4292 95347 222485 -44.0344 5.9771 5.81 " " 2117 40733 217648 -45.1131 20.0134 5.81 " " 7630 189198 229981 -45.8103 18.8243 5.81 " " 7065 173791 229306 -53.1600 11.4465 5.81 " " 4417 99574 239074 -55.5408 16.2229 5.81 " Zet Nor" 6019 145361 243449 -55.9447 2.3317 5.81 " " 688 14641 232717 -56.1100 10.3104 5.81 " " 4061 89569 237902 -60.8244 7.9807 5.81 " " 3147 66194 250055 -68.6833 10.1585 5.81 " " 4002 88473 250844 -70.0794 15.2386 5.81 " " 5644 134453 253062 -77.3853 23.5554 5.81 " " 8935 221420 258154 0.6703 17.9384 5.82 " " 6684 163472 122935 6.8869 2.6014 5.82 " " 753 16160 110636 7.3544 21.3513 5.82 " 9 Equ" 8163 203291 126719 7.9778 7.2609 5.82 " " 2747 56031 115159 -4.5194 21.3031 5.82 " 15 Aqr" 8141 202753 145278 -5.9828 7.3737 5.82 " " 2811 57749 134588 -9.7856 1.1295 5.82 " 30 Cet" 329 6706 147622 11.0650 23.2240 5.82 " " 8833 219139 108463 16.6742 7.0426 5.82 " " 2635 52609 96409 18.2836 2.8089 5.82 " 40 Ari" 828 17459 93118 19.5222 22.6479 5.82 " 40 Peg" 8618 214567 108064 23.1061 10.2874 5.82 " 39 Leo" 4039 89125 81270 24.8850 7.2450 5.82 " 52 Gem" 2725 55621 79199 27.8044 1.9622 5.82 " " 564 11928 75048 31.1847 21.1084 5.82 " " 8084 201078 70917 32.2525 9.0234 5.82 " 66 Cnc" 3587 77104 61202 34.0981 13.3077 5.82 " " 5022 115723 63462 41.3964 2.3806 5.82 " " 687 14622 37986 47.8969 1.8210 5.82 " " 526 11031 37536 48.1036 3.5103 5.82 " " 1051 21551 38893 54.0994 12.9382 5.82 " " 4917 112486 28572 54.9739 19.6448 5.82 " " 7484 185912 31850 65.1083 10.3006 5.82 " 32 UMa" 4026 88983 15135 -16.6094 15.5112 5.82 " 34Zet3Lib" 5750 138137 159307 -30.2833 1.5287 5.82 " " 441 9377 193163 -31.6639 22.6098 5.82 " " 8601 214122 213948 -32.4639 8.0511 5.82 " " 3160 66598 198743 -33.3006 14.9106 5.82 " " 5549 131432 206079 -38.7242 8.8800 5.82 " " 3535 76110 199737 -40.0661 15.5671 5.82 " " 5767 138505 206763 -40.7075 5.6454 5.82 " " 1947 37717 217450 -46.9750 3.0489 5.82 " " 929 19141 216150 -48.4619 8.1864 5.82 " " 3227 68657 219565 -58.0022 6.4511 5.82 " " 2369 45984 234519 1.8189 19.0589 5.83 " " 7214 177178 124203 3.0117 23.0119 5.83 " " 8751 217459 127894 4.4275 16.0142 5.83 " " 5963 143553 121315 5.4997 18.7579 5.83 " " 7048 173495 123886 -0.2525 19.3726 5.83 " " 7349 181907 143324 -3.7414 6.2317 5.83 " " 2218 43023 132994 -4.5683 6.2435 5.83 " " 2224 43157 133003 -5.4700 3.9812 5.83 " " 1232 25069 130860 -9.7742 18.8496 5.83 " " 7094 174464 142692 -9.9614 3.0322 5.83 " " 912 18885 148721 20.7478 8.3392 5.83 " " 3264 69994 80112 25.3928 8.0155 5.83 " 2Ome1Cnc" 3124 65714 79861 26.9242 5.6191 5.83 " " 1902 37098 77322 29.8289 18.4330 5.83 " " 6917 169981 86043 34.5425 2.5479 5.83 " " 738 15755 55650 36.6317 16.0554 5.83 " " 5983 144208 65049 38.2375 21.3228 5.83 " " 8157 203156 71203 54.4703 17.0888 5.83 " 21Mu Dra" 6369 154905 30239 56.6697 21.0359 5.83 " " 8065 200614 33078 61.7783 11.4846 5.83 " " 4421 99747 15520 66.1475 0.7009 5.83 " " 177 3856 11336 72.8794 9.9730 5.83 " " 3918 85841 7009 78.7858 22.4451 5.83 " 28Rho1Cep" 8578 213403 10375 -15.3411 2.4334 5.83 " " 710 15144 148386 -20.8442 12.2499 5.83 " " 4655 106485 180602 -23.4736 7.5718 5.83 " " 2909 60584 174019 -24.8922 4.3849 5.83 " " 1384 27881 169391 -25.0111 18.7471 5.83 " " 7035 173117 187216 -29.5608 13.6450 5.83 " " 5128 118646 181825 -30.1942 2.6385 5.83 " Iot2For" 777 16538 193829 -34.3119 6.1177 5.83 " " 2170 42054 196503 -40.2694 21.2038 5.83 " " 8100 201647 230575 -40.5917 23.1694 5.83 " " 8818 218655 231465 -43.3986 16.6406 5.83 " " 6174 149711 226989 -45.8344 8.2400 5.83 " " 3250 69302 219657 -46.1344 14.4534 5.83 " " 5401 126504 224929 -46.5925 13.9388 5.83 " " 5239 121416 224555 -50.6864 23.1208 5.83 " " 8793 218269 247739 -52.1831 13.3712 5.83 " " 5036 116084 240782 -53.6717 16.2213 5.83 " " 6022 145384 243448 -61.0522 11.6062 5.83 " " 4472 100929 251479 -66.4897 3.5143 5.83 " " 1092 22252 248825 -67.7172 14.5213 5.83 " " 5408 126862 252767 4.8558 6.5387 5.84 " 12 Mon" 2382 46241 114023 -5.2486 0.1719 5.84 " " 29 587 128621 -7.7906 18.6668 5.84 " " 7007 172348 142480 16.9556 1.8030 5.84 " 4 Ari" 522 10982 92637 23.6169 18.5462 5.84 " " 6966 171245 86175 25.3714 10.2783 5.84 " " 4032 89024 81264 40.7322 20.3019 5.84 " " 7767 193322 49438 41.7731 19.7292 5.84 " " 7514 186619 48771 43.3881 19.3990 5.84 " " 7382 182694 48401 47.1967 12.9157 5.84 " " 4909 112264 44383 50.4233 15.6429 5.84 " " 5835 139906 29600 53.5261 2.7166 5.84 " " 787 16735 23556 56.5986 11.9329 5.84 " 66 UMa" 4566 103605 28191 61.5803 1.0721 5.84 " " 297 6210 11557 71.6422 23.5831 5.84 " " 8952 221861 10790 74.2311 23.2437 5.84 " " 8844 219485 10664 -14.5736 9.2854 5.84 " " 3687 80050 155060 -20.8831 7.1949 5.84 " " 2716 55344 173168 -21.0161 15.6379 5.84 " " 5810 139329 183646 -23.6061 2.9683 5.84 " 6 Eri" 889 18535 168191 -26.1936 15.2315 5.84 " " 5658 135051 183285 -29.7047 16.4110 5.84 " " 6106 147723 184369 -30.9456 1.3919 5.84 " " 400 8498 193090 -33.4186 9.9432 5.84 " " 3932 86267 200889 -34.4167 17.8721 5.84 " " 6648 162391 209390 -35.2592 6.5203 5.84 " " 2388 46349 196897 -41.1736 17.5521 5.84 " " 6523 158799 228110 -43.9794 13.2872 5.84 " " 5008 115331 224032 -46.1456 12.6897 5.84 " " 4818 110287 223601 -46.8578 7.8202 5.84 " " 3058 63949 219034 -48.8742 17.1941 5.84 " " 6374 155035 227699 -48.9119 15.8326 5.84 " " 5871 141194 226254 2.9303 19.4724 5.85 " " 7397 183227 124661 6.9481 16.4030 5.85 " 21 Her" 6111 147869 121568 7.2981 9.0458 5.85 " " 3599 77445 117369 8.9331 9.9406 5.85 " " 3926 86080 118001 -4.2097 5.0460 5.85 " " 1625 32393 131715 -7.3472 0.9284 5.85 " " 263 5384 129032 -7.3917 3.6414 5.85 " " 1108 22675 130628 -7.5925 4.3452 5.85 " " 1363 27563 131132 -8.3239 18.1021 5.85 " " 6755 165402 142083 10.2622 12.2239 5.85 " 12 Vir" 4650 106251 99997 16.2028 6.8305 5.85 " 33 Gem" 2519 49606 96161 20.2653 21.6503 5.85 " " 8276 206043 89871 21.8814 12.5856 5.85 " " 4793 109519 82394 23.9119 14.8377 5.85 " " 5534 130948 83553 24.1283 7.2073 5.85 " 48 Gem" 2706 55052 79162 28.1567 15.8096 5.85 " " 5880 141527 84015 30.5264 19.2569 5.85 " " 7302 180450 68040 33.6556 9.5120 5.85 " 7 LMi" 3764 82087 61529 37.4019 10.1869 5.85 " " 3993 88231 61914 37.9100 10.6521 5.85 " 38 LMi" 4168 92168 62178 48.2600 17.4456 5.85 " 77 Her" 6509 158414 46723 53.1658 20.1038 5.85 " " 7697 191195 32286 54.0233 14.6376 5.85 " " 5467 128998 29227 56.4522 8.2306 5.85 " " 3200 68077 26732 56.8575 6.6274 5.85 " 11 Lyn" 2402 46590 25842 60.3200 12.8109 5.85 " " 4867 111456 15907 63.2972 3.8269 5.85 " " 1158 23523 12917 64.8225 13.6916 5.85 " " 5162 119476 16142 83.4181 12.8185 5.85 " " 4892 112014 2101 -12.5800 0.1786 5.85 " " 31 645 147127 -12.6175 20.2072 5.85 " 2Xi 2Cap" 7715 191862 163337 -15.5772 9.5063 5.85 " " 3772 82232 155246 -20.9831 15.9612 5.85 " " 5934 142883 183972 -21.4417 17.4117 5.85 " " 6472 157527 185367 -24.7108 7.5527 5.85 " " 2900 60345 173987 -28.0606 15.0351 5.85 " 60 Hya" 5591 132851 183099 -28.6633 20.4241 5.85 " " 7801 194215 189264 -30.8350 11.8616 5.85 " " 4548 103026 202883 -42.8678 15.1442 5.85 " " 5625 133937 225479 -43.5167 2.1526 5.85 " " 632 13336 215785 -43.9867 7.3012 5.85 " " 2789 57197 218618 -44.1458 9.2356 5.85 " " 3672 79694 220972 -47.7517 3.2907 5.85 " " 998 20640 216246 -52.1239 8.3820 5.85 " " 3300 71043 235933 -65.8217 14.4520 5.85 " " 5391 126241 252745 -73.6717 18.2096 5.85 " " 6751 165259 257571 -78.4472 13.2381 5.85 " " 4976 114533 257019 -82.4706 4.9808 5.85 " Xi Men" 1716 34172 258395 8.8628 7.9254 5.86 " " 3087 64685 116120 -0.0981 4.3575 5.86 " " 1366 27611 131140 -7.5511 7.4905 5.86 " " 2866 59380 134742 -9.8528 10.8287 5.86 " " 4233 93833 137815 22.2753 1.8357 5.86 " 1 Ari" 530 11154 74966 25.1881 2.8127 5.86 " " 830 17471 75588 26.1014 18.1304 5.86 "100 Her" 6781 166045 85753 32.5883 4.8219 5.86 " " 1528 30453 57444 46.7050 6.9489 5.86 " " 2573 50763 41450 55.3767 15.7939 5.86 " " 5887 141675 29668 65.3208 21.9253 5.86 " " 8375 208682 19742 66.0989 0.0434 5.86 " " 9094 225009 10937 72.4558 17.6191 5.86 " " 6606 161178 8862 86.6261 4.1671 5.86 " " 1107 22701 623 -15.3058 2.0496 5.86 " " 608 12583 148170 -16.1328 8.9789 5.86 " " 3578 76932 154804 -18.1017 10.0675 5.86 " " 3963 87344 155704 -21.0003 2.2169 5.86 " " 651 13692 167637 -21.0519 18.6482 5.86 " " 6998 172051 187086 -25.0919 16.9993 5.86 " " 6308 153336 184892 -25.7814 20.8216 5.86 " " 7961 198174 189733 -33.3156 12.7794 5.86 " " 4850 111032 203797 -34.9064 4.8578 5.86 " " 1559 31093 195357 -37.6025 9.2492 5.86 " " 3677 79807 200152 -40.5911 22.6163 5.86 " Sig2Gru" 8602 214150 231217 -41.1197 16.1883 5.86 " " 6015 145191 226564 -41.3592 18.1849 5.86 " " 6786 166114 228778 -45.9253 5.5267 5.86 " " 1870 36734 217382 -47.9097 18.6540 5.86 " " 6986 171819 229165 -74.7347 9.2909 5.86 " " 3721 80950 256600 -75.8914 18.1877 5.86 " " 6731 164712 257569 4.7567 8.5621 5.87 " " 3378 72561 116890 5.1547 13.3694 5.87 " 64 Vir" 5040 116235 119905 -0.5089 1.3301 5.87 " 42 Cet" 385 8036 129235 -0.9461 6.4212 5.87 " " 2313 45067 133229 -1.2475 23.5692 5.87 " 14 Psc" 8944 221675 146780 -1.5072 6.4443 5.87 " " 2324 45320 133260 -4.5600 21.3512 5.87 " 16 Aqr" 8160 203222 145317 -4.6164 5.9251 5.87 " " 2070 39910 132652 -4.8214 17.9935 5.87 " " 6706 164064 142012 -5.8319 12.6132 5.87 " 25 Vir" 4799 109704 138873 11.5211 5.9471 5.87 " " 2076 40020 95027 12.1100 8.7822 5.87 " 50 Cnc" 3481 74873 98117 21.0583 1.9932 5.87 " " 577 12139 75077 21.2506 0.6561 5.87 " 54 Psc" 166 3651 74175 21.4592 12.0713 5.87 " 2 Com" 4602 104827 82123 26.6172 19.5227 5.87 " " 7421 184010 87314 31.5172 0.3106 5.87 " " 71 1439 53803 32.4547 6.5409 5.87 " " 2372 46052 59194 33.5817 0.5238 5.87 " " 122 2767 53956 34.6644 13.8526 5.87 " " 5215 120819 63781 41.0886 13.7704 5.87 " " 5179 120047 44742 42.2389 16.7888 5.87 " " 6242 151732 46288 42.3744 16.1966 5.87 " " 6050 145931 45957 42.9817 6.0843 5.87 " 39 Aur" 2132 41074 40840 46.2742 6.9423 5.87 " Psi9Aur" 2568 50658 41446 49.9739 4.7227 5.87 " " 1493 29721 39702 54.5089 15.6256 5.87 " " 5828 139778 29597 68.6800 4.1009 5.87 " " 1241 25274 13006 71.4319 21.1065 5.87 " " 8099 201636 9957 72.6750 0.8025 5.87 " " 212 4440 4229 -10.2428 6.0908 5.87 " " 2150 41547 151098 -11.1442 14.9816 5.87 " 18 Lib" 5582 132345 158946 -14.2511 23.8750 5.87 " " 9037 223774 165933 -16.0317 20.9613 5.87 " " 8018 199443 164013 -17.6622 2.3681 5.87 " " 693 14728 148356 -18.3083 19.3641 5.87 " 45Rho2Sgr" 7344 181645 162521 -21.8100 20.3004 5.87 " 4 Cap" 7748 192879 189114 -22.3736 5.7039 5.87 " 12 Lep" 1968 38090 170715 -22.9717 5.8315 5.87 " " 2026 39190 170892 -23.4747 7.5720 5.87 " " 2910 60585 174020 -25.2436 15.9110 5.87 " 3 Sco" 5912 142301 183914 -25.8156 14.3169 5.87 " " 5356 125276 182433 -25.8914 7.3512 5.87 " " 2802 57615 173529 -28.0886 23.1624 5.87 " " 8813 218619 191686 -29.4631 8.8339 5.87 " " 3513 75629 176546 -30.6589 22.6729 5.87 " " 8623 214690 214000 -33.1464 16.6960 5.87 " " 6192 150331 207930 -35.7150 9.5258 5.87 " " 3790 82514 200462 -37.2531 6.2860 5.87 " " 2265 43940 196659 -40.9436 5.4515 5.87 " " 1827 36060 217340 -41.5172 14.5921 5.87 " " 5439 127971 225046 -42.7289 17.7450 5.87 " " 6597 160928 228363 -48.5733 8.9655 5.87 " " 3583 77020 220703 -51.5606 9.3117 5.87 " " 3708 80558 236837 -52.6511 7.4999 5.87 " " 2884 60060 235239 -52.6800 14.5583 5.87 " " 5427 127501 241793 -54.1514 8.0139 5.87 " " 3156 66441 235680 -54.9983 14.5590 5.87 " " 5426 127486 241792 -56.1981 1.6632 5.87 " " 486 10360 232492 -63.2556 4.2945 5.87 " The Ret" 1372 27657 248986 -63.8100 14.8764 5.87 " " 5527 130701 252928 -82.9750 1.6321 5.87 " " 512 10800 258271 1.2106 17.2755 5.88 " " 6414 156247 122226 2.5150 15.7338 5.88 " 23Psi Ser" 5853 140538 121152 3.0972 2.0026 5.88 "112 Psc" 582 12235 110266 7.5414 5.6336 5.88 " " 1920 37320 112979 9.6556 8.6183 5.88 " 36 Cnc" 3406 73143 116953 9.9883 6.5882 5.88 " " 2406 46709 95870 -9.9583 19.9965 5.88 " " 7637 189340 163168 11.2125 4.4580 5.88 " " 1402 28217 93943 14.2842 11.8108 5.88 " " 4531 102590 99800 16.4178 14.6789 5.88 " 29Pi 2Boo" 5476 129175 101139 17.9064 6.2413 5.88 " " 2214 42954 95419 19.3286 18.8148 5.88 " " 7086 174262 104129 24.8003 20.0291 5.88 " " 7656 189944 88088 28.9611 4.5772 5.88 " " 1445 28929 76654 33.4469 18.1959 5.88 " " 6814 166988 66733 36.4547 20.4890 5.88 " 42 Cyg" 7835 195324 70096 37.2372 1.5713 5.88 " " 446 9531 54788 39.7797 22.5407 5.88 " " 8588 213660 72446 46.0281 13.4379 5.88 " " 5067 116957 44611 46.8419 2.8616 5.88 " " 842 17656 38397 49.4764 11.2783 5.88 " " 4367 97989 43675 52.9881 18.7786 5.88 " " 7084 174237 31165 56.5067 4.3644 5.88 " " 1342 27322 24563 57.2203 22.2740 5.88 " " 8506 211554 34256 58.1628 6.5131 5.88 " 6 Lyn" 2331 45410 25771 62.2878 0.0704 5.88 " 9 Cas" 9100 225180 10954 67.2975 8.4962 5.88 " " 3303 71088 14568 -12.5450 20.8449 5.88 " " 7976 198431 163924 -14.0833 11.0032 5.88 " " 4289 95314 156382 -14.3997 21.7179 5.88 " 44 Cap" 8295 206561 164600 -20.0428 2.4431 5.88 " " 713 15220 167795 -20.4156 16.8903 5.88 " " 6269 152311 184754 -23.6856 16.1455 5.88 " " 6003 144844 184164 -31.6883 10.8039 5.88 " " 4225 93657 201766 -37.9339 7.7696 5.88 " " 3022 63215 198416 -37.9431 7.7428 5.88 " " 3011 62893 198379 -41.8925 19.1661 5.88 " " 7257 178322 229531 -42.4789 16.9075 5.88 " " 6266 152293 227392 -43.9122 16.3747 5.88 " " 6085 147225 226696 -58.0103 17.3819 5.88 " " 6438 156768 244678 -58.3617 9.5065 5.88 " " 3793 82536 237056 -68.6839 9.0190 5.88 " " 3610 77887 250421 -68.7553 19.0583 5.88 " " 7161 175986 254446 -73.0017 12.5361 5.88 " " 4769 108970 256954 -80.8592 17.5242 5.88 " " 6429 156513 258769 1.0369 5.1959 5.89 " " 1691 33646 112509 2.7406 7.3229 5.89 " " 2778 56989 115263 7.2506 23.6991 5.89 " " 8983 222602 128335 -0.4614 15.3073 5.89 " " 5690 136028 140444 -1.5742 22.5675 5.89 " 60 Aqr" 8590 213789 146160 -4.9244 13.3886 5.89 " 65 Vir" 5047 116365 139308 -5.8231 21.0680 5.89 " 12 Aqr" 8059 200497 145065 12.0289 18.3765 5.89 " " 6883 169111 103648 13.9067 18.9797 5.89 " 10 Aql" 7167 176232 104303 15.2317 0.6131 5.89 " 53 Psc" 155 3379 91995 17.3397 4.1332 5.89 " " 1280 26038 93777 18.1939 4.0136 5.89 " " 1238 25202 93721 18.4606 1.5803 5.89 " " 450 9640 92520 18.9758 15.2012 5.89 " " 5654 134943 101429 21.7047 5.1321 5.89 "105 Tau" 1660 32991 76972 23.0186 7.6829 5.89 " " 2951 61603 79607 28.6083 22.2274 5.89 " " 8482 211006 90337 29.9319 2.4801 5.89 " 13 Tri" 720 15335 75391 31.2781 9.6931 5.89 " " 3850 83787 61633 33.6811 6.9501 5.89 " " 2586 51000 59631 37.2778 1.9318 5.89 " " 556 11727 55102 37.5169 12.8363 5.89 " " 4875 111604 63217 38.2661 18.9672 5.89 " " 7174 176318 67642 40.2017 8.9418 5.89 " " 3546 76292 42611 41.0331 2.9944 5.89 " " 886 18482 38492 43.2075 11.1607 5.89 " " 4336 96834 43627 47.9475 0.2859 5.89 " " 62 1279 36236 49.9244 5.9894 5.89 " " 2081 40084 40743 57.7433 8.3406 5.89 " 30 Lyn" 3254 69548 26784 62.7808 12.7886 5.89 " " 4859 111270 15901 64.0578 3.1219 5.89 " " 922 19065 12608 -11.6806 23.6858 5.89 " " 8979 222493 165828 -15.8125 17.9386 5.89 " " 6681 163336 160915 -16.3539 10.9919 5.89 " " 4284 95234 156372 -19.6956 5.4333 5.89 " " 1812 35736 150442 -28.0917 3.0271 5.89 " Eps For" 914 18907 168238 -30.4222 12.6510 5.89 " " 4810 109960 203666 -37.7478 11.4259 5.89 " " 4411 99333 202430 -38.0583 15.0203 5.89 " " 5585 132604 206208 -40.0347 19.5690 5.89 " " 7422 184035 229746 -44.1519 12.9162 5.89 " " 4903 112164 223753 -48.9567 13.2453 5.89 " " 4996 114971 224000 -50.7000 13.2232 5.89 " " 4985 114772 240655 -53.3736 13.8953 5.89 " " 5217 120908 241262 -58.6839 13.2367 5.89 " " 4988 114835 240663 -59.4544 0.6740 5.89 " " 176 3823 232143 -67.1967 17.2215 5.89 " " 6368 154903 253827 -68.3092 15.4374 5.89 " " 5713 136672 253155 -69.1922 12.0438 5.89 " " 4597 104600 251699 -73.9656 18.5487 5.89 " " 6899 169570 257601 1.8369 5.9734 5.90 " 59 Ori" 2100 40372 113315 3.9322 6.7274 5.90 " " 2479 48434 114324 -0.7872 12.3112 5.90 " 13 Vir" 4681 107070 138710 -0.9617 18.7746 5.90 " 5 Aql" 7059 173654 142606 -2.4908 5.1887 5.90 " " 1687 33608 131852 -8.4158 5.3885 5.90 " " 1778 35281 132053 -8.5036 4.7348 5.90 " 56 Eri" 1508 30076 131451 -8.8808 7.5349 5.90 " " 2883 59984 134806 -9.9475 7.2376 5.90 " " 2732 55832 134395 14.5164 22.6993 5.90 " " 8642 214995 108109 14.7408 4.4732 5.90 " 76 Tau" 1408 28294 93948 22.0089 4.0889 5.90 " 39 Tau" 1262 25680 76438 23.8661 18.4932 5.90 " " 6943 170650 86115 26.0975 18.1304 5.90 "100 Her" 6782 166046 85752 26.4622 3.0317 5.90 " 49 Ari" 905 18769 75693 27.0711 3.3322 5.90 " 59 Ari" 995 20618 75863 28.6481 13.8862 5.90 " " 5229 121164 83055 30.9358 0.3401 5.90 " " 78 1606 53820 31.7017 5.9164 5.90 " " 2046 39586 58569 32.3794 10.5309 5.90 " 33 LMi" 4124 91130 62101 33.9081 10.3851 5.90 " 27 LMi" 4075 89904 62010 35.4617 3.5444 5.90 " " 1074 21856 56531 36.4253 23.8281 5.90 " " 9024 223460 73535 37.4167 22.8030 5.90 " " 8678 215943 72732 37.4764 20.3957 5.90 " " 7807 194335 69951 38.0164 8.5486 5.90 " " 3360 72184 60890 38.7328 2.6159 5.90 " " 756 16176 55705 46.6856 6.5008 5.90 " 47 Aur" 2338 45466 41130 48.1769 3.2233 5.90 " " 956 19845 38652 49.1958 20.9405 5.90 " " 8026 199612 50262 51.9333 1.8492 5.90 " " 529 11151 22678 53.2861 21.0632 5.90 " " 8078 200817 33098 60.6703 15.4643 5.90 " " 5755 138265 16741 85.3736 22.8506 5.90 " " 8736 217157 3808 -18.7161 14.3106 5.90 " " 5355 125248 158481 -22.5197 7.7868 5.90 " " 3023 63271 174533 -24.1364 0.8205 5.90 " " 228 4732 166602 -26.3481 8.3805 5.90 " " 3291 70761 175709 -29.3381 3.7743 5.90 " Sig For" 1171 23738 168820 -34.1408 7.4451 5.90 " " 2856 59026 198000 -34.6500 2.5519 5.90 " Lam1For" 744 15975 193763 -34.7992 17.8704 5.90 " " 6647 162374 209383 -37.8631 16.0769 5.90 " " 5975 143928 207297 -38.4217 0.7367 5.90 " Lam2Scl" 195 4211 192703 -40.3458 10.2294 5.90 " " 4015 88809 221877 -46.4283 13.6233 5.90 " " 5121 118354 224283 -48.9225 8.6848 5.90 " " 3453 74273 220282 -60.3769 12.8970 5.90 " Kap Cru" 4890 111973 252077 -61.8864 21.9199 5.90 " " 8352 207964 255101 -66.2269 13.2136 5.90 " " 4977 114570 252196 -66.9622 11.5389 5.90 " " 4448 100382 251451 0.2278 3.8108 5.91 " " 1182 23887 111433 0.7369 10.9284 5.91 " 55 Leo" 4265 94672 118574 1.0506 13.9411 5.91 " 92 Vir" 5244 121607 120185 1.6506 11.3153 5.91 " 76 Leo" 4381 98366 118778 3.4544 16.1497 5.91 " " 6011 145085 121390 3.6856 1.8072 5.91 " " 527 11037 110138 5.8617 7.6096 5.91 " " 2918 60803 115693 6.8031 3.7693 5.91 " " 1159 23526 111407 7.1428 7.3299 5.91 " " 2779 57006 115269 7.6133 19.7611 5.91 " 49Ups Aql" 7519 186689 125032 8.5581 20.0164 5.91 " " 7648 189695 125355 -0.8456 14.2280 5.91 " " 5317 124425 139798 -4.3519 0.6784 5.91 " " 174 3807 128891 -6.0572 5.2134 5.91 " " 1697 33833 131873 -6.9147 1.4057 5.91 " " 404 8556 129277 -8.4083 10.1687 5.91 " 17 Sex" 3989 88195 137385 13.2614 16.8263 5.91 " " 6246 151862 102410 13.5342 14.6784 5.91 " " 5473 129153 101137 13.8511 6.2524 5.91 " " 2222 43112 95444 16.8486 13.1633 5.91 " " 4962 114326 100439 18.2983 14.6372 5.91 " " 5462 128750 101121 18.3317 2.9301 5.91 " 45Rho2Ari" 867 18191 93189 20.8214 4.3730 5.91 " " 1370 27639 76571 23.6806 20.6431 5.91 " " 7895 196753 88946 32.8128 18.8294 5.91 " 8Nu 1Lyr" 7100 174585 67441 34.0094 7.1229 5.91 " " 2665 53686 59794 37.0769 22.9174 5.91 " " 8718 216756 72838 38.4989 13.1676 5.91 " 17 CVn" 4971 114447 63380 45.5794 20.2668 5.91 " " 7756 192985 49395 47.9319 19.8687 5.91 " " 7591 188252 48920 49.0381 16.3198 5.91 " " 6090 147352 46025 52.7117 8.6549 5.91 " " 3408 73171 26946 56.0681 20.4909 5.91 " " 7843 195554 32627 57.6453 19.3378 5.91 " " 7356 182190 31587 78.0644 13.7109 5.91 " " 5184 120084 7876 78.1264 21.0915 5.91 " " 8112 201908 9959 -13.2144 13.5779 5.91 " " 5106 118054 158021 -20.2722 6.2523 5.91 " " 2242 43396 171458 -22.8639 9.5573 5.91 " " 3810 82747 177649 -28.7969 3.3008 5.91 " " 993 20606 168449 -34.9897 17.3159 5.91 " " 6426 156384 208670 -37.2175 16.6514 5.91 " " 6178 149886 207878 -38.1522 17.0641 5.91 " " 6327 153890 208355 -41.1667 2.2422 5.91 " " 659 13940 215831 -44.6189 10.5427 5.91 " " 4139 91437 222129 -48.3592 8.8774 5.91 " " 3539 76161 220609 -50.2494 13.7910 5.91 " " 5175 119938 241173 -50.3700 13.9881 5.91 " " 5251 121853 241352 -50.5097 7.8400 5.91 " " 3071 64225 235552 -50.7650 10.9522 5.91 " " 4274 94985 238622 -57.2564 10.6340 5.91 " " 4173 92287 238278 -59.3236 10.8234 5.91 " " 4239 93943 238514 -59.6944 17.3201 5.91 " " 6408 156091 244613 -63.2789 11.9166 5.91 " " 4563 103516 251640 -66.5939 14.8123 5.91 " " 5500 129954 252894 -66.7019 9.4752 5.91 " " 3783 82406 250591 -68.2961 16.6898 5.91 " Eta1TrA" 6172 149671 253649 -69.9419 13.1977 5.91 " " 4966 114371 252185 -81.2889 20.6385 5.91 " " 7812 194612 258864 -84.7875 15.1856 5.91 " Ome Oct" 5557 131596 258717 0.7222 5.0306 5.92 " " 1618 32263 112334 9.9564 6.9405 5.92 " " 2589 51104 96294 19.7497 5.9158 5.92 " 57 Ori" 2052 39698 94986 20.6847 4.6377 5.92 " " 1471 29365 76680 22.2600 14.5424 5.92 " 26 Boo" 5434 127739 83395 24.4644 3.5741 5.92 " 7 Tau" 1086 22091 75999 24.9500 22.2022 5.92 " " 8466 210762 90317 25.2350 2.5090 5.92 " " 728 15524 75407 26.4789 20.2002 5.92 " 20 Vul" 7719 192044 88339 26.9169 16.6935 5.92 " 39 Her" 6213 150682 84543 41.8081 4.3373 5.92 " " 1337 27278 39468 41.9536 22.8394 5.92 " 14 Lac" 8690 216200 52412 45.7722 19.9890 5.92 " " 7646 189684 49058 48.7228 1.6076 5.92 " " 454 9746 37351 48.7736 7.6316 5.92 " " 2914 60652 41893 52.1308 7.2927 5.92 " " 2737 55866 26260 55.4747 15.7763 5.92 " " 5878 141472 29655 55.7553 7.6131 5.92 " " 2894 60294 26423 61.0750 1.0603 5.92 " " 292 6130 11551 65.4558 7.7778 5.92 " 51 Cam" 2975 62066 14321 69.3369 19.7385 5.92 " " 7545 187340 18508 71.7489 6.6756 5.92 " " 2396 46509 5925 -16.6178 6.2688 5.92 " " 2249 43544 151294 -19.0450 19.8700 5.92 " 57 Sgr" 7561 187739 163060 -23.4461 16.4264 5.92 " 5Rho Oph" 6113 147934 184381 -23.6064 16.1018 5.92 " " 5988 144334 184113 -25.9425 7.2034 5.92 " 26 CMa" 2718 55522 173193 -29.8164 18.4638 5.92 " " 6907 169830 186838 -31.7936 6.7563 5.92 " " 2500 49095 197171 -33.0114 16.2395 5.92 " " 6044 145838 207480 -35.8436 2.8374 5.92 " Eta2For" 848 17793 193940 -37.8564 1.2126 5.92 " " 359 7312 192980 -38.4369 2.8929 5.92 " Psi For" 863 18149 193965 -44.4892 23.2777 5.92 " " 8846 219507 231532 -45.1933 19.2444 5.92 " " 7281 179433 229573 -47.3386 9.2263 5.92 " " 3670 79621 220965 -50.6303 17.4534 5.92 " " 6478 157662 244755 -51.0922 2.3818 5.92 " " 701 14943 232736 -53.6122 17.8412 5.92 " " 6622 161783 245065 -56.2136 14.0573 5.92 " " 5266 122438 241403 -56.3747 12.3660 5.92 " " 4702 107543 239880 -58.8169 10.6498 5.92 " " 4179 92436 238304 -60.5169 10.9214 5.92 " " 4271 94776 251178 -62.2731 9.4797 5.92 " " 3776 82347 250590 -62.9508 12.2061 5.92 " " 4644 106068 251790 0.3378 5.6849 5.93 " " 1955 37788 113033 4.5678 14.9897 5.93 " " 5584 132525 120774 7.3000 0.8048 5.93 " 62 Psc" 221 4627 109470 8.5872 6.7757 5.93 " 16 Mon" 2494 48977 114388 -0.3403 2.0634 5.93 " 61 Cet" 610 12641 129667 -0.5056 0.5924 5.93 " 14 Cet" 143 3229 128843 -1.4706 5.5678 5.93 " " 1874 36780 132270 -1.5769 12.7272 5.93 " " 4837 110646 138933 -1.8253 2.1933 5.93 " 63 Cet" 639 13468 129739 -1.9589 10.8113 5.93 " " 4224 93655 137800 -3.1556 23.8821 5.93 " 24 Psc" 9041 223825 146954 -7.1944 22.3923 5.93 " " 8530 212320 146062 13.6053 17.0609 5.93 " " 6341 154228 102564 16.1189 15.6081 5.93 " 18Tau5Ser" 5804 139225 101642 20.2572 7.4490 5.93 " 61 Gem" 2837 58579 79391 21.5544 19.2102 5.93 " " 7286 179648 86930 22.1794 21.4833 5.93 " " 8223 204585 89737 22.1900 6.1590 5.93 " " 2169 42049 78045 29.3372 7.0584 5.93 " " 2643 52711 79009 33.8822 9.1475 5.93 " " 3625 78366 61288 41.0261 20.3792 5.93 " " 7800 194193 49546 49.0708 3.3646 5.93 " " 1001 20675 38753 52.9158 16.0349 5.93 " " 5981 144204 29763 53.8461 22.6718 5.93 " " 8633 214878 34682 54.8950 0.5529 5.93 " " 135 2952 21512 57.4183 9.9538 5.93 " " 3922 85945 27438 58.2481 8.1677 5.93 " " 3175 67224 26701 60.2044 15.0242 5.93 " " 5608 133388 16574 62.6983 21.9815 5.93 " " 8388 209112 19773 66.8539 20.2920 5.93 " " 7783 193664 18796 69.8539 10.8919 5.93 " " 4243 94132 7229 -10.0814 6.5031 5.93 " " 2367 45976 151573 -18.0753 23.3234 5.93 " " 8869 219879 165628 -19.6608 7.6704 5.93 " " 2960 61774 153225 -21.5142 20.7694 5.93 " 17 Cap" 7937 197725 189667 -23.1736 18.9335 5.93 " " 7128 175360 187468 -26.2078 1.5064 5.93 " " 436 9228 167093 -27.3175 3.4396 5.93 " " 1045 21430 168544 -27.7694 6.5129 5.93 " " 2380 46189 171866 -28.4769 11.9278 5.93 " " 4565 103596 180307 -29.3092 19.4178 5.93 " " 7360 182286 188093 -30.4908 4.0113 5.93 " " 1246 25371 194689 -31.8719 9.5256 5.93 " Zet2Ant" 3789 82513 200459 -35.2433 7.8207 5.93 " " 3049 63786 198480 -37.2206 17.3819 5.93 " " 6456 157097 208747 -44.4197 3.2072 5.93 " " 968 20121 216209 -45.0789 6.0778 5.93 " " 2158 41742 217706 -46.8936 3.8926 5.93 " " 1216 24706 216540 -50.0600 17.6242 5.93 " " 6547 159463 244894 -51.0186 19.0659 5.93 " " 7190 176664 245899 -51.1469 9.8973 5.93 " " 3924 85953 237464 -54.9525 12.8844 5.93 " " 4885 111884 240347 -61.8267 10.9082 5.93 " " 4266 94683 251173 -64.3694 1.4181 5.93 " " 420 8810 248381 -72.1853 12.9421 5.93 " " 4907 112219 256992 -77.1603 15.0033 5.93 " " 5547 131425 257218 0.8289 14.4974 5.94 " " 5418 127167 120499 3.6247 7.6931 5.94 " " 2966 61887 115813 5.9583 21.0907 5.94 " 4 Equ" 8077 200790 126535 6.1886 3.5126 5.94 " " 1067 21755 111230 -1.0031 18.5325 5.94 " 61 Ser" 6957 170920 142372 -2.2511 1.1954 5.94 " 34 Cet" 353 7147 129169 -4.7114 23.0255 5.94 " " 8759 217563 146451 -6.4719 4.2887 5.94 " " 1332 27179 131092 -8.1803 18.0514 5.94 " 69Tau Oph" 6733 164764 142050 -9.9742 23.8374 5.94 " " 9027 223524 165911 11.0350 5.6179 5.94 " " 1908 37171 94702 11.0433 1.8478 5.94 " " 534 11257 92659 13.4767 2.0431 5.94 " " 601 12479 92763 14.7719 21.7420 5.94 " " 8314 206860 107364 15.3603 5.5072 5.94 " " 1832 36162 94596 17.7556 7.0404 5.94 " " 2631 52554 96407 31.1431 5.4107 5.94 " " 1776 35239 57988 32.4267 19.7124 5.94 " " 7502 186377 68730 32.8019 8.6386 5.94 " " 3409 73192 60939 34.3917 5.4469 5.94 " " 1795 35520 58028 34.6958 17.4462 5.94 " " 6506 158261 66054 36.6675 21.4297 5.94 " 69 Cyg" 8209 204172 71329 37.9528 1.8108 5.94 " " 521 10975 54991 38.5039 13.7719 5.94 " " 5180 120048 63735 38.8114 17.3065 5.94 " " 6444 156891 65930 41.5494 22.6934 5.94 " " 8643 215030 52270 43.1733 11.5086 5.94 " 58 UMa" 4431 99984 43787 43.5442 23.1742 5.94 " 6 And" 8825 218804 52761 56.1156 5.7751 5.94 " 26 Cam" 1969 38091 25362 59.3722 6.3677 5.94 " 4 Lyn" 2257 43812 25678 59.9772 0.5055 5.94 " " 113 2626 21457 60.8233 16.5405 5.94 " " 6170 149650 17130 61.4811 6.6282 5.94 " 8 Lyn" 2394 46480 13897 64.2617 4.6067 5.94 " " 1440 28780 13196 67.2722 9.6578 5.94 " " 3824 83126 14949 72.5286 4.5585 5.94 " " 1401 28204 5238 -10.3294 13.1626 5.94 " 50 Vir" 4961 114287 157760 -12.3567 11.4526 5.94 " 16Kap Crt" 4416 99564 156685 -13.5169 9.5488 5.94 " " 3802 82660 155281 -14.7258 17.7936 5.94 " " 6620 161701 160822 -14.8725 16.3168 5.94 " " 6078 146850 159846 -15.5711 17.6267 5.94 " " 6562 159877 160701 -18.5833 20.4983 5.94 " 12Omi Cap" 7830 195094 163626 -19.3831 15.9167 5.94 " 47 Lib" 5915 142378 159572 -21.3978 18.6318 5.94 " " 6988 171856 187071 -22.5089 0.1297 5.94 " " 12 319 166066 -26.0219 0.2284 5.94 " " 42 942 166130 -31.7714 5.0397 5.94 " " 1635 32515 195509 -36.5283 1.6409 5.94 " " 471 10142 193224 -37.0036 14.3233 5.94 " " 5357 125283 205430 -38.2908 14.7848 5.94 " " 5508 130055 205937 -38.5306 21.0409 5.94 " " 8046 200073 212653 -41.4258 7.2492 5.94 " " 2759 56410 218568 -41.8194 15.7396 5.94 " " 5846 140285 226132 -42.6767 0.7492 5.94 " " 198 4293 215221 -47.5572 19.8372 5.94 " " 7537 187086 229887 -50.2061 1.8485 5.94 " " 541 11413 232542 -52.2839 16.9413 5.94 " " 6275 152527 244285 -55.1697 17.4774 5.94 " " 6487 157819 244770 -57.1561 5.8723 5.94 " " 2072 39937 234181 -57.9094 16.9001 5.94 " " 6251 151967 244245 -60.4208 10.0333 5.94 " " 3960 87283 250782 -61.2383 4.4181 5.94 " " 1416 28413 249016 1.1681 5.7764 5.95 " " 1988 38529 113119 1.3050 17.8765 5.95 " " 6667 162774 122861 1.8978 12.1615 5.95 " 10 Vir" 4626 105639 119245 2.4456 1.1760 5.95 " 33 Cet" 347 7014 109715 5.9583 9.8952 5.95 " " 3915 85709 117975 6.3128 17.6923 5.95 " " 6590 160781 122646 8.2436 14.4002 5.95 " " 5388 126200 120433 -0.0008 11.0602 5.95 " 62 Leo" 4306 95849 118634 -3.0925 10.8515 5.95 " " 4240 94014 137834 -7.8275 11.5465 5.95 " " 4446 100343 138265 10.8703 3.0122 5.95 " " 902 18700 93232 13.3983 4.1504 5.95 " " 1284 26171 93784 13.5481 20.3334 5.95 " " 7774 193472 105974 14.2108 8.4770 5.95 " 29 Cnc" 3333 71555 97843 16.0406 22.1976 5.95 " " 8461 210702 107729 16.7969 11.5785 5.95 " 90 Leo" 4456 100600 99673 18.3322 8.3894 5.95 " 20 Cnc" 3284 70569 97781 25.3839 19.7968 5.95 " " 7540 187193 87729 25.7022 13.7787 5.95 " 3 Boo" 5182 120064 82993 28.3308 8.8766 5.95 " 55Rho1Cnc" 3522 75732 80478 30.9631 9.1774 5.95 " " 3639 78712 61306 39.2789 12.7499 5.95 " 10 CVn" 4845 110897 63177 39.3947 5.0051 5.95 " 5 Aur" 1599 31761 57559 39.4656 22.7348 5.95 " " 8654 215359 72675 43.4586 20.6675 5.95 " " 7919 197139 49912 48.5303 9.0900 5.95 " " 3603 77601 42682 54.2867 18.1754 5.95 " " 6817 167042 30784 62.4606 21.7481 5.95 " " 8327 207198 19621 66.7822 23.7769 5.95 " " 9005 223128 20838 67.8247 2.7471 5.95 " " 791 16769 12421 68.7558 18.2547 5.95 " 37 Dra" 6865 168653 17837 75.2928 23.6529 5.95 " " 8971 222386 10814 77.0122 21.2617 5.95 " " 8168 203399 10007 81.4706 3.1952 5.95 " " 906 18778 500 -10.5839 7.2620 5.95 " " 2752 56207 152621 -11.6103 12.4199 5.95 " " 4722 108107 157272 -13.3050 22.3169 5.95 " 45 Aqr" 8508 211676 164996 -20.3881 18.2536 5.95 " 16 Sgr" 6823 167263 186544 -22.3764 2.8931 5.95 " " 862 18071 168121 -22.8597 7.4619 5.95 " " 2860 59136 173778 -27.1072 22.4961 5.95 " " 8563 213135 191182 -36.0197 18.1066 5.95 " " 6748 165185 209710 -37.2836 8.0271 5.95 " " 3154 66358 198714 -37.7022 20.0044 5.95 " " 7629 189195 211719 -48.0742 15.2649 5.95 " " 5663 135235 225590 -50.5906 8.0784 5.95 " " 3178 67249 235730 -56.9206 17.5231 5.95 " " 6505 158220 244808 -58.5764 10.4165 5.95 " " 4095 90454 238046 -59.9083 15.6657 5.95 " " 5803 139211 242803 -63.5061 12.5322 5.95 " " 4771 109000 251946 -76.0819 15.6985 5.95 " " 5786 138867 257310 -76.1186 22.0511 5.95 " " 8380 208741 257993 -80.2328 18.4887 5.95 " " 6837 167714 258796 -82.6661 13.9274 5.95 " " 5188 120213 258683 -5.6261 3.6503 5.96 " 21 Eri" 1111 22713 130634 -6.5739 5.6438 5.96 " " 1933 37481 132405 -7.5433 8.3817 5.96 " " 3288 70652 135840 -8.4069 7.0066 5.96 " " 2624 52312 134036 11.2033 21.3144 5.96 " " 8149 202951 107020 17.1231 13.0193 5.96 " 38 Com" 4929 113095 100374 18.5006 20.0546 5.96 " " 7662 190211 105608 23.7428 17.2616 5.96 " " 6419 156284 84955 24.1678 2.2104 5.96 " " 644 13522 75203 27.5719 3.5224 5.96 " " 1065 21743 75970 29.2153 5.6551 5.96 " " 1924 37367 77354 33.1675 11.9882 5.96 " " 4581 104075 62784 34.3119 5.2717 5.96 " " 1712 34078 57816 39.2833 3.2961 5.96 " " 986 20346 56322 43.4578 1.4385 5.96 " " 409 8671 37204 44.9250 20.9430 5.96 " " 8023 199579 50263 48.9594 6.0286 5.96 " " 2105 40486 40789 49.2625 19.5616 5.96 " " 7442 184786 48589 50.5253 19.6969 5.96 " 16 Cyg" 7503 186408 31898 58.4367 0.1044 5.96 " " 5 123 21085 61.4892 13.8293 5.96 " " 5213 120787 16186 63.5342 19.9746 5.96 " " 7654 189900 18627 68.7475 10.3509 5.96 " " 4047 89343 15147 72.9461 9.2646 5.96 " " 3645 78935 6792 74.0669 5.0777 5.96 " " 1589 31590 5407 81.0914 20.4910 5.96 " 74 Dra" 7908 196925 3413 -14.5817 18.4963 5.96 " " 6932 170397 161528 -15.2458 23.5804 5.96 " " 8946 221745 165780 -16.7094 8.9428 5.96 " " 3564 76579 154773 -18.1300 5.3140 5.96 " " 1747 34721 150326 -19.4583 4.4775 5.96 " " 1421 28479 149668 -22.8403 5.9373 5.96 " " 2086 40151 171034 -26.8225 22.0769 5.96 " " 8408 209522 190864 -26.8436 8.5913 5.96 " " 3402 73072 176131 -30.9189 15.1092 5.96 " " 5619 133652 206300 -34.4664 17.9076 5.96 " " 6668 162817 209446 -34.7525 17.8986 5.96 " " 6662 162724 209428 -35.6536 4.5112 5.96 " " 1439 28776 195085 -36.2303 6.8617 5.96 " " 2558 50445 197291 -36.4239 21.2219 5.96 " " 8108 201852 212800 -36.5444 7.2071 5.96 " " 2726 55718 197694 -38.5939 17.2600 5.96 " " 6398 155826 208591 -38.8489 8.5606 5.96 " " 3389 72832 199370 -40.7725 17.8591 5.96 " " 6643 162189 228489 -41.6683 10.3078 5.96 " " 4056 89461 221948 -43.0508 16.8951 5.96 " " 6257 152161 227359 -51.9678 7.1204 5.96 " " 2698 54732 234940 -53.1525 16.7444 5.96 " " 6207 150576 244106 -53.9686 11.6785 5.96 " " 4497 101541 239284 -54.3994 7.5086 5.96 " " 2892 60228 235252 -60.9692 12.0825 5.96 " " 4607 104933 251723 -67.6203 11.6301 5.96 " " 4485 101162 251501 -68.4339 19.5197 5.96 " " 7383 182709 254590 -69.3364 3.4267 5.96 " " 1064 21722 248804 0.0664 17.9512 5.97 " " 6689 163624 122950 3.6022 6.9825 5.97 " " 2610 51814 114722 4.4233 5.8370 5.97 " " 2019 39051 113186 6.3789 16.1531 5.97 " " 6014 145148 121392 8.3817 2.9372 5.97 " " 870 18262 110851 9.1383 7.0550 5.97 " " 2647 52913 114835 9.6772 23.6653 5.97 " " 8970 222377 128309 -1.1925 13.4365 5.97 " " 5059 116831 139337 -4.0742 10.3907 5.97 " 25 Sex" 4082 90044 137533 -4.0947 5.8097 5.97 " " 2007 38858 132554 -5.7750 7.4308 5.97 " " 2833 58526 134654 -9.0414 5.8688 5.97 " " 2039 39421 132603 12.9831 6.6632 5.97 " " 2449 47575 95963 15.8381 20.6514 5.97 " " 7899 196775 106347 16.4058 1.6613 5.97 "105 Psc" 475 10164 92558 17.3269 3.8861 5.97 " " 1201 24357 93650 20.4689 1.3902 5.97 " " 397 8388 74682 23.5031 10.2756 5.97 " 35 Leo" 4030 89010 81260 27.8975 4.8798 5.97 " " 1554 30912 76802 28.8425 23.8276 5.97 " 79 Peg" 9025 223461 91522 34.6336 9.2540 5.97 " " 3664 79452 61361 36.0261 21.0203 5.97 " " 8051 200253 70794 40.3128 4.7790 5.97 " " 1514 30138 39746 42.6583 23.9510 5.97 " " 9057 224342 53511 46.8172 9.2920 5.97 " " 3676 79763 42790 53.9219 15.5879 5.97 " " 5811 139357 29583 66.3522 0.9753 5.97 " " 273 5550 11502 70.5356 6.4707 5.97 " " 2285 44472 5861 80.5247 21.4138 5.97 " " 8239 205072 3568 -12.4906 5.1236 5.97 " " 1665 33093 150159 -13.3208 6.6130 5.97 " " 2428 47182 151700 -15.6603 19.0948 5.97 " " 7230 177517 162177 -20.8706 23.0456 5.97 " " 8764 217703 191604 -22.1756 12.3363 5.97 " " 4691 107295 180695 -23.4286 19.6686 5.97 " " 7473 185467 188419 -23.9911 22.5935 5.97 " " 8596 213986 191246 -24.3606 18.0646 5.97 " 9 Sgr" 6736 164794 186204 -29.5361 22.8558 5.97 " 21 PsA" 8693 216210 191444 -30.4036 17.1465 5.97 " " 6366 154783 208467 -33.9447 21.5374 5.97 " 6 PsA" 8230 204854 213078 -35.9342 17.0102 5.97 " " 6311 153368 208293 -37.1864 9.8245 5.97 " " 3892 85206 200777 -38.8697 14.5197 5.97 " " 5419 127193 205637 -48.2992 19.1154 5.97 " " 7223 177406 229493 -52.4997 7.2558 5.97 " " 2767 56705 235040 -57.4222 22.6803 5.97 " " 8620 214632 247544 -57.9731 8.3533 5.97 " " 3293 70839 235917 -62.9564 23.9555 5.97 " " 9060 224361 255606 -64.6008 8.4310 5.97 " " 3346 71863 250226 -66.2686 14.0145 5.97 " " 5253 121932 252554 -77.4269 0.3579 5.97 " " 87 1801 255663 -79.7833 10.6976 5.97 " " 4206 93237 256745 2.0244 5.8417 5.98 " " 2024 39118 113198 7.0858 6.4203 5.98 " " 2310 44990 113845 11.2733 19.6146 5.98 " " 7456 185018 105045 11.8725 3.1775 5.98 " " 948 19698 93320 12.5453 20.8272 5.98 " 15 Del" 7973 198390 106536 12.5944 7.0643 5.98 " " 2651 52976 96432 16.1336 1.2354 5.98 " 87 Psc" 364 7374 92326 16.9175 17.4318 5.98 " " 6495 157967 102819 18.9119 14.2678 5.98 " " 5343 124953 100949 19.0417 4.4159 5.98 " " 1385 27901 93918 22.3164 17.8468 5.98 " " 6655 162570 85468 24.0222 8.3422 5.98 " 19Lam Cnc" 3268 70011 80113 25.1672 23.4612 5.98 " 69 Peg" 8915 220933 91278 26.6292 9.1465 5.98 " 75 Cnc" 3626 78418 80659 31.0347 6.0195 5.98 " " 2110 40588 58657 31.2833 19.1961 5.98 " 19 Lyr" 7283 179527 67946 31.8403 22.4628 5.98 " " 8555 212988 72366 33.9175 5.8778 5.98 " " 2028 39225 58528 33.9508 0.9706 5.98 " " 275 5608 54306 34.9889 13.7121 5.98 " " 5161 119458 63701 41.3450 1.0484 5.98 " 39 And" 290 6116 36874 54.9747 3.5608 5.98 " " 1073 21819 24099 55.7981 21.2873 5.98 " " 8150 202987 33287 57.5167 2.3013 5.98 " 7 Per" 662 13994 23149 62.0472 15.3770 5.98 " " 5731 137389 16712 72.4072 8.3445 5.98 " " 3236 68951 6504 73.3950 16.2426 5.98 " " 6088 147321 8462 74.0028 23.6559 5.98 " " 8972 222387 10817 77.5142 16.7183 5.98 " " 6267 152303 8612 82.7525 13.7064 5.98 " " 5203 120565 2266 -12.6319 8.3066 5.98 " " 3259 69830 154093 -13.0150 12.6878 5.98 " " 4822 110318 157448 -14.5494 2.6928 5.98 " " 796 16825 148550 -14.9297 8.4321 5.98 " " 3320 71267 154244 -25.5472 0.4541 5.98 " " 102 2363 166282 -32.8314 11.5749 5.98 " " 4458 100623 202583 -36.0958 9.6245 5.98 " " 3835 83441 200573 -37.1903 11.7242 5.98 " " 4508 101883 202744 -37.2275 17.1056 5.98 " " 6344 154310 208406 -38.7925 15.1687 5.98 " " 5636 134255 206352 -39.6808 12.8658 5.98 " " 4879 111774 203881 -41.4011 13.7153 5.98 " " 5155 119250 224359 -41.7150 10.1772 5.98 " " 4001 88399 221832 -42.0675 13.7278 5.98 " " 5157 119361 224365 -42.7694 8.4159 5.98 " " 3322 71302 219890 -44.1433 13.6183 5.98 " " 5118 118338 224275 -47.2106 22.7102 5.98 " " 8635 214953 231257 -52.1811 6.3938 5.98 " " 2322 45291 234475 -60.2625 0.7116 5.98 " " 186 4088 248238 0.1772 7.3676 5.99 " " 2801 57608 115335 0.4675 4.9141 5.99 " " 1574 31331 112206 6.6200 8.5975 5.99 " " 3395 72945 116929 6.7408 0.7899 5.99 " 60 Psc" 216 4526 109461 7.5164 21.0011 5.99 " " 8038 199942 126447 8.8947 14.0223 5.99 " " 5262 122365 120228 9.5097 5.9411 5.99 " " 2075 39985 113284 -0.6783 20.1338 5.99 " 64 Aql" 7690 191067 144095 -3.3686 13.0100 5.99 " 46 Vir" 4925 112992 139096 -4.9153 6.2583 5.99 " " 2234 43319 133027 -5.6264 20.8571 5.99 " 4 Aqr" 7982 198571 144877 -5.9128 18.8281 5.99 " " 7083 174208 142661 -6.8050 3.4942 5.99 " " 1060 21665 130520 -8.8239 0.1382 5.99 " " 16 360 128604 -9.3194 21.3823 5.99 " 17 Aqr" 8175 203525 145351 14.5831 20.6878 5.99 " 10 Del" 7918 197121 106384 16.4553 8.0251 5.99 " 5 Cnc" 3134 65873 97485 16.5186 7.9754 5.99 " " 3104 65257 97429 18.1314 18.3021 5.99 " " 6852 168270 103581 19.3253 7.8657 5.99 " " 3053 63889 97318 20.9822 4.3923 5.99 " " 1375 27742 76585 21.1342 23.1246 5.99 " " 8799 218396 91022 21.1533 13.1059 5.99 " 39 Com" 4946 113848 82650 22.6356 8.1051 5.99 " 9Mu 1Cnc" 3169 66875 79940 29.6661 18.3311 5.99 " " 6867 168694 85933 30.0472 1.6942 5.99 " " 485 10348 74872 31.7881 15.2350 5.99 " " 5674 135438 64574 33.2139 18.0101 5.99 " " 6726 164614 66551 34.0389 16.7310 5.99 " " 6222 151087 65512 38.2803 4.6973 5.99 " " 1489 29645 57377 42.0025 8.8694 5.99 " " 3511 75556 42581 45.3125 8.8699 5.99 " " 3509 75523 42580 51.8181 17.6894 5.99 " " 6607 161193 30522 52.5022 1.0673 5.99 " " 298 6211 21967 61.0481 18.7384 5.99 " " 7075 173949 17995 -14.5839 17.2556 5.99 " " 6404 155970 160402 -14.7494 21.7336 5.99 " 45 Cap" 8302 206677 164612 -17.6092 17.1375 5.99 " " 6365 154779 160305 -18.4767 6.2549 5.99 " " 2243 43429 151274 -27.3689 5.3232 5.99 " " 1758 34868 170311 -45.2161 7.9838 5.99 " " 3137 65904 219240 -46.3319 8.4960 5.99 " " 3363 72232 220007 -47.3753 3.5103 5.99 " " 1081 21981 216357 -59.8606 13.1234 5.99 " " 4944 113823 240566 -61.6489 9.4016 5.99 " " 3742 81613 250563 -64.5825 11.3212 5.99 " " 4384 98560 251357 -70.7203 10.8950 5.99 " " 4262 94650 256770 0.2553 2.5126 6.00 " " 732 15633 110583 0.9683 5.9123 6.00 " " 2057 39775 113265 5.6564 1.0813 6.00 " 73 Psc" 307 6386 109656 6.7175 22.0022 6.00 " 18 Peg" 8385 209008 127219 -3.0072 18.2814 6.00 " " 6840 167768 142189 -3.5647 5.6587 6.00 " " 1940 37594 132424 -5.4344 8.9050 6.00 " " 3538 76151 136389 -9.2758 21.7712 6.00 " 47 Cap" 8318 207005 145648 -9.7483 8.4808 6.00 " " 3342 71766 135965 12.5700 6.3768 6.00 " " 2287 44497 95599 13.7886 15.8037 6.00 " " 5874 141353 101744 14.6494 13.9778 6.00 " " 5254 121980 100801 15.8225 5.7793 6.00 "129 Tau" 1985 38478 94848 17.3181 17.3014 6.00 " " 6432 156653 102724 20.2033 19.2507 6.00 " " 7299 180242 86981 36.0931 10.9924 6.00 " " 4278 95129 62345 36.2878 17.9784 6.00 " " 6711 164280 66531 36.6367 15.6562 6.00 " 7Zet1CrB" 5833 139891 64833 38.0522 6.9841 6.00 " 62 Aur" 2600 51440 59658 38.2414 11.0753 6.00 " 51 UMa" 4309 95934 62387 41.4619 5.5135 6.00 " " 1824 36040 40387 46.9992 19.2809 6.00 " " 7322 181096 48278 47.3558 23.9260 6.00 " " 9053 224165 53486 47.4169 16.8882 6.00 " " 6286 152812 46349 48.3969 10.3241 6.00 " " 4046 89319 43285 52.1961 18.6647 6.00 " " 7028 172883 31093 54.2169 10.3420 6.00 " " 4052 89414 27609 57.4122 23.9260 6.00 " " 9052 224151 35899 63.6103 13.0297 6.00 " " 4934 113337 15962 64.9014 2.0480 6.00 " 52 Cas" 586 12279 12095 67.4114 10.7511 6.00 " " 4195 92839 15274 81.7100 12.1833 6.00 " " 4639 105943 1991 -11.6486 12.9052 6.00 " " 4901 112131 157584 -12.0992 3.9212 6.00 " " 1217 24712 149251 -12.5281 10.3213 6.00 " " 4055 89455 155894 -18.2503 12.6457 6.00 " " 4809 109931 157415 -20.7156 4.3044 6.00 " " 1345 27362 169317 -29.7244 17.4604 6.00 " " 6494 157955 185417 -35.9014 18.0807 6.00 " " 6739 164870 209671 -37.5794 7.6661 6.00 " " 2968 61925 198273 -39.2589 9.1947 6.00 " " 3656 79241 200084 -39.2644 6.2766 6.00 " " 2262 43847 196646 -42.0900 8.8392 6.00 " " 3525 75759 220552 -45.0222 21.3360 6.00 " " 8145 202874 230635 -48.6478 17.0075 6.00 " " 6300 153221 227542 -49.9503 13.6666 6.00 " " 5134 118767 224317 -51.5047 14.1597 6.00 " " 5296 123515 241491 -53.1767 14.3968 6.00 " " 5380 125869 241691 -54.7044 13.9425 6.00 " " 5236 121384 241315 -55.2142 9.6966 6.00 " " 3868 84228 237237 -56.1761 12.7192 6.00 " " 4834 110506 240179 -56.7681 13.7156 6.00 " " 5151 119159 241096 -58.6669 10.5466 6.00 " " 4144 91533 238168 -59.9192 10.8015 6.00 " " 4228 93737 238493 -63.7892 12.4568 6.00 " " 4736 108355 251911 -76.1806 20.7008 6.00 " Mu 1Oct" 7863 196051 257838 -76.8700 23.6400 6.00 " " 8957 222060 258166 0.7025 17.0880 6.01 " " 6349 154417 122056 1.8497 1.9316 6.01 " " 560 11803 110235 2.3778 18.2682 6.01 " " 6834 167654 123308 5.4972 13.8402 6.01 " " 5205 120602 120132 9.4131 4.5634 6.01 " " 1446 28930 111890 -1.4639 9.4395 6.01 " " 3741 81567 136844 -4.2433 9.8539 6.01 " 6 Sex" 3899 85364 137183 -4.2672 22.1761 6.01 " " 8453 210434 145916 -4.7169 8.4101 6.01 " " 3295 70937 135882 -8.1858 7.6765 6.01 " " 2958 61749 134969 13.8156 19.6849 6.01 " " 7486 185936 105132 15.1628 4.1283 6.01 " " 1279 26015 93775 16.0247 15.6831 6.01 " 19Tau6Ser" 5840 140027 101678 16.5142 8.2166 6.01 " " 3222 68461 97653 18.7350 4.7713 6.01 " " 1517 30197 94112 19.1528 14.8899 6.01 " " 5553 131511 101276 21.9964 9.1725 6.01 " 79 Cnc" 3640 78715 80674 26.6772 14.5389 6.01 " " 5433 127726 83394 27.2814 12.1795 6.01 " " 4633 105805 82166 28.0306 5.1625 6.01 " " 1670 33204 76990 33.8022 19.0153 6.01 " " 7204 176896 67699 35.7886 6.8843 6.01 " " 2542 50056 59574 36.5567 18.7267 6.01 " " 7043 173416 67292 42.0922 0.0769 6.01 " " 9105 225218 36037 45.2711 15.4014 6.01 " " 5732 137390 45521 51.4636 20.2088 6.01 " " 7726 192439 32354 60.1011 22.8844 6.01 " " 8707 216595 34921 60.3244 8.0284 6.01 " 53 Cam" 3109 65339 14402 60.5053 20.6716 6.01 " " 7925 197373 18979 75.4725 12.9798 6.01 " " 4927 113049 7714 79.7147 0.1556 6.01 " " 20 431 4048 -10.0522 2.1895 6.01 " " 638 13456 148262 -14.4828 20.9783 6.01 " " 8024 199603 164027 -18.7289 13.5341 6.01 " 73 Vir" 5094 117661 157987 -21.0458 8.4220 6.01 " " 3316 71196 175792 -22.6733 7.2233 6.01 " " 2730 55762 173230 -22.7372 20.0233 6.01 " " 7643 189561 188829 -25.7283 4.3587 6.01 " " 1374 27710 169368 -26.9636 7.3486 6.01 " " 2800 57593 173522 -27.9431 3.6466 6.01 " Tau For" 1114 22789 168701 -28.7592 17.9775 6.01 " " 6692 163685 186025 -32.0006 16.0595 6.01 " " 5970 143790 207282 -32.4386 17.2163 6.01 " " 6389 155450 208539 -37.9164 15.7914 6.01 " " 5864 140901 206976 -38.3839 2.7018 6.01 " " 805 16975 193873 -44.7967 0.6644 6.01 " " 171 3750 215185 -47.0606 15.8587 6.01 " " 5882 141544 226295 -55.8828 22.0067 6.01 " " 8381 208796 247262 -57.5453 17.7488 6.01 " " 6586 160720 244989 -57.6231 13.6470 6.01 " " 5124 118520 241026 -58.1394 1.5876 6.01 " " 460 9896 232470 -65.7047 10.4570 6.01 " " 4115 90874 250966 -66.6533 19.0010 6.01 " " 7130 175401 254426 -71.0089 21.7580 6.01 " " 8286 206399 257955 -72.7703 15.2094 6.01 " " 5628 133981 257247 2.4542 9.8701 6.02 " 7 Sex" 3906 85504 117959 3.0567 12.8602 6.02 " 37 Vir" 4878 111765 119633 4.7722 14.5126 6.02 " " 5424 127337 120504 5.2308 7.6686 6.02 " " 2950 61563 115773 -6.7961 5.7149 6.02 " " 1967 38089 132477 11.4289 9.7926 6.02 " " 3882 84748 98769 11.5350 19.3314 6.02 " 29Ome2Aql" 7332 181383 104728 13.2422 7.9931 6.02 " " 3115 65522 97445 15.8517 4.5311 6.02 " 85 Tau" 1432 28677 93993 17.6478 8.2035 6.02 " 16Zet1Cnc" 3209 68256 97645 18.3556 1.4980 6.02 " 97 Psc" 432 9100 92463 18.4417 15.1223 6.02 " " 5633 134064 101379 21.1678 10.2416 6.02 " " 4012 88737 81250 22.6372 7.0884 6.02 " 44 Gem" 2659 53257 79042 22.9453 7.3912 6.02 " 58 Gem" 2810 57744 79354 23.3408 4.6081 6.02 " " 1459 29169 76670 24.2497 5.9489 6.02 " " 2074 39970 77750 25.1017 15.4608 6.02 " " 5745 137853 83830 25.2183 11.7370 6.02 " " 4512 101980 81960 25.9369 2.1867 6.02 " 16 Ari" 633 13363 75188 26.8964 3.1742 6.02 " " 946 19637 75771 30.7853 17.6102 6.02 " " 6570 160054 66175 31.6969 10.7031 6.02 " " 4184 92620 62206 32.8258 23.1244 6.02 " " 8798 218395 73010 33.1147 1.2719 6.02 " " 371 7578 54567 33.9686 18.9146 6.02 " " 7140 175635 67566 34.0003 7.7121 6.02 " " 2962 61859 60291 35.1281 13.3178 6.02 " " 5025 115810 63468 36.2508 19.9456 6.02 " " 7620 189066 69129 37.3019 5.1719 6.02 " " 1669 33203 57704 37.4231 13.1608 6.02 " " 4964 114357 63372 39.6711 18.7390 6.02 " 4Eps1Lyr" 7052 173583 67309 41.6008 10.4578 6.02 " " 4096 90470 43344 41.7736 23.3065 6.02 " 9 And" 8864 219815 52881 42.0050 8.4119 6.02 " " 3287 70647 42342 42.9114 11.0057 6.02 " " 4285 95241 43564 43.9631 3.8189 6.02 " " 1170 23728 39128 45.3508 17.9468 6.02 " " 6702 163990 47080 47.1639 2.9426 6.02 " " 865 18155 38455 52.0644 13.7319 6.02 " " 5169 119765 28866 52.9581 21.5057 6.02 " " 8237 204965 33477 54.1292 7.8516 6.02 " " 3028 63332 26535 61.6981 1.9759 6.02 " " 561 11857 12065 64.3306 11.3809 6.02 " " 4391 98772 15486 -12.0117 0.7306 6.02 " " 190 4145 147422 -17.7564 17.3315 6.02 " " 6435 156717 160462 -28.5097 16.7501 6.02 " " 6218 150894 184602 -33.5053 13.0091 6.02 " " 4922 112935 204029 -36.7783 17.4822 6.02 " " 6501 158105 208860 -38.7942 14.6388 6.02 " " 5456 128488 205786 -41.7361 12.4994 6.02 " " 4755 108759 223471 -43.8450 7.9296 6.02 " " 3101 65211 219157 -44.8436 23.5242 6.02 " " 8929 221323 231642 -48.9814 8.0041 6.02 " " 3148 66210 219283 -50.7722 14.3890 6.02 " " 5377 125810 241686 -55.8006 13.3468 6.02 " " 5027 115842 240765 -58.3886 9.2549 6.02 " " 3691 80094 236772 -58.6753 11.1081 6.02 " " 4323 96544 238779 -58.9400 7.0181 6.02 " " 2661 53349 234863 -63.1900 7.2006 6.02 " " 2754 56239 249774 -63.2697 16.9235 6.02 " " 6253 152082 253734 -74.8503 14.1409 6.02 " " 5279 122862 257116 1.0203 16.7583 6.03 " 16 Oph" 6224 151133 121834 3.5883 4.8124 6.03 " " 1534 30545 112098 4.7117 2.7558 6.03 " " 816 17163 110730 6.9953 1.2451 6.03 " 88 Psc" 367 7446 109753 8.4519 8.5704 6.03 " " 3380 72617 116894 11.6736 6.5398 6.03 " " 2378 46178 95803 22.8042 3.4741 6.03 " 66 Ari" 1048 21467 75945 23.9261 12.4209 6.03 " " 4725 108123 82297 28.2631 6.6592 6.03 " 54 Aur" 2438 47395 78593 31.2025 17.6660 6.03 " " 6584 160677 66231 33.2336 7.8506 6.03 " " 3040 63589 60379 36.6258 14.5774 6.03 " " 5448 128198 64227 37.5928 22.6595 6.03 " " 8626 214714 72581 38.7433 21.1154 6.03 " 61 Cyg" 8086 201092 0 42.0083 10.9374 6.03 " " 4264 94669 43535 52.8986 21.4458 6.03 " " 8218 204428 33434 56.6886 16.9893 6.03 " " 6330 153956 30190 61.0781 5.0266 6.03 " " 1593 31662 13341 72.1264 4.2291 6.03 " " 1281 26076 5125 -10.3167 7.2412 6.03 " " 2739 55879 152598 -10.5331 5.7908 6.03 " " 2001 38735 150814 -14.1939 22.2072 6.03 " 39 Aqr" 8462 210705 164923 -14.9094 16.8075 6.03 " " 6235 151527 160104 -16.2289 19.1145 6.03 " " 7239 177817 162201 -16.2347 7.1592 6.03 " " 2699 54764 152477 -16.3444 10.6046 6.03 " Phi2Hya" 4156 91880 156093 -16.8736 6.6432 6.03 " " 2448 47561 151737 -19.7586 12.6970 6.03 " " 4827 110385 157451 -29.1358 16.0443 6.03 " " 5965 143619 184049 -35.6242 17.8828 6.03 " " 6653 162517 209404 -39.7181 5.0263 6.03 " " 1631 32453 195501 -39.8642 15.9351 6.03 " " 5918 142448 207128 -40.3000 23.9107 6.03 " " 9046 224022 231842 -43.7522 7.7550 6.03 " " 3020 63118 218955 -46.0364 17.5303 6.03 " " 6513 158476 228075 -46.2642 8.2086 6.03 " " 3234 68895 219602 -56.6494 8.8844 6.03 " " 3549 76346 236368 -62.9097 2.8720 6.03 " " 866 18185 248673 -67.4325 16.7228 6.03 " " 6182 150026 253673 -68.6228 5.4500 6.03 " " 1859 36584 249281 -71.4761 13.0514 6.03 " " 4930 113120 257003 1.3667 1.0636 6.04 " 26 Cet" 301 6288 109643 8.3142 9.9688 6.04 " " 3938 86369 118023 9.7625 10.4608 6.04 " 45 Leo" 4101 90569 99136 -2.8036 6.9163 6.04 " " 2582 50890 133890 10.1897 0.4723 6.04 " " 107 2454 109224 12.1653 13.8718 6.04 " " 5220 120934 100745 12.6294 3.4028 6.04 " " 1028 21051 93416 13.3708 7.8172 6.04 " " 3030 63352 97273 13.6386 6.1911 6.04 " " 2191 42477 95352 15.0347 2.5484 6.04 " 29 Ari" 741 15814 92998 16.2428 11.8208 6.04 " " 4535 102660 99812 20.8483 22.3943 6.04 " 33 Peg" 8532 212395 90462 22.0308 6.6515 6.04 " " 2436 47358 78586 24.6292 0.6933 6.04 " " 178 3883 74200 27.1358 10.2305 6.04 " " 4006 88639 81243 27.9739 10.8316 6.04 " 44 LMi" 4230 93765 81542 31.3581 5.6766 6.04 " " 1938 37519 58319 32.6128 21.3561 6.04 " " 8169 203439 71237 34.7903 17.0649 6.04 " " 6351 154431 65766 38.6150 2.9673 6.04 " " 876 18339 56036 38.7736 18.2180 6.04 " " 6826 167370 66765 39.6681 18.6351 6.04 " " 7009 172380 67193 39.9822 17.8680 6.04 " " 6673 162989 66402 44.7133 1.0010 6.04 " " 283 5789 36833 49.7467 17.1945 6.04 " " 6399 155860 46561 51.1725 6.2293 6.04 " " 2188 42466 25630 61.1700 5.1082 6.04 " " 1624 32356 13369 62.4200 22.3834 6.04 " " 8537 212495 20042 77.9164 2.0492 6.04 " " 572 12005 4555 80.0008 18.0009 6.04 " 40 Dra" 6809 166865 8994 -10.8708 19.8173 6.04 " " 7541 187195 163012 -12.4436 10.6473 6.04 " " 4172 92245 156124 -12.7694 2.8756 6.04 " " 857 17925 148647 -17.3450 21.2518 6.04 " " 8122 202261 164249 -27.8656 19.4084 6.04 " " 7355 182180 188079 -28.5397 6.8927 6.04 " " 2576 50806 172524 -28.5697 13.9046 6.04 " " 5228 121156 182065 -28.6369 19.1253 6.04 " " 7240 177846 187701 -33.1772 20.8663 6.04 " Bet Mic" 7979 198529 212499 -36.6347 14.8106 6.04 " " 5519 130328 205966 -38.1467 6.6172 6.04 " " 2444 47463 197011 -39.1281 15.6451 6.04 " " 5807 139271 206827 -41.9136 18.5175 6.04 " " 6931 170384 229080 -42.8883 7.8612 6.04 " " 3078 64365 219076 -43.4847 15.2696 6.04 " " 5668 135348 225602 -44.8986 9.2678 6.04 " " 3688 80057 221010 -48.5981 22.8939 6.04 " Tau1Gru" 8700 216435 231343 -49.4894 15.7103 6.04 " " 5832 139871 226089 -61.0950 18.7532 6.04 " " 7015 172630 254359 -64.3414 12.4719 6.04 " " 4744 108501 251920 -67.9322 14.6295 6.04 " " 5443 128020 252824 -72.0356 13.3219 6.04 " " 5012 115439 257028 -75.0156 22.4308 6.04 " " 8526 212168 258036 -86.3644 17.0162 6.04 " " 6139 148542 258751 0.1317 11.3883 6.05 " " 4394 98960 118825 0.4636 20.9529 6.05 " " 8017 199442 126396 1.8636 3.0773 6.05 " " 926 19121 110945 3.4444 19.5092 6.05 " " 7415 183656 124704 3.9478 8.3305 6.05 " " 3269 70013 116630 4.5328 20.9280 6.05 " " 8010 199223 126373 7.6042 12.5226 6.05 " " 4770 108985 119453 8.6414 7.9544 6.05 " " 3097 65066 116162 -3.0397 5.0818 6.05 " " 1646 32686 131742 -3.2133 2.6968 6.05 " " 795 16824 130061 -3.7425 10.4789 6.05 " " 4109 90763 137591 -3.8117 3.1886 6.05 " " 955 19836 130328 -5.9383 5.6243 6.05 " " 1918 37303 132375 -9.7092 13.7871 6.05 " " 5178 120033 139544 11.2058 0.3048 6.05 " " 69 1419 91832 21.1325 16.3345 6.05 " " 6087 147266 84306 27.5722 6.0168 6.05 " " 2111 40589 77837 30.3097 21.3783 6.05 " " 8182 203630 71259 30.6786 19.7193 6.05 " " 7505 186440 68744 34.1625 19.7309 6.05 " " 7512 186568 68764 36.6336 21.2240 6.05 " " 8120 202240 71086 36.9444 19.5968 6.05 " 11 Cyg" 7457 185037 68552 38.6619 23.5110 6.05 " " 8927 221293 73308 40.5825 3.0891 6.05 " " 923 19066 38559 43.2172 16.7533 6.05 " " 6230 151388 46262 44.8614 0.7697 6.05 " " 205 4335 36640 49.8811 15.9846 6.05 " " 5964 143584 29737 49.9056 6.0469 6.05 " " 2112 40626 40801 56.5817 5.7171 6.05 " 24 Cam" 1941 37601 25333 57.5633 6.9537 6.05 " " 2561 50551 26050 75.9256 20.9123 6.05 " " 8043 200039 9911 79.6028 19.3612 6.05 " " 7423 184102 9414 81.2958 2.1570 6.05 " " 597 12467 344 -13.1219 5.1102 6.05 " " 1661 32996 150149 -14.9992 7.4894 6.05 " " 2868 59438 152943 -16.2806 11.5541 6.05 " " 4451 100418 156750 -16.6936 12.2843 6.05 " " 4670 106819 157184 -19.2453 19.0511 6.05 " " 7203 176884 162130 -21.9828 7.4222 6.05 " " 2839 58585 173691 -23.4619 6.7565 6.05 " " 2495 49001 172273 -23.6956 6.6601 6.05 " " 2455 47827 172102 -25.4178 6.0203 6.05 " " 2129 40972 171138 -25.4769 16.2482 6.05 " " 6054 146001 184258 -26.2697 17.5290 6.05 " " 6520 158704 185474 -26.8811 21.0292 6.05 " " 8045 200052 189942 -28.2375 10.5302 6.05 " " 4130 91280 178938 -28.7889 19.8199 6.05 " " 7538 187098 188603 -33.5969 13.6960 6.05 " " 5147 119090 204739 -37.5814 9.3416 6.05 " " 3716 80774 200257 -38.1567 16.7299 6.05 " " 6210 150608 207966 -39.3567 4.7654 6.05 " " 1526 30432 195278 -48.4144 9.9618 6.05 " " 3943 86523 221644 -50.3067 23.3472 6.05 " " 8877 220003 247838 -51.6967 11.9864 6.05 " " 4582 104081 239548 -52.0311 5.2315 6.05 " " 1727 34347 233886 -52.3117 7.3393 6.05 " " 2813 57852 235110 -52.8075 8.4403 6.05 " " 3341 71722 235976 -57.1025 3.9786 6.05 " " 1245 25346 233347 -64.9297 9.4456 6.05 " " 3761 82068 250583 -65.6050 19.8504 6.05 " " 7524 186786 254669 -65.8256 8.7417 6.05 " " 3495 75171 250317 -66.9269 3.2997 6.05 " " 1014 20888 248776 -70.0736 22.9109 6.05 " Rho Ind" 8701 216437 258084 -70.3056 14.1753 6.05 " " 5293 123377 257119 -72.1467 13.3813 6.05 " " 5030 115967 257033 -77.6561 4.6394 6.05 " " 1531 30479 256116 -78.8208 5.5934 6.05 " Iot Men" 1991 38602 256214 -79.0697 8.7201 6.05 " " 3524 75747 256549 -85.6317 12.0389 6.05 " " 4595 104555 258632 6.1353 6.6234 6.06 " " 2422 47129 114146 7.5956 17.4386 6.06 " " 6497 157978 122381 8.5903 4.4392 6.06 " " 1397 28114 111817 -1.0786 20.3287 6.06 " " 7768 193329 144296 -1.0794 17.1371 6.06 " " 6367 154895 141528 15.6742 1.1699 6.06 " " 344 6966 92288 16.4450 0.4702 6.06 " 48 Psc" 106 2436 91912 19.8681 5.8732 6.06 " " 2030 39286 94942 20.8408 23.5654 6.06 " " 8942 221662 91349 23.1756 3.9511 6.06 " 33 Tau" 1221 24769 76343 23.3269 6.4258 6.06 " " 2304 44927 78349 24.8586 16.6835 6.06 " " 6208 150580 84536 30.7333 19.0829 6.06 " " 7238 177809 67781 31.7569 18.7993 6.06 " " 7081 174179 67396 31.7911 14.4971 6.06 " " 5422 127304 64178 32.1836 3.2764 6.06 " " 978 20277 56308 33.5181 19.3759 6.06 " " 7359 182272 68215 35.0114 8.4180 6.06 " " 3292 70771 60794 37.4181 0.8912 6.06 " " 249 5118 54237 37.8264 19.8464 6.06 " " 7568 187880 68953 40.5794 20.6593 6.06 " " 7911 197018 49899 42.5428 12.3964 6.06 " 4 CVn" 4715 107904 44155 47.4842 2.2341 6.06 " " 647 13594 37878 48.5236 3.7351 6.06 " " 1127 23049 39063 57.0828 7.6804 6.06 " 23 Lyn" 2929 61106 26459 59.7089 19.8932 6.06 " " 7611 188793 32093 62.9383 22.8123 6.06 " " 8683 216102 20253 65.4886 18.6037 6.06 " " 7013 172569 17947 67.2103 11.1611 6.06 " " 4330 96707 15414 74.2692 5.0389 6.06 " " 1572 31312 5385 75.9411 4.8140 6.06 " " 1491 29678 5309 -10.7858 4.5561 6.06 " " 1447 28970 149725 -15.0247 6.3136 6.06 " " 2268 44021 151346 -15.5364 19.3167 6.06 " " 7317 180928 162462 -17.5775 0.1426 6.06 " " 18 402 147103 -21.3247 14.7871 6.06 " " 5513 130157 182873 -22.8425 0.6019 6.06 " " 151 3326 166400 -32.1408 8.2364 6.06 " " 3239 69080 198972 -32.6367 14.9419 6.06 " " 5562 131774 206112 -32.9947 13.8639 6.06 " 3 Cen" 5211 120710 204917 -34.1142 17.8803 6.06 " " 6651 162496 209397 -36.4758 17.9189 6.06 " " 6671 162926 209458 -37.8703 12.1761 6.06 " " 4631 105776 203195 -38.4633 0.7119 6.06 " Lam1Scl" 185 4065 192690 -39.4258 9.4045 6.06 " " 3737 81411 200330 -47.1600 17.0616 6.06 " " 6323 153791 227588 -51.0683 18.2836 6.06 " " 6821 167257 245372 -52.5669 13.1829 6.06 " " 4965 114365 240627 -53.2733 7.6501 6.06 " " 2971 61966 235391 -54.8219 0.5926 6.06 " " 148 3303 232099 -56.4119 9.8111 6.06 " " 3895 85250 237370 -57.4100 11.9032 6.06 " " 4556 103400 239475 -57.7558 16.4958 6.06 " " 6120 148218 243874 -60.8614 1.9296 6.06 " " 571 11995 248464 -65.6928 12.2850 6.06 " " 4669 106797 251826 -65.7092 12.1064 6.06 " " 4615 105151 251738 -67.8236 11.2886 6.06 " " 4379 98292 251341 -69.7197 14.1839 6.06 " " 5295 123492 252636 -72.9947 18.8287 6.06 " " 7027 172881 257630 -80.1767 1.7962 6.06 " Tau2Hyi" 550 11604 258280 2.3475 16.4473 6.07 " " 6124 148287 121604 3.7486 18.4640 6.07 " " 6925 170137 123513 5.6408 9.0254 6.07 " " 3590 77250 117351 6.0661 6.2611 6.07 " " 2231 43285 113650 6.5425 10.3834 6.07 " 43 Leo" 4077 89962 118269 9.5658 2.4931 6.07 " " 725 15453 110565 9.8211 8.1879 6.07 " " 3201 68099 116444 -1.4178 14.7532 6.07 " " 5496 129902 140116 -2.2192 0.4083 6.07 " " 94 2023 128743 -2.4478 0.1367 6.07 " " 14 352 128602 -6.3806 23.8090 6.07 " " 9014 223311 146919 -6.6772 11.7320 6.07 " " 4510 101933 138375 10.0489 21.1753 6.07 " 6 Equ" 8098 201616 126597 11.2656 15.5982 6.07 " " 5796 139087 101634 11.9581 12.7871 6.07 " 34 Vir" 4855 111164 100260 16.8533 19.1326 6.07 " " 7260 178428 104511 19.3756 21.4408 6.07 " " 8210 204188 107138 20.8694 5.8062 6.07 " " 1997 38670 77578 22.2444 3.8319 6.07 " " 1185 23950 76250 27.9028 9.0303 6.07 " 67 Cnc" 3589 77190 80585 35.5103 21.7003 6.07 " " 8297 206570 71613 36.1689 4.9389 6.07 " " 1573 31327 57511 37.0339 13.3983 6.07 " " 5052 116581 63514 38.6575 21.0513 6.07 " " 8063 200577 70832 41.4417 18.7703 6.07 " " 7073 173936 47779 42.5039 3.2491 6.07 " " 966 20063 38674 46.8325 23.7926 6.07 " " 9011 223229 53374 61.8058 0.8546 6.07 " " 237 4817 11430 62.7131 12.6928 6.07 " 76 UMa" 4833 110462 15871 66.5244 2.2414 6.07 " 55 Cas" 640 13474 12180 70.9894 19.5167 6.07 " " 7450 184958 9447 78.7258 1.3963 6.07 " " 386 8065 4391 -13.0708 22.9932 6.07 " " 8741 217251 165425 -14.6908 7.7581 6.07 " 2 Pup" 3010 62864 153363 -18.6614 18.2586 6.07 " " 6825 167356 161227 -21.3756 5.4601 6.07 " " 1823 35991 170445 -22.7150 6.2843 6.07 " " 2254 43745 171502 -22.9703 4.3104 6.07 " " 1353 27411 169325 -25.8567 6.4531 6.07 " " 2349 45588 171774 -31.8394 11.0113 6.07 " " 4298 95456 201998 -41.3208 4.8378 6.07 " " 1557 30985 217032 -43.1733 9.0062 6.07 " " 3593 77320 220738 -44.2478 22.7120 6.07 " " 8639 214987 231260 -46.5842 14.6531 6.07 " " 5457 128582 225089 -47.5131 18.1846 6.07 " " 6778 166006 228774 -52.2056 14.7867 6.07 " " 5498 129932 241995 -52.4381 15.8140 6.07 " " 5865 140979 243001 -62.4978 0.7423 6.07 " " 199 4294 248243 -65.1383 13.2791 6.07 " " 5000 115149 252236 -67.3208 20.0924 6.07 " " 7644 189567 254721 -70.4903 23.7404 6.07 " " 8994 222805 258178 -74.4936 10.6546 6.07 " " 4186 92682 256742 -76.1775 17.9616 6.07 " " 6635 161988 257542 -76.7292 14.4936 6.07 " " 5389 126209 257163 4.9867 16.0627 6.08 " 43 Ser" 5976 144046 121339 10.6319 8.3987 6.08 " 21 Cnc" 3290 70734 97788 10.8958 20.5050 6.08 " 1 Del" 7836 195325 106172 11.6808 6.0569 6.08 " " 2133 41076 95170 12.1375 21.5193 6.08 " " 8231 204862 107195 12.3950 16.6809 6.08 " " 6203 150483 102314 13.5675 17.0661 6.08 " " 6342 154278 102569 15.9042 4.8289 6.08 " 96 Tau" 1537 30605 94151 16.6656 16.1913 6.08 " " 6035 145647 101994 16.6994 5.3938 6.08 "110 Tau" 1774 35189 94514 20.1347 5.3207 6.08 " " 1741 34579 77098 20.8036 3.4072 6.08 " 65 Ari" 1027 21050 75915 21.8172 20.6529 6.08 " " 7903 196821 88959 23.9700 6.2719 6.08 " 8 Gem" 2230 43261 78168 25.7306 16.9173 6.08 " 56 Her" 6292 152863 84692 28.7431 21.7356 6.08 " 78Mu 2Cyg" 8310 206827 89939 29.5125 6.1062 6.08 " " 2146 41429 77958 29.8053 20.6767 6.08 " " 7917 197120 88997 30.2878 15.3867 6.08 " 2Eta CrB" 5728 137108 0 40.7869 4.7369 6.08 " " 1500 29866 39715 42.1061 13.5211 6.08 " " 5096 117710 44637 44.0608 4.9143 6.08 " " 1558 31069 39851 53.1556 4.9962 6.08 " 8 Cam" 1588 31579 24943 57.4603 4.2505 6.08 " " 1296 26553 24495 58.7675 12.5012 6.08 " 75 UMa" 4762 108861 28408 59.0211 5.1034 6.08 " 12 Cam" 1623 32357 25003 59.2711 21.7126 6.08 " " 8312 206842 33683 73.3072 22.2147 6.08 " " 8493 211300 10284 -10.5769 21.6578 6.08 " " 8273 206005 164555 -11.2033 10.2692 6.08 " " 4034 89033 155855 -13.0136 12.6878 6.08 " " 4821 110317 157447 -16.5347 9.8666 6.08 " " 3908 85519 155553 -19.6475 15.2220 6.08 " 25Iot2Lib" 5656 134967 159105 -21.0156 6.7837 6.08 " 12 CMa" 2509 49333 172318 -24.9606 7.1145 6.08 " " 2686 54173 172986 -29.2819 14.2504 6.08 " " 5324 124576 182374 -43.6647 10.5862 6.08 " " 4154 91805 222170 -44.2258 5.4154 6.08 " " 1813 35765 217325 -51.7372 9.3999 6.08 " " 3739 81471 236930 -55.9472 12.7138 6.08 " " 4832 110461 240176 -61.2775 12.1847 6.08 " " 4634 105841 251778 1.9681 5.2254 6.09 " " 1701 33883 112535 2.9042 19.5029 6.09 " " 7412 183589 124698 4.0081 5.7505 6.09 " " 1978 38309 113099 5.6547 7.1976 6.09 " " 2710 55111 115062 6.0400 3.9505 6.09 " " 1224 24817 111516 8.2300 19.1062 6.09 " " 7243 177940 124266 -4.9892 14.9813 6.09 " " 5583 132375 140256 -6.2450 17.2786 6.09 " " 6413 156227 141585 -6.4703 13.5071 6.09 " 72 Vir" 5088 117436 139370 -6.5381 16.6338 6.09 " " 6179 149911 141284 -6.5586 8.8014 6.09 " " 3493 75140 136287 -6.8378 4.5706 6.09 " " 1450 29063 131317 10.8247 21.7092 6.09 " " 8292 206540 107340 12.2947 1.9905 6.09 " " 578 12140 92739 14.5428 4.9832 6.09 " " 1600 31764 94240 16.0750 15.8930 6.09 " " 5913 142357 101796 16.4767 18.1691 6.09 " " 6803 166479 103443 17.2775 4.2087 6.09 " " 1295 26546 93810 19.6611 19.0479 6.09 " " 7216 177199 104405 21.1794 9.8306 6.09 " 20 Leo" 3889 85040 81035 27.2094 0.9329 6.09 " 67 Psc" 262 5382 74373 31.2650 20.3771 6.09 " " 7797 194097 69917 35.0128 19.7643 6.09 " " 7530 186927 68810 36.5386 18.8601 6.09 " " 7115 174959 67485 37.7278 4.1376 6.09 " 49 Per" 1277 25975 57000 40.1822 5.6146 6.09 " " 1884 36891 40481 43.0639 4.5569 6.09 " 57 Per" 1434 28704 39604 48.7111 6.1935 6.09 " 41 Aur" 2176 42127 40925 48.8042 17.0805 6.09 " " 6363 154732 46476 49.1208 3.4326 6.09 " " 1029 21071 38817 49.6003 21.7108 6.09 " " 8304 206731 51217 58.2503 19.9228 6.09 " " 7626 189127 32116 62.7497 18.6823 6.09 " " 7042 173398 17975 63.1856 14.5128 6.09 " " 5436 127821 16406 -11.0889 11.0928 6.09 " " 4315 96220 156448 -14.8492 16.2643 6.09 " " 6061 146254 159821 -19.2803 7.3172 6.09 " " 2785 57118 152710 -21.2325 22.1840 6.09 " " 8457 210464 190945 -22.0322 7.0797 6.09 " " 2664 53629 172906 -24.4681 16.6934 6.09 " " 6193 150366 184549 -26.4822 6.1871 6.09 " " 2206 42729 171356 -27.7492 12.4218 6.09 " " 4723 108110 180786 -30.7142 14.5527 6.09 " " 5428 127624 205681 -34.3453 5.3547 6.09 " " 1772 35165 195770 -37.6211 16.9812 6.09 " " 6298 153072 208259 -40.7964 20.4300 6.09 " " 7799 194184 230197 -42.4061 7.9494 6.09 " " 3111 65442 219186 -45.0694 10.5324 6.09 " " 4136 91356 222125 -45.0833 23.7337 6.09 " " 8993 222803 231756 -46.6378 23.6578 6.09 " The Phe" 8966 222287 231719 -48.3203 14.3774 6.09 " " 5375 125721 224870 -52.8600 4.3111 6.09 " " 1365 27604 233476 -53.1306 17.8531 6.09 " " 6632 161917 245072 -56.8883 17.2370 6.09 " " 6384 155341 244539 -60.0558 23.3825 6.09 " " 8889 220263 255474 -63.4158 20.2408 6.09 " " 7707 191603 254756 -65.8542 19.6938 6.09 " " 7455 184996 254627 -65.9914 14.9118 6.09 " Zet Cir" 5539 131058 252951 -71.7994 21.4217 6.09 " " 8159 203212 257920 -72.4744 11.4717 6.09 " " 4425 99872 256843 -78.5900 14.0091 6.09 " " 5240 121439 257107 2.0644 16.7861 6.10 " 19 Oph" 6232 151431 121859 -0.5653 5.1676 6.10 " " 1681 33419 131834 -1.0528 4.6631 6.10 " " 1488 29610 131392 -3.3178 18.8561 6.10 " 8 Aql" 7101 174589 142706 -9.0353 6.2572 6.10 " " 2237 43362 133029 13.1967 15.8867 6.10 " 39 Ser" 5911 142267 101792 13.2350 15.1482 6.10 " " 5639 134323 101403 20.9286 3.7411 6.10 " " 1137 23258 76121 20.9961 17.5999 6.10 " " 6559 159834 85232 21.9756 14.6727 6.10 " " 5472 129132 83458 24.1447 8.4769 6.10 " 28 Cnc" 3329 71496 80204 26.0811 6.9798 6.10 " 39 Gem" 2601 51530 78929 31.0458 3.9231 6.10 " " 1209 24534 56815 31.6075 2.6119 6.10 " " 757 16187 55703 31.9419 8.6717 6.10 " " 3423 73596 60970 33.9792 19.6625 6.10 " " 7481 185837 68654 34.4578 18.5871 6.10 " " 6984 171780 67134 35.5772 22.6022 6.10 " " 8604 214200 72517 36.1969 14.4712 6.10 " " 5416 127065 64161 36.4322 19.8712 6.10 " " 7583 188149 69004 37.3017 17.5951 6.10 " " 6563 159925 66165 39.0431 2.1816 6.10 " 59 And" 629 13295 55331 42.9117 6.0550 6.10 " 38 Aur" 2119 40801 40818 46.8342 11.6426 6.10 " 60 UMa" 4480 101133 43839 55.9225 3.7923 6.10 " " 1147 23383 24215 55.9714 17.9232 6.10 " " 6699 163929 30645 59.7500 21.4570 6.10 " " 8224 204599 33443 64.6006 17.0376 6.10 " " 6360 154633 17324 -14.7850 20.3463 6.10 " " 7775 193452 163471 -15.6675 16.8244 6.10 " " 6240 151676 160116 -17.7794 2.1460 6.10 " " 625 13215 148237 -22.5456 2.5091 6.10 " " 735 15652 167839 -23.1761 10.5827 6.10 " " 4149 91706 178993 -25.3875 8.7637 6.10 " " 3483 74879 176439 -26.5378 16.5230 6.10 " " 6145 148760 184437 -27.7756 0.9321 6.10 " " 268 5445 166686 -28.7875 9.4458 6.10 " " 3745 81753 177461 -30.8217 7.2011 6.10 " " 2720 55568 197686 -31.6331 22.9309 6.10 " " 8719 216761 214187 -31.9217 23.9213 6.10 " " 9049 224113 214860 -33.2144 16.0716 6.10 " " 5974 143902 207292 -35.5958 20.4796 6.10 " " 7817 194783 212160 -36.0914 15.2187 6.10 " " 5653 134837 206418 -38.5947 1.8898 6.10 " " 554 11643 193368 -39.6286 4.9152 6.10 " " 1584 31529 195400 -42.8806 17.6357 6.10 " " 6558 159707 228220 -43.1244 23.3959 6.10 " " 8896 220401 231587 -43.1600 14.9909 6.10 " " 5580 132242 225351 -44.4519 22.2598 6.10 " " 8484 211053 231053 -46.5244 2.7024 6.10 " " 807 17006 216013 -46.9475 4.4517 6.10 " " 1418 28454 216809 -47.1281 13.8991 6.10 " " 5223 120991 224514 -49.4056 10.4672 6.10 " " 4111 90798 222081 -49.6269 5.9114 6.10 " " 2089 40200 217612 -51.5975 15.4742 6.10 " " 5738 137465 242569 -51.7661 1.9500 6.10 " " 573 12042 232581 -53.3528 17.5889 6.10 " " 6530 159018 244870 -54.0211 15.9983 6.10 " " 5937 142919 243219 -54.5150 8.0230 6.10 " " 3157 66546 235686 -55.6019 14.7530 6.10 " " 5488 129557 241971 -59.9181 10.2170 6.10 " " 4018 88825 237799 -62.7889 9.5374 6.10 " " 3816 82901 250614 -62.8783 11.7314 6.10 " " 4513 101995 251559 -66.0664 1.9948 6.10 " " 600 12477 248476 -70.4450 13.6460 6.10 " " 5119 118344 257070 1.0647 22.9165 6.11 " 1 Psc" 8715 216701 127836 1.8642 9.5448 6.11 " " 3794 82543 117757 4.5011 2.9513 6.11 " " 877 18345 110865 4.9103 7.1184 6.11 " " 2676 53929 114935 6.4831 0.9971 6.11 " " 284 5820 109581 8.2400 0.2761 6.11 " 36 Psc" 59 1227 109100 9.9750 4.8621 6.11 " " 1553 30870 112150 -0.8672 5.3976 6.11 " " 1782 35317 132060 -2.8003 20.4285 6.11 " " 7809 194454 144412 -2.8786 3.0142 6.11 " 7 Eri" 904 18760 130242 -3.5531 12.8864 6.11 " 38 Vir" 4891 111998 139022 -7.1097 9.2072 6.11 " 21 Hya" 3655 79193 136662 11.0033 6.6881 6.11 " " 2458 47886 95997 11.4075 16.4365 6.11 " " 6121 148228 102165 17.8800 3.1238 6.11 " 53 Ari" 938 19374 93284 18.7269 13.2201 6.11 " " 4992 114889 100467 21.6708 23.8732 6.11 " " 9035 223755 91548 24.3464 13.5467 6.11 " " 5102 117876 82875 24.4522 21.5908 6.11 " " 8258 205541 89819 25.3294 3.6795 6.11 " 11 Tau" 1118 22805 76073 25.5436 22.1381 6.11 " " 8441 210210 90259 31.9208 5.6784 6.11 " " 1939 37536 58322 32.2956 14.1875 6.11 " " 5310 124186 63979 34.4231 20.1282 6.11 " " 7699 191243 69457 34.6750 15.6469 6.11 " " 5827 139761 64825 38.1317 3.0033 6.11 " " 894 18552 56067 38.7100 19.8243 6.11 " " 7555 187638 68909 40.8053 21.6929 6.11 " 76 Cyg" 8291 206538 51189 40.9367 18.2852 6.11 " " 6853 168322 47359 43.7911 0.3117 6.11 " 26 And" 70 1438 36256 45.3378 1.2094 6.11 " " 355 7158 37023 45.7419 22.1447 6.11 " " 8448 210334 51684 46.0997 3.7447 6.11 " " 1130 23139 39071 47.3108 2.3448 6.11 " " 679 14372 37955 47.7153 5.6044 6.11 " " 1869 36719 40466 51.8542 20.5807 6.11 " " 7876 196379 32709 52.8164 23.1195 6.11 " " 8801 218416 35151 53.8719 18.7247 6.11 " " 7060 173664 31133 56.0686 3.0944 6.11 " " 920 18991 23793 60.7569 21.3426 6.11 " " 8179 203574 19333 63.1625 22.2304 6.11 " " 8490 211242 19948 85.1822 6.0223 6.11 " " 1885 36905 914 -10.3125 12.2529 6.11 " " 4657 106516 157168 -11.7756 5.6191 6.11 " " 1919 37306 150617 -13.0547 8.3797 6.11 " 22 Pup" 3289 70673 154177 -13.7033 19.8008 6.11 " " 7532 186984 162998 -18.8528 19.6073 6.11 " " 7439 184705 162809 -21.1678 8.7487 6.11 " " 3473 74706 176404 -24.0814 4.4492 6.11 " " 1410 28312 169455 -31.1025 2.4765 6.11 " " 727 15471 193727 -33.0481 21.6136 6.11 " 7 PsA" 8256 205529 213136 -33.4633 7.5702 6.11 " " 2913 60646 198138 -36.1297 20.9999 6.11 " " 8031 199684 212608 -36.3411 8.2330 6.11 " " 3241 69082 198970 -37.5144 16.8499 6.11 " " 6244 151771 208089 -38.3828 7.1006 6.11 " " 2685 54153 197572 -41.4233 14.0576 6.11 " " 5269 122532 224641 -42.2511 10.9169 6.11 " " 4263 94660 222422 -42.5144 12.4190 6.11 " " 4721 108063 223426 -42.7536 10.6473 6.11 " " 4175 92328 222222 -45.6006 17.8624 6.11 " " 6640 162123 228490 -47.3139 5.6007 6.11 " " 1927 37434 217422 -49.7364 11.2158 6.11 " " 4353 97550 222643 -54.6258 14.2278 6.11 " " 5311 124195 241552 -55.4017 17.8106 6.11 " " 6614 161420 245044 -55.8033 9.1094 6.11 " " 3629 78548 236611 -56.1344 5.3728 6.11 " Kap Pic" 1801 35580 233952 -57.0025 1.0338 6.11 " Ome Phe" 295 6192 232268 -58.4778 14.7487 6.11 " " 5486 129462 241966 -58.9583 17.0298 6.11 " " 6304 153261 244362 -59.7319 10.9634 6.11 " " 4276 95109 238635 -60.2492 6.8336 6.11 " " 2562 50571 249654 -64.6758 13.4854 6.11 " " 5069 117025 252329 -67.0508 9.2977 6.11 " " 3713 80710 250529 -69.6111 20.5977 6.11 " " 7838 195402 254820 -70.4339 6.7489 6.11 " " 2536 50002 256331 -72.5508 8.8306 6.11 " " 3544 76270 256556 -78.5047 1.5609 6.11 " " 467 10042 255794 8.9519 5.6220 6.12 " " 1913 37232 112966 -1.0225 15.3955 6.12 " 8 Ser" 5721 137006 140502 -1.1206 3.6665 6.12 " " 1119 22819 130645 -2.2553 10.8902 6.12 " " 4249 94363 137863 -8.5053 9.5506 6.12 " " 3801 82638 136945 -9.3822 5.9836 6.12 " 1 Mon" 2107 40535 132714 -9.5739 10.0614 6.12 " " 3959 87262 137326 -9.9792 1.0936 6.12 " 27 Cet" 315 6482 147601 10.5869 5.9037 6.12 " " 2048 39632 94977 12.9561 1.1093 6.12 " 75 Psc" 319 6557 92250 13.0478 3.1894 6.12 " " 952 19789 93327 13.3292 17.6494 6.12 " " 6577 160365 102999 14.9756 10.3640 6.12 " 42 Leo" 4070 89774 99080 16.9417 22.9099 6.12 " " 8714 216672 108246 17.6556 15.5926 6.12 " 15Tau3Ser" 5795 139074 101631 18.7425 4.3403 6.12 " " 1354 27429 93874 19.2553 17.8133 6.12 " " 6642 162161 103131 21.8803 18.2212 6.12 " " 6820 167193 85836 22.4136 4.2142 6.12 " " 1297 26571 76505 25.6628 3.3404 6.12 " 60 Ari" 1000 20663 75875 26.9244 21.1065 6.12 " " 8082 201051 89459 32.3003 14.9330 6.12 " " 5569 132029 64408 34.6597 0.0816 6.12 " " 9107 225239 53622 35.3875 6.1024 6.12 " " 2141 41330 58739 38.1883 9.3498 6.12 " " 3701 80441 61411 38.6486 21.8082 6.12 " " 8338 207516 71722 38.8692 6.8837 6.12 " 59 Aur" 2539 50018 59571 41.8542 6.1241 6.12 " " 2147 41467 40868 45.8397 0.9610 6.12 " " 272 5526 36795 46.1769 12.9521 6.12 " " 4919 112570 44398 47.9078 19.7908 6.12 " " 7547 187372 48842 48.7675 18.8045 6.12 " " 7096 174481 47823 50.5697 2.4644 6.12 " 66 And" 709 15138 23353 52.7581 7.0944 6.12 " " 2644 52859 26144 53.9089 22.7058 6.12 " " 8648 215159 34713 54.4150 22.8133 6.12 " " 8682 216057 34845 55.4186 21.4813 6.12 " " 8226 204754 33458 56.6869 19.9386 6.12 " " 7634 189296 32128 64.2575 10.5074 6.12 " " 4108 90745 15200 -10.6886 23.2445 6.12 " " 8836 219279 165578 -12.9625 6.4057 6.12 " " 2309 44996 151461 -12.9850 6.6280 6.12 " " 2437 47366 151725 -15.0564 20.5179 6.12 " " 7837 195330 163645 -19.5236 7.8349 6.12 " " 3051 63822 153468 -21.1828 21.9788 6.12 " " 8378 208735 190786 -27.3564 7.2268 6.12 " " 2734 55857 173244 -31.0361 18.9726 6.12 " " 7151 175794 210773 -31.6194 13.8669 6.12 " " 5212 120759 204922 -31.8922 1.5807 6.12 " " 453 9742 193188 -35.7494 17.2726 6.12 " " 6405 155974 208610 -36.2108 21.2630 6.12 " " 8124 202287 212843 -39.4308 16.3424 6.12 " " 6080 146954 207574 -40.3497 6.6873 6.12 " " 2475 48383 218126 -41.1131 16.7316 6.12 " " 6209 150591 227123 -41.3700 3.5038 6.12 " " 1076 21899 216350 -42.2986 6.1114 6.12 " Pi 1Col" 2171 42078 217720 -42.6692 11.4061 6.12 " " 4403 99171 222773 -44.6458 11.3731 6.12 " " 4393 98892 222751 -45.4017 15.8379 6.12 " " 5872 141296 226263 -46.6361 10.0557 6.12 " " 3964 87363 221728 -48.7342 3.1743 6.12 " " 960 19948 216197 -48.8714 8.0080 6.12 " " 3151 66255 219292 -50.8244 2.1738 6.12 " " 637 13445 232658 -52.6389 9.9530 6.12 " " 3941 86466 237526 -54.6606 21.4376 6.12 " Gam Ind" 8188 203760 247031 -56.7225 7.7599 6.12 " " 3031 63382 235490 -58.5472 4.9147 6.12 " " 1597 31746 233733 -59.0122 21.9750 6.12 " Kap1Ind" 8369 208496 247247 -62.7000 23.2352 6.12 " " 8829 219077 255435 -63.1886 22.8694 6.12 " " 8689 216187 255339 -64.1061 8.3521 6.12 " " 3298 70982 250202 -73.3567 8.5451 6.12 " " 3417 73468 256524 -79.4808 23.1399 6.12 " " 8786 218108 258105 1.1033 21.4411 6.13 " " 8205 204121 126794 5.4358 18.3579 6.13 " " 6873 168797 123385 5.6806 8.7504 6.13 " 10 Hya" 3469 74591 117088 -2.4608 19.8531 6.13 " " 7559 187660 143853 -3.3578 20.4736 6.13 " 68 Aql" 7821 194939 144468 -5.3292 8.3381 6.13 " " 3272 70148 135787 11.6289 19.8676 6.13 " " 7569 187923 105348 14.5692 20.3390 6.13 " " 7778 193556 105988 18.5175 23.1051 6.13 " " 8788 218235 108400 18.8847 14.7558 6.13 " " 5507 130025 101187 19.5789 0.7871 6.13 " 59 Psc" 214 4490 92082 21.5986 20.2721 6.13 " 18 Sge" 7746 192836 88433 22.7003 13.7292 6.13 " " 5164 119584 82969 24.0889 4.7205 6.13 " 95 Tau" 1499 29859 76727 29.0214 0.1102 6.13 " " 8 166 73743 30.6978 8.7559 6.13 " 46 Cnc" 3464 74485 61029 32.5536 16.8453 6.13 " " 6259 152224 65595 42.1714 15.2362 6.13 " " 5677 135530 45445 43.4306 16.8279 6.13 " " 6256 152153 46311 43.9100 6.9207 6.13 " " 2557 50420 41429 44.1164 23.3456 6.13 " " 8884 220105 52927 46.7447 22.0879 6.13 " " 8421 209857 51632 51.2661 9.3455 6.13 " " 3697 80290 27215 53.9975 21.2839 6.13 " " 8147 202923 33281 58.1172 5.3244 6.13 " 15 Cam" 1719 34233 25125 59.3661 3.5031 6.13 " " 1043 21427 24062 60.6492 17.0213 6.13 " " 6348 154391 17312 61.5419 21.9224 6.13 " " 8374 208606 19738 62.8081 5.8180 6.13 " " 1976 38284 13618 62.9331 12.0944 6.13 " " 4610 105043 15710 65.9197 15.0661 6.13 " " 5629 133994 16587 -10.3706 9.5322 6.13 " " 3788 82477 155262 -10.9017 1.4629 6.13 " " 425 8921 147819 -13.2336 8.8752 6.13 " " 3529 75916 154704 -13.7211 20.5699 6.13 " " 7855 195838 163686 -14.8292 15.9426 6.13 " " 5930 142703 159587 -15.8639 11.8388 6.13 " " 4539 102845 156926 -18.5000 11.2084 6.13 " Psi Crt" 4347 97411 156528 -19.7281 8.0782 6.13 " 14 Pup" 3168 66834 153796 -19.8036 19.1634 6.13 " " 7265 178555 162260 -19.8669 10.3703 6.13 " " 4076 89911 155935 -19.9206 4.5835 6.13 " " 1461 29184 169584 -20.3817 4.0781 6.13 " " 1267 25803 169095 -21.3122 19.5150 6.13 " " 7410 183545 188219 -22.4492 6.7127 6.13 " " 2481 48501 172204 -22.9247 8.3409 6.13 " " 3276 70302 175634 -29.3794 18.8769 6.13 " " 7104 174631 187389 -35.4511 17.1079 6.13 " " 6347 154368 208410 -35.5231 22.9764 6.13 " " 8732 217096 214215 -35.8567 10.1588 6.13 " " 3992 88218 201109 -36.6069 8.6561 6.13 " " 3434 73900 199473 -39.5972 14.6067 6.13 " " 5446 128152 205744 -39.6892 11.9319 6.13 " " 4568 103637 202950 -40.2222 14.0219 6.13 " " 5259 122210 205096 -42.7389 10.4360 6.13 " " 4099 90518 222047 -47.5803 20.3216 6.13 " " 7749 192886 230150 -49.3925 11.0845 6.13 " " 4316 96224 222548 -50.4864 19.2128 6.13 " " 7271 178845 245976 -54.5778 16.0184 6.13 " " 5946 143101 243246 -55.4414 19.4979 6.13 " " 7388 182893 246125 -65.3756 16.8650 6.13 " " 6233 151441 253717 -67.4711 23.3056 6.13 " " 8855 219644 255455 -71.2661 0.5565 6.13 " The Tuc" 139 3112 255679 -75.0997 10.9544 6.13 " " 4279 95208 256775 1.9192 18.0770 6.14 " " 6747 165174 123090 3.8672 9.2036 6.14 " " 3651 79108 117492 4.2367 8.9436 6.14 " " 3557 76494 117287 -0.7525 11.0541 6.14 " " 4303 95771 137963 -0.8478 14.8150 6.14 " " 5522 130557 140152 -2.2053 9.4901 6.14 " " 3760 82043 136899 -2.5436 6.6390 6.14 " " 2440 47420 133511 -2.9528 3.9048 6.14 " 32 Eri" 1211 24554 130805 -6.5550 22.5218 6.14 " " 8581 213429 146135 -7.1347 11.2828 6.14 " " 4369 98088 138106 -9.1544 3.2766 6.14 " 14 Eri" 988 20395 130395 -9.7764 2.9798 6.14 " " 895 18557 130216 11.2508 6.5193 6.14 " " 2370 45995 95766 13.9656 18.8672 6.14 " " 7109 174853 104196 17.0461 8.4305 6.14 " 25 Cnc" 3299 71030 97806 17.2058 16.1463 6.14 " 8 Her" 6013 145122 101962 17.2642 15.7450 6.14 " 26Tau8Ser" 5858 140729 101712 19.6650 3.7298 6.14 " 14 Tau" 1132 23183 93568 21.8225 16.1228 6.14 " " 6005 144889 84202 22.3517 10.9380 6.14 " " 4269 94720 81589 24.3667 14.8065 6.14 " " 5524 130603 83535 27.4222 16.2632 6.14 " " 6068 146537 84269 30.4947 5.0707 6.14 " " 1626 32406 57610 33.7672 5.3053 6.14 " 17 Aur" 1728 34364 57858 35.0933 9.7119 6.14 " 13 LMi" 3857 83951 61648 35.5383 8.8988 6.14 " " 3528 75896 61117 39.8097 22.4574 6.14 " " 8553 212978 72358 41.4417 5.0552 6.14 " " 1615 32188 39979 43.3792 20.2286 6.14 " " 7733 192535 49336 50.6183 11.6314 6.14 " " 4474 101013 28081 50.7367 3.8051 6.14 " " 1160 23552 24231 51.4331 0.2953 6.14 " " 65 1337 21273 51.8394 20.0852 6.14 " " 7687 190964 32272 52.3708 10.0862 6.14 " " 3958 87243 27512 53.3072 22.1238 6.14 " " 8443 210221 34076 54.5472 5.9967 6.14 " " 2080 40083 25505 56.7800 20.5296 6.14 " " 7860 195964 32667 58.9642 5.8715 6.14 " 30 Cam" 2006 38831 25419 62.0419 13.1063 6.14 " " 4953 113994 15985 66.0981 1.5145 6.14 " " 428 9030 11788 -10.5522 9.5275 6.14 " " 3785 82428 155257 -14.8642 0.4978 6.14 " " 115 2630 147307 -15.6603 1.4111 6.14 " " 405 8589 147793 -17.0792 23.0869 6.14 " " 8783 218061 165481 -18.9333 6.8894 6.14 " " 2566 50643 152056 -22.5294 18.9735 6.14 " " 7159 175892 187519 -23.0228 13.9577 6.14 " " 5246 121699 182123 -23.8044 0.6758 6.14 " " 173 3795 166475 -23.9925 1.1021 6.14 " " 320 6559 166799 -24.5603 2.8308 6.14 " Gam1For" 844 17713 168081 -27.3386 15.9083 6.14 " " 5910 142250 183907 -27.7619 17.2069 6.14 " " 6387 155401 185142 -28.9069 2.9852 6.14 " " 900 18650 168202 -33.5692 8.0958 6.14 " " 3177 67243 198791 -34.7778 7.0922 6.14 " " 2677 53952 197557 -40.6522 7.8024 6.14 " " 3041 63640 219006 -42.8997 16.2567 6.14 " " 6049 145921 226603 -43.0433 20.0074 6.14 " " 7627 189140 229977 -47.8164 1.8389 6.14 " " 537 11332 215673 -54.1319 13.9388 6.14 " " 5234 121336 241309 -58.1903 10.5570 6.14 " " 4147 91619 238182 -61.8839 10.0595 6.14 " " 3971 87543 250795 -63.0214 18.4254 6.14 " " 6871 168740 254237 -63.2969 7.9535 6.14 " " 3139 65908 250030 -63.4636 3.9344 6.14 " " 1236 25170 248912 -76.6631 9.2034 6.14 " " 3695 80194 256594 1.0019 6.8177 6.15 " " 2517 49567 114465 1.0686 20.4104 6.15 " " 7803 194244 125769 1.8586 4.4677 6.15 " " 1413 28322 111840 2.4711 18.9404 6.15 " " 7144 175679 124073 4.9572 6.6313 6.15 " " 2432 47240 114162 6.8644 21.8994 6.15 " " 8359 208110 127141 6.9894 21.1412 6.15 " " 8090 201298 126566 7.1403 19.9112 6.15 " " 7598 188385 125221 -0.3186 11.8170 6.15 " " 4533 102634 138420 -1.4092 5.2551 6.15 " " 1717 34180 131917 -1.5794 18.4158 6.15 " " 6898 169493 142294 -1.5964 22.2760 6.15 " " 8495 211356 145989 -2.8486 1.4135 6.15 " " 406 8599 129280 -3.1964 14.2750 6.15 " " 5342 124931 139830 -4.5972 6.4429 6.15 " " 2325 45321 133257 -4.6292 0.7567 6.15 " " 201 4301 128935 -6.1792 8.3751 6.15 " " 3285 70574 135832 -6.5742 23.0424 6.15 " 82 Aqr" 8763 217701 146465 -6.7542 6.1837 6.15 " " 2195 42536 132924 -7.0733 18.7100 6.15 " " 7024 172831 142525 10.3039 6.4719 6.15 " " 2342 45512 95718 18.8422 8.0792 6.15 " " 3158 66552 97537 19.3644 10.4501 6.15 " " 4097 90472 99128 19.8553 2.5107 6.15 " 26 Ari" 729 15550 92979 21.6469 18.0917 6.15 " " 6763 165524 85718 22.6481 23.9449 6.15 " " 9055 224303 91595 23.5142 18.8046 6.15 " " 7079 174160 86451 25.3122 21.4021 6.15 " " 8194 203858 89680 25.7047 2.1137 6.15 " 11 Ari" 615 12885 75149 26.0019 12.3383 6.15 " " 4694 107326 82249 29.4158 10.8159 6.15 " 43 LMi" 4223 93636 81533 33.2628 5.4476 6.15 " " 1796 35521 58030 33.3114 18.0266 6.15 " " 6737 164824 66562 35.4572 5.4484 6.15 " " 1794 35519 58029 41.0408 21.3154 6.15 " " 8155 203096 50699 42.3761 3.2027 6.15 " " 950 19736 38635 43.5947 0.2727 6.15 " " 56 1185 36221 45.0022 0.8384 6.15 " " 234 4778 36702 47.2014 15.4790 6.15 " " 5752 138213 45562 50.9719 14.0499 6.15 " " 5280 122866 28989 51.6983 21.5743 6.15 " " 8259 205551 33540 52.0558 19.9876 6.15 " " 7651 189775 32170 54.0422 21.6274 6.15 " " 8275 206040 33596 59.4056 5.2531 6.15 " " 1688 33618 25088 60.6014 20.7110 6.15 " " 7938 197734 18998 61.4767 5.7357 6.15 " 23 Cam" 1943 37638 13590 64.1547 5.6209 6.15 " 19 Cam" 1857 36570 13550 73.6297 8.6618 6.15 " " 3379 72582 6605 81.1272 11.5307 6.15 " " 4429 99945 1884 81.2308 21.2226 6.15 " " 8174 203501 3534 -11.2389 1.3411 6.15 " " 388 8121 147746 -12.8808 0.7580 6.15 " 18 Cet" 203 4307 147432 -14.2314 4.9624 6.15 " " 1595 31726 150029 -17.5303 5.7040 6.15 " " 1965 38054 150716 -22.4217 5.7407 6.15 " " 1982 38392 170757 -25.8983 22.2771 6.15 " " 8492 211291 191016 -26.7381 12.8661 6.15 " " 4881 111786 181169 -26.7678 9.1454 6.15 " " 3637 78676 177022 -34.8469 7.9111 6.15 " " 3092 64876 198579 -35.9917 18.4227 6.15 " " 6889 169236 210119 -36.0939 12.2965 6.15 " " 4675 106922 203319 -39.9067 14.9769 6.15 " " 5572 132096 206154 -40.8236 16.9433 6.15 " " 6283 152667 227473 -45.7672 18.1417 6.15 " " 6759 165493 228734 -51.2283 9.7243 6.15 " " 3872 84400 237260 -51.8178 11.0024 6.15 " " 4296 95429 238674 -52.5706 2.7363 6.15 " " 821 17254 232871 -53.7150 0.7500 6.15 " " 202 4304 232168 -53.8083 23.3984 6.15 " " 8895 220392 247854 -56.4078 12.4759 6.15 " " 4749 108570 239977 -60.7433 15.9146 6.15 " " 5898 141913 253344 -61.8797 6.5196 6.15 " " 2410 46792 249572 -63.1247 16.4228 6.15 " " 6089 147349 253539 -69.2656 3.1303 6.15 " " 959 19940 248742 -69.6247 3.4007 6.15 " " 1053 21563 248797 -73.5864 23.1432 6.15 " " 8794 218288 258106 -76.1161 22.1987 6.15 " " 8432 210056 258006 -78.7717 22.5907 6.15 " " 8577 213402 258049 0.5208 5.4297 6.16 " " 1803 35588 112752 2.6461 6.4875 6.16 " " 2355 45724 113940 5.4747 7.2021 6.16 " " 2713 55184 115065 5.4981 15.1279 6.16 " " 5631 134047 120852 8.3883 13.7035 6.16 " " 5156 119288 120075 -2.3953 22.9710 6.16 " " 8734 217107 146412 -2.9111 22.5218 6.16 " " 8580 213428 146136 -8.7408 0.9049 6.16 " 21 Cet" 255 5268 129019 14.0564 13.9306 6.16 " " 5243 121560 100776 14.3828 6.3016 6.16 " " 2253 43683 95502 15.2578 5.4538 6.16 " " 1809 35693 94556 16.5367 3.6571 6.16 " " 1110 22695 93536 18.8322 8.8459 6.16 " " 3504 75469 98162 24.4619 3.9573 6.16 " " 1222 24802 76350 25.4989 21.6458 6.16 " " 8274 206027 89870 27.9269 19.2665 6.16 " " 7308 180583 87008 31.9533 4.3361 6.16 " " 1344 27349 57166 32.9019 9.3576 6.16 " " 3707 80546 61424 37.4450 7.1434 6.16 " " 2675 53925 59812 37.8111 14.8185 6.16 " " 5529 130817 64344 41.9403 20.9752 6.16 " " 8036 199892 50303 43.0778 19.6781 6.16 " " 7492 186121 48714 45.3458 3.2680 6.16 " " 973 20162 38685 48.1525 0.1997 6.16 " " 36 743 36148 48.2297 20.0747 6.16 " " 7684 190781 49152 52.6200 21.5243 6.16 " " 8242 205114 33497 53.4347 12.2454 6.16 " " 4654 106478 28309 55.6903 16.7162 6.16 " " 6226 151199 30062 57.2844 22.3834 6.16 " " 8535 212454 34383 63.0728 16.6153 6.16 " " 6198 150429 17165 -11.1286 7.8487 6.16 " " 3054 63894 153479 -13.1481 6.5096 6.16 " " 2373 46064 151585 -16.2850 8.2897 6.16 " 21 Pup" 3257 69665 154076 -18.6231 21.8616 6.16 " " 8346 207760 164697 -22.3917 20.4920 6.16 " " 7825 195006 189345 -26.7467 11.5398 6.16 " " 4445 100307 179969 -27.8714 5.6213 6.16 " Nu 1Col" 1926 37430 170601 -28.4300 18.3667 6.16 " " 6864 168646 186704 -29.8042 3.2272 6.16 " " 974 20176 168397 -33.7997 18.1820 6.16 " " 6788 166197 209817 -34.1072 18.2934 6.16 " " 6833 167647 209959 -34.6964 17.4174 6.16 " " 6470 157486 208786 -35.9028 8.2664 6.16 " " 3253 69511 199015 -37.5389 19.7271 6.16 " " 7491 186042 211506 -37.8103 19.1146 6.16 " " 7232 177565 210937 -38.3992 13.5348 6.16 " " 5092 117597 204561 -39.6208 8.3567 6.16 " " 3286 70612 199123 -43.1389 13.2326 6.16 " " 4991 114873 223989 -46.5153 4.4889 6.16 " " 1433 28700 216832 -47.9431 13.3813 6.16 " " 5038 116197 224095 -52.1633 10.2064 6.16 " " 4010 88693 237784 -54.9742 10.2546 6.16 " " 4038 89104 237834 -56.1914 16.1233 6.16 " " 5979 144183 243339 -57.5036 12.0247 6.16 " " 4592 104430 239589 -59.8167 13.2156 6.16 " " 4980 114630 240653 -61.3203 10.9872 6.16 " " 4290 95324 251205 -68.8311 12.7505 6.16 " " 4841 110716 252012 -78.3483 1.9307 6.16 " Sig Hyi" 593 12363 255835 0.5306 11.9843 6.17 " " 4580 104055 119147 1.1775 5.0899 6.17 " " 1648 32736 112406 1.3778 19.9896 6.17 " " 7636 189322 125310 1.4628 9.1166 6.17 " " 3618 78196 117432 1.6889 0.2966 6.17 " " 67 1367 109119 2.1861 17.2706 6.17 " " 6412 156208 122224 2.5794 17.7428 6.17 " 61 Oph" 6609 161270 122690 2.7042 6.6279 6.17 " " 2430 47220 114154 4.4858 7.9400 6.17 " " 3093 64938 116145 7.1789 13.5000 6.17 " " 5086 117404 119962 8.1867 22.3488 6.17 " " 8514 211976 127460 8.8842 11.6361 6.17 " " 4478 101112 118961 9.4719 5.1273 6.17 " 13 Ori" 1662 33021 112436 -1.3456 7.0314 6.17 " " 2636 52611 134073 -5.7111 6.1601 6.17 " " 2179 42278 132900 -5.9081 23.3447 6.17 " " 8879 220035 146652 -5.9172 21.7939 6.17 " " 8332 207235 145671 -5.9186 3.2669 6.17 " " 983 20319 130388 -6.1203 14.4568 6.17 "104 Vir" 5406 126722 139942 11.9467 17.8454 6.17 " " 6650 162468 103145 13.8642 4.3480 6.17 " " 1358 27483 93878 14.5514 20.3812 6.17 " " 7793 194012 106042 17.1439 8.9523 6.17 " " 3558 76508 98245 17.8328 3.5690 6.17 " " 1085 22072 93494 18.7058 18.7782 6.17 " " 7067 173833 104087 19.5992 17.0781 6.17 " " 6352 154441 102579 23.7117 3.8287 6.17 " " 1183 23923 76244 24.2225 7.6533 6.17 " " 2931 61219 79580 25.7458 1.6884 6.17 " " 484 10308 74870 26.8472 23.1970 6.17 " 60 Peg" 8827 218935 91080 29.9011 21.2362 6.17 " " 8126 202314 89549 32.0097 7.6650 6.17 " " 2936 61295 60254 37.7694 22.3156 6.17 " " 8510 211797 72228 39.5367 21.8514 6.17 " " 8349 207857 71767 45.7658 21.7023 6.17 " " 8298 206632 51204 49.1331 23.5021 6.17 " " 8925 221246 53088 51.8822 10.9883 6.17 " " 4275 95057 27858 57.5589 17.5588 6.17 " " 6560 159870 30464 58.7533 0.7086 6.17 " " 181 3924 21642 61.2728 21.8219 6.17 " " 8347 207780 19663 61.8500 5.2176 6.17 " " 1675 33266 13409 64.9839 9.7435 6.17 " " 3859 83962 14976 65.5208 4.1108 6.17 " " 1248 25425 13015 67.7814 15.1789 6.17 " " 5672 135384 16630 75.0439 5.6621 6.17 " " 1844 36384 5593 79.1367 9.7883 6.17 " " 3847 83727 6956 80.8531 12.0052 6.17 " " 4586 104216 1967 83.1753 18.4026 6.17 " " 7025 172864 3056 -15.3269 12.9315 6.17 " " 4911 112304 157599 -16.2378 5.7854 6.17 " " 2000 38713 150806 -17.4553 21.1291 6.17 " " 8083 201057 164156 -17.7686 15.2427 6.17 " 26 Lib" 5662 135230 159122 -18.1586 15.3483 6.17 " 28 Lib" 5701 136366 159187 -22.0319 15.1075 6.17 " " 5620 133670 183176 -22.9261 5.8579 6.17 " " 2036 39385 170931 -23.1400 22.2833 6.17 " " 8497 211364 191021 -26.2464 23.7414 6.17 " " 8999 222872 192116 -26.3278 22.2160 6.17 " " 8464 210739 190967 -28.6181 8.8393 6.17 " " 3516 75649 176554 -29.3608 22.7061 6.17 " 19 PsA" 8637 214966 191337 -34.2797 17.5401 6.17 " " 6522 158741 208935 -34.7050 12.1674 6.17 " " 4628 105686 203183 -34.7306 17.8888 6.17 " " 6657 162586 209411 -34.9044 0.2495 6.17 " " 54 1089 192418 -35.0667 11.8908 6.17 " " 4553 103266 202910 -35.9069 11.7853 6.17 " " 4524 102397 202805 -38.1331 1.6909 6.17 " " 494 10481 193255 -43.4711 14.1478 6.17 " " 5294 123445 224721 -43.7231 19.4059 6.17 " " 7350 181925 229660 -45.5756 1.5275 6.17 " " 443 9414 215539 -48.7514 9.6070 6.17 " " 3831 83368 221339 -49.3511 20.0070 6.17 " " 7621 189080 229973 -54.6694 14.0963 6.17 " " 5278 122844 241430 -65.2756 15.1324 6.17 " " 5611 133456 253024 -70.1519 12.2130 6.17 " " 4645 106111 251791 -83.3106 20.4151 6.17 " " 7698 191220 258856 3.2772 7.8465 6.18 " " 3050 63799 116014 6.6183 21.6288 6.18 " 3 Peg" 8265 205811 126940 7.4714 2.5845 6.18 " " 751 16060 110625 -0.2572 14.8500 6.18 " " 5536 130970 140177 -0.9094 8.3370 6.18 " " 3271 70110 135783 -3.9533 16.2820 6.18 " " 6067 146514 141075 -4.6656 6.1955 6.18 " " 2202 42657 132941 -9.2661 23.4835 6.18 " " 8921 221081 146729 19.6169 22.1719 6.18 " " 8455 210460 107706 19.8142 5.3491 6.18 " " 1755 34810 94478 20.4742 5.5608 6.18 " " 1860 36589 77255 20.6058 20.5161 6.18 " " 7839 195479 88783 23.1411 7.8093 6.18 " 82 Gem" 3021 63208 79704 23.5117 1.4266 6.18 " " 407 8634 74707 27.0133 2.4519 6.18 " " 711 15152 75370 28.7836 18.8600 6.18 " " 7112 174881 86512 32.8886 19.7764 6.18 " " 7535 187038 68835 36.4869 9.5584 6.18 " 9 LMi" 3791 82522 61561 37.2658 8.5222 6.18 " " 3348 71906 60866 37.7267 2.6383 6.18 " " 768 16327 55729 38.0239 23.5796 6.18 " " 8950 221776 73351 39.3089 22.9613 6.18 " " 8733 217101 72883 40.4292 19.1898 6.18 " " 7284 179583 48168 40.4650 5.3112 6.18 " " 1725 34332 40224 52.3097 20.5225 6.18 " " 7854 195820 32649 53.5961 20.3418 6.18 " " 7791 193944 32491 54.8289 4.1562 6.18 " " 1276 25948 24440 66.5194 0.5237 6.18 " 13 Cas" 121 2729 11243 69.6342 2.8154 6.18 " " 815 17138 12445 -10.0628 20.1420 6.18 " " 7694 191110 163290 -10.8997 17.8843 6.18 " " 6666 162757 160885 -19.2081 8.9944 6.18 " " 3584 77084 154815 -22.3372 7.6899 6.18 " " 2976 62082 174298 -22.4781 17.7960 6.18 " " 6617 161664 185765 -23.1075 0.1139 6.18 " " 9 203 166053 -23.9411 19.9049 6.18 " " 7578 188088 188692 -29.0814 13.8351 6.18 " " 5197 120455 181999 -31.2094 15.3115 6.18 " " 5688 135896 206509 -31.6839 14.0505 6.18 " " 5268 122510 205123 -31.8894 9.5128 6.18 " Zet1Ant" 3781 82384 200445 -37.7469 21.9506 6.18 " " 8367 208435 213427 -40.8406 2.4094 6.18 " " 706 15064 215892 -41.7600 1.7880 6.18 " " 524 11022 215650 -42.4681 10.4214 6.18 " " 4093 90393 222041 -54.3608 5.7869 6.18 " " 2023 39110 234137 -57.9833 19.6405 6.18 " " 7434 184585 246188 -58.2708 1.6124 6.18 " " 468 10052 232477 -59.7733 13.3430 6.18 " " 5024 115778 240756 -60.4461 16.6807 6.18 " " 6177 149837 253651 -60.9722 13.3766 6.18 " " 5034 116072 252283 -60.9903 16.6480 6.18 " " 6167 149485 253638 -61.5331 6.6335 6.18 " " 2468 48189 249604 -63.8869 18.3278 6.18 " " 6828 167425 254209 -65.4425 15.7982 6.18 " " 5851 140483 253297 -69.8214 7.7369 6.18 " " 3038 63584 249943 -77.6342 7.6012 6.18 " " 3000 62689 256431 -77.9181 15.6551 6.18 " " 5757 138289 257303 -79.4425 21.6489 6.18 " " 8234 204904 257942 0.1894 7.7182 6.19 " " 2982 62264 115839 0.3842 14.3280 6.19 " " 5368 125489 120400 2.0317 19.2967 6.19 " " 7313 180782 124478 3.0333 6.7185 6.19 " " 2474 48348 114312 8.0850 14.4051 6.19 " " 5394 126271 120436 9.3878 8.9617 6.19 " " 3567 76629 117301 -0.0497 0.4437 6.19 " 10 Cet" 101 2273 128760 -2.1525 17.6699 6.19 " " 6578 160471 141798 -4.7656 1.7319 6.19 " " 507 10658 129477 -4.8136 5.6315 6.19 " " 1923 37356 132387 -4.9336 8.6242 6.19 " " 3411 73281 136103 -5.0525 12.5274 6.19 " " 4772 109014 138832 -6.4947 3.0359 6.19 " " 913 18894 130251 -7.2047 22.9095 6.19 " 78 Aqr" 8710 216637 146382 -8.0589 13.9162 6.19 " " 5233 121325 139618 -9.7508 3.9439 6.19 " " 1225 24832 130833 -9.8744 6.3933 6.19 " " 2301 44816 133203 10.4264 12.6929 6.19 " 27 Vir" 4824 110377 100207 14.4103 17.7381 6.19 " " 6611 161321 103069 21.2781 5.0727 6.19 " " 1633 32482 76939 23.4689 2.4871 6.19 " " 723 15385 75398 24.2378 17.1842 6.19 " 63 Her" 6391 155514 84896 24.7739 12.3697 6.19 " " 4705 107655 82271 24.9128 19.4238 6.19 " " 7386 182807 87190 27.5558 13.1316 6.19 " " 4956 114092 82665 29.6586 1.0743 6.19 " " 303 6301 74471 30.0642 1.2165 6.19 " " 356 7229 74561 36.6267 0.1447 6.19 " " 17 400 53677 36.9358 20.5164 6.19 " 44 Cyg" 7847 195593 70135 37.1469 6.7205 6.19 " " 2464 48073 59406 38.4783 20.0861 6.19 " " 7683 190771 69377 42.6833 21.2898 6.19 " " 8144 202862 50671 44.4342 15.3449 6.19 " " 5716 136751 45497 44.7911 21.0400 6.19 " " 8062 200527 50381 45.2486 22.1034 6.19 " " 8429 209993 51652 59.4108 16.0526 6.19 " " 5995 144542 29777 59.5597 0.0086 6.19 " " 9079 224784 35983 59.6164 4.3827 6.19 " " 1352 27402 24577 66.8228 5.0473 6.19 " " 1594 31675 13344 68.5703 22.8169 6.19 " " 8687 216172 20259 83.6256 20.4842 6.19 " " 7930 197508 3418 -10.4372 3.6571 6.19 " " 1117 22799 149082 -10.5556 22.8084 6.19 " 70 Aqr" 8676 215874 165308 -10.9633 16.9572 6.19 " " 6296 153021 160186 -14.1336 15.8607 6.19 " " 5896 141853 159544 -15.7675 13.7598 6.19 " 85 Vir" 5170 119786 158147 -16.5258 20.5923 6.19 " " 7865 196078 163712 -16.6203 11.6640 6.19 " " 4491 101370 156819 -17.3864 0.1217 6.19 " " 10 256 147090 -18.6875 23.4022 6.19 " " 8900 220465 165672 -22.9128 7.4048 6.19 " " 2826 58346 173656 -24.2436 17.4184 6.19 " " 6474 157588 185374 -24.6064 8.5513 6.19 " " 3381 72626 176061 -26.2800 15.6246 6.19 " " 5801 139160 183631 -27.8311 3.1308 6.19 " " 943 19545 168321 -28.0875 4.7738 6.19 " " 1525 30422 169752 -28.6525 18.2900 6.19 " " 6835 167666 186594 -30.5356 5.7032 6.19 " " 1972 38138 196096 -32.6497 16.1588 6.19 " " 6006 144927 207396 -35.3144 13.8978 6.19 " " 5224 121056 204963 -36.3711 13.2527 6.19 " " 4999 115050 204282 -36.5181 10.2558 6.19 " " 4029 89015 201211 -38.4039 9.4879 6.19 " " 3766 82165 200419 -38.7811 7.6424 6.19 " " 2955 61642 198229 -40.9394 0.5077 6.19 " " 119 2724 215120 -44.1050 17.0968 6.19 " " 6338 154153 227615 -46.5858 18.8832 6.19 " " 7097 174500 229343 -46.9789 8.0890 6.19 " " 3179 67341 219400 -48.3600 18.8840 6.19 " " 7095 174474 229342 -51.2861 13.3096 6.19 " " 5016 115529 240721 -51.9492 17.4490 6.19 " " 6475 157599 244749 -52.3289 6.5572 6.19 " " 2416 47001 234574 -52.9442 9.6129 6.19 " " 3837 83465 237144 -57.8994 21.9372 6.19 " Pi Ind" 8362 208149 247230 -60.1786 10.0500 6.19 " " 3966 87436 237640 -62.6069 15.8897 6.19 " " 5884 141585 253328 -63.9278 5.5044 6.19 " " 1882 36876 249297 -66.9850 10.5024 6.19 " " 4129 91272 250989 -73.9717 10.4123 6.19 " " 4105 90630 256711 -84.5939 10.9872 6.19 " Eta Oct" 4312 96124 258600 1.7264 1.3769 6.20 " " 392 8334 109834 7.9614 1.4730 6.20 " " 426 8949 109907 9.6864 14.0422 6.20 " " 5270 122563 120251 -3.3011 21.9100 6.20 " " 8363 208177 145735 -7.6375 10.5163 6.20 " " 4122 91106 137614 -7.7942 3.3883 6.20 " " 1024 21019 130457 14.3644 11.5291 6.20 " 88 Leo" 4437 100180 99648 16.9386 6.5195 6.20 " " 2366 45951 95765 17.6478 8.2037 6.20 " 16Zet2Cnc" 3210 68255 97646 18.1933 6.7899 6.20 " " 2499 49059 96111 18.3731 13.0108 6.20 " " 4926 113022 100366 24.5569 0.9207 6.20 " " 259 5316 74365 25.4908 10.9117 6.20 " 48 LMi" 4254 94480 81576 37.0989 20.0209 6.20 " " 7655 189942 69267 38.2647 15.2266 6.20 " " 5673 135402 64572 38.3286 20.6232 6.20 " " 7888 196642 70288 42.9833 20.3821 6.20 " " 7802 194220 49550 43.1747 5.1138 6.20 " " 1644 32655 40029 43.2219 18.6127 6.20 " " 7003 172187 47644 44.6967 21.6244 6.20 " " 8272 205939 51109 45.9581 19.6596 6.20 " " 7487 185955 48697 47.3772 19.8554 6.20 " " 7577 188074 48907 50.5175 19.6978 6.20 " " 7504 186427 31899 51.3072 14.2892 6.20 " " 5360 125349 29086 53.2139 5.2456 6.20 " " 1692 33654 25087 54.8722 21.6787 6.20 " " 8290 206509 33656 57.1056 23.0252 6.20 " " 8761 217673 35062 66.7081 8.8137 6.20 " " 3470 74604 14667 68.4081 13.2746 6.20 " " 5018 115612 16033 68.4714 5.8821 6.20 " " 1994 38645 13635 76.4814 19.9935 6.20 " 69 Dra" 7686 190960 9606 77.7700 10.9991 6.20 " " 4272 94860 7255 -12.3053 14.6166 6.20 " " 5455 128429 158677 -14.4972 6.0427 6.20 " " 2136 41125 151052 -16.2933 19.6787 6.20 " 54 Sgr" 7476 185644 162883 -17.8000 18.4657 6.20 " " 6919 169990 161493 -20.5272 12.5996 6.20 " " 4797 109585 180937 -24.8872 17.9150 6.20 " " 6672 162978 185928 -26.6639 9.0198 6.20 " " 3597 77361 176833 -31.0803 3.5658 6.20 " " 1093 22262 194375 -35.4550 8.1528 6.20 " " 3199 67977 198859 -37.0967 15.3254 6.20 " " 5689 136014 206523 -40.5019 9.4413 6.20 " " 3746 81780 221167 -40.7497 15.3598 6.20 " " 5696 136334 225695 -40.9164 6.5166 6.20 " " 2390 46365 217986 -41.1189 16.7293 6.20 " " 6206 150573 227118 -41.9967 17.8813 6.20 " " 6649 162396 228510 -43.0919 14.1030 6.20 " " 5286 123004 224676 -50.1572 23.4525 6.20 " " 8910 220802 247880 -53.3644 10.0279 6.20 " " 3955 87152 237612 -57.3497 10.0328 6.20 " " 3957 87238 237621 -64.8242 21.6341 6.20 " " 8249 205417 255040 -65.8006 13.9753 6.20 " " 5242 121557 252534 -69.1019 9.9499 6.20 " " 3949 86659 250761 -69.6281 13.4796 6.20 " " 5066 116890 252321 -72.5442 21.1891 6.20 " " 8081 200924 257893 -75.0325 14.9989 6.20 " " 5555 131551 257219 -84.7850 5.5039 6.20 " " 2059 39780 258418 0.1858 23.0105 6.21 " 3 Psc" 8750 217428 146443 1.6136 6.6439 6.21 " " 2442 47432 114191 2.9369 20.4713 6.21 " " 7824 194953 125843 3.4431 2.6436 6.21 " " 775 16467 110655 4.2042 5.5055 6.21 " " 1837 36217 112837 4.2414 18.8008 6.21 " " 7076 173954 123928 5.5447 20.8331 6.21 " " 7975 198404 126267 5.6114 10.1132 6.21 " 14 Sex" 3973 87682 118111 6.2403 18.9733 6.21 " " 7163 176095 124112 7.0711 23.9188 6.21 " 26 Psc" 9048 224103 128466 8.5494 22.2666 6.21 " " 8491 211287 127420 -1.7564 6.9117 6.21 " " 2577 50820 133881 -4.7303 21.0094 6.21 " 11 Aqr" 8041 199960 145022 -6.1436 17.8774 6.21 " " 6661 162714 141926 -7.0611 23.0232 6.21 " 81 Aqr" 8757 217531 146447 -8.0075 1.4007 6.21 " 44 Cet" 401 8511 129275 13.2169 20.3248 6.21 " " 7771 193373 105961 16.9756 18.5981 6.21 " " 6981 171746 103886 17.1942 21.7846 6.21 " " 8330 207223 107395 18.2533 2.0618 6.21 " " 609 12594 92774 19.6811 22.6631 6.21 " 41 Peg" 8624 214698 108078 22.3994 7.7228 6.21 " " 2978 62141 79641 22.9231 18.0417 6.21 " 97 Her" 6741 164900 85676 23.2042 5.7221 6.21 " " 1961 37967 77450 27.5297 8.0936 6.21 " " 3164 66684 79928 31.0119 13.6710 6.21 " " 5143 119035 63676 32.4581 4.5106 6.21 " " 1419 28459 57269 46.4725 2.3197 6.21 " " 671 14213 37947 48.4644 18.0525 6.21 " " 6753 165358 47173 50.6769 22.8362 6.21 " " 8692 216206 34862 51.5356 12.5008 6.21 " 7 CVn" 4761 108845 28407 51.5711 0.8594 6.21 " " 241 4881 21775 53.0767 12.5139 6.21 " " 4767 108954 28413 56.3414 20.0893 6.21 " " 7692 191096 32276 57.5364 1.7383 6.21 " " 499 10543 22566 57.9967 0.9369 6.21 " " 260 5343 21846 64.2225 23.1326 6.21 " " 8811 218560 20441 67.1006 11.3483 6.21 " " 4383 98499 15478 67.1442 16.2070 6.21 " " 6069 146603 16993 75.2972 17.0278 6.21 " " 6379 155154 8697 77.0194 0.5153 6.21 " " 112 2589 4130 -10.3472 7.1556 6.21 " " 2694 54662 152470 -11.7142 14.3904 6.21 " 2 Lib" 5383 126035 158528 -12.5125 17.4506 6.21 " " 6496 157968 160553 -13.6450 4.5239 6.21 " " 1438 28763 149702 -14.3383 7.5561 6.21 " " 2897 60325 153061 -14.4686 11.6642 6.21 " " 4490 101369 156820 -14.6067 5.2333 6.21 " " 1710 34045 150255 -16.7256 5.6949 6.21 " " 1962 37971 150703 -18.0358 20.8224 6.21 " " 7964 198208 163910 -18.4458 17.4103 6.21 " " 6473 157546 160523 -19.4889 13.3583 6.21 " " 5033 116061 157879 -20.0019 2.5612 6.21 " " 745 15996 167878 -20.3392 18.0000 6.21 " " 6704 164028 186070 -23.9503 9.9850 6.21 " " 3946 86612 178271 -24.5392 6.8987 6.21 " " 2578 50853 172531 -24.7264 16.0652 6.21 " " 5973 143900 184075 -25.5008 13.7460 6.21 " " 5166 119623 181921 -30.2106 17.2643 6.21 " " 6403 155940 208606 -30.9258 8.2646 6.21 " " 3251 69445 199010 -31.0836 15.9251 6.21 " " 5916 142407 207119 -33.3153 11.9510 6.21 " " 4571 103789 202971 -36.1058 3.7971 6.21 " " 1186 23958 194537 -37.7756 6.7700 6.21 " " 2510 49336 197195 -40.4353 16.0149 6.21 " " 5952 143248 226442 -40.5064 21.2541 6.21 " " 8117 202135 230596 -41.1256 8.7733 6.21 " " 3488 75081 220432 -43.7342 11.2483 6.21 " " 4364 97866 222671 -50.8714 2.9018 6.21 " " 871 18265 232933 -52.3592 21.6666 6.21 " " 8269 205877 247128 -58.2300 7.7148 6.21 " " 3012 62897 235440 -58.7250 8.7515 6.21 " " 3489 75086 236241 -59.6842 10.7510 6.21 " Eta Car" 4210 93308 238429 -61.0614 19.8394 6.21 " " 7527 186837 254666 -65.4561 1.0453 6.21 " " 304 6311 248308 -65.8428 12.3411 6.21 " " 4692 107301 251854 0.0969 20.6218 6.22 " " 7878 196426 144632 1.2244 5.9651 6.22 " " 2093 40282 113306 3.8042 17.8056 6.22 " " 6633 161941 122766 8.9139 8.0308 6.22 " " 3144 66011 116251 -0.9942 5.9699 6.22 " " 2097 40347 132700 -1.0356 5.5678 6.22 " " 1873 36779 132269 -1.8000 18.9396 6.22 " " 7143 175640 142825 -2.4128 20.6537 6.22 " " 7890 196712 144666 -2.4361 11.6400 6.22 " " 4484 101154 138314 -2.8250 5.6770 6.22 " " 1950 37744 132441 -4.3731 21.9819 6.22 " " 8382 208801 145784 -4.6153 12.4643 6.22 " " 4746 108506 138798 -5.7533 5.0136 6.22 " " 1614 32147 131688 -6.7083 5.5225 6.22 " " 1848 36430 132210 -7.6836 12.0477 6.22 " " 4598 104625 138551 -8.5864 6.3189 6.22 " " 2270 44037 133098 14.6614 1.5962 6.22 "101 Psc" 455 9766 92530 15.1094 7.4798 6.22 " " 2858 59059 96930 16.0561 15.5360 6.22 " 12Tau2Ser" 5770 138527 101600 16.6881 18.3841 6.22 " " 6887 169223 103660 17.3156 20.4398 6.22 " " 7816 194688 106101 17.5214 20.6995 6.22 " " 7923 197249 106396 20.4961 6.4657 6.22 " 16 Gem" 2330 45394 78402 21.1347 20.1843 6.22 " " 7713 191814 88309 25.2183 4.6564 6.22 " " 1477 29459 76689 25.3381 14.3852 6.22 " " 5387 126141 83321 29.1481 20.2921 6.22 " " 7760 193094 88473 37.4453 19.3170 6.22 " " 7338 181470 68129 38.5736 22.3984 6.22 " " 8536 212487 72296 40.6792 18.9796 6.22 " " 7179 176502 47965 42.1411 4.3023 6.22 " " 1328 27026 39447 44.5919 6.0053 6.22 " " 2096 40325 40769 46.9011 8.7167 6.22 " " 3436 73971 42508 49.9817 0.0220 6.22 " " 9083 224870 53573 51.2608 2.9474 6.22 " " 864 18153 23721 57.4869 18.8962 6.22 " " 7153 175823 31252 58.0164 19.7207 6.22 " " 7522 186760 31923 61.5492 11.9481 6.22 " " 4569 103736 15666 75.7875 18.8926 6.22 " " 7199 176795 9286 -12.8997 6.0049 6.22 " " 2118 40745 151011 -18.3544 2.3827 6.22 " " 697 14830 148366 -18.4344 3.8869 6.22 " " 1206 24497 149229 -18.5853 14.2844 6.22 " " 5344 124990 158462 -19.6208 21.7204 6.22 " " 8293 206546 164601 -20.1647 15.5287 6.22 " " 5756 138268 159317 -20.2939 11.7010 6.22 " " 4506 101695 180117 -20.7283 15.5101 6.22 " " 5749 138105 183533 -28.6392 5.7846 6.22 " " 2005 38804 170836 -32.5250 2.7390 6.22 " " 817 17168 193888 -33.1900 13.3857 6.22 " " 5043 116278 204420 -34.3589 15.0328 6.22 " " 5587 132763 206223 -39.8922 18.5503 6.22 " " 6948 170773 210286 -42.6997 13.2141 6.22 " " 4982 114707 223980 -42.7806 20.2066 6.22 " " 7706 191584 230100 -45.7681 6.9783 6.22 " " 2626 52362 218360 -47.8903 7.9556 6.22 " " 3118 65598 219200 -52.8919 18.5753 6.22 " " 6954 170873 245559 -56.8817 18.7566 6.22 " " 7022 172781 245681 -58.6161 14.6988 6.22 " " 5465 128917 241912 -58.7942 9.7654 6.22 " " 3887 84850 237321 -59.9033 10.2675 6.22 " " 4043 89263 237853 -60.8472 12.1402 6.22 " " 4622 105437 251757 -61.7953 12.4738 6.22 " " 4747 108530 251924 -61.8419 12.5914 6.22 " " 4790 109492 251962 -62.9078 20.6643 6.22 " " 7872 196317 254844 -64.4086 12.2380 6.22 " " 4653 106343 251803 -69.5044 0.8734 6.22 " Lam1Tuc" 252 5190 248269 -70.7211 17.2055 6.22 " " 6357 154556 257472 -72.6147 12.2732 6.22 " " 4664 106676 256919 2.0794 4.4502 6.23 " " 1400 28191 111827 -1.0672 4.9548 6.23 " " 1591 31623 131625 -2.0797 16.3775 6.23 " " 6096 147550 141129 -2.9789 7.3718 6.23 " " 2807 57708 134585 -3.2469 1.3429 6.23 " " 387 8120 129239 -3.3931 3.6606 6.23 " " 1116 22798 130639 -5.5183 5.4340 6.23 " " 1806 35640 132100 -7.8978 22.6395 6.23 " " 8612 214448 146216 -9.2450 8.1076 6.23 " " 3174 67159 135505 10.2122 4.2263 6.23 " " 1307 26676 93821 13.4825 0.3737 6.23 " 42 Psc" 86 1796 91866 14.6294 8.1830 6.23 " " 3198 67959 97628 16.2383 6.4744 6.23 " " 2340 45506 95719 17.7039 2.5151 6.23 " 27 Ari" 731 15596 92983 18.6719 19.8727 6.23 " 9 Sge" 7574 188001 105360 21.6989 19.1343 6.23 " " 7263 178476 86843 25.4628 0.1478 6.23 " " 19 417 73769 27.3867 14.0196 6.23 " 11 Boo" 5263 122405 83130 28.0653 13.6775 6.23 " " 5145 119081 82944 28.2592 8.8746 6.23 " 53 Cnc" 3521 75716 80476 30.2492 12.3088 6.23 " " 4680 107054 62943 31.5047 17.7612 6.23 " " 6619 161695 66311 31.5264 2.1903 6.23 " 5 Tri" 634 13372 55338 33.5992 6.0928 6.23 " " 2139 41269 58727 35.4128 7.9280 6.23 " " 3083 64491 60453 36.7208 23.6779 6.23 " " 8977 222451 73428 39.4033 20.3376 6.23 " " 7784 193702 69856 40.2539 19.6993 6.23 " " 7499 186307 48737 42.4281 4.3933 6.23 " " 1371 27650 39501 53.4811 5.6890 6.23 " " 1925 37394 25319 54.8967 18.7487 6.23 " " 7071 173920 31151 56.8875 20.9381 6.23 " " 8029 199661 33005 73.8506 2.0529 6.23 " " 579 12173 4559 78.1347 9.7586 6.23 " " 3843 83550 6948 -13.3533 7.8246 6.23 " " 3042 63655 153449 -18.6853 7.1692 6.23 " " 2705 54958 152497 -23.8333 18.6977 6.23 " 26 Sgr" 7011 172546 187146 -26.8314 11.0401 6.23 " " 4302 95698 179456 -27.5375 6.9618 6.23 " " 2611 51823 172650 -35.5075 6.9549 6.23 " " 2612 51825 197402 -35.6939 12.0991 6.23 " " 4612 105078 203119 -41.3817 22.2441 6.23 " " 8477 210918 231045 -41.9100 19.0358 6.23 " " 7177 176425 229446 -46.0706 16.7176 6.23 " " 6197 150421 227092 -47.7356 15.6829 6.23 " " 5821 139599 226059 -51.3594 12.1921 6.23 " " 4637 105920 239735 -56.6678 14.8186 6.23 " " 5515 130227 242026 -57.8836 22.5980 6.23 " " 8593 213884 247505 -60.6964 0.9729 6.23 " " 281 5771 248293 -60.9878 10.5702 6.23 " " 4151 91767 251014 -68.6508 12.1055 6.23 " " 4614 105138 251737 1.6089 5.0333 6.24 " " 1619 32273 112340 4.3436 9.8417 6.24 " 4 Sex" 3893 85217 117937 4.9008 14.0655 6.24 " " 5275 122797 120265 9.0472 6.3113 6.24 " " 2259 43821 113710 -1.0006 16.6865 6.24 " " 6201 150451 141310 -4.4253 5.5896 6.24 " " 1891 37016 132319 -5.2264 7.5142 6.24 " " 2876 59669 134774 -6.1203 15.7793 6.24 " " 5866 140986 140751 -7.1900 9.5556 6.24 " " 3805 82674 136951 -9.4039 1.6271 6.24 " " 466 10009 129412 10.9964 6.8896 6.24 " " 2555 50371 96241 13.7708 7.6798 6.24 " " 2953 61630 97136 14.2950 17.7228 6.24 " " 6604 161149 103052 14.7219 6.4245 6.24 " " 2308 44984 95659 22.2842 0.2489 6.24 " " 49 1048 73838 25.9128 9.6940 6.24 " 13 Leo" 3853 83821 80970 29.1864 5.4946 6.24 " " 1822 35984 77205 30.9558 7.3011 6.24 " " 2757 56386 59964 31.6042 10.1377 6.24 " " 3979 87822 61882 32.6358 6.0486 6.24 " " 2122 40832 58688 33.3847 12.5632 6.24 " " 4784 109345 63072 36.4364 8.5561 6.24 " 32 Lyn" 3365 72291 60896 40.7019 1.9149 6.24 " " 551 11613 37607 41.5189 14.2399 6.24 " " 5335 124755 44952 45.0581 23.5619 6.24 " " 8941 221661 53147 46.9378 3.4906 6.24 " " 1047 21455 38874 53.1147 8.5426 6.24 " " 3351 71952 26896 57.2600 23.6985 6.24 " " 8985 222618 35682 63.6419 0.0571 6.24 " " 9097 225094 10942 64.3325 2.9402 6.24 " " 861 17958 12519 71.9297 12.4401 6.24 " " 4740 108399 7563 73.6956 6.6319 6.24 " " 2365 45947 5909 78.3067 17.8362 6.24 " " 6717 164428 8946 -11.1664 6.5464 6.24 " " 2392 46407 151625 -12.0958 10.1657 6.24 " " 3988 88182 155777 -13.5922 4.5027 6.24 " " 1431 28625 149682 -13.9750 10.7087 6.24 " " 4190 92770 156170 -15.0717 6.3961 6.24 " " 2303 44891 151450 -15.8611 23.8254 6.24 " " 9021 223428 165905 -19.0122 7.4141 6.24 " " 2831 58439 152837 -20.7767 11.5299 6.24 " " 4440 100219 179964 -22.4883 9.9088 6.24 " " 3921 85905 178164 -22.6956 19.0272 6.24 " " 7182 176537 187584 -23.3453 9.4972 6.24 " " 3767 82180 177541 -24.2292 23.8891 6.24 " " 9043 223884 192218 -26.6122 14.2203 6.24 " " 5314 124281 182354 -33.0928 15.6032 6.24 " " 5790 138923 206795 -46.9711 8.5584 6.24 " " 3390 72900 220103 -48.4597 12.8388 6.24 " " 4871 111519 223698 -50.5106 17.7011 6.24 " " 6576 160342 244954 -50.7278 20.9097 6.24 " " 7992 198766 246786 -51.0936 2.5652 6.24 " " 755 16170 232818 -53.8294 12.8735 6.24 " " 4882 111790 240338 -61.1708 19.9112 6.24 " " 7558 187653 254683 -63.0364 17.4688 6.24 " " 6471 157524 253928 -66.3981 1.2843 6.24 " " 380 7916 248350 0.2461 19.4883 6.25 " " 7404 183387 124681 0.8358 18.8270 6.25 " " 7085 174240 123947 1.1225 23.4541 6.25 " 9 Psc" 8912 220858 128188 1.5319 21.0508 6.25 " " 8056 200375 126491 5.3361 3.0312 6.25 " " 908 18832 110915 6.1119 2.6710 6.25 " " 783 16647 110673 8.4375 20.4688 6.25 " " 7820 194937 125841 9.6303 19.8549 6.25 " " 7562 187753 125139 -0.3903 21.6261 6.25 " " 8263 205765 145533 -1.6122 16.9029 6.25 " " 6277 152569 141427 -1.7000 11.4649 6.25 " " 4419 99651 138216 -2.2539 5.1828 6.25 " " 1685 33555 131847 -4.2208 16.2157 6.25 " " 6041 145788 141031 -4.5328 23.4923 6.25 " " 8924 221148 146736 -7.3167 10.1883 6.25 " " 4000 88372 137400 -9.8686 3.5771 6.25 " " 1091 22243 149047 12.0531 15.6696 6.25 " " 5831 139862 101673 12.4186 12.8971 6.25 " 41 Vir" 4900 112097 100322 12.7533 4.2305 6.25 " " 1310 26703 93823 16.7003 5.4349 6.25 "113 Tau" 1798 35532 94543 16.9378 19.4061 6.25 " 2 Sge" 7369 182490 104797 17.0544 16.1347 6.25 " 7Kap Her" 6009 145000 101952 18.0167 4.5591 6.25 " " 1442 28867 94002 18.2692 20.6318 6.25 " " 7886 196610 106329 19.3667 22.7578 6.25 " 45 Peg" 8660 215510 108154 19.8161 8.0133 6.25 " " 3125 65735 97471 20.1214 14.2758 6.25 " " 5346 125040 83259 23.4539 9.5664 6.25 " " 3804 82670 80909 23.7408 6.2830 6.25 " 9 Gem" 2240 43384 78176 26.6489 0.0822 6.25 " " 9109 225276 73731 31.1683 3.8679 6.25 " " 1197 24167 56762 32.0122 1.1337 6.25 " 78 Psc" 327 6680 54445 32.1250 5.8571 6.25 " " 2018 39045 58504 32.1950 3.7969 6.25 " " 1164 23626 56707 32.8919 2.6184 6.25 " " 761 16220 55711 33.2061 0.2340 6.25 " " 44 952 53744 33.2853 8.8423 6.25 " " 3499 75332 61074 33.8339 2.5046 6.25 " " 726 15464 55611 34.6886 3.2672 6.25 " " 976 20210 56296 35.2250 16.5174 6.25 " " 6157 149084 65356 35.9836 2.7829 6.25 " " 819 17228 55868 36.2286 19.5130 6.25 " " 7419 183986 68417 40.9350 18.6592 6.25 " " 7017 172671 47676 42.3672 0.0288 6.25 " " 9086 224906 53580 45.8542 21.5550 6.25 " " 8248 205349 51027 47.3861 7.9081 6.25 " 25 Lyn" 3065 64106 42055 47.4197 1.3028 6.25 " " 376 7758 37096 56.6100 2.4211 6.25 " 10 Per" 696 14818 23304 57.0842 2.8252 6.25 " " 825 17378 23637 57.0892 1.7461 6.25 " " 502 10587 22578 59.0561 8.8850 6.25 " " 3506 75487 27026 59.9856 10.2521 6.25 " " 4008 88651 15129 61.2619 14.7009 6.25 " " 5492 129798 16466 65.9786 19.1627 6.25 " 55 Dra" 7290 179933 18187 66.0961 5.9597 6.25 " " 2041 39429 13662 80.4714 13.2071 6.25 " " 5009 115337 2164 87.1453 1.2704 6.25 " " 306 6319 193 -11.0064 8.7686 6.25 " " 3480 74860 154615 -19.0353 20.9934 6.25 " 20 Cap" 8033 199728 164043 -20.0461 0.0493 6.25 " " 9095 225045 166014 -20.5564 21.1592 6.25 " 27 Cap" 8091 201352 190069 -24.1792 19.2592 6.25 " " 7291 179949 187883 -24.9150 18.3587 6.25 " " 6861 168574 186699 -26.1003 3.2501 6.25 " " 980 20293 168406 -27.0289 10.2221 6.25 " " 4011 88699 178544 -27.7319 21.0528 6.25 " " 8050 200245 189966 -28.8061 8.9877 6.25 " " 3585 77087 176789 -33.5217 19.2758 6.25 " " 7296 180093 211117 -35.0639 6.4250 6.25 " " 2329 45383 196805 -37.4031 20.4481 6.25 " " 7808 194433 212126 -38.6231 15.5346 6.25 " " 5751 138204 206736 -39.4069 5.7251 6.25 " " 1981 38385 196116 -41.0647 4.7289 6.25 " " 1518 30202 216961 -41.3842 12.4124 6.25 " " 4718 107998 223417 -45.2781 19.6617 6.25 " " 7461 185139 229800 -45.5556 9.2541 6.25 " " 3680 79900 220998 -52.8881 19.8153 6.25 " " 7521 186756 246277 -59.1264 7.9474 6.25 " " 3126 65750 235638 -60.6033 10.7713 6.25 " " 4217 93502 251113 -62.5417 16.0479 6.25 " " 5951 143238 253390 -67.1931 12.6479 6.25 " " 4806 109867 251980 -74.5331 17.2766 6.25 " " 6373 154972 257478 2.0281 17.6524 6.26 " " 6575 160315 122607 2.9417 13.3449 6.26 " " 5031 115995 119889 7.5464 14.0602 6.26 " " 5274 122744 120261 8.8847 6.4006 6.26 " " 2300 44783 113817 -1.7417 10.6901 6.26 " 33 Sex" 4182 92588 137728 -4.2472 9.4923 6.26 " " 3762 82074 136900 -6.3019 12.7926 6.26 " " 4856 111199 138967 -8.8561 4.0990 6.26 " " 1272 25910 130948 10.2956 12.5508 6.26 " 20 Vir" 4777 109217 100146 13.3028 19.7428 6.26 " 48Psi Aql" 7511 186547 105199 15.0933 18.0159 6.26 " " 6722 164507 103299 16.8256 23.6277 6.26 " 74 Peg" 8960 222098 108729 18.4444 22.4280 6.26 " " 8543 212670 107906 18.6206 15.9277 6.26 " " 5931 142763 101821 21.8756 20.1892 6.26 " " 7716 191877 88315 33.5344 12.9036 6.26 " " 4904 112171 63244 36.9000 0.4824 6.26 " " 110 2507 53928 37.1283 1.9160 6.26 " " 552 11624 55082 40.0103 4.5233 6.26 " " 1424 28503 57278 43.2603 8.1194 6.26 " 28 Lyn" 3167 66824 42174 44.8394 6.8854 6.26 " " 2532 49949 41406 48.5694 2.8892 6.26 " " 849 17818 38418 49.5122 23.6908 6.26 " " 8981 222570 53276 51.4747 1.8808 6.26 " " 538 11335 22705 54.3761 19.3268 6.26 " " 7351 181960 31574 55.6025 4.8019 6.26 " " 1515 30144 24834 63.6333 23.1299 6.26 " " 8808 218537 20439 63.8906 20.0791 6.26 " " 7695 191174 18692 66.6961 5.6212 6.26 " " 1853 36496 13548 79.6603 14.5606 6.26 " " 5479 129245 8054 79.9100 1.2752 6.26 " " 357 7238 4354 -10.3133 11.8065 6.26 " " 4529 102574 156896 -13.7697 4.8284 6.26 " " 1545 30743 149916 -15.8475 23.9726 6.26 " 1 Cet" 9065 224481 165972 -16.0253 3.1880 6.26 " " 957 19887 148821 -18.8856 17.0309 6.26 " 29 Oph" 6321 153727 160231 -19.2342 19.3603 6.26 " " 7339 181558 162511 -19.7919 12.5562 6.26 " " 4778 109238 157359 -20.4086 16.6762 6.26 " " 6190 150259 184541 -21.6033 6.9943 6.26 " " 2623 52273 172700 -26.6236 23.9523 6.26 " " 9058 224350 192262 -28.7078 5.6029 6.26 " " 1915 37286 170587 -38.0656 17.6241 6.26 " " 6557 159633 209034 -40.0589 7.5537 6.26 " " 2907 60559 198120 -41.1967 13.0800 6.26 " " 4938 113523 223881 -41.9131 12.2585 6.26 " " 4658 106572 223309 -42.6406 8.1632 6.26 " " 3205 68242 219507 -44.5283 1.4116 6.26 " " 411 8681 215494 -45.0417 8.9220 6.26 " " 3562 76566 220664 -47.0725 11.9455 6.26 " " 4570 103746 223127 -48.9133 12.4467 6.26 " " 4734 108309 223443 -49.0697 11.7535 6.26 " " 4516 102150 222997 -50.5328 0.4786 6.26 " " 111 2529 232055 -50.6117 6.9006 6.26 " " 2594 51266 234774 -54.4175 19.6718 6.26 " " 7459 185075 246204 -55.0164 20.1264 6.26 " " 7674 190422 246444 -65.0725 9.7852 6.26 " Ups Car" 3891 85124 250696 -66.5117 12.6654 6.26 " " 4814 110020 251987 -66.7144 2.7241 6.26 " " 823 17326 248632 -70.8600 10.7387 6.26 " " 4211 93344 256750 0.8675 20.2098 6.27 " " 7717 191984 125567 1.2417 14.3876 6.27 " " 5384 126053 120424 7.6219 6.9775 6.27 " " 2606 51693 114713 -1.2569 9.4839 6.27 " " 3758 81980 136894 -2.4867 20.7843 6.27 " " 7946 197954 144802 -3.8942 22.1725 6.27 " " 8451 210419 145914 -6.2456 4.3441 6.27 " " 1362 27536 131129 -7.5114 6.4458 6.27 " " 2328 45380 133263 -8.3114 7.6046 6.27 " " 2920 60853 134883 -9.3539 21.1797 6.27 " " 8096 201567 145171 11.9075 6.9571 6.27 " " 2597 51330 96314 13.6408 8.1451 6.27 " 12 Cnc" 3184 67483 97594 15.9825 21.2247 6.27 " " 8116 202128 106930 18.7950 3.1392 6.27 " 54 Ari" 940 19460 93293 19.4808 15.4315 6.27 " " 5740 137510 101548 19.7586 10.7374 6.27 " " 4197 92941 81496 20.0831 1.7488 6.27 "109 Psc" 508 10697 92611 22.2847 5.2577 6.27 "108 Tau" 1711 34053 77057 23.0347 12.3220 6.27 " 8 Com" 4685 107168 82239 24.3603 7.6374 6.27 " " 2926 61035 79562 27.3953 18.4162 6.27 " " 6904 169718 86019 27.6622 5.5987 6.27 " " 1878 36859 77295 33.3750 11.8526 6.27 " " 4545 102942 62731 33.6256 11.6423 6.27 " " 4482 101151 62635 34.3775 1.4517 6.27 " " 415 8774 54705 34.7258 5.5606 6.27 " " 1854 36499 58182 38.3931 14.4248 6.27 " " 5402 126597 64137 38.8978 20.2676 6.27 " " 7752 192934 69720 42.4306 8.1564 6.27 " " 3181 67370 42199 45.7536 14.0367 6.27 " " 5271 122675 44858 48.2317 22.0976 6.27 " " 8427 209961 51645 48.4669 12.8116 6.27 " 11 CVn" 4866 111421 44332 48.6786 0.9181 6.27 " " 256 5273 36763 50.0708 19.2554 6.27 " " 7311 180756 48247 52.4072 20.7980 6.27 " " 7972 198387 32897 52.6892 0.8966 6.27 " " 250 5128 21814 53.2964 6.7366 6.27 " " 2463 47979 25916 54.1436 8.3044 6.27 " " 3246 69149 26760 55.1725 11.6954 6.27 " " 4500 101604 28101 57.0425 19.7277 6.27 " " 7526 186815 31933 60.2256 14.5286 6.27 " " 5437 127929 16411 61.1161 9.9176 6.27 " " 3911 85583 15023 72.5317 20.5002 6.27 " " 7868 196142 9793 75.7397 3.6569 6.27 " " 1080 21970 4953 85.5872 12.0745 6.27 " " 4606 104904 1975 -12.2528 19.5927 6.27 " " 7433 184574 162797 -15.6117 10.1432 6.27 " " 3986 88025 155763 -19.5400 16.9511 6.27 " " 6294 152909 160180 -26.7008 6.1631 6.27 " " 2192 42486 171318 -26.7572 18.4684 6.27 " " 6914 169938 186843 -28.4894 7.0118 6.27 " " 2637 52619 172749 -30.1622 10.3870 6.27 " " 4083 90071 178759 -35.9439 3.2171 6.27 " " 970 20144 194163 -36.2642 15.1039 6.27 " " 5615 133550 206292 -36.3839 10.0876 6.27 " " 3972 87606 201037 -38.0144 11.2866 6.27 " " 4372 98161 202283 -39.4025 9.0351 6.27 " " 3602 77580 199902 -39.7481 13.6613 6.27 " " 5135 118781 204708 -41.9533 10.3946 6.27 " " 4087 90170 222016 -44.3561 6.1429 6.27 " " 2187 42448 217735 -46.6978 0.8158 6.27 " " 229 4737 215245 -49.9994 20.3614 6.27 " " 7766 193307 246546 -50.0633 17.3251 6.27 " " 6423 156331 244631 -52.3164 5.4128 6.27 " The Pic" 1818 35860 233965 -54.4075 5.0835 6.27 " " 1667 33116 233814 -55.0508 20.3423 6.27 " " 7758 193002 246535 -55.7294 6.9777 6.27 " " 2634 52603 234826 -63.2311 20.3175 6.27 " " 7732 192531 254772 -63.6831 6.3837 6.27 " " 2337 45461 249531 -63.8278 6.4154 6.27 " " 2360 45796 249542 -66.7194 9.5258 6.27 " " 3813 82858 250611 -69.1906 19.2746 6.27 " Tau Pav" 7274 179009 254508 -72.4439 10.7407 6.27 " " 4213 93372 256752 -73.0378 5.1026 6.27 " " 1700 33875 256160 -75.1425 11.3268 6.27 " " 4387 98672 256826 -81.8078 18.7039 6.27 " " 6912 169904 258804 0.0350 2.1081 6.28 " " 616 12923 129695 2.0906 23.8847 6.28 " 25 Psc" 9042 223855 128436 2.2975 14.0771 6.28 " " 5283 122910 120269 2.4881 10.7526 6.28 " 36 Sex" 4201 93102 118473 3.8103 22.9591 6.28 " " 8730 217019 127860 7.3583 18.6643 6.28 " " 7010 172424 123782 8.4708 3.1441 6.28 " " 942 19525 111002 -4.7883 5.9265 6.28 " " 2071 39927 132653 -5.5028 15.2474 6.28 " " 5669 135367 140408 -5.7242 18.5040 6.28 " " 6940 170547 142353 10.5683 7.5681 6.28 " " 2893 60275 97021 12.5675 15.3731 6.28 " 7 Ser" 5717 136831 101508 12.7350 3.4552 6.28 " " 1039 21379 93439 13.2572 8.5625 6.28 " " 3376 72505 97913 16.3975 6.6894 6.28 " " 2457 47863 95996 25.3528 16.9586 6.28 " 57 Her" 6305 153287 84720 25.5633 21.7733 6.28 " " 8325 207134 89976 27.1356 19.7322 6.28 " " 7508 186518 87640 31.2239 5.4106 6.28 " " 1775 35238 57987 31.2875 17.6781 6.28 " " 6591 160822 66243 32.7883 14.7538 6.28 " " 5510 130084 64306 33.8322 7.1370 6.28 " " 2673 53899 59806 36.3269 10.6059 6.28 " 35 LMi" 4150 91752 62147 36.9519 17.4075 6.28 " " 6491 157910 66014 38.5339 13.1617 6.28 " 15 CVn" 4967 114376 63374 41.3833 18.8686 6.28 " " 7118 175132 47874 55.3644 2.3977 6.28 " " 690 14662 23283 55.7044 6.8034 6.28 " " 2486 48766 25962 56.7375 11.4954 6.28 " " 4424 99859 28035 59.9081 4.1577 6.28 " " 1270 25877 24436 63.9408 9.4289 6.28 " " 3722 80953 14875 68.0272 20.0815 6.28 " " 7704 191372 18699 87.7000 12.2556 6.28 " " 4686 107192 2010 -14.9717 14.0742 6.28 " " 5277 122837 158325 -17.1569 18.0231 6.28 " 6 Sgr" 6715 164358 160998 -17.9036 22.0366 6.28 " " 8394 209240 164827 -18.8267 13.2241 6.28 " 54 Vir" 4990 114846 157798 -21.4439 18.1198 6.28 " " 6762 165516 186302 -21.8372 12.0118 6.28 " " 4588 104307 180374 -22.7908 23.0231 6.28 " " 8756 217498 191585 -23.3617 0.8259 6.28 " " 232 4772 166608 -26.0000 20.6900 6.28 " " 7910 196947 189575 -26.5503 9.9463 6.28 " " 3931 86266 178214 -28.6064 10.2008 6.28 " " 4003 88522 178526 -30.5381 19.9823 6.28 " " 7617 188981 211708 -33.6792 21.6517 6.28 " " 8268 205872 213168 -34.1611 22.7886 6.28 " " 8668 215669 214081 -40.5828 22.6081 6.28 " Sig1Gru" 8600 214085 231211 -41.0608 15.3026 6.28 " " 5682 135730 225631 -45.5017 17.0848 6.28 " " 6331 154025 227601 -49.3808 13.4558 6.28 " " 5063 116862 224151 -49.7278 1.5434 6.28 " " 447 9544 215547 -51.4747 7.5776 6.28 " " 2925 61031 235310 -55.1867 9.3257 6.28 " " 3717 80781 236851 -55.4550 8.0254 6.28 " " 3161 66607 235690 -59.8461 17.5930 6.28 " " 6525 158895 244866 -62.4292 20.8606 6.28 " " 7959 198160 254883 -63.6428 15.1571 6.28 " " 5623 133792 253034 -63.8011 8.1401 6.28 " " 3217 68423 250127 -67.4814 15.3446 6.28 " " 5684 135737 253115 -72.4075 4.8849 6.28 " " 1606 31975 256139 6.4878 17.9489 6.29 " " 6690 163641 122949 8.0961 16.0938 6.29 " " 5992 144426 121361 8.3247 6.9263 6.29 " " 2584 50931 114626 8.5803 15.9112 6.29 " 40 Ser" 5919 142500 121254 8.8661 8.2921 6.29 " " 3252 69478 116585 -0.5031 0.0844 6.29 " " 2 6 128569 -2.3883 17.3809 6.29 " " 6465 157347 141642 -6.6800 7.2921 6.29 " " 2765 56614 134474 -8.0411 6.8451 6.29 " " 2534 49976 133761 16.1983 18.6192 6.29 " " 6995 171994 103913 16.5856 9.4257 6.29 " " 3736 81361 98561 20.4625 21.8241 6.29 " " 8341 207563 90027 20.8286 23.3779 6.29 " 65 Peg" 8891 220318 91220 22.0264 21.3372 6.29 " " 8158 203206 89628 22.4625 5.5121 6.29 " " 1831 36160 77220 22.8147 18.9995 6.29 " " 7183 176541 86675 24.2831 12.5595 6.29 " 22 Com" 4780 109307 82378 30.2336 8.9663 6.29 " 61 Cnc" 3563 76572 61157 33.3425 16.1944 6.29 " " 6043 145802 65129 34.2458 1.3938 6.29 " " 396 8375 54654 41.8967 16.8434 6.29 " " 6264 152262 46317 42.5267 5.7874 6.29 " " 1979 38358 40609 42.7219 20.2914 6.29 " " 7762 193217 49425 45.2094 18.2591 6.29 " " 6847 168009 47343 47.8075 19.8837 6.29 " " 7600 188439 48940 49.2097 3.5248 6.29 " " 1056 21620 38906 50.0711 22.5982 6.29 " " 8606 214240 52171 50.8228 18.1149 6.29 " " 6790 166207 30751 51.4078 16.4787 6.29 " " 6150 148880 29956 51.5147 5.8490 6.29 " " 2003 38765 25411 51.9106 20.8119 6.29 " " 7978 198513 32908 52.4089 17.1752 6.29 " " 6395 155711 30277 52.6544 22.9862 6.29 " " 8744 217314 35022 57.2075 13.6726 6.29 " " 5153 119213 28838 60.1586 19.5528 6.29 " " 7448 184936 18395 64.0856 22.4721 6.29 " " 8568 213242 20088 66.7122 0.0644 6.29 " " 9099 225136 10948 70.1508 21.7836 6.29 " " 8342 207636 19646 72.5508 12.2615 6.29 " " 4665 106677 7533 74.0278 2.2226 6.29 " " 626 13222 4599 75.0983 9.4643 6.29 " " 3719 80930 6858 80.0117 1.1534 6.29 " " 312 6473 4331 -18.7378 19.1190 6.29 " " 7241 177863 162204 -20.2178 16.3188 6.29 " " 6076 146834 184309 -21.3694 23.5284 6.29 "100 Aqr" 8932 221357 191970 -23.6825 22.4363 6.29 " " 8542 212643 191144 -25.6267 23.0068 6.29 " " 8746 217358 191565 -26.5131 17.1148 6.29 " " 6354 154481 185033 -26.6503 18.8746 6.29 " " 7103 174630 187388 -26.6750 10.6013 6.29 " " 4157 91881 179014 -29.1578 14.9538 6.29 " " 5565 131919 183030 -29.5258 1.0549 6.29 " " 300 6269 166774 -29.8553 2.9536 6.29 " " 884 18466 194002 -30.5769 14.8759 6.29 " " 5542 131117 206035 -31.7858 15.9372 6.29 " " 5923 142542 207134 -32.9881 11.6170 6.29 " " 4473 100953 202634 -35.3417 6.9460 6.29 " " 2604 51682 197388 -38.3986 6.7046 6.29 " " 2482 48543 197108 -39.1369 17.9661 6.29 " " 6683 163433 209524 -39.5586 20.7147 6.29 " " 7915 197093 212369 -40.8142 20.0240 6.29 " " 7639 189388 229993 -42.2736 9.2218 6.29 " " 3668 79524 220962 -42.9486 8.0582 6.29 " " 3166 66812 219355 -44.2906 0.0053 6.29 " " 9077 224750 231888 -55.7742 8.7058 6.29 " " 3471 74622 236206 -57.0714 4.4034 6.29 " " 1405 28255 233506 -65.5683 6.5008 6.29 " " 2408 46730 249568 -78.3003 5.0037 6.29 " " 1682 33519 256153 -78.3231 3.6083 6.29 " " 1154 23474 256005 0.5519 11.8973 6.30 " " 4555 103313 119100 7.5783 1.2293 6.30 " 86Zet Psc" 362 7345 109740 8.3742 19.0393 6.30 " " 7208 176981 124184 -5.3161 6.8730 6.30 " " 2552 50282 133807 -5.3669 7.0050 6.30 " " 2622 52265 134031 -7.0794 17.7297 6.30 " " 6601 161056 141832 -9.6547 20.3836 6.30 " " 7788 193896 144361 10.7417 2.7080 6.30 " " 797 16861 93067 10.7867 14.0590 6.30 " " 5273 122742 100832 12.5772 22.6180 6.30 " " 8608 214298 108043 13.0458 3.8544 6.30 " " 1194 24155 93637 13.7769 18.3008 6.30 " " 6851 168199 103578 14.4003 11.1955 6.30 " " 4341 97244 99492 15.4981 16.6119 6.30 " " 6176 149822 102271 16.1225 12.8743 6.30 " " 4886 111893 100312 19.5450 8.6742 6.30 " 41Eps Cnc" 3429 73731 98024 19.9108 23.1089 6.30 " " 8792 218261 108402 22.9833 15.2255 6.30 " " 5665 135263 83723 23.9958 17.9540 6.30 " " 6697 163840 85575 24.7489 10.9270 6.30 " 54 Leo" 4260 94602 81584 26.9353 8.4464 6.30 " 23Phi2Cnc" 3311 71151 80188 26.9872 0.2233 6.30 " " 40 895 73823 27.7589 9.9739 6.30 " " 3936 86358 81120 28.2803 0.5470 6.30 " " 134 2942 74090 35.5550 2.7843 6.30 " " 820 17240 55872 35.6525 22.6135 6.30 " " 8609 214313 72535 38.0894 2.6411 6.30 " " 769 16350 55735 38.4381 6.8871 6.30 " 60 Aur" 2541 50037 59576 38.8403 3.9748 6.30 " " 1226 24843 56849 41.6742 13.7080 6.30 " " 5160 119445 44720 43.0311 7.5989 6.30 " " 2898 60335 41877 45.4144 9.9658 6.30 " " 3929 86166 43117 46.5317 20.7774 6.30 " " 7958 198151 50050 50.8094 18.9832 6.30 " " 7196 176707 31304 51.3478 18.3322 6.30 " " 6880 169028 30897 52.6472 6.1961 6.30 " " 2172 42083 25613 56.9328 3.6388 6.30 " " 1094 22316 24133 59.0847 22.1991 6.30 " " 8476 210905 34158 72.6119 16.5245 6.30 " " 6180 150010 8544 73.1278 16.9380 6.30 " " 6335 154099 8667 -15.5483 15.3504 6.30 " 29Omi Lib" 5703 136407 159191 -19.4497 16.1996 6.30 " 14Nu Sco" 6026 145501 159763 -20.4947 17.0792 6.30 " " 6340 154204 184999 -21.5647 17.1033 6.30 " " 6350 154418 185024 -22.4217 14.0648 6.30 " " 5272 122703 182204 -24.6569 19.1374 6.30 " " 7246 178075 187718 -25.9119 22.7989 6.30 " " 8674 215782 191412 -27.3322 9.8828 6.30 " " 3916 85725 178130 -29.1972 20.3411 6.30 " " 7764 193281 189164 -29.5022 19.1886 6.30 " " 7270 178840 187786 -30.0053 20.2641 6.30 " " 7725 192433 211940 -30.7167 4.6141 6.30 " " 1476 29435 195163 -33.7272 7.3205 6.30 " " 2794 57299 197842 -33.9453 18.4318 6.30 " " 6893 169398 210135 -35.9614 7.5395 6.30 " " 2895 60312 198104 -36.3778 18.0301 6.30 " " 6708 164245 209608 -36.4275 2.5374 6.30 " " 742 15889 193759 -36.8047 10.3105 6.30 " " 4053 89442 201266 -37.6114 8.5748 6.30 " " 3399 72993 199389 -38.5525 21.7415 6.30 " " 8299 206642 213248 -38.8222 17.2046 6.30 " " 6382 155276 208522 -39.1933 6.7231 6.30 " " 2488 48797 197134 -42.2883 18.3111 6.30 " " 6839 167756 228895 -43.5575 14.7922 6.30 " " 5509 130073 225183 -44.7372 8.5109 6.30 " " 3371 72350 220025 -51.2050 10.2778 6.30 " " 4045 89273 237858 -51.2125 11.1016 6.30 " " 4318 96407 238763 -52.8506 8.8001 6.30 " " 3503 75466 236284 -54.2739 3.7427 6.30 " " 1168 23697 233252 -55.1100 19.5096 6.30 " Mu Tel" 7393 183028 246131 -56.4408 14.6758 6.30 " " 5461 128713 241898 -60.3025 9.3909 6.30 " " 3740 81502 250561 -60.4994 22.7379 6.30 " " 8646 215121 255299 -61.4225 15.1791 6.30 " " 5632 134060 253043 -62.8361 8.0786 6.30 " " 3186 67536 250101 -65.7706 12.4215 6.30 " " 4720 108054 251893 -76.3092 10.5902 6.30 " " 4170 92209 256730 0.2914 23.3922 6.31 " " 8897 220406 128156 2.2686 6.3572 6.31 " " 2280 44333 113758 3.2253 5.9044 6.31 " " 2051 39685 113253 3.2772 7.8687 6.31 " " 3061 64052 116054 5.9019 16.2371 6.31 " " 6057 146084 121443 6.1867 4.2581 6.31 " " 1322 26923 111698 8.2475 2.1034 6.31 " " 614 12872 110337 -0.2014 10.8767 6.31 " " 4245 94237 118555 -1.6131 5.7192 6.31 " " 1970 38099 132480 -1.7681 12.0172 6.31 " " 4591 104356 138533 -3.5542 22.6800 6.31 " " 8629 214810 146239 -4.8100 22.9548 6.31 " " 8727 216953 146404 -6.8186 18.7309 6.31 " " 7034 173093 142557 -7.0753 18.4117 6.31 " " 6892 169370 142288 -8.2011 19.3724 6.31 " " 7347 181858 143321 -9.7586 18.2901 6.31 " " 6843 167833 142192 10.1214 4.3271 6.31 " " 1349 27386 93866 10.7258 20.1440 6.31 " " 7700 191263 105743 13.6869 16.6300 6.31 " " 6181 150012 102278 14.7300 21.0505 6.31 " " 8057 200430 106796 14.9494 17.0258 6.31 " " 6326 153882 102536 16.4833 2.8866 6.31 " " 856 17918 93164 20.2714 19.4229 6.31 " " 7384 182761 87186 23.5897 18.7445 6.31 " " 7047 173494 86393 24.8403 12.8131 6.31 " " 4864 111395 82511 25.0897 8.0288 6.31 " 4Ome2Cnc" 3132 65856 79869 28.1972 21.5886 6.31 " " 8257 205539 89815 29.9217 19.0964 6.31 " " 7244 178003 86796 32.8564 3.2631 6.31 " " 975 20193 56293 34.5797 1.4358 6.31 " " 410 8673 54695 35.1861 19.3425 6.31 " " 7346 181828 68164 36.1097 6.7368 6.31 " " 2471 48272 59425 37.3306 19.3275 6.31 " " 7345 181655 68144 39.6953 15.9583 6.31 " " 5950 143209 64988 49.5697 19.3105 6.31 " " 7341 181597 48315 50.2328 20.2621 6.31 " " 7755 192983 32400 50.6178 23.2373 6.31 " " 8837 219290 35251 51.5739 9.4155 6.31 " " 3725 81025 27246 52.2133 3.1344 6.31 " " 930 19268 23825 52.2611 19.0353 6.31 " " 7229 177483 31337 53.8431 2.1688 6.31 " " 621 13137 22993 54.0086 4.1102 6.31 " " 1255 25602 24411 58.9117 15.9305 6.31 " " 5949 143187 29723 65.5933 9.8399 6.31 " " 3885 84812 15000 69.3200 8.5482 6.31 " " 3332 71553 14582 73.0253 13.0805 6.31 " " 4950 113889 7741 74.7236 8.6135 6.31 " " 3352 71973 6592 77.5706 1.3387 6.31 " " 375 7732 4376 81.2575 7.4228 6.31 " " 2709 55075 1164 -10.5703 9.6632 6.31 " 37 Hya" 3846 83650 155377 -12.7231 21.8281 6.31 " " 8337 207503 164679 -15.0433 15.7236 6.31 " " 5847 140301 159461 -19.5836 9.5927 6.31 " " 3822 83104 155323 -20.1589 7.0023 6.31 " " 2625 52348 172718 -22.7539 12.9592 6.31 " " 4918 112519 181265 -24.7372 23.9416 6.31 " " 9054 224283 192252 -26.2847 0.2289 6.31 " " 43 943 166131 -26.6347 18.4622 6.31 " " 6909 169851 186837 -28.3253 22.6622 6.31 " " 8619 214599 191308 -31.7386 7.4286 6.31 " " 2847 58766 197986 -32.5072 2.9940 6.31 " " 903 18735 194023 -35.8378 7.3995 6.31 " " 2829 58420 197951 -37.2378 11.6113 6.31 " " 4470 100911 202627 -37.5031 15.9752 6.31 " " 5935 142889 207178 -38.6164 9.2239 6.31 " " 3667 79523 200119 -39.0642 8.5235 6.31 " " 3373 72436 199329 -39.3314 7.7849 6.31 " " 3032 63401 198435 -39.8233 18.9596 6.31 " " 7136 175529 210754 -40.1825 23.7670 6.31 " " 9001 223011 231769 -40.2842 6.4124 6.31 " " 2323 45306 217910 -41.7450 5.0650 6.31 " " 1651 32820 217153 -43.2000 2.3699 6.31 " " 698 14832 215878 -45.0008 14.2608 6.31 " " 5325 124580 224798 -45.2819 6.1778 6.31 " " 2211 42834 217758 -45.8800 11.2744 6.31 " " 4370 98096 222687 -46.6150 21.4058 6.31 " " 8177 203548 230665 -46.7564 1.4918 6.31 " " 435 9184 215525 -47.7108 20.3156 6.31 " " 7745 192827 230144 -48.1622 15.9511 6.31 " " 5921 142529 226392 -49.1439 13.4517 6.31 " " 5061 116836 224149 -51.9311 18.8867 6.31 " " 7093 174430 245783 -64.6817 21.3001 6.31 " " 8125 202299 254966 -66.5603 5.6152 6.31 " " 1960 37935 249322 0.5603 5.2298 6.32 " " 1703 33946 112543 2.3528 5.4101 6.32 " " 1786 35407 112729 2.3681 10.4036 6.32 " " 4085 90125 118278 8.9569 0.0401 6.32 " 31 Psc" 9092 224995 128544 9.6181 19.3146 6.32 " " 7325 181122 124497 -2.0656 5.0111 6.32 " " 1613 32115 131684 -2.6539 16.8395 6.32 " " 6248 151900 141393 -5.9172 17.3332 6.32 " " 6439 156826 141611 -7.4003 19.3846 6.32 " " 7353 182038 143340 -9.0589 10.3332 6.32 " " 4060 89565 137495 -9.4411 2.8807 6.32 " " 859 17943 130160 -9.5383 13.1540 6.32 " " 4959 114203 139183 13.6958 0.9651 6.32 " " 276 5612 92183 14.2825 19.4594 6.32 " " 7396 183144 104862 15.3136 8.6021 6.32 " " 3394 72943 97950 15.4006 4.2629 6.32 " 48 Tau" 1319 26911 93836 15.8633 22.5464 6.32 " " 8587 213644 107989 17.0739 12.8701 6.32 " 32 Com" 4884 111862 100309 17.2967 4.0103 6.32 " " 1237 25175 93716 17.3250 6.3172 6.32 " " 2258 43819 95519 22.5858 19.6023 6.32 " " 7452 184961 87426 24.3814 16.9617 6.32 " " 6307 153312 84726 24.5289 21.4064 6.32 " " 8197 203886 89682 26.9344 8.4463 6.32 " 23Phi2Cnc" 3310 71150 80187 28.9422 5.9427 6.32 " " 2066 39866 77744 30.5531 22.1810 6.32 " " 8460 210594 72095 31.5725 20.6255 6.32 " 48 Cyg" 7885 196606 70287 32.0325 13.9362 6.32 " " 5245 121682 63837 32.5153 15.3251 6.32 " " 5702 136403 64630 33.4506 11.4404 6.32 " " 4412 99373 62551 34.7933 23.3243 6.32 " " 8873 219927 73171 38.1056 19.9762 6.32 " " 7642 189432 69193 40.6614 10.1830 6.32 " " 3987 88161 43220 45.6531 8.4602 6.32 " " 3309 71148 42369 46.2297 1.7967 6.32 " " 518 10874 37513 46.8619 21.0620 6.32 " " 8074 200753 50408 48.0017 14.2970 6.32 " " 5363 125406 44982 48.3808 23.3282 6.32 " " 8875 219962 52912 49.7106 18.1184 6.32 " " 6792 166228 47233 50.5194 13.6731 6.32 " " 5148 119124 28836 53.3008 18.3966 6.32 " " 6911 169885 30943 57.1142 20.7204 6.32 " " 7940 197770 32832 57.5853 4.4503 6.32 " " 1382 27855 24615 58.8408 22.1193 6.32 " " 8442 210220 34072 60.6706 17.2748 6.32 " " 6448 156947 17414 63.8028 12.4184 6.32 " " 4727 108150 15801 65.6261 10.4984 6.32 " 35 UMa" 4106 90633 15196 68.5017 4.2143 6.32 " " 1282 26101 13061 68.5075 3.8616 6.32 " " 1166 23662 12929 71.8639 3.5054 6.32 " " 1032 21179 4917 78.9183 16.6314 6.32 " " 6238 151623 8592 82.4308 8.4091 6.32 " " 3197 67934 1319 -10.1658 8.3209 6.32 " " 3265 69997 154105 -11.3397 8.1491 6.32 " " 3189 67725 153887 -12.3369 20.2730 6.32 " 3 Cap" 7738 192666 163402 -14.0708 16.1176 6.32 " " 5996 144585 159706 -15.2825 19.0260 6.32 " " 7186 176593 162097 -18.5353 16.2442 6.32 " " 6053 145997 159807 -23.7406 7.2632 6.32 " " 2755 56341 173319 -27.4750 9.9483 6.32 " " 3933 86301 178216 -28.2067 15.6377 6.32 " " 5809 139290 183641 -30.8967 7.2826 6.32 " " 2768 56731 197789 -35.5444 23.4669 6.32 " " 8914 220929 214561 -35.6747 5.7885 6.32 " " 2009 38885 196171 -36.7186 18.7355 6.32 " " 7026 172875 210507 -37.1597 1.7966 6.32 " " 528 11050 193303 -38.2858 8.3881 6.32 " " 3296 70946 199166 -38.7203 18.5565 6.32 " Kap1CrA" 6952 170868 210296 -41.0744 6.4784 6.32 " " 2368 45983 217951 -41.6369 3.4366 6.32 " " 1049 21473 216316 -41.9947 16.8997 6.32 " " 6261 152235 227374 -42.3192 14.4371 6.32 " " 5398 126386 224923 -42.3656 6.9074 6.32 " " 2591 51208 218296 -42.9250 21.5714 6.32 " " 8241 205096 230741 -43.0956 7.8557 6.32 " " 3074 64287 219069 -43.8156 2.1680 6.32 " " 636 13423 215794 -44.7519 7.8245 6.32 " " 3057 63948 219040 -49.9767 7.9867 6.32 " " 3142 66005 219249 -50.9567 11.1076 6.32 " " 4321 96484 238775 -57.5781 9.2597 6.32 " " 3693 80126 236777 -61.1758 5.5827 6.32 " " 1936 37501 249314 -61.7439 15.2169 6.32 " " 5645 134468 253059 -67.6819 16.8715 6.32 " " 6231 151404 253718 -68.2117 8.7317 6.32 " " 3491 75116 250315 0.8914 15.7610 6.33 " " 5861 140815 121173 2.2697 21.0793 6.33 " " 8068 200663 126522 2.7436 8.5903 6.33 " " 3392 72908 116920 3.2825 12.6346 6.33 " " 4805 109860 119503 5.3400 8.8734 6.33 " " 3526 75811 117214 6.3506 13.7825 6.33 " " 5183 120066 120108 7.3397 22.9785 6.33 " " 8738 217186 127874 7.8642 20.8301 6.33 " 14 Del" 7974 198391 126265 7.8947 17.1959 6.33 " " 6390 155500 122164 8.4506 17.0331 6.33 " " 6329 153914 122023 -2.7800 2.4162 6.33 " 71 Cet" 704 15004 129888 -2.9544 4.7734 6.33 " " 1522 30321 131481 -3.6119 4.6004 6.33 " " 1462 29227 131344 -5.4247 21.9704 6.33 " " 8376 208703 145778 -6.3372 8.0406 6.33 " " 3150 66242 135406 -7.4347 5.5057 6.33 " " 1840 36285 132192 10.0564 20.4289 6.33 " " 7810 194526 125797 14.6300 22.1728 6.33 " " 8456 210461 107707 16.0569 6.4147 6.33 " " 2302 44867 95641 18.1294 6.1838 6.33 " " 2184 42351 95337 20.2797 19.4891 6.33 " 7 Vul" 7409 183537 87269 20.3164 7.7526 6.33 " 79 Gem" 2991 62510 79665 24.2581 13.2023 6.33 " " 4984 114724 82708 27.9572 5.3498 6.33 " " 1750 34762 77121 28.1569 12.3249 6.33 " 9 Com" 4688 107213 82244 32.5344 14.5699 6.33 " " 5445 128093 64221 33.5592 5.6294 6.33 " " 1904 37138 58263 36.9181 8.7361 6.33 " " 3451 74243 61018 38.7939 14.3299 6.33 " " 5373 125642 64072 40.7297 0.3282 6.33 " " 75 1527 36269 41.0886 11.2278 6.33 " " 4351 97501 43649 41.6281 21.0645 6.33 " " 8071 200723 50409 44.1031 12.7409 6.33 " " 4843 110834 44307 46.6611 20.8319 6.33 " " 7983 198625 50119 47.7258 3.2073 6.33 " " 949 19735 38638 47.8114 2.2661 6.33 " " 653 13818 37905 52.9953 20.7726 6.33 " " 7962 198181 32877 55.7044 6.8036 6.33 " " 2485 48767 25963 57.9378 16.1508 6.33 " " 6036 145674 29823 58.9631 23.8200 6.33 " " 9020 223421 35798 69.3250 0.7775 6.33 " " 200 4295 11380 70.3669 19.9783 6.33 " " 7666 190252 9592 84.1811 9.2559 6.33 " " 3581 76990 1461 86.4361 12.2809 6.33 " " 4683 107113 2012 -10.2186 18.3839 6.33 " " 6878 169009 161412 -15.2267 3.6698 6.33 " " 1120 22905 149094 -15.4597 14.7661 6.33 " 5 Lib" 5503 129978 158788 -15.6178 9.3488 6.33 " " 3714 80719 155114 -19.7369 8.6445 6.33 " " 3425 73603 154492 -23.7831 20.8837 6.33 " " 7989 198732 189801 -24.0758 6.8289 6.33 " " 2528 49891 172389 -24.4619 16.1311 6.33 " " 5998 144661 184142 -25.7781 6.8436 6.33 " " 2544 50093 172420 -30.2853 7.9397 6.33 " " 3099 65183 198609 -30.3400 7.2326 6.33 " " 2743 55985 197722 -31.6731 8.4546 6.33 " " 3336 71622 199246 -31.8894 16.0221 6.33 " " 5956 143404 207234 -32.8053 22.8331 6.33 " " 8680 216042 214119 -33.7928 12.2269 6.33 " " 4651 106257 203252 -43.2353 0.3118 6.33 " " 73 1483 215047 -45.3492 16.4151 6.33 " " 6099 147614 226730 -48.0942 12.8681 6.33 " " 4880 111775 223720 -48.2186 15.2087 6.33 " " 5650 134597 225533 -48.2722 13.5747 6.33 " " 5103 117919 224254 -49.6067 23.1193 6.33 " " 8791 218255 231445 -50.6750 16.9358 6.33 " " 6274 152478 244280 -53.0867 16.2891 6.33 " " 6059 146145 243544 -54.0019 0.1507 6.33 " " 23 469 231943 -54.4953 9.2951 6.33 " " 3700 80435 236819 -55.7375 21.6760 6.33 " " 8271 205935 247132 -56.4711 7.8053 6.33 " " 3056 63926 235532 -60.2075 7.9945 6.33 " " 3152 66341 250064 -63.3028 13.1981 6.33 " " 4972 114461 252187 -65.5472 12.0981 6.33 " " 4611 105071 251734 -68.2292 18.3003 6.33 " " 6808 166841 254196 -69.4075 12.7014 6.33 " " 4820 110311 251996 -79.1483 1.6892 6.33 " Tau1Hyi" 516 10859 255806 -79.4728 23.3189 6.33 " " 8849 219572 258127 -79.5594 10.8743 6.33 " " 4268 94717 256768 -83.1000 11.6837 6.33 " " 4507 101782 258621 -86.1506 12.4271 6.33 " " 4709 107739 258644 5.9508 12.7840 6.34 " " 4854 111133 119585 6.2683 18.0147 6.34 " " 6719 164432 123017 -0.4281 19.1643 6.34 " " 7269 178744 143087 -0.4467 18.1021 6.34 " " 6757 165462 142084 -1.4122 5.3264 6.34 " " 1748 34748 131983 -4.2683 5.7674 6.34 " " 1986 38495 132515 -7.4603 19.5916 6.34 " " 7432 184573 143564 -8.1789 6.9500 6.34 " " 2599 51424 133937 -9.5761 18.8839 6.34 " " 7110 174866 142741 12.1933 19.7036 6.34 " 46 Aql" 7493 186122 105156 13.6197 16.9211 6.34 " " 6290 152830 102474 15.1442 12.2956 6.34 " " 4676 106926 100023 15.1781 17.6864 6.34 " " 6589 160765 103020 15.5003 20.0907 6.34 " " 7680 190658 105663 15.6586 21.1260 6.34 " " 8088 201196 106853 21.7628 5.6575 6.34 " " 1929 37439 77358 23.5831 8.0169 6.34 " " 3127 65757 79864 23.9425 18.0778 6.34 " " 6754 165373 85706 25.8044 20.5328 6.34 " " 7849 195692 88808 29.6494 20.8854 6.34 " " 7999 198976 89241 30.9658 22.6921 6.34 " " 8638 214979 72625 32.1917 1.7306 6.34 " " 503 10588 54939 35.4131 8.0320 6.34 " " 3130 65801 60523 37.9411 19.4601 6.34 " " 7403 183362 68346 37.9642 6.0841 6.34 " " 2137 41162 58716 40.1672 22.8865 6.34 " " 8706 216538 72812 40.5161 17.1296 6.34 " " 6376 155102 46502 40.7167 19.7469 6.34 " " 7523 186776 48789 41.9467 18.0836 6.34 " " 6767 165645 47195 42.5125 16.9639 6.34 " " 6313 153472 46401 43.9775 7.9713 6.34 " " 3094 64958 42097 44.0844 17.7182 6.34 " " 6612 161369 46906 44.9019 1.2847 6.34 " " 372 7647 37077 45.3222 1.7213 6.34 " " 495 10486 37460 45.8264 6.9209 6.34 " " 2556 50384 41426 52.7458 13.4665 6.34 " " 5076 117242 28763 57.3658 10.7729 6.34 " 41 UMa" 4202 93132 27760 59.3931 6.0856 6.34 " " 2121 40827 25551 59.9789 23.8150 6.34 " " 9019 223386 35794 61.4217 1.7162 6.34 " " 488 10362 11931 63.6533 9.7654 6.34 " 28 UMa" 3865 84179 14980 64.6583 1.3514 6.34 " 35 Cas" 384 8003 11712 68.4383 19.7791 6.34 " " 7563 187764 18530 68.6786 14.0307 6.34 " " 5282 122909 16254 70.3739 22.5547 6.34 " " 8598 214019 10418 71.8217 3.9417 6.34 " " 1196 24164 5040 77.4467 16.5108 6.34 " " 6191 150275 8548 -11.5994 20.0848 6.34 " " 7671 190390 163245 -11.7131 23.2944 6.34 " " 8856 219659 165609 -12.3925 20.1994 6.34 " 1Xi 1Cap" 7712 191753 163328 -13.4344 11.0601 6.34 " " 4308 95870 156427 -15.7928 11.0159 6.34 " " 4297 95441 156396 -15.9908 7.7940 6.34 " " 3026 63302 153404 -20.1264 5.7412 6.34 " " 1980 38382 170756 -20.5122 4.0963 6.34 " " 1274 25944 169111 -22.1606 7.6022 6.34 " " 2923 60951 174092 -23.1503 15.6559 6.34 " " 5819 139518 183665 -23.4278 19.6637 6.34 " 53 Sgr" 7470 185404 188407 -24.3642 14.2068 6.34 " " 5309 124162 182343 -25.9456 2.3162 6.34 " " 683 14412 167697 -30.6556 7.1002 6.34 " " 2680 54031 197566 -31.0728 1.8221 6.34 " " 532 11183 193320 -31.2136 15.6709 6.34 " " 5822 139613 206858 -31.7900 6.3873 6.34 " " 2307 44956 196759 -33.4006 5.6908 6.34 " " 1966 38056 196088 -34.6989 5.3391 6.34 " " 1766 35046 195763 -35.7053 5.0739 6.34 " Gam2Cae" 1653 32846 195534 -36.9400 6.5264 6.34 " " 2393 46431 196906 -37.0506 8.0351 6.34 " " 3155 66435 198725 -41.5569 6.6142 6.34 " " 2445 47475 218060 -42.0161 19.3693 6.34 " " 7334 181401 229643 -49.9736 7.9871 6.34 " " 3143 66006 219250 -54.3942 8.5249 6.34 " " 3382 72650 236055 -57.5100 22.3434 6.34 " " 8509 211726 247410 -57.5453 8.6788 6.34 " " 3455 74341 236179 -59.2767 14.1490 6.34 " " 5292 123335 241478 -68.3711 19.4015 6.34 " " 7320 181019 254551 -70.3478 22.8215 6.34 " " 8672 215729 258070 -73.2447 7.9878 6.34 " " 3171 66920 256463 -75.6839 13.6533 6.34 " " 5115 118285 257069 0.0756 9.8700 6.35 " " 3907 85505 117960 1.1269 7.9545 6.35 " " 3098 65123 116165 3.3817 19.6469 6.35 " " 7471 185423 124892 4.9083 1.0970 6.35 " 77 Psc" 313 6479 109666 5.3225 5.3920 6.35 " " 1777 35242 112708 5.4683 9.1988 6.35 " " 3649 79066 117487 7.3169 6.9889 6.35 " " 2613 51892 114731 9.9131 19.3801 6.35 " " 7354 182101 124564 -1.2367 17.8665 6.35 " " 6659 162596 141913 -2.2125 4.9697 6.35 " " 1596 31739 131640 -2.4133 15.3464 6.35 " " 5706 136442 140473 -3.8892 6.4298 6.35 " " 2317 45168 133238 -9.5544 16.6609 6.35 " " 6189 150177 141298 10.1742 21.4068 6.35 " " 8191 203842 126774 12.2789 11.8487 6.35 " " 4543 102910 99827 13.5906 16.8025 6.35 " " 6239 151627 102393 13.6789 5.4763 6.35 " " 1819 35909 94580 15.6061 17.4094 6.35 " " 6482 157741 102806 16.7308 17.3593 6.35 " " 6463 157257 102770 17.7636 6.3572 6.35 " " 2277 44234 95572 18.0006 22.1250 6.35 " " 8436 210090 107676 19.6906 17.0646 6.35 " " 6343 154301 102571 23.0478 23.4849 6.35 " " 8922 221113 91295 23.6281 4.7618 6.35 " " 1512 30122 76737 25.5000 10.9429 6.35 " 50 LMi" 4270 94747 81591 25.6381 2.7309 6.35 " " 803 16955 75539 27.2831 0.2529 6.35 " " 53 1083 73842 28.7581 17.3587 6.35 " " 6466 157358 85028 29.4417 23.2178 6.35 " " 8831 219110 91095 29.5428 22.5262 6.35 " " 8584 213534 90568 32.9042 23.6085 6.35 " " 8955 221970 73368 36.4556 15.1098 6.35 " " 5630 134044 64503 41.7958 14.4936 6.35 " " 5423 127334 45075 42.6556 7.3509 6.35 " " 2775 56941 41705 43.9031 13.3677 6.35 " " 5045 116303 44582 45.2122 10.4768 6.35 " " 4103 90602 43356 46.1397 1.7407 6.35 " " 504 10597 37475 46.6575 11.5069 6.35 " " 4430 99967 43784 54.0375 22.5386 6.35 " " 8589 213720 34555 59.9019 7.3714 6.35 " 47 Cam" 2772 56820 26298 71.8167 7.2328 6.35 " " 2681 54070 6115 74.6614 12.1631 6.35 " " 4627 105678 7512 74.9967 21.9642 6.35 " " 8395 209258 10208 76.9508 0.2706 6.35 " " 55 1141 4071 -11.9008 5.4513 6.35 " " 1817 35850 150461 -12.1878 11.8561 6.35 " " 4547 102990 156940 -12.8397 14.7986 6.35 " " 5518 130325 158808 -13.3931 12.5013 6.35 " " 4758 108799 157326 -15.0247 9.2569 6.35 " " 3675 79752 155032 -16.6319 12.4637 6.35 " " 4742 108477 157299 -16.7425 22.4429 6.35 " 53 Aqr" 8545 212698 165078 -18.1261 6.1556 6.35 " " 2182 42327 151173 -19.0814 1.3751 6.35 " " 394 8350 147767 -19.2839 18.7153 6.35 " " 7023 172816 161754 -22.6150 6.6114 6.35 " " 2433 47247 172021 -25.5878 3.3712 6.35 " " 1018 20980 168493 -26.9750 17.8077 6.35 " " 6621 161756 185779 -27.0422 23.9059 6.35 " " 9044 223991 192231 -30.5872 16.9100 6.35 " " 6273 152431 208176 -30.7186 20.8903 6.35 " " 7991 198751 212521 -33.0667 1.9741 6.35 " " 576 12135 193422 -36.0889 6.5983 6.35 " " 2431 47230 196987 -36.4333 13.8602 6.35 " " 5208 120672 204911 -39.8739 14.4472 6.35 " " 5400 126475 205561 -40.3106 10.2324 6.35 " " 4019 88836 221883 -45.0367 6.0746 6.35 " " 2157 41700 217702 -48.8631 14.9691 6.35 " " 5566 131923 225328 -52.7678 5.8413 6.35 " " 2044 39547 234162 -57.9539 10.3975 6.35 " " 4091 90289 238021 -71.3894 9.9360 6.35 " " 3944 86606 256672 -71.4364 11.1915 6.35 " " 4349 97472 256808 -78.5736 12.2321 6.35 " " 4649 106248 256915 -79.6686 11.3095 6.35 " " 4385 98617 256823 -81.4864 18.0907 6.35 " " 6646 162337 258787 -3.3983 21.4144 6.36 " 20 Aqr" 8192 203843 145376 -3.6175 18.2661 6.36 " " 6830 167564 142185 -3.8828 17.1485 6.36 " " 6372 154962 141535 -5.9114 18.5564 6.36 " " 6963 171149 142386 -5.9475 14.2392 6.36 " " 5322 124553 139806 11.0442 17.9575 6.36 " " 6696 163772 103243 14.3797 9.5980 6.36 " 7 Leo" 3818 83023 98662 17.4036 15.8823 6.36 " " 5909 142244 101789 19.8817 4.5952 6.36 " " 1455 29104 94022 22.4528 19.6875 6.36 " " 7490 186021 87569 22.6603 5.7011 6.36 " " 1954 37784 77420 24.0847 8.5500 6.36 " 32Ups2Cnc" 3369 72324 80245 24.1031 23.2435 6.36 " " 8839 219310 91113 24.3011 4.3999 6.36 " 62 Tau" 1378 27778 76591 24.5133 17.6849 6.36 " " 6592 160835 85310 26.7358 19.1919 6.36 " " 7280 179422 86912 28.2697 3.0584 6.36 " " 916 18928 75709 30.0556 21.6039 6.36 " " 8261 205688 89834 30.8494 18.6672 6.36 " " 7016 172631 67226 31.8847 17.0381 6.36 " " 6336 154126 65745 36.4519 19.4017 6.36 " " 7376 182635 68258 38.7392 18.3993 6.36 " " 6901 169646 66936 39.6644 2.5911 6.36 " " 746 16004 55680 39.7133 9.0279 6.36 " " 3586 77093 61203 41.0556 6.1397 6.36 " " 2153 41636 40881 41.1469 18.2118 6.36 " " 6824 167304 47305 45.4000 1.6421 6.36 " " 465 9996 37393 52.9978 2.8811 6.36 " " 846 17743 23674 56.6389 20.4399 6.36 " " 7827 195066 32590 57.6458 2.1914 6.36 " 5 Per" 627 13267 23011 58.4828 22.7898 6.36 " " 8677 215907 34824 65.6586 3.2921 6.36 " " 967 20104 12686 75.1708 17.9074 6.36 " " 6735 164780 8962 -12.8194 7.8614 6.36 " 8 Pup" 3063 64077 153499 -15.2844 23.7304 6.36 " " 8992 222800 165849 -18.5200 5.3215 6.36 " " 1753 34798 150335 -19.8422 18.1874 6.36 " " 6798 166393 161153 -20.3631 8.1454 6.36 " " 3190 67751 175250 -21.0014 18.7552 6.36 " " 7038 173282 187234 -22.9064 7.2301 6.36 " " 2733 55856 173247 -23.2156 5.9429 6.36 " " 2090 40235 171045 -24.9422 19.0069 6.36 " " 7168 176246 187562 -24.9439 20.5479 6.36 " " 7842 195549 189416 -25.1089 20.6311 6.36 " " 7877 196385 189503 -27.8842 17.7216 6.36 " " 6593 160839 185655 -29.1478 5.9039 6.36 " " 2068 39891 170993 -31.7900 6.9319 6.36 " " 2598 51411 197371 -32.0544 20.8464 6.36 " " 7970 198356 212487 -32.5533 17.3057 6.36 " " 6422 156325 208657 -34.6339 8.5496 6.36 " " 3385 72688 199353 -37.3336 10.1338 6.36 " " 3984 88013 201081 -39.0050 19.1838 6.36 " " 7268 178628 211017 -39.3494 15.5725 6.36 " " 5773 138564 206769 -39.4161 14.9433 6.36 " " 5561 131752 206110 -39.9317 2.8466 6.36 " " 853 17864 216065 -40.5275 2.7223 6.36 " " 814 17098 216019 -41.7372 8.7946 6.36 " " 3497 75289 220481 -43.8458 18.4869 6.36 " " 6915 169943 229056 -55.1911 8.4934 6.36 " " 3368 72322 236032 -57.4678 10.7941 6.36 " " 4226 93662 238480 -60.3172 8.6537 6.36 " " 3443 74148 250291 -64.0336 5.8564 6.36 " " 2073 39963 249376 -66.1733 14.4276 6.36 " " 5382 125990 252737 -67.6317 12.3872 6.36 " " 4710 107773 251877 0.6294 18.0043 6.37 " " 6709 164258 123004 1.1692 6.2650 6.37 " " 2236 43358 113656 3.3850 0.8551 6.37 " " 243 4928 109507 3.8600 11.4306 6.37 " 80 Leo" 4410 99329 118851 4.3347 8.7332 6.37 " " 3458 74393 117069 6.3450 6.6998 6.37 " " 2467 48099 114293 6.3731 10.7683 6.37 " " 4207 93244 118483 8.6103 12.4617 6.37 " " 4741 108471 119413 9.7333 17.1027 6.37 " " 6358 154610 122075 -0.6767 13.2916 6.37 " " 5014 115488 139264 -1.4103 22.9732 6.37 " " 8735 217131 146415 -3.1317 12.0999 6.37 " " 4613 105089 138585 -5.1058 10.3256 6.37 " " 4059 89490 137490 -5.9197 17.4965 6.37 " " 6512 158463 141691 -8.1478 5.2259 6.37 " " 1704 33948 131887 -8.2083 17.4673 6.37 " " 6504 158170 141679 -9.7367 4.5872 6.37 " " 1460 29173 131335 10.3308 3.9946 6.37 " " 1233 25102 93710 10.4542 17.1036 6.37 " " 6359 154619 102592 10.6083 7.4411 6.37 " " 2836 58552 96899 10.9739 22.0337 6.37 " " 8397 209288 107599 13.8842 16.9589 6.37 " " 6301 153226 102496 14.2847 18.1427 6.37 " " 6784 166095 103414 14.9667 18.4321 6.37 " " 6906 169820 103709 15.7575 10.0947 6.37 " " 3969 87500 98944 19.4853 4.9162 6.37 " " 1566 31236 94199 21.4044 0.9719 6.37 " " 277 5641 74402 22.4008 6.0282 6.37 " " 2116 40724 77858 24.5922 4.9377 6.37 " " 1575 31362 76848 26.6178 5.6493 6.37 " " 1921 37329 77350 27.8042 22.2749 6.37 " " 8503 211432 90379 32.7394 17.6471 6.37 " " 6579 160507 66214 33.2222 19.3928 6.37 " " 7368 182488 68239 36.8042 15.5077 6.37 " " 5761 138383 64741 38.7892 13.5727 6.37 " " 5108 118156 63616 39.8258 5.5125 6.37 " " 1825 36041 58129 40.8744 12.6462 6.37 " 9 CVn" 4811 109980 44265 47.2778 15.0107 6.37 " " 5597 133029 45326 48.9553 2.3230 6.37 " " 673 14221 37949 50.3519 21.0572 6.37 " " 8072 200740 33091 55.7319 19.5204 6.37 " " 7428 184398 31741 56.5883 18.2447 6.37 " " 6849 168092 30836 57.8689 3.5614 6.37 " " 1071 21794 24098 57.9706 11.6743 6.37 " " 4493 101391 28093 58.6278 1.7049 6.37 " " 482 10293 22520 61.4928 13.9589 6.37 " " 5256 122064 16230 65.7528 21.8604 6.37 " " 8361 208132 19686 68.7761 0.9488 6.37 " " 261 5357 11481 70.9417 4.8434 6.37 " " 1510 30085 5326 72.1111 22.1709 6.37 " " 8473 210873 10267 76.4728 5.2432 6.37 " " 1650 32781 5464 83.9183 10.1429 6.37 " " 3934 86321 1637 -10.7692 9.6723 6.37 " " 3848 83731 155387 -11.4497 23.4681 6.37 " " 8917 220957 165708 -14.3994 15.9373 6.37 " " 5927 142640 159584 -14.5858 22.5048 6.37 " 56 Aqr" 8567 213236 165127 -14.6442 18.5391 6.37 " " 6956 170902 161580 -16.8061 16.9338 6.37 " " 6284 152781 160171 -16.9642 22.0407 6.37 " 29 Aqr" 8396 209278 164830 -18.5669 18.9908 6.37 " " 7164 176123 162050 -19.1033 19.0519 6.37 " " 7205 176903 162133 -23.7739 20.6699 6.37 " " 7898 196761 189549 -23.7750 7.6213 6.37 " " 2933 61227 174141 -23.9964 1.1203 6.37 " " 325 6668 166814 -27.1647 6.9688 6.37 " " 2614 51925 172656 -29.6992 18.5999 6.37 " " 6972 171416 187024 -30.0203 4.7971 6.37 " Zet Cae" 1539 30608 195300 -30.9333 14.6975 6.37 " " 5474 129161 205841 -33.1256 22.1452 6.37 " " 8437 210111 213583 -33.5072 16.9327 6.37 " " 6282 152636 208205 -33.5692 8.2281 6.37 " " 3238 69002 198960 -33.7081 23.3287 6.37 " " 8871 219912 214459 -33.9050 4.3175 6.37 " " 1359 27490 194923 -34.6228 8.7803 6.37 " " 3490 75112 199607 -35.7417 10.6810 6.37 " " 4183 92589 201631 -36.2686 9.8309 6.37 " " 3897 85296 200784 -37.6814 8.1438 6.37 " " 3195 67888 198848 -38.4039 1.8302 6.37 " " 535 11262 193326 -40.3578 4.2266 6.37 " " 1323 26927 216705 -41.8483 2.3235 6.37 " " 686 14509 215860 -50.7633 12.1347 6.37 " " 4619 105383 239686 -51.3361 9.9394 6.37 " " 3935 86352 237514 -57.5239 20.1853 6.37 " " 7691 191095 246470 -60.9486 4.2725 6.37 " " 1357 27463 248977 -61.6842 22.8059 6.37 " " 8669 215682 255321 -64.2997 2.4679 6.37 " " 734 15646 248567 -64.4997 9.1021 6.37 " " 3632 78632 250441 -64.6431 18.7063 6.37 " " 6996 172021 254343 -65.4247 1.9649 6.37 " " 584 12270 248472 -65.6325 13.5599 6.37 " " 5093 117651 252361 -68.2097 21.0245 6.37 " " 8019 199475 254918 -69.6797 13.2571 6.37 " " 4994 114912 252225 -73.1181 6.7269 6.37 " " 2531 49947 256330 0.0922 21.2436 6.38 " " 8121 202259 145229 1.0253 10.8705 6.38 " " 4244 94180 118550 2.9133 19.5903 6.38 " " 7438 184663 124823 3.0417 6.8609 6.38 " " 2543 50062 114525 4.8819 3.3942 6.38 " " 1023 21018 111161 5.2642 18.6602 6.38 " " 7008 172365 123778 -1.0858 23.5327 6.38 " 13 Psc" 8934 221409 146756 -1.6564 17.1147 6.38 " " 6361 154660 141522 -3.5833 18.4010 6.38 " " 6890 169268 142274 -4.3647 5.5920 6.38 " " 1898 37040 132325 10.8531 6.6269 6.38 " " 2426 47156 95914 11.1306 17.9039 6.38 " " 6676 163151 103194 13.0483 8.2392 6.38 " " 3231 68776 97671 14.3917 19.6044 6.38 " " 7449 184944 105036 15.3506 8.8504 6.38 " 54 Cnc" 3510 75528 98168 16.5714 19.6571 6.38 " " 7475 185622 105104 18.0903 20.7578 6.38 " " 7941 197812 106458 18.1347 8.9863 6.38 " " 3577 76830 98276 21.1236 14.6984 6.38 " " 5483 129430 83474 22.0456 15.0146 6.38 " " 5592 132879 83616 22.6594 12.6506 6.38 " " 4812 109996 82420 23.2503 14.6019 6.38 " " 5454 128402 83427 24.6000 6.6587 6.38 " " 2439 47415 78596 27.8983 9.0694 6.38 " 70 Cnc" 3601 77557 80609 28.1847 17.6022 6.38 " " 6564 159926 85236 28.4406 19.8318 6.38 " " 7556 187640 87786 30.4694 18.1528 6.38 " " 6799 166411 66682 32.9419 22.0762 6.38 " " 8412 209693 71998 36.6164 15.5229 6.38 " " 5769 138525 64754 36.6328 13.8292 6.38 " " 5204 120600 63772 38.8206 3.9944 6.38 " " 1229 24982 56866 39.7447 14.2734 6.38 " " 5347 125111 64040 40.0253 7.6216 6.38 " " 2915 60654 41887 41.0764 1.5979 6.38 " " 452 9712 37344 45.2533 0.0121 6.38 " " 9080 224801 53568 46.3606 6.3047 6.38 " 43 Aur" 2239 43380 41010 46.6433 17.8669 6.38 " " 6674 163075 47023 47.7750 7.0858 6.38 " " 2645 52860 41538 53.4983 1.1193 6.38 " " 318 6540 22021 55.2094 7.8768 6.38 " " 3039 63586 26543 56.0700 22.5977 6.38 " " 8607 214279 34605 61.1556 12.7178 6.38 " " 4840 110678 15877 62.0997 15.4892 6.38 " " 5768 138524 16746 62.5572 19.4407 6.38 " " 7413 183611 18343 75.2992 23.2886 6.38 " " 8867 219841 10684 76.2389 1.3664 6.38 " " 381 7925 4387 89.0378 17.2824 6.38 " Lam UMi" 7394 183030 3020 -10.9056 22.5281 6.38 " 58 Aqr" 8583 213464 165147 -11.5736 20.8849 6.38 " " 7994 198802 163953 -15.0294 8.5426 6.38 " " 3374 72462 154373 -15.4456 10.8925 6.38 " " 4252 94386 156302 -16.8447 21.8370 6.38 " " 8340 207552 164686 -17.8494 5.6545 6.38 " " 1944 37643 150652 -22.7469 21.4022 6.38 " " 8184 203639 190293 -23.7383 3.1765 6.38 " " 953 19826 168354 -25.6142 3.5316 6.38 " " 1082 21997 168612 -31.5008 8.5476 6.38 " " 3384 72673 199352 -31.8483 7.4809 6.38 " " 2870 59499 198038 -32.4339 11.2041 6.38 " " 4346 97393 202197 -33.0319 10.2236 6.38 " " 4013 88742 201186 -34.7858 17.8960 6.38 " " 6660 162678 209425 -38.0106 7.6292 6.38 " " 2945 61453 198210 -44.8753 5.8261 6.38 " " 2032 39312 217559 -48.5628 13.3841 6.38 " " 5039 116226 224096 -49.9094 12.5664 6.38 " " 4782 109312 223516 -49.9378 21.3546 6.38 " " 8152 203010 246983 -52.5831 7.9168 6.38 " " 3100 65189 235612 -53.3867 19.3026 6.38 " " 7297 180134 246017 -58.2400 8.9150 6.38 " " 3568 76640 236402 -59.0400 18.1660 6.38 " " 6760 165497 245273 -61.2783 11.5208 6.38 " " 4438 100198 251437 -64.2225 4.1227 6.38 " " 1294 26491 248945 -66.0719 7.7455 6.38 " " 3036 63513 249944 -82.6831 21.5651 6.38 " " 8176 203532 258902 1.3069 23.0882 6.39 " " 8785 218103 127960 3.1353 0.6251 6.39 " " 161 3457 109315 5.4100 4.5347 6.39 " " 1436 28736 111879 7.6953 2.6336 6.39 " " 770 16399 110653 -0.2378 22.3012 6.39 " " 8507 211575 146004 -2.5172 8.4748 6.39 " " 3337 71663 135958 -3.3075 5.4824 6.39 " " 1826 36058 132157 -4.7208 22.2122 6.39 " " 8467 210763 145940 -5.3667 5.3407 6.39 " " 1759 34880 132004 -5.3814 14.0707 6.39 " " 5276 122815 139711 -6.2883 23.5170 6.39 " " 8928 221308 146748 -7.4644 23.5922 6.39 " " 8951 221835 146795 11.9250 17.5062 6.39 " " 6521 158716 102869 15.4308 3.6299 6.39 " " 1102 22522 93524 16.8092 12.1754 6.39 " 3 Com" 4632 105778 99973 17.1814 6.2733 6.39 " " 2235 43335 95473 19.3097 19.0182 6.39 " " 7198 176776 104362 19.7183 21.9048 6.39 " " 8364 208202 107489 20.0078 8.6684 6.39 " 39 Cnc" 3427 73665 80333 21.8733 14.2447 6.39 " " 5333 124713 83242 22.9083 6.2053 6.39 " 6 Gem" 2197 42543 78098 24.9578 15.3519 6.39 " " 5711 136643 83778 29.6158 10.3949 6.39 " " 4078 89993 81328 33.6214 19.0301 6.39 " " 7212 177109 67721 34.3289 20.4521 6.39 " " 7823 194951 70044 34.8000 1.5354 6.39 " " 438 9298 54762 41.1314 20.3675 6.39 " " 7795 194069 49524 44.0589 23.0459 6.39 " " 8768 217811 52626 47.1686 22.7179 6.39 " " 8652 215242 52296 48.4311 9.7120 6.39 " " 3854 83869 42990 49.4008 3.5303 6.39 " " 1059 21661 38912 50.0550 15.1387 6.39 " " 5648 134493 29420 51.5081 0.8493 6.39 " " 238 4818 21767 53.8683 1.6703 6.39 " " 470 10110 22493 56.3431 22.1038 6.39 " " 8434 210071 34055 59.5744 0.7784 6.39 " " 207 4362 21693 62.2131 23.3429 6.39 " " 8886 220130 20572 63.4211 11.0183 6.39 " " 4286 95256 15360 63.4536 6.1109 6.39 " " 2126 40956 13715 64.4039 21.2285 6.39 " " 8133 202582 19257 65.1322 10.8139 6.39 " " 4215 93427 15298 70.9831 1.0086 6.39 " " 278 5715 4288 75.2106 16.2089 6.39 " 20 UMi" 6082 147142 8452 75.5447 23.8736 6.39 " " 9038 223778 10879 79.9425 18.7606 6.39 " " 7160 175938 9256 -12.2094 0.3811 6.39 " 9 Cet" 88 1835 147237 -12.6753 7.7791 6.39 " " 3019 63112 153389 -13.5086 17.7302 6.39 " " 6600 161023 160784 -13.9344 18.1621 6.39 " " 6785 166103 161125 -16.5889 4.0691 6.39 " " 1263 25700 149345 -23.8183 8.9322 6.39 " " 3559 76512 176711 -23.8619 6.2292 6.39 " " 2225 43162 171428 -26.6064 3.3459 6.39 " " 1013 20853 168475 -27.3492 1.7669 6.39 " " 517 10863 167279 -28.7800 6.4122 6.39 " " 2318 45184 171711 -29.1125 20.5158 6.39 " " 7832 195206 189374 -34.1033 9.3300 6.39 " " 3710 80590 200241 -35.5450 4.3855 6.39 " " 1386 27941 194971 -35.9208 3.4322 6.39 " Chi1For" 1042 21423 194289 -36.3492 12.7330 6.39 " " 4838 110653 203756 -36.4544 20.2732 6.39 " " 7728 192472 211948 -38.5167 17.4905 6.39 " " 6503 158156 208870 -39.1417 8.8312 6.39 " " 3517 75654 199682 -40.8450 14.5157 6.39 " " 5417 127152 224982 -44.1608 4.4220 6.39 " " 1404 28246 216790 -45.8331 5.7281 6.39 " " 1984 38458 217497 -47.7769 3.3593 6.39 " " 1021 21011 216278 -47.8667 8.5197 6.39 " " 3375 72485 220039 -49.0556 14.6569 6.39 " " 5458 128617 225091 -52.1292 8.8780 6.39 " " 3542 76230 236362 -53.5097 14.2559 6.39 " " 5319 124454 241569 -53.7058 21.4834 6.39 " " 8211 204228 247043 -55.8875 7.6005 6.39 " " 2941 61394 235343 -59.9139 14.2762 6.39 " " 5326 124601 241580 -61.6756 17.1684 6.39 " " 6356 154555 253818 -64.5100 7.4809 6.39 " " 2888 60150 249864 -65.4425 15.7982 6.39 " " 5852 140484 0 -66.6856 19.6645 6.39 " " 7435 184586 254622 -68.7622 19.9814 6.39 " " 7588 188164 254696 -77.8672 18.7971 6.39 " " 6994 171990 257625 -79.3064 11.7154 6.39 " " 4509 101917 256865 -81.3497 19.9337 6.39 " " 7494 186154 258844 3.3067 20.7966 6.40 " " 7954 198070 126221 3.7644 6.3885 6.40 " " 2292 44700 113801 5.3056 12.3756 6.40 " 17 Vir" 4708 107705 119360 8.1956 21.4736 6.40 " " 8219 204445 126818 8.8339 18.6392 6.40 " " 7002 172171 123744 -3.2528 5.5933 6.40 " " 1900 37055 132332 -3.5497 13.9970 6.40 " " 5258 122106 139666 -7.8942 6.4330 6.40 " " 2321 45239 133246 -8.9061 1.1700 6.40 " 32 Cet" 346 6976 129154 -9.4244 9.6310 6.40 " 34 Hya" 3832 83373 137011 10.8917 18.5799 6.40 " " 6976 171505 103867 11.6969 22.6101 6.40 " " 8605 214203 108036 13.3711 0.5820 6.40 " " 141 3166 91980 15.7044 14.8898 6.40 " " 5550 131473 101273 15.9033 6.5271 6.40 " 19 Gem" 2371 46031 95778 16.5039 17.5742 6.40 " " 6551 159503 102928 19.1408 22.8442 6.40 " " 8691 216201 108211 20.2644 19.3964 6.40 " " 7364 182422 87148 21.2397 21.9400 6.40 " " 8372 208527 90112 22.2639 19.0304 6.40 " " 7207 176971 86716 22.9811 9.1241 6.40 " " 3617 78175 80643 24.7117 10.3169 6.40 " " 4048 89344 81285 25.9142 6.9911 6.40 " 40 Gem" 2605 51688 78947 30.3614 4.4811 6.40 " " 1406 28271 57249 32.3331 16.3824 6.40 " " 6110 147835 65262 35.8572 21.7624 6.40 " " 8320 207088 71675 36.8156 11.5656 6.40 " " 4452 100470 62604 38.4575 18.1604 6.40 " " 6806 166620 66700 38.9961 7.3704 6.40 " " 2792 57263 60012 40.3456 21.3504 6.40 " " 8170 203454 50739 45.1831 22.6382 6.40 " " 8617 214558 52211 45.5797 20.7891 6.40 " " 7966 198237 50060 49.0750 18.7944 6.40 " " 7090 174366 47815 49.3561 22.5018 6.40 " " 8575 213389 52073 49.7256 18.3520 6.40 " " 6886 169221 47411 57.8764 17.5122 6.40 " " 6540 159330 30434 58.7650 3.5589 6.40 " " 1068 21769 24093 59.7275 23.1196 6.40 " " 8803 218440 35152 61.6794 23.7087 6.40 " " 8990 222682 20793 63.0903 8.0419 6.40 " " 3112 65448 14407 68.2719 11.2031 6.40 " " 4340 97138 15431 68.3153 13.8498 6.40 " " 5227 121146 16197 69.1864 16.9841 6.40 " " 6345 154319 17305 73.0733 10.3003 6.40 " " 4016 88815 7098 75.5858 6.0859 6.40 " " 2078 40055 5730 80.6211 12.7406 6.40 " " 4852 111112 2080 82.4939 0.6631 6.40 " " 158 3440 106 -12.9150 22.5004 6.40 " " 8565 213198 165123 -13.2789 21.2871 6.40 " " 8134 202606 164279 -20.9239 6.5574 6.40 " " 2403 46602 171940 -21.1761 14.7697 6.40 " " 5504 129980 182858 -21.7492 11.2096 6.40 " " 4348 97428 179638 -23.4542 21.5877 6.40 " " 8247 205342 190469 -26.9575 6.8834 6.40 " " 2567 50648 172504 -28.2892 18.2899 6.40 " " 6836 167665 186593 -28.7656 21.3151 6.40 " " 8142 202773 190220 -29.2686 0.0723 6.40 " " 9102 225200 166031 -29.8867 15.8702 6.40 " " 5893 141832 183873 -30.4736 20.5798 6.40 " " 7856 195843 212249 -30.8144 2.8654 6.40 " " 858 17926 193951 -31.8747 3.5760 6.40 " " 1095 22322 194379 -33.0511 17.7186 6.40 " " 6587 160748 209176 -33.4653 7.0138 6.40 " " 2641 52703 197475 -36.3886 22.9208 6.40 " " 8713 216666 214182 -37.0619 19.0179 6.40 " " 7170 176270 210816 -38.2019 7.7286 6.40 " " 3001 62712 198352 -39.3031 12.3936 6.40 " " 4713 107833 203421 -40.1631 13.4541 6.40 " " 5065 116873 204483 -53.5497 9.0514 6.40 " " 3611 77907 236542 -58.8281 10.1931 6.40 " " 4007 88647 237773 -58.9031 12.7245 6.40 " " 4835 110532 240183 -60.0158 14.5881 6.40 " " 5432 127724 241811 -63.2081 14.1373 6.40 " " 5289 123151 252616 0.3392 19.3141 6.41 " 24 Aql" 7321 181053 124492 1.2983 5.4671 6.41 " " 1820 35912 112794 3.5728 12.7976 6.41 " 35 Vir" 4858 111239 119596 6.6167 23.0669 6.41 " " 8776 217926 127937 7.2136 7.9683 6.41 " " 3103 65241 116179 -0.1614 7.2554 6.41 " 24 Mon" 2744 56003 134414 -0.3986 1.4409 6.41 " " 416 8779 129300 -0.5736 8.0971 6.41 " " 3172 66950 135488 -2.6008 8.7558 6.41 " " 3472 74688 136243 -5.8525 6.9024 6.41 " " 2570 50700 133855 -6.1394 16.0999 6.41 " " 5990 144390 140947 -6.9628 22.7206 6.41 " 67 Aqr" 8647 215143 146273 11.0092 7.4448 6.41 " " 2840 58599 96901 11.5011 9.2976 6.41 " " 3689 80064 98476 13.2067 0.5985 6.41 " " 145 3268 91990 15.5172 7.4077 6.41 " " 2817 58050 96866 17.0572 16.5906 6.41 " " 6169 149632 102259 19.8650 20.4337 6.41 " " 7813 194616 106100 25.1831 9.3922 6.41 " " 3723 80956 80797 25.8825 20.6023 6.41 " 26 Vul" 7874 196362 88884 26.8789 17.4336 6.41 " " 6499 158067 85080 28.4036 23.5286 6.41 " " 8933 221394 91321 29.7717 23.2394 6.41 " " 8838 219291 91111 31.6178 18.6948 6.41 " " 7030 172958 67256 35.8136 11.2089 6.41 " " 4345 97334 62451 36.9900 4.0207 6.41 " " 1234 25152 56899 39.2178 18.9868 6.41 " " 7185 176582 67675 42.0783 22.3641 6.41 " " 8528 212222 51918 44.0139 6.6661 6.41 " " 2434 47270 41245 44.8556 3.5442 6.41 " " 1072 21803 38927 45.9286 20.5000 6.41 " " 7841 195506 49704 47.3083 3.1298 6.41 " " 933 19279 38587 52.8408 4.8861 6.41 " " 1546 30752 24894 54.3617 11.5036 6.41 " " 4427 99913 28038 60.6311 8.3789 6.41 " " 3263 69976 14522 61.7058 1.2194 6.41 " " 354 7157 11637 64.8764 23.8108 6.41 " " 9017 223358 20866 64.9194 5.1624 6.41 " " 1647 32715 13388 65.0392 16.9403 6.41 " 20 Dra" 6319 153697 17285 68.5544 16.3026 6.41 " " 6101 147662 17036 69.6394 5.1602 6.41 " " 1636 32518 13382 69.7519 20.7425 6.41 " " 7967 198236 19018 80.8967 7.5777 6.41 " " 2797 57508 1194 -10.3383 12.8564 6.41 " " 4877 111720 157550 -14.3694 5.0644 6.41 " " 1640 32612 150109 -15.7417 20.4788 6.41 " " 7819 194918 163612 -21.1075 16.2413 6.41 " " 6051 145964 184253 -21.6581 19.2078 6.41 " " 7276 179201 187816 -24.4219 16.2294 6.41 " " 6042 145792 184241 -25.9094 5.1790 6.41 " " 1694 33667 170151 -27.9256 20.9019 6.41 " " 7997 198853 189815 -29.6961 21.5814 6.41 " " 8244 205265 190458 -30.6064 21.9321 6.41 " " 8365 208285 213406 -35.5017 9.7115 6.41 " " 3867 84224 200652 -37.8050 17.3776 6.41 " " 6450 157038 208740 -38.1911 2.9591 6.41 " " 893 18546 194007 -40.8247 9.9348 6.41 " " 3930 86211 221617 -40.8614 15.0786 6.41 " " 5604 133220 225422 -44.6322 7.6894 6.41 " " 2984 62318 218905 -50.7906 13.7152 6.41 " " 5152 119193 241098 -52.7331 6.2977 6.41 " " 2278 44267 234430 -52.7375 21.5549 6.41 " " 8233 204873 247080 -54.3942 0.6217 6.41 " " 162 3488 232114 -57.6944 1.1687 6.41 " " 350 7082 232324 -59.3411 6.8793 6.41 " " 2592 51210 234764 -61.0169 3.5477 6.41 " " 1096 22382 248834 -61.6589 10.2226 6.41 " " 4022 88907 250875 -63.7767 16.0196 6.41 " " 5939 142941 253377 -64.5500 18.1301 6.41 " " 6740 164871 254141 -64.8397 11.1067 6.41 " " 4326 96568 251267 -66.4947 2.4240 6.41 " " 722 15379 248556 -66.6756 4.8918 6.41 " " 1598 31754 249138 -69.7342 21.4046 6.41 " " 8156 203133 254990 -71.9944 11.3344 6.41 " " 4389 98695 256828 -77.6625 22.0311 6.41 " " 8370 208500 257990 -80.9128 23.2033 6.41 " " 8810 218559 258961 -85.2622 3.7089 6.41 " " 1271 25887 258356 1.9472 5.2781 6.42 " " 1724 34317 112588 2.9419 21.0783 6.42 " " 8067 200661 126519 6.8692 5.4441 6.42 " " 1807 35656 112767 8.2683 18.5565 6.42 " " 6967 171247 123634 -2.8961 5.6945 6.42 " " 1959 37904 132465 -6.1817 9.8560 6.42 " " 3901 85380 137185 11.2497 20.6644 6.42 " " 7907 196885 106360 11.4217 18.6202 6.42 " " 6992 171975 103912 11.9303 17.5375 6.42 " " 6532 159082 102897 16.6642 20.1351 6.42 " " 7696 191178 105733 20.2300 22.5432 6.42 " 39 Peg" 8586 213617 107986 25.5828 12.4074 6.42 " " 4719 108007 82293 27.8200 3.1691 6.42 " " 945 19600 75762 28.1964 6.6892 6.42 " 25 Gem" 2453 47731 78636 32.2739 11.9687 6.42 " " 4574 103928 62774 33.0242 6.5619 6.42 " " 2383 46251 59222 38.3739 15.5970 6.42 " " 5808 139284 64797 42.5831 3.6334 6.42 " " 1097 22402 38999 43.3786 6.0482 6.42 " " 2115 40722 40808 44.4594 2.1427 6.42 " " 619 13013 37794 47.9292 11.5147 6.42 " " 4435 100030 43790 48.6686 21.9506 6.42 " " 8377 208727 51477 49.7964 22.1379 6.42 " " 8445 210289 51678 50.9808 22.3443 6.42 " " 8519 212071 34335 52.9250 8.6500 6.42 " " 3405 73131 26940 58.6117 21.2886 6.42 " " 8153 203025 33288 69.5708 17.6110 6.42 " " 6598 160933 17572 70.9817 0.5554 6.42 " " 129 2904 4142 73.0806 9.6323 6.42 " " 3806 82685 6915 -14.5106 23.1638 6.42 " " 8816 218639 165522 -14.5642 18.6951 6.42 " " 7014 172594 161730 -19.6064 18.7670 6.42 " " 7045 173425 161803 -24.7211 11.6501 6.42 " " 4489 101259 180065 -25.3314 23.8304 6.42 " " 9026 223466 192180 -29.6650 2.0411 6.42 " " 606 12563 167511 -30.9978 6.9788 6.42 " " 2621 52140 197432 -34.8317 17.8995 6.42 " " 6663 162725 209430 -35.9433 8.7158 6.42 " " 3463 74475 199535 -36.5456 8.8774 6.42 " " 3534 76072 199731 -40.1942 15.7904 6.42 " " 5862 140861 226206 -48.2925 6.8591 6.42 " " 2563 50621 218261 -53.4597 4.8490 6.42 " Iot Pic" 1564 31204 233710 -57.0811 12.5213 6.42 " Gam Cru" 4764 108925 240022 -58.4150 13.6354 6.42 " " 5122 118384 241013 -59.1669 8.2988 6.42 " " 3274 70267 235872 -59.6769 10.6882 6.42 " " 4188 92740 238353 -59.7156 14.1070 6.42 " " 5281 122879 241439 -62.1564 10.0471 6.42 " " 3967 87438 250789 -65.1247 0.6104 6.42 " " 160 3444 248225 -71.4889 12.0413 6.42 " " 4596 104570 256897 -82.8486 14.4065 6.42 " " 5327 124639 258697 1.3622 14.1920 6.43 " " 5307 124115 120334 3.6597 18.5353 6.43 " " 6958 170973 123610 9.3569 22.9764 6.43 " " 8737 217166 127870 9.3997 20.1306 6.43 " " 7693 191104 125478 -1.3644 13.4875 6.43 " " 5078 117267 139359 -2.5489 0.1289 6.43 " " 11 315 128595 -8.8161 8.4721 6.43 " " 3338 71665 135956 -8.9792 7.3672 6.43 " " 2806 57682 134580 12.8594 7.7372 6.43 " " 2987 62407 97199 17.2244 2.1564 6.43 " " 624 13201 92810 21.2469 7.1685 6.43 " " 2692 54563 79131 22.8633 12.8382 6.43 " " 4873 111591 82523 24.5281 3.7675 6.43 " 22 Tau" 1152 23441 76164 27.2247 7.2136 6.43 " " 2711 55130 79170 28.5297 1.2347 6.43 " " 363 7351 74576 29.3336 19.6193 6.43 " " 7466 185268 87462 29.4875 5.6892 6.43 " " 1945 37646 77393 29.5411 6.3534 6.43 " " 2272 44092 78259 32.5631 6.4599 6.43 " " 2319 45192 59096 36.0911 19.7610 6.43 " " 7529 186901 68805 36.9594 14.5556 6.43 " " 5441 127986 64212 37.8028 22.7154 6.43 " " 8651 215191 72652 38.8822 17.5112 6.43 " " 6531 159026 66102 42.2514 21.2749 6.43 " " 8138 202720 50656 42.2608 19.9656 6.43 " " 7638 189377 49031 43.8122 17.0847 6.43 " " 6362 154713 46478 45.1642 23.2879 6.43 " " 8857 219668 52865 46.7608 10.3164 6.43 " " 4044 89268 43281 47.6122 17.7856 6.43 " " 6641 162132 46954 48.1883 17.3427 6.43 " " 6467 157373 46651 49.9233 19.0861 6.43 " " 7252 178208 48071 50.7183 13.4794 6.43 " " 5083 117361 28771 50.9025 19.9459 6.43 " " 7632 189253 32130 51.5019 11.0071 6.43 " " 4283 95233 27868 55.1950 15.4824 6.43 " " 5759 138338 29540 56.9350 1.1167 6.43 " " 316 6497 22015 57.0544 12.1958 6.43 " 68 UMa" 4641 106002 28291 57.0750 11.3637 6.43 " " 4388 98673 27999 57.7669 19.3571 6.43 " " 7365 182440 31604 58.5647 23.0560 6.43 " " 8778 217944 35103 59.5492 18.4617 6.43 " " 6949 170811 30990 59.8147 22.9858 6.43 " " 8745 217348 35026 66.1561 21.9531 6.43 " " 8384 208947 19760 67.3064 17.4167 6.43 " " 6518 158633 17474 -16.0144 7.7959 6.43 " " 3027 63323 153409 -16.3119 17.3053 6.43 " " 6428 156462 160440 -20.3350 0.4725 6.43 " " 108 2475 166296 -24.5906 21.5426 6.43 " " 8235 204943 190423 -25.9089 11.9818 6.43 " " 4579 104039 180349 -26.0736 22.5149 6.43 " Zet PsA" 8570 213296 191196 -32.5986 8.5755 6.43 " " 3397 72954 199388 -32.7197 18.1666 6.43 " " 6777 165978 209794 -34.5903 8.3248 6.43 " " 3273 70235 199084 -37.9244 8.2143 6.43 " " 3233 68862 198942 -38.1117 17.7854 6.43 " " 6613 161390 209246 -39.1289 9.5522 6.43 " " 3812 82785 200492 -39.9758 10.0732 6.43 " " 3968 87477 201020 -40.3056 17.9488 6.43 " " 6678 163234 228564 -42.4639 8.8024 6.43 " " 3501 75387 220495 -43.4042 7.0377 6.43 " " 2658 53253 218396 -44.4978 23.4836 6.43 " " 8920 221051 231622 -48.1072 22.1661 6.43 " " 8440 210204 231005 -52.1150 13.0919 6.43 " " 4939 113602 240535 -54.9022 5.5623 6.43 " " 1912 37226 234026 -58.6308 7.7028 6.43 " " 3006 62758 235430 -59.2136 6.2718 6.43 " " 2274 44120 234418 -61.3561 10.5109 6.43 " " 4128 91270 250992 -77.6083 11.3659 6.43 " " 4397 99015 256832 -1.1497 4.2273 6.44 " " 1312 26739 131041 -1.6517 17.4328 6.44 " " 6489 157856 141661 -4.2239 12.8939 6.44 " " 4896 112048 139027 -6.6219 14.2726 6.44 " " 5341 124915 139828 -6.8897 20.8996 6.44 " " 7998 198949 144915 10.6942 19.8084 6.44 " " 7542 187203 105278 12.4319 13.4085 6.44 " " 5053 116594 100553 13.3550 10.1939 6.44 " 34 Leo" 3998 88355 98991 16.5631 23.0851 6.44 " " 8784 218101 108383 17.9058 21.4833 6.44 " " 8221 204560 107168 19.6700 8.6728 6.44 " " 3428 73710 98021 19.8064 5.0922 6.44 " " 1642 32642 94306 24.5908 6.6242 6.44 " " 2417 47020 78557 30.4292 14.3358 6.44 " " 5374 125658 64074 31.7358 15.8006 6.44 " " 5877 141456 64915 32.8492 20.8667 6.44 " " 7996 198820 70596 33.4372 19.8141 6.44 " " 7551 187459 68895 37.6044 9.0086 6.44 " " 3580 76944 61191 45.1086 11.6458 6.44 " " 4486 101177 43841 45.1122 22.0974 6.44 " " 8422 209932 51640 48.7847 10.4677 6.44 " " 4098 90508 43351 51.6217 23.8395 6.44 " " 9028 223552 35823 52.5036 10.8755 6.44 " " 4242 94084 27810 55.3208 5.9960 6.44 " " 2079 40062 25504 58.5611 2.2282 6.44 " " 641 13476 23044 59.6000 20.4181 6.44 " " 7818 194882 32562 59.8019 7.1004 6.44 " " 2642 52708 26141 70.7928 18.7195 6.44 " " 7082 174205 9222 -17.4394 8.4276 6.44 " " 3317 71231 154240 -19.1536 10.2105 6.44 " " 4005 88595 155820 -20.6650 10.9199 6.44 " " 4261 94619 179334 -24.1453 0.0521 6.44 " " 9096 225069 166016 -24.8517 12.7982 6.44 " " 4857 111226 181105 -25.8475 2.4056 6.44 " " 703 14988 167757 -25.9433 17.4487 6.44 " " 6490 157864 185406 -28.2925 22.1667 6.44 " " 8446 210300 190930 -29.1964 11.6857 6.44 " " 4498 101563 180098 -30.9175 7.9205 6.44 " " 3096 64974 198591 -31.9761 5.9469 6.44 " " 2098 40359 196335 -33.3108 13.5788 6.44 " " 5104 118010 204612 -33.7028 17.5298 6.44 " " 6517 158619 208921 -35.2739 4.1794 6.44 " " 1299 26575 194810 -37.2922 8.1838 6.44 " " 3219 68450 198898 -38.0897 20.5821 6.44 " " 7853 195814 212246 -38.6253 6.5529 6.44 " " 2407 46727 196930 -39.9011 13.8387 6.44 " " 5198 120457 204888 -40.1778 12.7240 6.44 " " 4836 110575 203746 -41.9600 4.4693 6.44 " " 1429 28552 216821 -45.2775 15.1930 6.44 " " 5642 134444 225517 -50.4494 8.2565 6.44 " " 3256 69596 235838 -51.4486 7.9726 6.44 " " 3133 65867 235646 -51.6728 4.6512 6.44 " " 1498 29805 233605 -57.8525 9.0800 6.44 " " 3622 78293 236578 -58.7092 18.5582 6.44 " " 6939 170525 245547 -70.2278 15.6699 6.44 " " 5792 138965 257308 -74.2139 12.0623 6.44 " " 4601 104752 256898 1.9608 2.4667 6.45 " " 719 15328 110542 2.9433 21.1662 6.45 " " 8095 201507 126587 3.2011 10.0690 6.45 " 13 Sex" 3961 87301 118086 3.3361 14.2481 6.45 " " 5331 124681 120364 7.5725 6.5796 6.45 " 14 Mon" 2404 46642 114085 8.0172 8.6568 6.45 " " 3424 73599 116997 -8.3117 22.7176 6.45 " " 8645 215114 146271 10.6275 6.2202 6.45 " " 2208 42807 95394 11.5683 9.7905 6.45 " 19 Leo" 3880 84722 98767 15.1428 7.3352 6.45 " " 2780 57049 96783 17.1378 15.5647 6.45 " " 5783 138803 101618 19.0517 13.2706 6.45 " " 5007 115319 100484 19.7853 13.2756 6.45 " " 5010 115365 82751 19.9353 20.6792 6.45 " " 7914 197076 106373 20.4414 11.5844 6.45 " " 4459 100655 81886 23.0908 17.2933 6.45 " " 6430 156593 84982 23.2103 20.0829 6.45 " " 7677 190590 88163 24.5611 23.5989 6.45 " " 8953 221905 91367 31.5358 0.2519 6.45 " " 52 1075 53755 32.8653 4.7301 6.45 " " 1501 29867 57393 35.9519 12.6547 6.45 " " 4816 110066 63118 36.6053 20.2347 6.45 " " 7734 192538 69653 37.3261 2.8242 6.45 " " 831 17484 55910 37.7186 11.8830 6.45 " " 4550 103095 62738 37.9669 4.2332 6.45 " " 1301 26605 57081 38.3672 18.6701 6.45 " " 7019 172741 67233 39.3003 18.7213 6.45 " " 7041 173383 67287 39.5744 5.8776 6.45 " " 2025 39182 58524 40.4833 3.2865 6.45 " " 979 20283 38700 46.3228 20.3138 6.45 " " 7777 193536 49462 47.3761 1.0504 6.45 " " 289 6114 36875 48.9608 16.5017 6.45 " 34 Her" 6156 149081 46128 51.5733 6.0747 6.45 " " 2123 40873 25548 53.4975 10.5621 6.45 " " 4131 91311 27682 53.7792 10.3374 6.45 " " 4051 89389 27606 54.0200 15.4424 6.45 " " 5748 137928 29527 55.3531 6.5758 6.45 " 7 Lyn" 2376 46101 25814 55.5981 1.8968 6.45 " " 540 11408 22716 55.7456 9.4966 6.45 " " 3747 81790 27271 57.9244 15.6526 6.45 " " 5841 140117 29609 58.1431 1.3893 6.45 " " 391 8272 22230 58.3147 2.8626 6.45 " " 839 17581 23662 59.3444 9.1120 6.45 " " 3608 77692 27121 60.3806 8.2640 6.45 " " 3221 68457 14479 61.9700 23.3373 6.45 " " 8881 220074 20567 62.3967 18.9548 6.45 " " 7191 176668 18082 64.0422 20.8215 6.45 " " 7993 198781 19051 74.5936 14.1157 6.45 " 3 UMi" 5305 124063 7953 -10.1242 7.0659 6.45 " " 2656 53240 152308 -11.9661 8.7027 6.45 " " 3446 74190 154558 -14.9736 0.6008 6.45 " " 150 3325 147360 -19.0511 0.2924 6.45 " " 66 1343 147205 -22.5956 20.0623 6.45 " " 7658 190009 188863 -24.3908 13.8557 6.45 " " 5209 120690 182026 -24.5283 7.8500 6.45 " " 3060 64042 174658 -25.3092 15.2246 6.45 " 23 Lib" 5657 134987 183275 -27.3414 6.7477 6.45 " " 2493 48938 172264 -29.4486 5.8665 6.45 " " 2043 39543 170945 -29.5653 13.5429 6.45 " " 5098 117718 181735 -30.0033 8.2995 6.45 " " 3261 69879 175543 -30.2028 9.7561 6.45 " " 3878 84567 177939 -34.7372 11.2942 6.45 " " 4373 98221 202289 -35.0186 17.8822 6.45 " " 6652 162515 209401 -35.3286 11.4662 6.45 " " 4420 99712 202478 -37.4875 18.3487 6.45 " " 6856 168357 210017 -40.6603 3.7351 6.45 " " 1157 23508 216459 -41.8503 16.9033 6.45 " " 6263 152249 227383 -44.5797 7.8451 6.45 " " 3069 64181 219059 -49.4986 21.7553 6.45 " " 8303 206690 230822 -51.1308 17.0295 6.45 " " 6312 153370 244370 -53.4261 5.9540 6.45 " " 2114 40665 234224 -56.3947 6.9767 6.45 " " 2638 52622 234825 -59.1978 14.4787 6.45 " " 5403 126610 241737 -60.0969 6.0359 6.45 " " 2151 41586 249424 -66.3547 20.1390 6.45 " " 7663 190222 254731 -66.5811 23.4520 6.45 " " 8908 220759 255486 -66.8128 19.8315 6.45 " " 7513 186584 254658 -84.8100 21.5345 6.45 " " 8129 202418 258899 -85.2147 18.0261 6.45 " " 6552 159517 258779 0.5344 21.4310 6.46 " " 8203 204041 126789 2.2142 23.8137 6.46 " " 9015 223346 128393 -1.7183 5.5520 6.46 " " 1863 36646 132247 -8.0528 0.3116 6.46 " " 72 1461 128690 10.0661 8.5444 6.46 " 34 Cnc" 3372 72359 97902 12.6936 6.7651 6.46 " 32 Gem" 2489 48843 96084 13.0661 9.8506 6.46 " 23 Leo" 3896 85268 98809 15.3258 17.8663 6.46 " " 6665 162734 103161 15.9408 4.4270 6.46 " 70 Tau" 1391 27991 93925 17.7639 2.7386 6.46 " 36 Ari" 808 17017 93081 20.9781 22.1751 6.46 " 28 Peg" 8459 210516 90287 23.1678 2.3161 6.46 " " 676 14262 75277 23.3236 11.1277 6.46 " 64 Leo" 4322 96528 81681 26.9183 0.0066 6.46 " " 9078 224758 91648 28.9367 5.3897 6.46 " 22 Aur" 1768 35076 77139 31.2861 15.5063 6.46 " " 5760 138341 64736 31.4681 10.2517 6.46 " 22 LMi" 4014 88786 61953 32.3769 9.0820 6.46 " " 3606 77660 61242 33.0061 22.0074 6.46 " " 8391 209149 71932 35.9319 6.6938 6.46 " " 2452 47703 59365 37.3861 1.3131 6.46 " " 379 7853 54592 37.4439 22.4460 6.46 " " 8549 212883 72344 40.0725 17.8539 6.46 " " 6669 162826 47009 41.1006 1.4574 6.46 " " 418 8801 37227 47.6919 21.1753 6.46 " " 8107 201836 50536 47.9736 21.2602 6.46 " " 8136 202654 50631 50.4119 22.8812 6.46 " " 8705 216523 34917 50.8422 17.1381 6.46 " " 6383 155328 30262 57.1181 3.8221 6.46 " " 1161 23594 24244 58.2253 18.9579 6.46 " " 7184 176560 31292 58.5394 13.8410 6.46 " " 5216 120874 28901 59.3378 14.1461 6.46 " " 5302 123977 29019 60.0411 3.5836 6.46 " " 1077 21903 24111 64.3469 11.6470 6.46 " " 4481 101150 15580 74.3178 9.6019 6.46 " " 3774 82327 6900 89.0156 1.5640 6.46 " " 286 5914 209 -10.6961 17.3480 6.46 " " 6449 156971 160482 -20.1442 4.0569 6.46 " " 1258 25631 169071 -24.7769 0.8868 6.46 " " 251 5156 166651 -26.7975 7.2966 6.46 " " 2774 56876 173411 -28.6281 9.5385 6.46 " " 3798 82610 177619 -31.9608 11.0545 6.46 " " 4307 95857 202039 -32.1061 16.7274 6.46 " " 6211 150638 207967 -32.5336 12.5346 6.46 " " 4774 109074 203567 -32.8811 15.5306 6.46 " " 5753 138221 206734 -33.0464 19.9181 6.46 " " 7585 188158 211653 -35.6736 20.3477 6.46 " " 7765 193302 212025 -37.7489 11.9072 6.46 " " 4557 103437 202926 -39.8281 19.1610 6.46 " " 7255 178254 210994 -43.9758 6.8798 6.46 " " 2579 50860 218278 -45.2447 16.5855 6.46 " " 6160 149174 226926 -50.3603 7.0879 6.46 " " 2687 54179 234907 -52.6906 3.9094 6.46 " " 1227 24863 233321 -54.6947 6.7782 6.46 " " 2524 49705 234704 -57.1856 9.7613 6.46 " " 3883 84809 237314 -59.8814 22.8625 6.46 " " 8686 216169 255336 -63.2297 4.7494 6.46 " " 1540 30610 249095 -63.4289 6.4073 6.46 " " 2354 45701 249539 -70.8550 10.7422 6.46 " " 4212 93359 256751 1.9611 17.8219 6.47 " " 6639 162113 122787 2.4050 7.7354 6.47 " " 2989 62437 115864 -4.0783 20.1034 6.47 " " 7681 190664 144062 -7.5425 14.3002 6.47 " " 5353 125184 139856 17.6758 8.2364 6.47 " " 3228 68703 97669 22.7547 21.5761 6.47 " " 8250 205420 89807 24.0142 0.6187 6.47 " " 156 3411 74148 26.9353 22.3500 6.47 " " 8517 212047 90437 26.9400 4.6416 6.47 " " 1470 29364 76682 26.9678 6.4824 6.47 " " 2339 45504 78417 30.1883 2.3346 6.47 " " 680 14373 75287 34.7467 18.7022 6.47 " " 7033 173087 67265 35.5878 20.7234 6.47 " " 7932 197572 70423 36.5806 21.8023 6.47 " " 8336 207446 71716 37.3514 21.3968 6.47 " " 8193 203857 71280 40.7297 13.4739 6.47 " " 5077 117261 44621 49.0294 5.9514 6.47 " " 2054 39743 40720 49.2844 19.6324 6.47 " " 7477 185657 48673 51.0350 1.0384 6.47 " " 287 6028 21938 54.3636 9.7186 6.47 " " 3855 83886 27359 60.0236 23.9593 6.47 " " 9063 224404 35922 66.3317 7.4572 6.47 " " 2809 57742 14195 -10.3344 14.1502 6.47 " 96 Vir" 5298 123630 158385 -14.0047 18.6346 6.47 " " 6989 171957 161687 -16.4242 0.7616 6.47 " " 206 4338 147436 -18.3408 16.1653 6.47 " " 6012 145100 159745 -18.6014 18.8126 6.47 " " 7072 173928 161848 -20.2106 0.2785 6.47 " " 61 1256 166167 -21.0486 8.8291 6.47 " " 3507 75495 176535 -22.4856 2.7864 6.47 " " 827 17438 168051 -24.0083 15.2215 6.47 " " 5655 134946 183269 -28.1128 13.5259 6.47 " " 5090 117558 181723 -28.7478 22.6457 6.47 " " 8614 214462 191292 -29.9167 22.0733 6.47 " 13 PsA" 8405 209476 213517 -33.1994 16.3991 6.47 " " 6097 147553 207625 -35.9100 17.3772 6.47 " " 6454 157060 208741 -36.4208 23.0428 6.47 " " 8760 217642 214261 -37.8814 14.9872 6.47 " " 5579 132238 206167 -39.9700 8.5868 6.47 " " 3404 73121 199402 -40.4475 8.8974 6.47 " " 3548 76304 220628 -41.1944 23.2805 6.47 " " 8847 219531 231533 -50.0456 16.8433 6.47 " " 6236 151566 227281 -51.0131 13.7377 6.47 " " 5158 119419 241120 -53.0906 8.6458 6.47 " " 3435 73952 236142 -63.6894 18.2378 6.47 " " 6796 166251 254179 -66.8575 23.1699 6.47 " " 8809 218558 255420 -68.8372 7.1039 6.47 " " 2712 55151 249740 -77.6639 14.2819 6.47 " " 5306 124099 257131 -80.0392 21.5557 6.47 " " 8201 203955 258904 -87.0250 6.7830 6.47 " " 2848 58805 258460 1.9122 6.4713 6.48 " " 2347 45563 113929 -1.6078 21.2777 6.48 " " 8132 202554 145259 -2.8833 19.7645 6.48 " " 7516 186660 143776 -8.1289 16.4802 6.48 " " 6137 148515 141195 -8.7911 15.6445 6.48 " " 5816 139461 140672 10.2625 4.5007 6.48 " " 1425 28505 93971 11.5644 9.1629 6.48 " " 3635 78661 98400 13.6678 15.7196 6.48 " " 5850 140438 101699 14.8417 17.5619 6.48 " " 6543 159354 102918 16.8514 19.1445 6.48 " " 7267 178619 104524 18.2653 13.6506 6.48 " " 5137 118839 100650 20.7828 19.6382 6.48 " " 7472 185436 87489 20.9153 20.1657 6.48 " 17The Sge" 7705 191570 88276 20.9853 20.5694 6.48 " " 7862 196035 88846 20.9981 19.9501 6.48 " " 7616 188971 87963 21.2833 9.2270 6.48 " " 3657 79248 80702 26.0078 12.3172 6.48 " " 4684 107131 82237 28.1772 7.1236 6.48 " " 2669 53744 79066 32.8011 5.5576 6.48 " " 1850 36484 58179 37.0564 20.2745 6.48 " " 7757 192987 69725 38.5050 6.8992 6.48 " 61Psi8Aur" 2547 50204 59589 41.1489 21.8278 6.48 " " 8345 207673 51344 45.4761 17.9812 6.48 " " 6718 164429 47106 45.4889 23.2989 6.48 " " 8861 219749 52876 45.8489 21.0468 6.48 " " 8064 200595 50390 48.2656 2.7172 6.48 " " 792 16780 38274 50.7147 13.6286 6.48 " " 5133 118741 28819 55.4633 19.7011 6.48 " " 7509 186532 31906 56.0050 20.6501 6.48 " " 7916 197101 32763 57.0553 2.2810 6.48 " " 654 13854 23115 57.0653 14.5711 6.48 " " 5451 128332 29202 57.2211 5.5427 6.48 " 18 Cam" 1828 36066 25241 59.9394 8.6528 6.48 " " 3401 73029 14612 66.7503 0.5736 6.48 " 16 Cas" 137 3038 11265 -12.3939 7.1100 6.48 " " 2679 53975 152393 -14.4722 21.1948 6.48 " " 8102 201707 164204 -14.6031 19.8851 6.48 " " 7571 187949 163080 -20.8408 18.5892 6.48 " " 6969 171369 187012 -24.3458 2.1597 6.48 " " 630 13305 167599 -26.8525 14.4299 6.48 " " 5399 126400 182535 -27.2778 11.8436 6.48 " " 4542 102888 180232 -30.2869 11.7877 6.48 " " 4525 102438 202811 -31.5656 22.9400 6.48 " " 8721 216803 214197 -33.7458 8.6249 6.48 " " 3419 73476 199436 -34.9839 19.3583 6.48 " " 7330 181321 211206 -37.4400 17.5953 6.48 " " 6539 159312 209001 -37.7572 9.3958 6.48 " " 3735 81309 200320 -37.8956 6.4521 6.48 " " 2353 45680 196842 -38.2192 15.3584 6.48 " " 5697 136347 206543 -43.3947 0.8344 6.48 " " 239 4849 215254 -49.4247 9.1625 6.48 " " 3647 79025 220910 -49.6858 22.7745 6.48 " " 8659 215504 231287 -49.8231 13.3979 6.48 " " 5046 116338 224104 -55.3733 9.8833 6.48 " " 3920 85871 237448 -58.5439 6.3964 6.48 " " 2336 45450 234482 -60.2872 15.7320 6.48 " " 5836 139915 253269 -62.8011 18.9485 6.48 " " 7111 174877 254415 -77.5683 13.5541 6.48 " " 5082 117360 257060 -88.1331 15.4720 6.48 " " 5491 129723 258720 5.5158 19.2289 6.49 " " 7288 179791 124410 6.4178 3.5803 6.49 " " 1089 22211 111273 -0.4497 1.3763 6.49 " 43 Cet" 393 8335 129262 -3.1936 18.6399 6.49 " " 6999 172088 142461 -4.0872 23.5254 6.49 " " 8931 221356 146752 -8.2372 19.9106 6.49 " 57 Aql" 7594 188294 143899 -8.8422 20.1861 6.49 " " 7709 191639 144144 -9.2031 7.0109 6.49 " " 2627 52382 134041 10.2047 13.5926 6.49 " " 5114 118266 100630 15.8561 3.0780 6.49 " " 924 19080 93260 21.5553 14.9510 6.49 " " 5574 132145 83596 25.9394 5.6084 6.49 " " 1889 36994 77310 28.2478 23.2629 6.49 " 61 Peg" 8842 219477 91130 28.5361 12.2003 6.49 " " 4642 106022 82181 28.6825 10.2745 6.49 " 24 LMi" 4027 88986 81259 29.3317 19.7136 6.49 " " 7501 186357 87612 31.5219 20.6257 6.49 " " 7887 196629 70289 33.9856 5.3232 6.49 " 18 Aur" 1734 34499 57893 36.7564 11.9206 6.49 " " 4562 103500 62754 38.5828 17.4006 6.49 " " 6488 157853 66006 41.4139 19.1047 6.49 " " 7258 178329 48084 41.7722 20.5634 6.49 " " 7867 196134 49796 49.4867 13.6111 6.49 " " 5126 118536 44682 51.8039 5.9373 6.49 " " 2045 39551 25467 53.5744 8.3414 6.49 " " 3258 69682 26788 55.8289 16.1572 6.49 " " 6038 145694 29825 57.2736 8.0433 6.49 " " 3119 65626 26634 60.2556 3.4732 6.49 " " 1033 21203 12770 60.4094 18.1853 6.49 " " 6827 167387 17803 62.8306 7.7743 6.49 " 49 Cam" 2977 62140 14322 70.9800 1.4296 6.49 " " 398 8424 4401 76.6111 4.7668 6.49 " " 1468 29329 5289 84.0578 8.2816 6.49 " " 3108 65299 1300 -10.6611 7.0971 6.49 " " 2670 53755 152363 -11.6697 14.4114 6.49 " " 5393 126251 158550 -11.8031 3.6872 6.49 " " 1125 23010 149107 -16.5169 0.6746 6.49 " " 172 3794 147395 -18.5692 10.5941 6.49 " " 4152 91790 156087 -21.6397 2.7792 6.49 " " 826 17390 168045 -25.1019 21.6961 6.49 " " 8282 206291 190555 -26.7058 5.3867 6.49 " " 1785 35386 170375 -29.9728 11.1377 6.49 " " 4331 96723 179568 -35.8239 9.5866 6.49 " " 3823 83108 200531 -36.1203 20.7718 6.49 " " 7935 197649 212417 -37.9906 2.6402 6.49 " " 780 16589 193834 -38.3711 8.5555 6.49 " " 3388 72787 199363 -39.5347 18.9864 6.49 " " 7156 175855 210786 -40.6528 15.9994 6.49 " " 5945 143084 226431 -41.8544 16.8720 6.49 " " 6249 151932 227328 -48.0614 3.7474 6.49 " " 1167 23670 216469 -48.0950 18.6918 6.49 " " 7005 172223 229194 -49.5628 6.1565 6.49 " " 2204 42683 217747 -52.1819 5.2608 6.49 " " 1742 34587 233895 -55.7203 19.1478 6.49 " " 7233 177693 245937 -57.8997 16.3144 6.49 " " 6062 146323 243586 -61.4814 14.0048 6.49 " " 5252 121901 252552 -65.4892 17.8884 6.49 " " 6634 161955 254063 -72.2208 17.7388 6.49 " " 6565 159964 257525 -75.3694 12.6540 6.49 " " 4804 109857 256967 -75.9114 0.2653 6.49 " " 58 1221 255650 3.0131 11.4459 6.50 " 83 Leo" 4414 99491 118864 5.3992 4.9329 6.50 " " 1578 31411 112220 5.4925 15.0684 6.50 " " 5610 133408 120822 -0.9247 21.0499 6.50 " " 8054 200340 145050 -1.6022 8.3556 6.50 " " 3278 70340 135804 -4.3456 2.3280 6.50 " " 684 14417 129830 -7.5150 16.5083 6.50 " " 6144 148743 141206 -8.7944 15.6444 6.50 " " 5815 139460 140671 -9.7067 5.6586 6.50 " " 1942 37635 132425 18.8636 9.7417 6.50 " " 3869 84252 98742 19.5058 18.0077 6.50 " " 6720 164447 103291 19.6131 18.0541 6.50 " " 6744 165029 103334 19.7942 18.9792 6.50 " " 7171 176301 104306 20.4767 19.6745 6.50 " " 7482 185859 87542 20.8153 18.5116 6.50 " " 6950 170829 86142 20.9158 3.6500 6.50 " " 1103 22615 76045 24.6475 2.6168 6.50 " 30 Ari" 765 16246 75471 26.6708 16.2126 6.50 " " 6052 145976 84247 27.2547 0.6056 6.50 " " 149 3322 74136 32.5406 9.1345 6.50 " " 3620 78234 61276 34.0350 11.9992 6.50 " " 4584 104179 62786 37.3478 15.4086 6.50 " 51Mu 2Boo" 5734 137392 64687 38.3839 19.6157 6.50 " " 7467 185330 68585 45.1372 23.3173 6.50 " " 8870 219891 52892 45.3750 23.0096 6.50 " " 8755 217491 52587 46.8375 20.3322 6.50 " " 7786 193722 49482 52.7731 11.2678 6.50 " " 4363 97855 27970 53.5861 5.2883 6.50 " " 1707 34019 25112 55.2364 23.0455 6.50 " " 8770 217833 35092 55.8794 13.7537 6.50 " " 5177 119992 28878 59.5208 4.7217 6.50 " " 1486 29606 24777 62.2756 15.4613 6.50 " " 5754 138245 16740 62.6914 5.2254 6.50 " 14 Cam" 1678 33296 13413 63.2611 13.4333 6.50 " " 5070 117043 16071 70.7319 7.0977 6.50 " " 2617 52030 6074 74.0164 9.3322 6.50 " " 3666 79517 6816 -20.4392 14.5808 6.50 " " 5438 127964 182676 -23.7108 10.3580 6.50 " " 4071 89816 178721 -26.5517 13.1942 6.50 " " 4978 114576 181446 -26.5817 18.4826 6.50 " " 6926 170141 186863 -26.8631 7.6575 6.50 " " 2956 61672 174219 -27.2472 20.7537 6.50 " " 7931 197540 189641 -31.2386 21.4844 6.50 " 5 PsA" 8214 204394 213034 -32.5092 8.8739 6.50 " " 3533 76001 199728 -32.7072 3.3957 6.50 " " 1031 21149 194268 -34.1256 12.2203 6.50 " " 4647 106198 203245 -34.4678 13.6140 6.50 " " 5117 118319 204653 -35.8533 3.4699 6.50 " Chi3For" 1058 21635 194318 -54.9767 19.8775 6.50 " " 7549 187421 246312 2.2722 6.4296 6.51 " " 2315 45137 113868 6.0133 13.4993 6.51 " " 5087 117405 119961 6.0853 17.3147 6.51 " " 6434 156697 122270 6.3717 6.6755 6.51 " " 2454 47756 114244 7.9025 19.8382 6.51 " " 7554 187567 125116 8.8906 4.2254 6.51 " " 1308 26677 111671 -0.5617 15.6094 6.51 " 14 Ser" 5799 139137 140643 -2.8817 8.0122 6.51 " " 3135 65875 135368 -5.4989 13.7317 6.51 " " 5163 119537 139516 -5.6950 15.5724 6.51 " " 5779 138763 140613 -6.6625 8.6390 6.51 " " 3416 73451 136117 -6.7342 19.9221 6.51 " " 7599 188405 143911 10.9392 22.7285 6.51 " " 8653 215243 108131 11.8483 22.9476 6.51 " " 8724 216900 108275 14.9961 9.2049 6.51 " 81Pi 1Cnc" 3650 79096 98427 21.9850 18.7599 6.51 " " 7058 173650 86405 35.8025 8.9743 6.51 " " 3566 76595 61161 39.0822 20.6834 6.51 " " 7922 197226 70367 41.2572 3.4193 6.51 " " 1026 21038 38809 50.2714 19.3899 6.51 " " 7381 182691 31623 51.3747 14.8256 6.51 " " 5537 131040 29296 53.5519 20.4090 6.51 " " 7815 194668 32534 53.9217 3.4301 6.51 " " 1020 21004 24024 55.5364 2.4903 6.51 " " 716 15253 23369 55.7997 23.7468 6.51 " " 9000 222932 35728 58.6519 17.4347 6.51 " " 6514 158485 30387 60.5072 19.6703 6.51 " " 7500 186340 18461 68.9453 15.2477 6.51 " " 5693 136174 16662 85.9386 5.5300 6.51 " " 1616 32196 843 -17.9850 10.3522 6.51 " " 4068 89747 155920 -22.5283 10.3600 6.51 " " 4073 89828 178723 -23.0717 8.4766 6.51 " " 3344 71815 175902 -24.2225 18.5758 6.51 " 25 Sgr" 6965 171237 186995 -25.1864 2.5038 6.51 " " 733 15634 167837 -25.6047 18.3116 6.51 " " 6846 167979 186629 -26.4839 10.5143 6.51 " " 4125 91135 178917 -26.6450 20.6767 6.51 " " 7902 196815 189559 -28.0617 15.7702 6.51 " " 5856 140722 183772 -28.9014 18.1995 6.51 " " 6802 166469 186444 -29.5250 23.1796 6.51 " " 8823 218759 191703 -31.2850 13.9290 6.51 " " 5237 121397 204994 -35.5508 2.7927 6.51 " Eta1For" 835 17528 193916 -45.0914 6.1172 6.51 " " 2178 42168 217724 -51.5647 4.0044 6.51 " " 1250 25470 233354 -52.8064 6.4134 6.51 " " 2341 45509 234488 -62.5900 13.7863 6.51 " " 5171 119796 252448 -65.6133 15.6048 6.51 " " 5766 138498 253222 -71.7756 6.6827 6.51 " " 2505 49268 256326 -81.5417 5.2071 6.51 " " 1815 35798 258405 -4.8842 19.4171 6.52 " " 7366 182475 143373 14.3017 13.6355 6.52 " " 5129 118660 100644 14.5111 17.0529 6.52 " " 6339 154160 102554 14.9742 16.8680 6.52 " 49 Her" 6268 152308 102435 18.0514 20.8436 6.52 " " 7981 198552 106562 21.2678 19.0618 6.52 " " 7222 177392 86753 27.4153 10.3029 6.52 " " 4041 89239 81278 29.9911 15.6148 6.52 " " 5813 139389 64808 32.3817 23.9803 6.52 " " 9068 224544 73650 35.9364 5.1002 6.52 " " 1639 32608 57629 38.8814 17.7649 6.52 " " 6625 161815 66315 40.0842 18.0787 6.52 " " 6764 165567 47193 46.3150 18.7831 6.52 " " 7080 174177 47798 46.4242 6.2930 6.52 " 42 Aur" 2228 43244 40999 46.9022 9.5721 6.52 " " 3797 82582 42924 48.8653 0.3348 6.52 " " 76 1561 36272 50.2386 19.5989 6.52 " " 7465 185264 31804 55.3053 0.7709 6.52 " " 204 4321 21689 64.3908 19.3295 6.52 " " 7361 182308 18287 65.1033 2.0778 6.52 " " 598 12468 12105 69.5311 18.9813 6.52 " " 7224 177410 18103 80.4944 10.6005 6.52 " " 4121 91075 1735 -10.4094 5.6794 6.52 " " 1957 37808 150680 -11.7486 10.6199 6.52 " " 4160 91992 156105 -17.7631 6.2129 6.52 " " 2213 42927 151227 -18.8022 17.9319 6.52 " " 6679 163245 160909 -19.3328 17.3428 6.52 " " 6441 156846 160474 -29.9108 8.2128 6.52 " " 3230 68758 175390 -30.6339 2.6674 6.52 " " 786 16733 193846 -30.8022 1.2065 6.52 " " 358 7259 192977 -31.8708 23.6182 6.52 " " 8956 222004 214659 -35.7183 5.1374 6.52 " " 1680 33377 195581 -42.5044 6.8777 6.52 " " 2575 50785 218272 -43.0864 7.5537 6.52 " " 2908 60574 218792 -50.3619 5.9030 6.52 " " 2083 40105 234191 -52.1881 10.1020 6.52 " " 3978 87816 237690 -56.9467 10.0096 6.52 " " 3953 87030 237586 -71.9053 15.1191 6.52 " " 5598 133049 257238 4.3328 7.8164 6.53 " " 3033 63435 115966 4.4006 19.8896 6.53 " " 7580 188107 125182 9.2256 4.3469 6.53 " " 1361 27505 111759 9.5747 8.6348 6.53 " 37 Cnc" 3412 73316 116975 9.7125 16.1916 6.53 " " 6032 145589 121414 -1.5128 19.0885 6.53 " " 7231 177552 143003 -6.2917 16.0957 6.53 " " 5989 144362 140945 -9.8389 9.3808 6.53 " " 3724 81009 136799 15.3711 9.3543 6.53 " " 3711 80613 98517 18.7517 13.2100 6.53 " " 4987 114793 100461 26.4494 18.4447 6.53 " " 6924 170111 86060 28.0878 19.4062 6.53 " " 7374 182618 87165 28.3681 9.5551 6.53 " " 3792 82523 80900 34.8144 3.9675 6.53 " " 1223 24809 56847 35.3114 19.8122 6.53 " " 7550 187458 68893 37.6525 23.6674 6.53 " " 8973 222399 73422 52.9242 16.6039 6.53 " 17 Dra" 6186 150118 0 54.8642 14.3155 6.53 " " 5372 125632 29098 55.2844 7.3808 6.53 " 19 Lyn" 2783 57102 26311 59.7161 13.0446 6.53 " " 4936 113436 28613 61.9631 23.2741 6.53 " " 8854 219634 20531 83.4628 19.2522 6.53 " " 7425 184146 3209 -10.8847 10.1460 6.53 " " 3985 88024 155765 -14.4411 7.6275 6.53 " " 2932 61224 153172 -19.8972 13.8429 6.53 " " 5202 120544 158192 -22.1194 7.0054 6.53 " " 2628 52437 172725 -23.1767 9.1731 6.53 " " 3646 78955 177066 -24.7028 9.6094 6.53 " " 3828 83261 177738 -29.8489 5.5645 6.53 " " 1888 36965 170561 -33.0000 20.0922 6.53 " " 7668 190306 211798 -35.1978 20.2740 6.53 " " 7729 192486 211950 -35.7039 13.8153 6.53 " " 5189 120237 204867 -37.5764 2.3851 6.53 " " 700 14890 193679 -39.0594 8.4382 6.53 " " 3327 71487 199222 -55.0117 8.4576 6.53 " " 3349 71919 236001 -57.9256 19.9494 6.53 " " 7586 188161 246348 -58.9436 4.6718 6.53 " " 1504 30003 233622 -70.0456 17.3369 6.53 " " 6400 155875 253870 -72.7022 5.7967 6.53 " Lam Men" 2062 39810 256239 5.6942 10.3874 6.54 " " 4079 89995 118271 9.4867 4.3068 6.54 " " 1334 27236 111729 -3.9486 12.3027 6.54 " " 4678 106976 138704 -5.6481 5.6042 6.54 " " 1906 37150 132351 -9.2236 9.4541 6.54 " 29 Hya" 3744 81728 136861 10.3514 19.8710 6.54 " " 7572 187961 105355 10.4789 22.8256 6.54 " " 8681 216048 108204 11.7564 6.3479 6.54 " " 2276 44173 95563 14.0039 8.2061 6.54 " " 3214 68332 97647 20.9253 0.7986 6.54 " 61 Psc" 217 4568 74280 21.5358 7.4473 6.54 " " 2835 58551 79386 22.8878 7.5474 6.54 " " 2879 59878 79489 25.9550 23.9231 6.54 " " 9051 224128 91582 26.2267 12.4772 6.54 " " 4750 108642 82326 27.4556 19.2658 6.54 " " 7305 180553 87005 29.0294 13.1028 6.54 " " 4948 113865 82648 36.2992 21.1844 6.54 " " 8105 201819 71032 38.7081 23.0152 6.54 " " 8758 217543 72929 38.8964 7.5321 6.54 " " 2872 59507 60148 39.8958 2.6224 6.54 " " 760 16219 55715 43.0608 21.7713 6.54 " " 8329 207218 51277 46.4131 23.9796 6.54 " " 9070 224559 53540 46.4769 11.9182 6.54 " 65 UMa" 4560 103483 43945 46.9639 5.3442 6.54 " " 1736 34533 40251 50.2292 20.1199 6.54 " " 7702 191329 32296 51.0100 1.0797 6.54 " " 302 6300 21988 56.9189 5.8428 6.54 " 29 Cam" 1992 38618 25403 62.2292 13.1639 6.54 " " 4974 114504 15999 62.7617 1.1063 6.54 " " 309 6416 11571 63.2956 21.1580 6.54 " " 8109 201888 19223 77.0508 18.9659 6.54 " " 7247 178089 9296 79.5994 6.6713 6.54 " " 2346 45560 5911 -18.4633 18.2913 6.54 " " 6841 167771 161267 -18.5097 5.3217 6.54 " " 1754 34797 150336 -23.3536 12.2631 6.54 " " 4661 106612 180619 -25.2547 17.2038 6.54 " " 6386 155379 185138 -29.3961 6.2259 6.54 " " 2226 43179 171425 -30.1747 11.1318 6.54 " " 4328 96700 179558 -30.5775 10.0470 6.54 " " 3956 87199 200994 -30.5861 6.7507 6.54 " " 2497 49028 197163 -33.2206 14.3066 6.54 " " 5348 125150 205412 -35.8619 13.1151 6.54 " " 4947 113852 204132 -37.8878 7.7513 6.54 " " 3016 62991 198390 -38.5289 7.6994 6.54 " " 2986 62376 198315 -39.7747 9.3769 6.54 " " 3729 81134 200299 -50.0944 18.7831 6.54 " " 7037 173263 245702 -65.1525 15.8824 6.54 " " 5876 141413 253323 2.7250 7.5794 6.55 " " 2904 60489 115653 4.4975 6.6000 6.55 " " 2413 46885 114115 8.6700 6.1464 6.55 " " 2167 42035 113503 -1.3733 20.9189 6.55 " " 8006 199124 144941 -8.8783 7.3547 6.55 " " 2798 57517 134563 -9.4656 2.2579 6.55 " " 658 13936 129781 10.9764 18.8460 6.55 " " 7099 174569 104170 11.0236 11.5694 6.55 " " 4454 100518 99668 11.7058 10.9947 6.55 " " 4281 95216 99392 17.4131 1.7765 6.55 " " 515 10845 92622 17.7403 10.2711 6.55 " " 4028 88987 99032 20.0878 20.4892 6.55 " " 7833 195217 106156 23.7678 2.2862 6.55 " " 665 14067 75262 27.1964 17.0193 6.55 " " 6328 153897 84765 34.8553 5.4203 6.55 " " 1779 35295 57999 42.1089 5.5580 6.55 " " 1846 36404 40426 52.5172 22.7470 6.55 " " 8661 215518 34757 71.6558 9.2342 6.55 " " 3633 78633 6784 77.5994 23.8660 6.55 " " 9034 223731 10874 -12.6653 20.0907 6.55 " 65 Sgr" 7675 190454 163253 -25.5039 7.7275 6.55 " " 2992 62555 174395 -29.9019 3.7889 6.55 " " 1179 23856 194531 -31.0361 0.3868 6.55 " " 89 1909 192495 -33.2414 14.2718 6.55 " " 5337 124780 205371 -34.7578 4.4157 6.55 " " 1398 28143 194996 -38.0583 19.9615 6.55 " " 7605 188642 211686 -40.1475 8.6222 6.55 " " 3421 73524 199438 -42.5044 8.8577 6.55 " " 3530 75926 220581 -42.9214 5.8897 6.55 " " 2069 39901 217599 -45.4500 6.8327 6.55 " " 2546 50196 218236 -64.2819 2.6588 6.55 " " 798 16891 248616 -75.3506 20.6955 6.55 " Mu 2Oct" 7864 196067 257836 -75.8806 22.1785 6.55 " " 8420 209855 258003 0.6417 19.1192 6.56 " " 7245 178065 124282 1.6689 15.5846 6.56 " " 5791 138936 121071 2.5789 17.7432 6.56 " " 6610 161289 122691 -4.4933 5.5894 6.56 " " 1890 37017 132317 10.0597 20.5649 6.56 " " 7857 195922 125960 10.9111 11.5954 6.56 " " 4464 100740 99683 10.9769 0.3485 6.56 " " 81 1663 91858 13.5531 12.8040 6.56 " 28 Com" 4861 111308 100269 18.3772 12.5851 6.56 " 24 Com" 4791 109510 100159 21.8686 6.1976 6.56 " " 2190 42475 78092 23.1378 8.2283 6.56 " " 3224 68543 80024 24.2389 20.2279 6.56 " " 7723 192342 88377 28.5219 20.9062 6.56 " " 8007 199140 89265 29.2072 18.2456 6.56 " " 6831 167588 85856 34.2708 17.5336 6.56 " " 6538 159222 66118 35.7256 22.4955 6.56 " " 8569 213272 72399 44.5617 23.1367 6.56 " " 8806 218525 52717 47.4053 6.4642 6.56 " " 2314 45105 41109 48.7892 11.5195 6.56 " " 4436 100055 43793 50.0389 16.9351 6.56 " " 6306 153299 30161 52.1156 18.5365 6.56 " " 6974 171461 31032 64.5156 23.7058 6.56 " " 8989 222670 20791 77.9775 5.4905 6.56 " " 1745 34653 5535 80.2656 7.9381 6.56 " " 2997 62613 1254 -13.7561 5.3642 6.56 " " 1769 35104 150375 -16.3358 14.0872 6.56 " " 5284 122958 158331 -17.1417 5.2800 6.56 " " 1731 34447 150295 -20.2069 7.8292 6.56 " " 3048 63754 174617 -20.8439 8.4592 6.56 " " 3335 71581 175870 -23.7122 7.4446 6.56 " " 2850 58907 173743 -26.3531 21.3294 6.56 " " 8148 202940 190236 -31.6608 7.6813 6.56 " " 2974 62058 198286 -36.1647 19.1601 6.56 " " 7256 178299 210996 -46.9394 22.7788 6.56 " " 8662 215545 231290 -64.4356 2.9058 6.56 " " 880 18423 248681 -64.9506 9.6014 6.56 " " 3841 83523 250636 1.4883 7.0723 6.57 " " 2654 53205 114867 4.0119 5.3554 6.57 " " 1761 34959 112660 4.7006 6.6471 6.57 " " 2441 47431 114194 7.0531 6.2829 6.57 " " 2248 43526 113673 8.5792 15.5154 6.57 " " 5758 138290 121038 9.0292 6.5015 6.57 " " 2362 45827 113957 -0.5442 5.4253 6.57 " " 1800 35548 132086 -3.5614 20.9384 6.57 " " 8014 199280 144957 -4.0639 5.9096 6.57 " " 2058 39777 132635 12.4672 17.1794 6.57 " " 6385 155375 102632 18.7564 3.4509 6.57 " " 1036 21335 93436 20.4664 18.5721 6.57 " " 6975 171487 86203 28.7653 8.7778 6.57 " 48Iot Cnc" 3474 74738 80415 30.1953 19.9185 6.57 " " 7607 188651 69079 31.7806 23.0425 6.57 " " 8765 217754 72949 33.6000 3.7979 6.57 " " 1163 23625 56709 34.4139 19.7439 6.57 " " 7520 186702 68783 37.1325 20.3301 6.57 " " 7782 193621 69841 44.9919 23.7041 6.57 " " 8986 222641 53292 49.8561 19.2014 6.57 " " 7294 179958 48193 56.4333 22.4498 6.57 " " 8554 212986 34460 64.6344 20.0390 6.57 " 65 Dra" 7682 190713 18669 73.3469 3.5868 6.57 " " 1055 21610 4936 76.5467 13.5786 6.57 " " 5131 118686 7848 -10.5833 10.6048 6.57 " " 4155 91858 156092 -11.7925 16.9112 6.57 " " 6278 152585 160159 -16.7414 22.4428 6.57 " 53 Aqr" 8544 212697 165077 -19.1478 21.4999 6.57 " " 8222 204577 164433 -20.6706 10.2793 6.57 " " 4040 89169 178610 -22.0439 17.5885 6.57 " 52 Oph" 6545 159376 185526 -32.1167 0.4969 6.57 " " 116 2632 192567 -37.3953 5.1933 6.57 " " 1699 33872 195639 -37.5828 19.2027 6.57 " " 7273 178937 211037 -39.1608 15.6424 6.57 " " 5805 139233 206826 -40.0597 7.7759 6.57 " " 3025 63308 198424 -49.9928 7.7186 6.57 " " 3005 62756 218928 -52.2011 6.7572 6.57 " " 2513 49396 234693 -54.0900 6.8797 6.57 " " 2587 51043 234762 -83.2389 16.7649 6.57 " " 6138 148527 258748 -87.5664 17.2665 6.57 " " 6133 148451 258754 -88.8183 22.7579 6.57 " " 8294 206553 258931 3.5353 1.4482 6.58 " " 419 8803 109895 18.6803 6.2259 6.58 " " 2207 42784 95397 19.5900 8.5887 6.58 " 35 Cnc" 3387 72779 97928 19.6106 19.3135 6.58 " " 7326 181182 104711 33.7244 23.9914 6.58 " " 9074 224635 73656 33.7244 23.9914 6.58 " " 9075 224636 73656 37.4067 21.3897 6.58 " " 8189 203784 71276 38.7314 8.1893 6.58 " " 3193 67827 60625 39.6550 5.0064 6.58 " 6 Aur" 1602 31780 57560 40.5072 5.7637 6.58 " " 1974 38189 40584 45.6669 20.6564 6.58 " " 7912 197036 49898 46.1997 23.6329 6.58 " " 8964 222143 53210 49.3233 21.4154 6.58 " " 8206 204131 50817 52.5358 14.2547 6.58 " " 5345 125019 29059 74.3008 1.6229 6.58 " " 449 9612 4448 80.4486 15.4864 6.58 " " 5829 139777 2556 -27.4561 16.7381 6.58 " " 6216 150768 184591 -31.8178 19.3406 6.58 " " 7323 181109 211191 -33.7636 1.4787 6.58 " " 431 9065 193136 -36.6725 18.1562 6.58 " " 6772 165793 209779 -37.8103 7.4730 6.58 " " 2869 59466 198031 -38.1589 6.6658 6.58 " " 2465 48087 197064 -48.4586 6.0797 6.58 " " 2162 41824 217708 -58.4306 12.9061 6.58 " " 4895 112044 240362 -64.4894 9.9542 6.58 " " 3948 86634 250760 -76.2125 21.1466 6.58 " " 8052 200266 257887 1.4078 5.5660 6.59 " " 1871 36741 112901 1.5417 8.9689 6.59 " " 3573 76757 117311 1.6944 6.0381 6.59 " " 2127 40964 113392 5.5575 7.0319 6.59 " " 2633 52559 114801 6.5836 17.0082 6.59 " " 6317 153653 121995 -3.6633 13.0651 6.59 " 48 Vir" 4937 113459 139131 -4.0117 18.2194 6.59 " " 6813 166960 142159 -6.4097 8.4548 6.59 " " 3325 71433 135931 -9.0147 1.5510 6.59 " " 444 9484 129363 11.0194 6.4833 6.59 " " 2351 45638 95732 11.7625 5.9089 6.59 " " 2050 39662 94979 14.0583 6.2926 6.59 " " 2250 43583 95494 22.2108 11.7014 6.59 " " 4505 101688 81949 23.3264 5.6985 6.59 " " 1951 37752 77413 25.0464 18.8207 6.59 " " 7091 174369 86462 30.8925 18.5564 6.59 " " 6971 171406 67102 32.4144 7.0214 6.59 " " 2620 52100 59697 34.5661 15.0601 6.59 " " 5613 133485 64484 43.4708 17.6771 6.59 " " 6599 160950 46883 57.6583 21.9897 6.59 " " 8389 209124 33943 65.4361 18.5208 6.59 " " 6979 171653 17912 72.7989 13.2256 6.59 " " 5003 115227 7782 83.1911 23.9410 6.59 " " 9056 224309 3994 -10.3117 21.8933 6.59 " " 8355 208008 164717 -14.8697 16.9782 6.59 " " 6302 153229 160205 -19.5847 3.6896 6.59 " " 1128 23055 149114 -23.4497 13.6919 6.59 " " 5146 119086 181863 -25.2564 18.4894 6.59 " " 6929 170235 186873 -27.4742 7.2067 6.59 " " 2724 55595 173200 -32.5872 11.1190 6.59 " " 4324 96557 202100 -39.9914 7.6401 6.59 " " 2952 61623 198226 -41.8200 16.9054 6.59 " " 6265 152270 227390 -42.9169 4.1236 6.59 " " 1285 26262 216655 -45.8647 4.1428 6.59 " " 1291 26413 216667 -62.3144 5.4882 6.59 " " 1867 36689 249288 -62.4292 20.8608 6.59 " " 7960 198161 254884 -62.8394 23.8291 6.59 " " 9023 223444 255578 -70.7883 13.6668 6.59 " " 5125 118522 257074 13.9253 5.9343 6.60 " " 2067 39881 95004 24.7711 23.2661 6.60 " " 8845 219487 91133 27.6961 5.0772 6.60 " " 1632 32480 76941 31.0831 23.0118 6.60 " " 8753 217477 72924 33.3889 19.3177 6.60 " " 7335 181409 68125 40.3356 1.4631 6.60 " " 422 8837 37234 43.1917 20.5479 6.60 " " 7861 195986 49772 58.0272 19.4296 6.60 " " 7401 183339 31652 64.3372 2.3369 6.60 " " 668 14171 12226 69.9136 22.5508 6.60 " " 8595 213973 20150 85.6681 5.7302 6.60 " " 1714 34109 873 -11.1550 14.9704 6.60 " 17 Lib" 5578 132230 158935 -19.7853 6.3966 6.60 " " 2306 44953 151453 -21.3203 8.2817 6.60 " " 3255 69589 175497 -24.1603 23.6853 6.60 " " 8978 222485 192083 -30.2169 7.3984 6.60 " " 2824 58325 197944 -31.0839 7.2298 6.60 " " 2741 55958 197719 -32.0922 19.5041 6.60 " " 7399 183312 211315 -35.2772 7.6291 6.60 " " 2942 61409 198205 -39.7669 17.2410 6.60 " " 6392 155603 208569 -42.0997 14.5689 6.60 " " 5431 127716 225027 -48.7411 6.3350 6.60 " " 2290 44594 217861 -49.8786 18.9090 6.60 " " 7108 174730 229358 -50.6153 15.8810 6.60 " " 5890 141724 243078 -52.3097 7.3394 6.60 " " 2814 57853 235111 -81.5658 10.0688 6.60 " Mu 2Cha" 3997 88351 258561 1.5694 4.8988 6.61 " " 1565 31209 112191 -3.0314 15.0458 6.61 " " 5599 133112 140286 -4.0242 10.8215 6.61 " 40 Sex" 4229 93742 137808 -7.0439 19.4893 6.61 " " 7402 183344 143454 38.7622 19.5601 6.61 " " 7436 184603 68499 48.0822 1.2735 6.61 " " 369 7546 37067 -11.5683 21.4705 6.61 " " 8212 204363 164415 -19.9697 14.4249 6.61 " " 5397 126367 158558 -21.3039 16.2830 6.61 " " 6066 146416 184285 -22.1622 18.8474 6.61 " 30 Sgr" 7088 174309 187342 -22.2033 6.9541 6.61 " " 2603 51630 172631 -22.8517 7.3481 6.61 " " 2799 57573 173517 -25.4725 18.1484 6.61 " " 6773 165814 186350 -35.6608 1.1074 6.61 " " 323 6619 192925 -35.8878 7.5286 6.61 " " 2889 60168 198093 -39.4333 19.6655 6.61 " " 7464 185257 211451 -40.6525 5.7995 6.61 " " 2017 39040 217543 -45.4228 12.1841 6.61 " " 4636 105852 223266 -45.4569 8.0054 6.61 " " 3146 66190 219280 3.6878 13.3142 6.62 " " 5021 115709 119867 -2.5044 6.2123 6.62 " " 2210 42824 132965 25.1339 19.7776 6.62 " " 7533 186998 87706 26.6089 23.3662 6.62 " " 8888 220242 91208 32.3203 5.0769 6.62 " " 1627 32428 57614 40.3436 11.9541 6.62 " " 4572 103799 43963 44.4256 5.3340 6.62 " " 1733 34498 40242 -11.3142 9.3260 6.62 " " 3702 80447 155090 -24.8767 18.9724 6.62 " " 7155 175852 187517 -26.1325 8.4649 6.62 " " 3339 71688 175883 -26.4603 12.9417 6.62 " " 4912 112374 181244 -26.6578 7.1167 6.62 " " 2688 54224 172989 -34.7486 18.8214 6.62 " " 7070 173902 210600 -39.5400 6.7676 6.62 " " 2507 49319 197192 -45.9478 22.3789 6.62 " Pi 1Gru" 8521 212087 231105 -48.9789 22.7689 6.62 " " 8658 215456 231285 1.0058 18.2847 6.63 " " 6844 167858 123320 1.0803 6.2726 6.63 " " 2246 43461 113668 4.8181 7.0282 6.63 " " 2629 52479 114798 -1.4444 5.9938 6.63 " " 2109 40574 132723 -6.3617 20.3406 6.63 " " 7772 193429 144313 -9.0519 8.6838 6.63 " " 3437 73997 136176 13.0711 18.1301 6.63 " " 6776 165910 103406 17.9950 18.9344 6.63 " " 7147 175744 104271 23.2967 18.3021 6.63 " " 6854 168323 85906 38.6342 21.3797 6.63 " " 8186 203696 71266 39.8350 2.3270 6.63 " " 677 14272 55453 41.0250 14.4576 6.63 " " 5411 126943 45058 45.5025 21.1663 6.63 " " 8103 201733 50521 51.0750 20.9369 6.63 " " 8022 199578 33001 54.8942 11.2124 6.63 " " 4344 97302 27952 -29.7033 16.4110 6.63 " " 6105 147722 184368 -30.7342 18.8783 6.63 " " 7105 174632 210663 -38.8511 18.4880 6.63 " " 6921 170040 210213 -64.4822 5.9033 6.63 " " 2104 40455 249391 -74.6919 13.4551 6.63 " Iot2Mus" 5051 116579 257047 -75.3467 21.3045 6.63 " " 8111 201906 257904 4.2836 6.2631 6.64 " " 2232 43317 113653 14.9211 19.3856 6.64 " " 7357 182239 104779 17.2314 8.9230 6.64 " " 3541 76221 98230 23.7175 19.6777 6.64 " " 7485 185915 87551 31.6292 18.8289 6.64 " " 7098 174567 67438 -43.0019 21.0368 6.64 " " 8042 200011 230492 -50.0389 1.6947 6.64 " " 501 10553 232497 -51.4469 14.9504 6.64 " " 5560 131705 242128 -71.7028 6.2516 6.64 " " 2283 44447 256285 -73.2244 0.1774 6.64 " " 32 661 255642 0.3519 17.2151 6.65 " " 6394 155646 122182 6.6806 7.2883 6.65 " " 2760 56446 115204 -2.5942 5.6464 6.65 " " 1932 37479 132408 11.7922 6.5276 6.65 " " 2374 46075 95783 25.8992 12.4791 6.65 " " 4751 108651 82328 34.7725 13.8513 6.65 " " 5214 120818 63779 34.9525 23.5402 6.65 " " 8936 221491 73325 40.6842 19.0053 6.65 " " 7201 176844 47993 44.6444 15.0518 6.65 " " 5612 133484 45348 52.5653 10.8752 6.65 " " 4241 94083 27809 82.1153 6.7417 6.65 " " 2350 45618 1043 -24.0442 7.1470 6.65 " " 2695 54669 173064 -26.1167 7.5747 6.65 " " 2912 60629 174028 -30.3225 8.1519 6.65 " " 3196 67921 198854 -30.8275 3.2698 6.65 " " 990 20423 194197 -35.0078 9.4607 6.65 " " 3756 81919 200392 -37.3397 7.5118 6.65 " " 2882 59967 198069 -39.0931 16.1429 6.65 " " 6000 144667 207368 -44.2231 17.3235 6.65 " " 6427 156398 227821 -45.4517 17.0090 6.65 " " 6303 153258 227547 -47.6747 6.6804 6.65 " " 2476 48403 218124 -52.6922 22.6523 6.65 " " 8611 214441 247531 1.5011 6.4218 6.66 " " 2312 45050 113855 2.2897 10.3506 6.66 " 23 Sex" 4064 89688 118248 3.6161 5.0094 6.66 " " 1610 32040 112305 -1.1133 18.6386 6.66 " " 7000 172103 142460 11.9847 11.3058 6.66 " " 4378 98280 99544 16.8242 20.9974 6.66 " " 8037 199941 106738 33.8583 16.2447 6.66 " 17Sig CrB" 6064 146362 0 35.4561 20.7062 6.66 " " 7927 197419 70406 42.4103 20.8907 6.66 " " 8004 199099 50183 46.0681 23.1217 6.66 " " 8800 218407 52707 62.4881 22.0109 6.66 " " 8399 209339 19792 64.7356 13.4513 6.66 " " 5074 117200 16078 71.0606 10.2974 6.66 " " 4021 88849 7099 73.7639 5.0703 6.66 " " 1587 31563 5403 76.4881 22.3057 6.66 " " 8525 212150 10312 -11.1736 6.1144 6.66 " " 2161 41814 151126 -30.5572 17.8535 6.66 " " 6645 162220 209357 -34.9267 5.2631 6.66 " " 1730 34435 195694 0.5147 5.1948 6.67 " " 1690 33647 112505 -4.6872 6.3896 6.67 " " 2295 44756 133199 -7.9711 8.9249 6.67 " 17 Hya" 3553 76370 136409 12.8447 11.2661 6.67 " " 4366 97937 99527 27.5806 0.5429 6.67 " " 133 2924 74083 36.5869 9.4062 6.67 " " 3727 81039 61456 48.1647 19.5777 6.67 " " 7453 184977 48606 -15.2619 10.7939 6.67 " " 4218 93526 156235 -20.9503 8.4815 6.67 " " 3345 71833 175912 -25.7897 15.0966 6.67 " " 5614 133529 183163 -29.7883 6.2659 6.67 " " 2252 43636 171482 -1.3906 13.2738 6.68 " " 5005 115308 139254 -4.7953 23.0659 6.68 " " 8772 217877 146482 -7.1950 13.5502 6.68 " " 5101 117833 139403 11.1500 19.6022 6.68 " " 7445 184884 105032 19.2858 15.2121 6.68 " " 5659 135101 101437 22.4547 21.1756 6.68 " " 8101 201671 89505 31.0222 19.3002 6.68 " " 7324 181119 68095 39.3225 17.7662 6.68 " " 6626 161832 66317 48.3942 17.8342 6.68 " 88 Her" 6664 162732 46997 -19.1250 18.5315 6.68 " " 6947 170764 161571 -36.1528 7.5238 6.68 " " 2885 60098 198086 -36.5344 11.2953 6.68 " " 4376 98233 202291 4.0653 18.5014 6.69 " " 6941 170580 123571 20.8336 19.0229 6.69 " " 7200 176819 86704 32.5314 23.3965 6.69 " " 8899 220460 73223 35.4142 17.0584 6.69 " 61 Her" 6346 154356 65761 38.5486 0.8815 6.69 " " 246 5066 54225 51.7878 14.2244 6.69 " 17Kap1Boo" 5328 124674 29045 -19.6383 5.8993 6.69 " " 2060 39789 150925 -33.9617 0.6661 6.69 " " 170 3735 192663 -36.7211 8.5082 6.69 " " 3364 72268 199310 -37.0608 19.0176 6.69 " " 7169 176269 210815 3.3847 9.9953 6.70 " 12 Sex" 3945 86611 118041 -5.3878 5.5881 6.70 " 41The1Ori" 1896 37023 0 -8.7961 4.7264 6.70 " 55 Eri" 1506 30021 131443 18.8925 16.4299 6.70 " " 6119 148206 102160 23.3944 21.5409 6.70 " " 8240 205087 89786 40.7031 20.9062 6.70 " " 8009 199218 50209 43.4947 0.5408 6.70 " " 128 2888 36453 44.3069 2.2926 6.70 " " 663 14028 0 45.2292 0.0861 6.70 " " 1 3 36042 -14.5511 19.4402 6.70 " " 7379 182678 162615 -25.0219 1.6472 6.70 " " 474 10161 167199 -25.3167 10.0615 6.70 " " 3962 87318 178357 -27.3325 8.4910 6.70 " " 3353 71997 175939 -37.3742 8.3035 6.70 " " 3267 70003 199059 -38.5258 5.8799 6.70 " " 2055 39752 196274 -39.6142 9.6446 6.70 " " 3844 83610 200590 0.8408 6.4496 6.71 " " 2327 45357 113896 20.2992 5.8886 6.71 " " 2038 39417 77680 29.7072 6.4146 6.71 " " 2297 44766 78333 42.1036 20.2393 6.71 " " 7737 192659 49345 61.0383 1.7008 6.71 " " 481 10260 11920 -25.5286 16.7809 6.71 " 25 Sco" 6225 151179 184630 -38.2219 22.7964 6.71 " " 8671 215724 214087 -44.3683 4.2088 6.71 " " 1316 26820 216694 -81.5561 10.9869 6.71 " " 4304 95788 258599 4.5956 6.3963 6.72 " " 2299 44770 113811 -7.4697 20.0670 6.72 " " 7661 190172 144038 25.0258 19.0264 6.72 " " 7206 176939 86714 39.9911 1.0768 6.72 " " 305 6314 54398 41.1128 23.4097 6.72 " " 8902 220575 52987 56.5044 7.9408 6.72 " " 3077 64347 26579 -18.6792 7.6520 6.72 " " 2947 61554 153195 -25.7278 4.9251 6.72 " " 1583 31517 169889 -43.9800 4.8094 6.72 " " 1548 30788 217004 -60.0511 7.8319 6.72 " " 3076 64320 235553 3.3306 19.0696 6.73 " " 7219 177332 124219 -5.3872 5.5877 6.73 " 41The1Ori" 1893 37020 0 16.8464 19.2096 6.73 " " 7285 179588 104602 31.7447 1.2900 6.73 " " 374 7724 54580 37.6933 0.2140 6.73 " " 38 829 53725 -29.2153 8.4474 6.73 " " 3331 71523 175851 -51.2119 9.1208 6.73 " " 3631 78599 236618 -70.7514 18.2400 6.73 " " 6774 165861 257575 -77.0506 22.8280 6.73 " " 8664 215631 258069 5.0847 18.4191 6.74 " " 6900 169578 123453 34.6006 19.1512 6.74 " " 7272 178911 67879 52.0697 15.6011 6.74 " " 5817 139478 29589 52.3522 3.0148 6.74 " " 891 18538 23765 57.1656 0.1749 6.74 " " 28 584 21162 60.4453 23.0566 6.74 " " 8777 217943 20393 -18.5867 20.4979 6.74 " 12Omi Cap" 7829 195093 163625 -22.7183 18.0505 6.74 " " 6727 164637 186169 -25.5044 9.0524 6.74 " " 3607 77665 176881 10.1408 18.9882 6.75 " " 7173 176304 104313 49.8542 19.2013 6.75 " " 7293 179957 48192 -10.7253 6.2931 6.75 " 6 Mon" 2255 43760 151318 -19.1422 18.8265 6.75 " " 7077 174115 161871 -30.1167 5.4852 6.75 " " 1838 36255 195898 -58.8711 5.5840 6.75 " " 1930 37462 234037 -60.4008 12.8367 6.75 " " 4868 111463 252047 -65.7644 3.5735 6.75 " " 1104 22634 248842 -4.5375 7.4343 6.76 " " 2838 58580 134658 -5.3586 18.0462 6.76 " " 6732 164716 142045 39.9633 9.5896 6.76 " " 3811 82780 42931 49.4386 9.5520 6.76 " " 3778 82380 42914 61.4647 11.9724 6.76 " " 4575 103953 15673 78.2433 22.3948 6.76 " " 8550 212937 10351 -27.9458 7.6787 6.76 " " 2972 61987 174273 -39.9058 7.5663 6.76 " " 2917 60686 198137 -82.8992 4.3808 6.76 " " 1485 29598 258379 57.3103 17.6767 6.77 " " 6605 161162 30515 -10.6053 21.2380 6.77 " " 8118 202149 164240 -22.6828 2.4987 6.77 " " 730 15588 167832 -28.7278 11.1107 6.77 " " 4320 96441 179542 -62.5869 2.5593 6.77 " " 762 16226 248595 -78.7806 0.2803 6.77 " " 64 1324 255652 41.6944 1.9657 6.78 " " 562 11905 37653 -40.7364 7.9401 6.78 " " 3107 65315 219169 10.5217 4.4953 6.79 " " 1420 28475 93968 -40.9472 11.9723 6.79 " " 4577 103974 223139 -43.6117 7.0663 6.79 " " 2668 53706 218423 -7.9075 18.8389 6.80 " " 7089 174325 142674 25.2553 3.0908 6.80 " 52 Ari" 927 19134 75723 50.5872 13.4699 6.80 " " 5079 117281 28766 -24.2842 17.3001 6.80 " 39Omi Oph" 6425 156350 185237 -49.6189 23.2208 6.80 " " 8828 219023 231493 -8.7936 4.7263 6.82 " 55 Eri" 1505 30020 131442 29.2647 19.7469 6.82 " " 7518 186688 87659 48.7131 6.1935 6.82 " 41 Aur" 2175 42126 40924 -31.7606 9.3456 6.82 " " 3715 80773 200258 -37.3367 5.3942 6.82 " " 1797 35528 195809 -39.5711 9.7377 6.82 " " 3874 84447 200681 9.8144 8.5318 6.83 " " 3361 72208 116863 22.0317 3.8602 6.83 " " 1193 24154 76275 -31.8842 23.9213 6.83 " " 9050 224112 214861 44.1969 13.5873 6.84 " " 5116 118295 44675 44.7111 1.0009 6.84 " " 282 5788 36832 -18.6194 18.3120 6.84 " " 6848 168021 161304 -37.2908 7.4131 6.84 " " 2843 58635 197975 -53.4389 1.6467 6.84 " " 479 10241 232483 -0.2844 5.5335 6.85 " 34Del Ori" 1851 36485 132221 -46.2872 2.7546 6.85 " " 822 17325 216036 -73.1372 0.6447 6.85 " " 169 3719 255690 8.4450 14.3896 6.86 " " 5385 126128 0 38.7675 14.3155 6.86 " " 5369 125538 64064 -34.0050 4.7638 6.86 " " 1524 30397 195275 -36.4253 3.8438 6.86 " " 1200 24305 194570 -58.4553 11.1819 6.88 " " 4342 97271 238839 21.2731 21.8717 6.89 " " 8350 207932 90059 24.7108 7.2407 6.89 " " 2722 55579 79191 -14.6861 7.7580 6.89 " 2 Pup" 3009 62863 153362 -38.8642 7.7186 6.89 " " 2995 62595 198342 -68.3942 23.7898 6.89 " " 9007 223148 255567 -5.6850 19.0734 6.90 " " 7220 177336 142985 -12.4606 2.7989 6.90 " " 832 17491 148612 -43.7092 0.8645 6.90 " " 245 5042 215270 -7.9703 8.9249 6.91 " 17 Hya" 3552 76369 136408 -23.9283 6.9036 6.91 " " 2583 50896 172546 36.1486 6.2608 6.92 " " 2217 43017 58905 47.7369 20.2011 6.92 " " 7721 192276 49314 4.2072 16.6764 6.93 " 36 Her" 6194 150379 121774 6.1997 4.2572 6.93 " " 1321 26913 111695 -56.8878 14.5425 6.93 " " 5421 127297 241777 20.6950 5.7609 6.95 " " 1977 38307 77516 -24.1956 6.0960 6.95 " " 2156 41698 171222 -37.2900 7.4131 6.97 " " 2842 58634 197974 82.8697 21.9702 6.98 " " 8423 209942 3673 -35.8256 5.2296 6.98 " " 1715 34167 195669 -3.9544 12.3025 6.99 " " 4677 106975 138703 62.3300 4.1309 6.99 " " 1260 25638 13031 25.2553 3.0908 7.00 " 52 Ari" 928 19135 75723 27.7108 0.8313 7.00 " 65 Psc" 230 4757 74295 -24.4894 15.5525 7.00 " " 5765 138488 183565 -31.8914 9.5126 7.00 " Zet1Ant" 3780 82383 200444 -20.1583 4.0602 7.01 " " 1259 25661 169078 24.5342 8.4444 7.02 " 24 Cnc" 3312 71152 80184 3.6153 5.0091 7.03 " " 1609 32039 112304 46.4697 11.9198 7.03 " 65 UMa" 4561 103498 43946 -38.1694 15.4185 7.03 " " 5722 137015 206607 12.0039 18.0954 7.04 " " 6758 165475 103373 64.7194 13.4530 7.04 " " 5075 117201 16079 -27.3339 6.8350 7.04 " " 2537 50012 172403 -30.2533 17.9849 7.04 " " 6694 163756 209553 -50.3592 6.3130 7.04 " " 2281 44362 234442 -17.4622 21.3044 7.05 " 31 Cap" 8139 202723 164289 -39.1053 16.1428 7.05 " " 5999 144668 207367 -81.9211 10.5308 7.07 " " 4161 92029 258581 6.9883 12.6417 7.08 " " 4808 109914 119509 24.6483 2.6160 7.09 " 30 Ari" 764 16232 75470 27.7103 0.8314 7.10 " 65 Psc" 231 4758 74296 -14.6761 0.0354 7.10 " " 9090 224960 166005 -29.9042 22.0548 7.10 " " 8398 209335 213502 11.2606 20.5203 7.11 " " 7840 195483 106196 28.2908 14.4759 7.12 " " 5415 127067 83374 11.7264 8.2761 7.13 " " 3248 69243 97694 27.0547 12.3448 7.13 " " 4698 107398 82254 -31.8469 7.4810 7.13 " " 2871 59500 198039 20.3328 19.6105 7.14 " " 7458 185059 87447 -74.2756 7.5894 7.16 " " 2979 62153 256428 -83.3164 18.8661 7.16 " " 6964 171161 258810 54.4058 5.1061 7.24 " " 1630 32445 25007 4.9094 1.0976 7.25 " 77 Psc" 314 6480 109667 6.6225 8.5976 7.25 " " 3396 72946 116931 -39.0603 8.4384 7.25 " " 3328 71488 199224 -74.2756 7.5894 7.26 " " 2980 62154 0 41.2256 18.9040 7.30 " " 7138 175576 47902 -5.8233 21.0679 7.31 " 12 Aqr" 8058 200496 145064 -72.8978 0.0752 7.31 " " 9106 225233 255629 68.4903 21.1589 7.33 " " 8113 202012 19229 38.5772 0.4006 7.39 " " 90 1967 53860 -45.2794 15.1922 7.39 " " 5643 134443 225516 39.5428 13.8159 7.40 " " 5199 120499 63763 -64.6894 23.5869 7.40 " " 8945 221740 255520 49.6911 17.2802 7.48 " " 6437 156753 46605 28.2892 14.4754 7.62 " " 5414 127043 83373 22.7036 7.1226 7.68 " " 2671 53791 79070 -14.8058 4.9935 7.71 " " 1607 31996 150058 24.5353 8.4445 7.81 " 24 Cnc" 3313 71153 80185 71.7439 1.2700 7.83 " " 365 7389 4358 -5.3853 5.5878 7.96 " 41The1Ori" 1894 37021 0 xplanet-1.3.0/xplanet/origin/0000755000175000017500000000000011731372543013137 500000000000000xplanet-1.3.0/xplanet/origin/cassini0000644000175000017500000004604610411356762014444 0000000000000020040630.210000 6.010 -11.477 261.561 9.715 20040630.210200 5.983 -11.436 262.557 9.724 20040630.210400 5.955 -11.396 263.552 9.732 20040630.210600 5.928 -11.355 264.545 9.741 20040630.210800 5.901 -11.314 265.538 9.750 20040630.211000 5.873 -11.271 266.529 9.759 20040630.211200 5.845 -11.229 267.519 9.768 20040630.211400 5.818 -11.186 268.508 9.777 20040630.211600 5.790 -11.142 269.495 9.786 20040630.211800 5.763 -11.099 270.481 9.796 20040630.212000 5.735 -11.055 271.466 9.805 20040630.212200 5.707 -11.010 272.449 9.815 20040630.212400 5.679 -10.964 273.432 9.824 20040630.212600 5.652 -10.919 274.412 9.834 20040630.212800 5.624 -10.872 275.392 9.844 20040630.213000 5.596 -10.826 276.369 9.854 20040630.213200 5.568 -10.778 277.346 9.864 20040630.213400 5.540 -10.730 278.321 9.874 20040630.213600 5.512 -10.681 279.294 9.884 20040630.213800 5.484 -10.631 280.266 9.894 20040630.214000 5.456 -10.582 281.237 9.905 20040630.214200 5.428 -10.532 282.205 9.915 20040630.214400 5.400 -10.481 283.172 9.926 20040630.214600 5.371 -10.430 284.138 9.936 20040630.214800 5.343 -10.377 285.102 9.947 20040630.215000 5.315 -10.324 286.064 9.958 20040630.215200 5.287 -10.270 287.025 9.969 20040630.215400 5.258 -10.216 287.983 9.980 20040630.215600 5.230 -10.161 288.940 9.992 20040630.215800 5.201 -10.106 289.895 10.003 20040630.220000 5.173 -10.049 290.849 10.015 20040630.220200 5.144 -9.992 291.800 10.026 20040630.220400 5.116 -9.935 292.749 10.038 20040630.220600 5.087 -9.876 293.697 10.050 20040630.220800 5.058 -9.817 294.643 10.062 20040630.221000 5.030 -9.757 295.586 10.074 20040630.221200 5.001 -9.696 296.528 10.086 20040630.221400 4.972 -9.634 297.467 10.099 20040630.221600 4.943 -9.572 298.404 10.111 20040630.221800 4.914 -9.509 299.339 10.124 20040630.222000 4.885 -9.444 300.272 10.137 20040630.222200 4.856 -9.380 301.203 10.150 20040630.222400 4.827 -9.313 302.131 10.163 20040630.222600 4.798 -9.246 303.057 10.177 20040630.222800 4.769 -9.179 303.981 10.190 20040630.223000 4.740 -9.109 304.902 10.204 20040630.223200 4.711 -9.040 305.820 10.218 20040630.223400 4.681 -8.969 306.736 10.232 20040630.223600 4.652 -8.897 307.650 10.246 20040630.223800 4.623 -8.824 308.561 10.260 20040630.224000 4.593 -8.751 309.469 10.275 20040630.224200 4.564 -8.675 310.374 10.289 20040630.224400 4.534 -8.600 311.277 10.304 20040630.224600 4.505 -8.521 312.177 10.319 20040630.224800 4.475 -8.443 313.073 10.335 20040630.225000 4.445 -8.364 313.967 10.350 20040630.225200 4.416 -8.284 314.858 10.366 20040630.225400 4.386 -8.201 315.745 10.382 20040630.225600 4.356 -8.118 316.630 10.398 20040630.225800 4.326 -8.033 317.511 10.414 20040630.230000 4.296 -7.947 318.389 10.431 20040630.230200 4.266 -7.860 319.263 10.447 20040630.230400 4.236 -7.771 320.134 10.465 20040630.230600 4.206 -7.680 321.001 10.482 20040630.230800 4.176 -7.589 321.865 10.499 20040630.231000 4.146 -7.496 322.725 10.517 20040630.231200 4.116 -7.401 323.581 10.535 20040630.231400 4.086 -7.304 324.433 10.553 20040630.231600 4.055 -7.206 325.282 10.572 20040630.231800 4.025 -7.107 326.126 10.591 20040630.232000 3.995 -7.006 326.966 10.610 20040630.232200 3.964 -6.902 327.801 10.629 20040630.232400 3.934 -6.798 328.632 10.649 20040630.232600 3.903 -6.690 329.459 10.669 20040630.232800 3.873 -6.583 330.281 10.689 20040630.233000 3.842 -6.471 331.098 10.710 20040630.233200 3.812 -6.359 331.910 10.730 20040630.233400 3.781 -6.245 332.718 10.752 20040630.233600 3.750 -6.128 333.520 10.773 20040630.233800 3.719 -6.008 334.317 10.795 20040630.234000 3.688 -5.888 335.109 10.818 20040630.234200 3.658 -5.765 335.895 10.840 20040630.234400 3.627 -5.639 336.675 10.863 20040630.234600 3.596 -5.511 337.449 10.887 20040630.234800 3.565 -5.381 338.218 10.911 20040630.235000 3.534 -5.248 338.980 10.935 20040630.235200 3.502 -5.112 339.736 10.959 20040630.235400 3.471 -4.974 340.485 10.985 20040630.235600 3.440 -4.833 341.228 11.010 20040630.235800 3.409 -4.689 341.964 11.036 20040701.000000 3.378 -4.543 342.692 11.063 20040701.000200 3.346 -4.393 343.413 11.090 20040701.000400 3.315 -4.240 344.127 11.117 20040701.000600 3.283 -4.084 344.833 11.145 20040701.000800 3.252 -3.925 345.531 11.174 20040701.001000 3.221 -3.763 346.221 11.203 20040701.001200 3.189 -3.596 346.902 11.233 20040701.001400 3.157 -3.426 347.574 11.263 20040701.001600 3.126 -3.253 348.237 11.294 20040701.001800 3.094 -3.076 348.891 11.325 20040701.002000 3.063 -2.896 349.536 11.357 20040701.002200 3.031 -2.710 350.170 11.390 20040701.002400 2.999 -2.521 350.794 11.423 20040701.002600 2.968 -2.329 351.407 11.458 20040701.002800 2.936 -2.131 352.010 11.493 20040701.003000 2.904 -1.928 352.601 11.528 20040701.003200 2.872 -1.722 353.180 11.565 20040701.003400 2.841 -1.509 353.747 11.602 20040701.003600 2.809 -1.293 354.302 11.640 20040701.003800 2.777 -1.070 354.844 11.679 20040701.004000 2.745 -0.844 355.372 11.719 20040701.004200 2.714 -0.612 355.886 11.760 20040701.004400 2.682 -0.374 356.386 11.801 20040701.004600 2.650 -0.130 356.870 11.844 20040701.004800 2.618 0.120 357.339 11.888 20040701.005000 2.587 0.376 357.792 11.933 20040701.005200 2.555 0.638 358.229 11.979 20040701.005400 2.523 0.907 358.648 12.026 20040701.005600 2.492 1.182 359.048 12.074 20040701.005800 2.460 1.464 359.430 12.124 20040701.010000 2.428 1.754 359.793 12.175 20040701.010200 2.397 2.050 0.135 12.227 20040701.010400 2.366 2.353 0.457 12.281 20040701.010600 2.334 2.665 0.756 12.336 20040701.010800 2.303 2.984 1.033 12.393 20040701.011000 2.272 3.311 1.286 12.451 20040701.011200 2.241 3.647 1.514 12.511 20040701.011400 2.210 3.991 1.718 12.572 20040701.011600 2.179 4.343 1.895 12.635 20040701.011800 2.149 4.703 2.044 12.700 20040701.012000 2.118 5.072 2.166 12.767 20040701.012200 2.088 5.451 2.258 12.836 20040701.012400 2.058 5.838 2.319 12.907 20040701.012600 2.028 6.235 2.348 12.980 20040701.012800 1.998 6.640 2.344 13.056 20040701.013000 1.969 7.055 2.305 13.133 20040701.013200 1.940 7.478 2.230 13.214 20040701.013400 1.911 7.910 2.118 13.296 20040701.013600 1.882 8.352 1.966 13.381 20040701.013800 1.854 8.802 1.774 13.469 20040701.014000 1.826 9.260 1.540 13.560 20040701.014200 1.799 9.727 1.263 13.653 20040701.014400 1.772 10.201 0.940 13.750 20040701.014600 1.745 10.682 0.570 13.850 20040701.014800 1.719 11.170 0.151 13.953 20040701.015000 1.693 11.664 359.683 14.059 20040701.015200 1.668 12.163 359.162 14.169 20040701.015400 1.644 12.665 358.589 14.282 20040701.015600 1.620 13.171 357.960 14.399 20040701.015800 1.597 13.678 357.276 14.520 20040701.020000 1.574 14.185 356.534 14.644 20040701.020200 1.552 14.690 355.733 14.773 20040701.020400 1.531 15.192 354.874 14.905 20040701.020600 1.511 15.687 353.954 15.042 20040701.020800 1.491 16.176 352.974 15.182 20040701.021000 1.473 16.653 351.934 15.326 20040701.021200 1.455 17.119 350.833 15.475 20040701.021400 1.439 17.568 349.674 15.627 20040701.021600 1.423 17.999 348.456 15.783 20040701.021800 1.409 18.410 347.182 15.943 20040701.022000 1.396 18.796 345.853 16.107 20040701.022200 1.384 19.155 344.474 16.274 20040701.022400 1.373 19.483 343.047 16.444 20040701.022600 1.363 19.779 341.575 16.617 20040701.022800 1.355 20.040 340.065 16.793 20040701.023000 1.348 20.263 338.520 16.971 20040701.023200 1.343 20.447 336.947 17.151 20040701.023400 1.338 20.590 335.351 17.333 20040701.023600 1.335 20.689 333.739 17.515 20040701.023800 1.334 20.744 332.117 17.698 20040701.024000 1.334 20.754 330.493 17.882 20040701.024200 1.335 20.722 328.872 18.065 20040701.024400 1.338 20.645 327.263 18.247 20040701.024600 1.342 20.526 325.671 18.428 20040701.024800 1.347 20.365 324.102 18.608 20040701.025000 1.354 20.163 322.562 18.786 20040701.025200 1.362 19.925 321.056 18.961 20040701.025400 1.371 19.649 319.589 19.134 20040701.025600 1.381 19.342 318.166 19.304 20040701.025800 1.393 19.003 316.790 19.471 20040701.030000 1.406 18.637 315.464 19.634 20040701.030200 1.420 18.246 314.193 19.794 20040701.030400 1.434 17.832 312.977 19.950 20040701.030600 1.450 17.400 311.819 20.103 20040701.030800 1.467 16.951 310.719 20.251 20040701.031000 1.485 16.490 309.679 20.395 20040701.031200 1.504 16.017 308.699 20.536 20040701.031400 1.524 15.535 307.778 20.672 20040701.031600 1.544 15.046 306.917 20.805 20040701.031800 1.565 14.552 306.115 20.933 20040701.032000 1.587 14.057 305.371 21.058 20040701.032200 1.609 13.560 304.684 21.179 20040701.032400 1.632 13.064 304.053 21.296 20040701.032600 1.656 12.570 303.475 21.410 20040701.032800 1.680 12.078 302.951 21.520 20040701.033000 1.705 11.591 302.478 21.626 20040701.033200 1.730 11.110 302.055 21.729 20040701.033400 1.756 10.633 301.680 21.829 20040701.033600 1.782 10.163 301.352 21.926 20040701.033800 1.808 9.700 301.069 22.020 20040701.034000 1.835 9.244 300.829 22.111 20040701.034200 1.862 8.797 300.631 22.200 20040701.034400 1.890 8.358 300.473 22.285 20040701.034600 1.917 7.926 300.354 22.368 20040701.034800 1.945 7.503 300.273 22.449 20040701.035000 1.973 7.090 300.227 22.527 20040701.035200 2.002 6.684 300.216 22.603 20040701.035400 2.030 6.288 300.238 22.676 20040701.035600 2.059 5.899 300.292 22.748 20040701.035800 2.088 5.520 300.376 22.817 20040701.040000 2.117 5.148 300.490 22.885 20040701.040200 2.146 4.786 300.632 22.950 20040701.040400 2.176 4.431 300.801 23.014 20040701.040600 2.205 4.084 300.997 23.076 20040701.040800 2.235 3.745 301.217 23.136 20040701.041000 2.264 3.415 301.462 23.195 20040701.041200 2.294 3.092 301.730 23.252 20040701.041400 2.324 2.778 302.020 23.308 20040701.041600 2.354 2.470 302.332 23.362 20040701.041800 2.384 2.169 302.665 23.415 20040701.042000 2.414 1.875 303.017 23.467 20040701.042200 2.444 1.588 303.388 23.517 20040701.042400 2.474 1.308 303.778 23.566 20040701.042600 2.504 1.035 304.186 23.614 20040701.042800 2.534 0.767 304.611 23.661 20040701.043000 2.564 0.506 305.053 23.707 20040701.043200 2.594 0.251 305.510 23.751 20040701.043400 2.625 0.001 305.983 23.795 20040701.043600 2.655 -0.242 306.471 23.837 20040701.043800 2.685 -0.481 306.973 23.879 20040701.044000 2.715 -0.713 307.489 23.919 20040701.044200 2.745 -0.941 308.018 23.959 20040701.044400 2.775 -1.164 308.560 23.998 20040701.044600 2.805 -1.381 309.115 0.036 20040701.044800 2.835 -1.594 309.681 0.074 20040701.045000 2.865 -1.803 310.260 0.110 20040701.045200 2.896 -2.007 310.849 0.146 20040701.045400 2.926 -2.206 311.450 0.181 20040701.045600 2.956 -2.401 312.061 0.215 20040701.045800 2.986 -2.591 312.683 0.249 20040701.050000 3.015 -2.779 313.314 0.282 20040701.050200 3.045 -2.962 313.955 0.314 20040701.050400 3.075 -3.141 314.605 0.346 20040701.050600 3.105 -3.317 315.265 0.377 20040701.050800 3.135 -3.489 315.933 0.407 20040701.051000 3.165 -3.658 316.609 0.437 20040701.051200 3.194 -3.823 317.294 0.467 20040701.051400 3.224 -3.985 317.987 0.496 20040701.051600 3.254 -4.144 318.688 0.524 20040701.051800 3.283 -4.299 319.396 0.552 20040701.052000 3.313 -4.452 320.112 0.579 20040701.052200 3.342 -4.602 320.835 0.606 20040701.052400 3.372 -4.749 321.564 0.633 20040701.052600 3.401 -4.892 322.301 0.658 20040701.052800 3.430 -5.033 323.044 0.684 20040701.053000 3.460 -5.173 323.793 0.709 20040701.053200 3.489 -5.309 324.549 0.734 20040701.053400 3.518 -5.443 325.311 0.758 20040701.053600 3.547 -5.574 326.078 0.782 20040701.053800 3.576 -5.702 326.851 0.806 20040701.054000 3.605 -5.828 327.630 0.829 20040701.054200 3.634 -5.953 328.415 0.851 20040701.054400 3.663 -6.076 329.204 0.874 20040701.054600 3.692 -6.196 329.999 0.896 20040701.054800 3.721 -6.313 330.799 0.918 20040701.055000 3.750 -6.430 331.604 0.939 20040701.055200 3.779 -6.543 332.413 0.960 20040701.055400 3.807 -6.655 333.228 0.981 20040701.055600 3.836 -6.765 334.046 1.001 20040701.055800 3.865 -6.874 334.870 1.022 20040701.060000 3.893 -6.980 335.697 1.042 20040701.060200 3.922 -7.084 336.529 1.061 20040701.060400 3.950 -7.188 337.365 1.080 20040701.060600 3.978 -7.288 338.205 1.100 20040701.060800 4.007 -7.388 339.049 1.118 20040701.061000 4.035 -7.486 339.897 1.137 20040701.061200 4.063 -7.583 340.749 1.155 20040701.061400 4.091 -7.678 341.604 1.173 20040701.061600 4.119 -7.772 342.464 1.191 20040701.061800 4.148 -7.864 343.326 1.209 20040701.062000 4.176 -7.954 344.192 1.226 20040701.062200 4.203 -8.044 345.062 1.243 20040701.062400 4.231 -8.132 345.934 1.260 20040701.062600 4.259 -8.219 346.810 1.277 20040701.062800 4.287 -8.304 347.689 1.293 20040701.063000 4.315 -8.388 348.572 1.309 20040701.063200 4.342 -8.471 349.457 1.325 20040701.063400 4.370 -8.552 350.345 1.341 20040701.063600 4.398 -8.632 351.237 1.357 20040701.063800 4.425 -8.713 352.131 1.372 20040701.064000 4.453 -8.791 353.027 1.387 20040701.064200 4.480 -8.868 353.927 1.403 20040701.064400 4.508 -8.943 354.829 1.418 20040701.064600 4.535 -9.019 355.734 1.432 20040701.064800 4.562 -9.092 356.642 1.447 20040701.065000 4.589 -9.165 357.552 1.461 20040701.065200 4.617 -9.237 358.465 1.475 20040701.065400 4.644 -9.309 359.380 1.489 20040701.065600 4.671 -9.378 0.297 1.503 20040701.065800 4.698 -9.448 1.217 1.517 20040701.070000 4.725 -9.516 2.139 1.531 20040701.070200 4.752 -9.583 3.063 1.544 20040701.070400 4.779 -9.649 3.990 1.557 20040701.070600 4.806 -9.714 4.918 1.571 20040701.070800 4.832 -9.779 5.849 1.584 20040701.071000 4.859 -9.843 6.782 1.597 20040701.071200 4.886 -9.907 7.717 1.609 20040701.071400 4.912 -9.969 8.654 1.622 20040701.071600 4.939 -10.030 9.593 1.634 20040701.071800 4.966 -10.090 10.534 1.647 20040701.072000 4.992 -10.150 11.477 1.659 20040701.072200 5.019 -10.210 12.422 1.671 20040701.072400 5.045 -10.268 13.369 1.683 20040701.072600 5.071 -10.325 14.317 1.695 20040701.072800 5.098 -10.382 15.268 1.706 20040701.073000 5.124 -10.439 16.220 1.718 20040701.073200 5.150 -10.495 17.173 1.730 20040701.073400 5.176 -10.550 18.129 1.741 20040701.073600 5.202 -10.603 19.086 1.752 20040701.073800 5.229 -10.658 20.045 1.763 20040701.074000 5.255 -10.710 21.005 1.774 20040701.074200 5.281 -10.764 21.967 1.785 20040701.074400 5.307 -10.815 22.931 1.796 20040701.074600 5.332 -10.867 23.896 1.807 20040701.074800 5.358 -10.917 24.863 1.817 20040701.075000 5.384 -10.968 25.831 1.828 20040701.075200 5.410 -11.016 26.800 1.838 20040701.075400 5.436 -11.066 27.771 1.849 20040701.075600 5.461 -11.115 28.744 1.859 20040701.075800 5.487 -11.162 29.718 1.869 20040701.080000 5.513 -11.209 30.693 1.879 20040701.080200 5.538 -11.257 31.670 1.889 20040701.080400 5.564 -11.303 32.648 1.899 20040701.080600 5.589 -11.349 33.627 1.909 20040701.080800 5.615 -11.394 34.608 1.918 20040701.081000 5.640 -11.438 35.589 1.928 20040701.081200 5.665 -11.483 36.573 1.938 20040701.081400 5.691 -11.527 37.557 1.947 20040701.081600 5.716 -11.571 38.543 1.956 20040701.081800 5.741 -11.613 39.529 1.966 20040701.082000 5.766 -11.657 40.517 1.975 20040701.082200 5.792 -11.698 41.507 1.984 20040701.082400 5.817 -11.740 42.497 1.993 20040701.082600 5.842 -11.782 43.488 2.002 20040701.082800 5.867 -11.823 44.481 2.011 20040701.083000 5.892 -11.863 45.475 2.020 20040701.083200 5.917 -11.903 46.469 2.028 20040701.083400 5.942 -11.943 47.465 2.037 20040701.083600 5.967 -11.981 48.462 2.046 20040701.083800 5.991 -12.020 49.460 2.054 20040701.084000 6.016 -12.059 50.459 2.063 20040701.084200 6.041 -12.098 51.459 2.071 20040701.084400 6.066 -12.135 52.460 2.079 20040701.084600 6.090 -12.173 53.462 2.088 20040701.084800 6.115 -12.209 54.465 2.096 20040701.085000 6.140 -12.245 55.469 2.104 20040701.085200 6.164 -12.282 56.474 2.112 20040701.085400 6.189 -12.318 57.480 2.120 20040701.085600 6.213 -12.354 58.487 2.128 20040701.085800 6.238 -12.389 59.494 2.136 20040701.090000 6.262 -12.424 60.503 2.144 xplanet-1.3.0/xplanet/origin/galileo0000644000175000017500000011402610411352756014420 0000000000000019951207.120000 10.328 -3.018 97.709 9.595 19951207.120200 10.302 -3.010 98.808 9.603 19951207.120400 10.277 -3.001 99.906 9.610 19951207.120600 10.251 -2.993 101.004 9.618 19951207.120800 10.225 -2.984 102.101 9.625 19951207.121000 10.199 -2.975 103.197 9.633 19951207.121200 10.174 -2.967 104.293 9.640 19951207.121400 10.148 -2.958 105.389 9.648 19951207.121600 10.122 -2.949 106.484 9.655 19951207.121800 10.096 -2.941 107.578 9.663 19951207.122000 10.071 -2.932 108.672 9.671 19951207.122200 10.045 -2.923 109.765 9.678 19951207.122400 10.019 -2.914 110.857 9.686 19951207.122600 9.993 -2.905 111.949 9.694 19951207.122800 9.967 -2.896 113.041 9.702 19951207.123000 9.942 -2.886 114.131 9.710 19951207.123200 9.916 -2.877 115.222 9.717 19951207.123400 9.890 -2.868 116.311 9.725 19951207.123600 9.864 -2.858 117.400 9.733 19951207.123800 9.838 -2.849 118.488 9.742 19951207.124000 9.812 -2.840 119.576 9.750 19951207.124200 9.786 -2.830 120.663 9.758 19951207.124400 9.760 -2.820 121.749 9.766 19951207.124600 9.735 -2.811 122.835 9.774 19951207.124800 9.709 -2.801 123.920 9.782 19951207.125000 9.683 -2.791 125.004 9.791 19951207.125200 9.657 -2.781 126.088 9.799 19951207.125400 9.631 -2.771 127.171 9.807 19951207.125600 9.605 -2.761 128.253 9.816 19951207.125800 9.579 -2.751 129.335 9.824 19951207.130000 9.553 -2.741 130.415 9.833 19951207.130200 9.527 -2.731 131.496 9.842 19951207.130400 9.501 -2.720 132.575 9.850 19951207.130600 9.475 -2.710 133.654 9.859 19951207.130800 9.449 -2.700 134.732 9.868 19951207.131000 9.423 -2.689 135.810 9.876 19951207.131200 9.397 -2.678 136.886 9.885 19951207.131400 9.371 -2.668 137.962 9.894 19951207.131600 9.345 -2.657 139.037 9.903 19951207.131800 9.319 -2.646 140.112 9.912 19951207.132000 9.293 -2.635 141.186 9.921 19951207.132200 9.267 -2.624 142.258 9.930 19951207.132400 9.241 -2.613 143.331 9.939 19951207.132600 9.215 -2.602 144.402 9.948 19951207.132800 9.189 -2.591 145.473 9.957 19951207.133000 9.163 -2.580 146.542 9.967 19951207.133200 9.137 -2.568 147.612 9.976 19951207.133400 9.111 -2.557 148.680 9.985 19951207.133600 9.085 -2.545 149.747 9.995 19951207.133800 9.059 -2.533 150.814 10.004 19951207.134000 9.033 -2.522 151.880 10.014 19951207.134200 9.007 -2.510 152.945 10.024 19951207.134400 8.981 -2.498 154.009 10.033 19951207.134600 8.955 -2.486 155.072 10.043 19951207.134800 8.929 -2.474 156.135 10.053 19951207.135000 8.903 -2.462 157.196 10.062 19951207.135200 8.877 -2.449 158.257 10.072 19951207.135400 8.851 -2.437 159.317 10.082 19951207.135600 8.825 -2.425 160.376 10.092 19951207.135800 8.798 -2.412 161.434 10.102 19951207.140000 8.772 -2.400 162.491 10.112 19951207.140200 8.746 -2.387 163.547 10.123 19951207.140400 8.720 -2.374 164.603 10.133 19951207.140600 8.694 -2.361 165.657 10.143 19951207.140800 8.668 -2.348 166.711 10.154 19951207.141000 8.642 -2.335 167.763 10.164 19951207.141200 8.616 -2.322 168.815 10.174 19951207.141400 8.590 -2.309 169.866 10.185 19951207.141600 8.564 -2.295 170.915 10.196 19951207.141800 8.538 -2.282 171.964 10.206 19951207.142000 8.511 -2.268 173.012 10.217 19951207.142200 8.485 -2.254 174.059 10.228 19951207.142400 8.459 -2.241 175.105 10.239 19951207.142600 8.433 -2.227 176.149 10.250 19951207.142800 8.407 -2.213 177.193 10.261 19951207.143000 8.381 -2.199 178.236 10.272 19951207.143200 8.355 -2.184 179.278 10.283 19951207.143400 8.329 -2.170 180.318 10.294 19951207.143600 8.303 -2.156 181.358 10.305 19951207.143800 8.277 -2.141 182.396 10.317 19951207.144000 8.250 -2.127 183.434 10.328 19951207.144200 8.224 -2.112 184.470 10.340 19951207.144400 8.198 -2.097 185.506 10.351 19951207.144600 8.172 -2.082 186.540 10.363 19951207.144800 8.146 -2.067 187.573 10.375 19951207.145000 8.120 -2.052 188.605 10.387 19951207.145200 8.094 -2.036 189.636 10.398 19951207.145400 8.068 -2.021 190.665 10.410 19951207.145600 8.042 -2.005 191.694 10.422 19951207.145800 8.016 -1.989 192.721 10.434 19951207.150000 7.990 -1.974 193.747 10.447 19951207.150200 7.964 -1.958 194.772 10.459 19951207.150400 7.938 -1.942 195.796 10.471 19951207.150600 7.911 -1.925 196.818 10.484 19951207.150800 7.885 -1.909 197.840 10.496 19951207.151000 7.859 -1.893 198.860 10.509 19951207.151200 7.833 -1.876 199.879 10.522 19951207.151400 7.807 -1.859 200.896 10.534 19951207.151600 7.781 -1.842 201.912 10.547 19951207.151800 7.755 -1.825 202.927 10.560 19951207.152000 7.729 -1.808 203.941 10.573 19951207.152200 7.703 -1.791 204.953 10.586 19951207.152400 7.677 -1.774 205.964 10.599 19951207.152600 7.651 -1.756 206.974 10.613 19951207.152800 7.625 -1.738 207.982 10.626 19951207.153000 7.599 -1.721 208.989 10.639 19951207.153200 7.573 -1.703 209.995 10.653 19951207.153400 7.547 -1.685 210.999 10.667 19951207.153600 7.521 -1.666 212.002 10.680 19951207.153800 7.496 -1.648 213.003 10.694 19951207.154000 7.470 -1.629 214.003 10.708 19951207.154200 7.444 -1.611 215.002 10.722 19951207.154400 7.418 -1.592 215.999 10.736 19951207.154600 7.392 -1.573 216.994 10.751 19951207.154800 7.366 -1.554 217.988 10.765 19951207.155000 7.340 -1.534 218.981 10.779 19951207.155200 7.314 -1.515 219.972 10.794 19951207.155400 7.289 -1.495 220.961 10.809 19951207.155600 7.263 -1.475 221.949 10.823 19951207.155800 7.237 -1.455 222.935 10.838 19951207.160000 7.211 -1.435 223.920 10.853 19951207.160200 7.185 -1.415 224.903 10.868 19951207.160400 7.160 -1.394 225.884 10.883 19951207.160600 7.134 -1.374 226.864 10.899 19951207.160800 7.108 -1.353 227.843 10.914 19951207.161000 7.082 -1.332 228.819 10.929 19951207.161200 7.057 -1.311 229.794 10.945 19951207.161400 7.031 -1.289 230.767 10.961 19951207.161600 7.005 -1.268 231.738 10.977 19951207.161800 6.980 -1.246 232.708 10.993 19951207.162000 6.954 -1.224 233.676 11.009 19951207.162200 6.929 -1.202 234.642 11.025 19951207.162400 6.903 -1.180 235.606 11.041 19951207.162600 6.878 -1.158 236.569 11.058 19951207.162800 6.852 -1.135 237.530 11.074 19951207.163000 6.827 -1.112 238.488 11.091 19951207.163200 6.801 -1.089 239.445 11.108 19951207.163400 6.776 -1.066 240.400 11.125 19951207.163600 6.750 -1.043 241.354 11.142 19951207.163800 6.725 -1.019 242.305 11.159 19951207.164000 6.700 -0.995 243.254 11.176 19951207.164200 6.674 -0.971 244.201 11.194 19951207.164400 6.649 -0.947 245.147 11.211 19951207.164600 6.624 -0.923 246.090 11.229 19951207.164800 6.598 -0.898 247.031 11.247 19951207.165000 6.573 -0.873 247.970 11.265 19951207.165200 6.548 -0.848 248.908 11.283 19951207.165400 6.523 -0.823 249.843 11.301 19951207.165600 6.498 -0.797 250.776 11.319 19951207.165800 6.473 -0.772 251.706 11.338 19951207.170000 6.448 -0.746 252.635 11.357 19951207.170200 6.423 -0.720 253.561 11.376 19951207.170400 6.398 -0.693 254.486 11.395 19951207.170600 6.373 -0.667 255.408 11.414 19951207.170800 6.348 -0.640 256.328 11.433 19951207.171000 6.323 -0.613 257.245 11.452 19951207.171200 6.298 -0.586 258.160 11.472 19951207.171400 6.273 -0.558 259.073 11.492 19951207.171600 6.249 -0.530 259.984 11.512 19951207.171800 6.224 -0.502 260.892 11.532 19951207.172000 6.199 -0.474 261.798 11.552 19951207.172200 6.175 -0.446 262.701 11.572 19951207.172400 6.150 -0.417 263.602 11.593 19951207.172600 6.126 -0.388 264.500 11.613 19951207.172800 6.101 -0.359 265.396 11.634 19951207.173000 6.077 -0.330 266.290 11.655 19951207.173200 6.053 -0.300 267.181 11.677 19951207.173400 6.028 -0.270 268.069 11.698 19951207.173600 6.004 -0.240 268.955 11.719 19951207.173800 5.980 -0.209 269.838 11.741 19951207.174000 5.956 -0.178 270.719 11.763 19951207.174200 5.931 -0.147 271.597 11.785 19951207.174400 5.907 -0.116 272.472 11.807 19951207.174600 5.883 -0.084 273.346 11.830 19951207.174800 5.859 -0.051 274.218 11.852 19951207.175000 5.835 -0.019 275.088 11.875 19951207.175200 5.811 0.014 275.957 11.897 19951207.175400 5.787 0.048 276.822 11.920 19951207.175600 5.763 0.081 277.685 11.943 19951207.175800 5.740 0.115 278.545 11.967 19951207.180000 5.716 0.150 279.402 11.990 19951207.180200 5.692 0.184 280.257 12.014 19951207.180400 5.669 0.219 281.108 12.038 19951207.180600 5.645 0.254 281.956 12.062 19951207.180800 5.622 0.289 282.802 12.086 19951207.181000 5.599 0.324 283.644 12.110 19951207.181200 5.576 0.360 284.484 12.135 19951207.181400 5.553 0.396 285.320 12.160 19951207.181600 5.530 0.433 286.153 12.185 19951207.181800 5.507 0.469 286.983 12.210 19951207.182000 5.484 0.506 287.810 12.236 19951207.182200 5.461 0.543 288.634 12.261 19951207.182400 5.438 0.581 289.454 12.287 19951207.182600 5.416 0.619 290.272 12.313 19951207.182800 5.393 0.657 291.086 12.340 19951207.183000 5.371 0.695 291.896 12.366 19951207.183200 5.348 0.734 292.704 12.393 19951207.183400 5.326 0.773 293.507 12.420 19951207.183600 5.304 0.812 294.308 12.447 19951207.183800 5.282 0.851 295.105 12.475 19951207.184000 5.260 0.891 295.899 12.502 19951207.184200 5.238 0.931 296.689 12.530 19951207.184400 5.216 0.972 297.476 12.558 19951207.184600 5.195 1.012 298.259 12.587 19951207.184800 5.173 1.053 299.038 12.615 19951207.185000 5.152 1.094 299.814 12.644 19951207.185200 5.130 1.136 300.587 12.673 19951207.185400 5.109 1.178 301.355 12.703 19951207.185600 5.088 1.220 302.120 12.732 19951207.185800 5.067 1.262 302.882 12.762 19951207.190000 5.046 1.305 303.639 12.792 19951207.190200 5.026 1.347 304.393 12.823 19951207.190400 5.005 1.391 305.143 12.853 19951207.190600 4.984 1.434 305.890 12.884 19951207.190800 4.964 1.478 306.632 12.915 19951207.191000 4.944 1.522 307.371 12.946 19951207.191200 4.924 1.566 308.106 12.978 19951207.191400 4.904 1.610 308.836 13.010 19951207.191600 4.884 1.655 309.563 13.042 19951207.191800 4.864 1.700 310.286 13.075 19951207.192000 4.845 1.745 311.006 13.107 19951207.192200 4.826 1.790 311.721 13.140 19951207.192400 4.806 1.836 312.432 13.173 19951207.192600 4.787 1.882 313.139 13.207 19951207.192800 4.768 1.928 313.842 13.240 19951207.193000 4.750 1.974 314.541 13.274 19951207.193200 4.731 2.020 315.236 13.309 19951207.193400 4.713 2.067 315.927 13.343 19951207.193600 4.694 2.114 316.614 13.378 19951207.193800 4.676 2.161 317.296 13.413 19951207.194000 4.658 2.208 317.975 13.448 19951207.194200 4.641 2.256 318.650 13.484 19951207.194400 4.623 2.303 319.320 13.520 19951207.194600 4.606 2.351 319.986 13.556 19951207.194800 4.588 2.399 320.649 13.593 19951207.195000 4.571 2.447 321.307 13.629 19951207.195200 4.554 2.495 321.960 13.666 19951207.195400 4.538 2.543 322.610 13.704 19951207.195600 4.521 2.591 323.256 13.741 19951207.195800 4.505 2.640 323.897 13.779 19951207.200000 4.489 2.688 324.535 13.817 19951207.200200 4.473 2.737 325.168 13.856 19951207.200400 4.458 2.786 325.797 13.894 19951207.200600 4.442 2.834 326.422 13.933 19951207.200800 4.427 2.883 327.043 13.972 19951207.201000 4.412 2.932 327.660 14.012 19951207.201200 4.397 2.981 328.273 14.052 19951207.201400 4.383 3.030 328.882 14.092 19951207.201600 4.368 3.078 329.486 14.132 19951207.201800 4.354 3.127 330.087 14.172 19951207.202000 4.340 3.176 330.684 14.213 19951207.202200 4.327 3.225 331.277 14.254 19951207.202400 4.313 3.273 331.865 14.296 19951207.202600 4.300 3.322 332.450 14.337 19951207.202800 4.287 3.370 333.032 14.379 19951207.203000 4.275 3.418 333.609 14.421 19951207.203200 4.262 3.466 334.183 14.464 19951207.203400 4.250 3.514 334.752 14.506 19951207.203600 4.238 3.562 335.319 14.549 19951207.203800 4.227 3.610 335.881 14.592 19951207.204000 4.215 3.657 336.440 14.635 19951207.204200 4.204 3.705 336.995 14.679 19951207.204400 4.193 3.752 337.547 14.723 19951207.204600 4.183 3.798 338.096 14.767 19951207.204800 4.172 3.845 338.641 14.811 19951207.205000 4.162 3.891 339.182 14.856 19951207.205200 4.153 3.937 339.721 14.900 19951207.205400 4.143 3.982 340.256 14.945 19951207.205600 4.134 4.028 340.788 14.990 19951207.205800 4.125 4.072 341.317 15.036 19951207.210000 4.117 4.117 341.844 15.081 19951207.210200 4.108 4.161 342.367 15.127 19951207.210400 4.100 4.204 342.887 15.173 19951207.210600 4.093 4.247 343.405 15.219 19951207.210800 4.085 4.290 343.920 15.265 19951207.211000 4.078 4.332 344.433 15.312 19951207.211200 4.071 4.374 344.943 15.358 19951207.211400 4.065 4.415 345.451 15.405 19951207.211600 4.058 4.456 345.956 15.452 19951207.211800 4.053 4.496 346.460 15.499 19951207.212000 4.047 4.536 346.961 15.546 19951207.212200 4.042 4.575 347.460 15.593 19951207.212400 4.037 4.613 347.958 15.641 19951207.212600 4.032 4.651 348.453 15.688 19951207.212800 4.028 4.688 348.947 15.736 19951207.213000 4.024 4.724 349.439 15.784 19951207.213200 4.020 4.760 349.930 15.832 19951207.213400 4.017 4.795 350.420 15.880 19951207.213600 4.014 4.829 350.908 15.928 19951207.213800 4.011 4.863 351.396 15.976 19951207.214000 4.009 4.896 351.882 16.024 19951207.214200 4.006 4.928 352.367 16.072 19951207.214400 4.005 4.960 352.852 16.120 19951207.214600 4.003 4.990 353.336 16.169 19951207.214800 4.002 5.020 353.819 16.217 19951207.215000 4.001 5.049 354.303 16.266 19951207.215200 4.001 5.078 354.785 16.314 19951207.215400 4.001 5.105 355.268 16.362 19951207.215600 4.001 5.132 355.751 16.411 19951207.215800 4.002 5.158 356.233 16.459 19951207.220000 4.002 5.183 356.716 16.508 19951207.220200 4.004 5.207 357.199 16.556 19951207.220400 4.005 5.230 357.683 16.604 19951207.220600 4.007 5.253 358.167 16.653 19951207.220800 4.009 5.274 358.652 16.701 19951207.221000 4.012 5.295 359.137 16.749 19951207.221200 4.014 5.315 359.624 16.797 19951207.221400 4.018 5.334 0.112 16.845 19951207.221600 4.021 5.352 0.600 16.893 19951207.221800 4.025 5.370 1.090 16.941 19951207.222000 4.029 5.386 1.581 16.989 19951207.222200 4.033 5.402 2.074 17.037 19951207.222400 4.038 5.416 2.569 17.085 19951207.222600 4.043 5.430 3.065 17.132 19951207.222800 4.048 5.443 3.563 17.180 19951207.223000 4.054 5.455 4.062 17.227 19951207.223200 4.060 5.466 4.564 17.274 19951207.223400 4.066 5.476 5.068 17.321 19951207.223600 4.073 5.486 5.574 17.368 19951207.223800 4.080 5.495 6.082 17.415 19951207.224000 4.087 5.502 6.593 17.461 19951207.224200 4.095 5.509 7.106 17.507 19951207.224400 4.102 5.515 7.622 17.554 19951207.224600 4.110 5.521 8.141 17.600 19951207.224800 4.119 5.525 8.662 17.646 19951207.225000 4.128 5.529 9.186 17.691 19951207.225200 4.137 5.532 9.713 17.737 19951207.225400 4.146 5.534 10.243 17.782 19951207.225600 4.155 5.535 10.776 17.827 19951207.225800 4.165 5.536 11.313 17.872 19951207.230000 4.175 5.536 11.852 17.916 19951207.230200 4.186 5.535 12.395 17.961 19951207.230400 4.196 5.533 12.941 18.005 19951207.230600 4.207 5.531 13.490 18.049 19951207.230800 4.218 5.527 14.043 18.093 19951207.231000 4.230 5.524 14.600 18.136 19951207.231200 4.241 5.519 15.160 18.180 19951207.231400 4.253 5.514 15.723 18.223 19951207.231600 4.266 5.508 16.290 18.265 19951207.231800 4.278 5.502 16.861 18.308 19951207.232000 4.291 5.494 17.436 18.350 19951207.232200 4.304 5.487 18.015 18.392 19951207.232400 4.317 5.478 18.597 18.434 19951207.232600 4.330 5.469 19.183 18.475 19951207.232800 4.344 5.460 19.774 18.517 19951207.233000 4.358 5.450 20.368 18.558 19951207.233200 4.372 5.439 20.966 18.598 19951207.233400 4.387 5.428 21.568 18.639 19951207.233600 4.401 5.416 22.174 18.679 19951207.233800 4.416 5.404 22.784 18.719 19951207.234000 4.431 5.391 23.399 18.759 19951207.234200 4.446 5.378 24.017 18.798 19951207.234400 4.462 5.364 24.639 18.837 19951207.234600 4.478 5.350 25.266 18.876 19951207.234800 4.493 5.336 25.897 18.915 19951207.235000 4.510 5.321 26.531 18.953 19951207.235200 4.526 5.305 27.170 18.991 19951207.235400 4.542 5.289 27.813 19.029 19951207.235600 4.559 5.273 28.460 19.066 19951207.235800 4.576 5.256 29.112 19.103 19951208.000000 4.593 5.239 29.767 19.140 19951208.000200 4.610 5.222 30.427 19.177 19951208.000400 4.628 5.204 31.091 19.213 19951208.000600 4.645 5.186 31.759 19.249 19951208.000800 4.663 5.168 32.431 19.285 19951208.001000 4.681 5.149 33.107 19.320 19951208.001200 4.699 5.130 33.788 19.356 19951208.001400 4.717 5.111 34.472 19.391 19951208.001600 4.736 5.092 35.161 19.425 19951208.001800 4.755 5.072 35.853 19.460 19951208.002000 4.773 5.052 36.550 19.494 19951208.002200 4.792 5.032 37.251 19.528 19951208.002400 4.811 5.011 37.956 19.561 19951208.002600 4.831 4.991 38.665 19.595 19951208.002800 4.850 4.970 39.378 19.628 19951208.003000 4.870 4.949 40.095 19.661 19951208.003200 4.889 4.927 40.817 19.693 19951208.003400 4.909 4.906 41.543 19.725 19951208.003600 4.929 4.884 42.273 19.757 19951208.003800 4.949 4.863 43.008 19.789 19951208.004000 4.969 4.841 43.747 19.820 19951208.004200 4.989 4.819 44.490 19.851 19951208.004400 5.010 4.797 45.238 19.882 19951208.004600 5.030 4.775 45.990 19.912 19951208.004800 5.051 4.753 46.746 19.943 19951208.005000 5.072 4.731 47.506 19.972 19951208.005200 5.092 4.708 48.270 20.002 19951208.005400 5.113 4.686 49.038 20.031 19951208.005600 5.134 4.664 49.811 20.061 19951208.005800 5.155 4.641 50.587 20.089 19951208.010000 5.176 4.619 51.368 20.118 19951208.010200 5.197 4.596 52.152 20.146 19951208.010400 5.219 4.574 52.940 20.174 19951208.010600 5.240 4.551 53.733 20.202 19951208.010800 5.261 4.528 54.529 20.230 19951208.011000 5.283 4.506 55.328 20.257 19951208.011200 5.304 4.483 56.132 20.284 19951208.011400 5.326 4.461 56.939 20.311 19951208.011600 5.348 4.438 57.751 20.337 19951208.011800 5.369 4.415 58.565 20.364 19951208.012000 5.391 4.393 59.383 20.390 19951208.012200 5.413 4.370 60.204 20.415 19951208.012400 5.435 4.347 61.028 20.441 19951208.012600 5.457 4.325 61.856 20.467 19951208.012800 5.479 4.302 62.686 20.492 19951208.013000 5.501 4.279 63.520 20.517 19951208.013200 5.523 4.257 64.356 20.542 19951208.013400 5.545 4.234 65.196 20.566 19951208.013600 5.568 4.211 66.038 20.591 19951208.013800 5.590 4.189 66.884 20.615 19951208.014000 5.613 4.166 67.732 20.639 19951208.014200 5.635 4.144 68.583 20.663 19951208.014400 5.658 4.121 69.437 20.686 19951208.014600 5.680 4.098 70.294 20.710 19951208.014800 5.703 4.076 71.154 20.733 19951208.015000 5.726 4.053 72.017 20.756 19951208.015200 5.749 4.031 72.882 20.779 19951208.015400 5.772 4.008 73.750 20.802 19951208.015600 5.795 3.986 74.621 20.824 19951208.015800 5.818 3.964 75.495 20.847 19951208.020000 5.841 3.941 76.371 20.869 19951208.020200 5.864 3.919 77.250 20.891 19951208.020400 5.887 3.897 78.131 20.913 19951208.020600 5.910 3.875 79.015 20.935 19951208.020800 5.933 3.852 79.902 20.956 19951208.021000 5.957 3.830 80.791 20.977 19951208.021200 5.980 3.808 81.683 20.998 19951208.021400 6.003 3.786 82.577 21.019 19951208.021600 6.027 3.764 83.473 21.040 19951208.021800 6.050 3.743 84.372 21.061 19951208.022000 6.073 3.721 85.274 21.081 19951208.022200 6.097 3.699 86.178 21.102 19951208.022400 6.121 3.677 87.084 21.122 19951208.022600 6.144 3.656 87.992 21.142 19951208.022800 6.168 3.634 88.903 21.162 19951208.023000 6.191 3.613 89.816 21.182 19951208.023200 6.215 3.591 90.732 21.201 19951208.023400 6.239 3.570 91.649 21.221 19951208.023600 6.263 3.549 92.569 21.240 19951208.023800 6.286 3.528 93.491 21.259 19951208.024000 6.310 3.506 94.415 21.278 19951208.024200 6.334 3.485 95.342 21.297 19951208.024400 6.358 3.464 96.270 21.316 19951208.024600 6.382 3.444 97.201 21.334 19951208.024800 6.406 3.423 98.134 21.353 19951208.025000 6.430 3.402 99.068 21.371 19951208.025200 6.454 3.381 100.005 21.389 19951208.025400 6.478 3.361 100.944 21.407 19951208.025600 6.502 3.340 101.885 21.425 19951208.025800 6.526 3.320 102.828 21.443 19951208.030000 6.550 3.299 103.773 21.460 19951208.030200 6.574 3.279 104.720 21.478 19951208.030400 6.598 3.259 105.668 21.495 19951208.030600 6.622 3.239 106.619 21.512 19951208.030800 6.646 3.219 107.571 21.529 19951208.031000 6.671 3.199 108.526 21.546 19951208.031200 6.695 3.179 109.482 21.563 19951208.031400 6.719 3.159 110.440 21.580 19951208.031600 6.743 3.139 111.400 21.596 19951208.031800 6.768 3.120 112.362 21.613 19951208.032000 6.792 3.100 113.325 21.629 19951208.032200 6.816 3.081 114.290 21.646 19951208.032400 6.840 3.061 115.257 21.662 19951208.032600 6.865 3.042 116.226 21.678 19951208.032800 6.889 3.023 117.196 21.694 19951208.033000 6.913 3.004 118.168 21.709 19951208.033200 6.938 2.985 119.142 21.725 19951208.033400 6.962 2.966 120.117 21.741 19951208.033600 6.986 2.947 121.094 21.756 19951208.033800 7.011 2.928 122.073 21.771 19951208.034000 7.035 2.910 123.053 21.787 19951208.034200 7.060 2.891 124.035 21.802 19951208.034400 7.084 2.872 125.019 21.817 19951208.034600 7.109 2.854 126.004 21.832 19951208.034800 7.133 2.836 126.990 21.847 19951208.035000 7.158 2.817 127.978 21.861 19951208.035200 7.182 2.799 128.968 21.876 19951208.035400 7.206 2.781 129.959 21.891 19951208.035600 7.231 2.763 130.951 21.905 19951208.035800 7.255 2.745 131.945 21.919 19951208.040000 7.280 2.727 132.941 21.934 19951208.040200 7.304 2.709 133.938 21.948 19951208.040400 7.329 2.692 134.936 21.962 19951208.040600 7.353 2.674 135.936 21.976 19951208.040800 7.378 2.656 136.937 21.990 19951208.041000 7.403 2.639 137.940 22.003 19951208.041200 7.427 2.622 138.943 22.017 19951208.041400 7.452 2.604 139.949 22.031 19951208.041600 7.476 2.587 140.955 22.044 19951208.041800 7.501 2.570 141.963 22.057 19951208.042000 7.525 2.553 142.972 22.071 19951208.042200 7.550 2.536 143.983 22.084 19951208.042400 7.574 2.519 144.995 22.097 19951208.042600 7.599 2.502 146.008 22.110 19951208.042800 7.623 2.485 147.022 22.123 19951208.043000 7.648 2.469 148.038 22.136 19951208.043200 7.673 2.452 149.055 22.149 19951208.043400 7.697 2.436 150.073 22.162 19951208.043600 7.722 2.419 151.092 22.174 19951208.043800 7.746 2.403 152.113 22.187 19951208.044000 7.771 2.387 153.135 22.199 19951208.044200 7.795 2.370 154.158 22.212 19951208.044400 7.820 2.354 155.182 22.224 19951208.044600 7.845 2.338 156.207 22.236 19951208.044800 7.869 2.322 157.233 22.248 19951208.045000 7.894 2.306 158.261 22.260 19951208.045200 7.918 2.291 159.290 22.272 19951208.045400 7.943 2.275 160.319 22.284 19951208.045600 7.967 2.259 161.350 22.296 19951208.045800 7.992 2.244 162.382 22.308 19951208.050000 8.017 2.228 163.416 22.320 19951208.050200 8.041 2.213 164.450 22.331 19951208.050400 8.066 2.197 165.485 22.343 19951208.050600 8.090 2.182 166.521 22.355 19951208.050800 8.115 2.167 167.559 22.366 19951208.051000 8.139 2.152 168.597 22.377 19951208.051200 8.164 2.137 169.636 22.389 19951208.051400 8.188 2.122 170.677 22.400 19951208.051600 8.213 2.107 171.718 22.411 19951208.051800 8.237 2.092 172.761 22.422 19951208.052000 8.262 2.077 173.804 22.433 19951208.052200 8.287 2.062 174.849 22.444 19951208.052400 8.311 2.048 175.894 22.455 19951208.052600 8.336 2.033 176.941 22.466 19951208.052800 8.360 2.018 177.988 22.477 19951208.053000 8.385 2.004 179.036 22.487 19951208.053200 8.409 1.990 180.085 22.498 19951208.053400 8.434 1.975 181.136 22.509 19951208.053600 8.458 1.961 182.187 22.519 19951208.053800 8.483 1.947 183.239 22.530 19951208.054000 8.507 1.933 184.292 22.540 19951208.054200 8.532 1.919 185.345 22.550 19951208.054400 8.556 1.905 186.400 22.561 19951208.054600 8.581 1.891 187.456 22.571 19951208.054800 8.605 1.877 188.512 22.581 19951208.055000 8.629 1.863 189.569 22.591 19951208.055200 8.654 1.850 190.628 22.601 19951208.055400 8.678 1.836 191.687 22.611 19951208.055600 8.703 1.822 192.746 22.621 19951208.055800 8.727 1.809 193.807 22.631 19951208.060000 8.752 1.795 194.869 22.641 19951208.060200 8.776 1.782 195.931 22.651 19951208.060400 8.800 1.769 196.994 22.660 19951208.060600 8.825 1.755 198.058 22.670 19951208.060800 8.849 1.742 199.123 22.680 19951208.061000 8.874 1.729 200.189 22.689 19951208.061200 8.898 1.716 201.255 22.699 19951208.061400 8.922 1.703 202.322 22.708 19951208.061600 8.947 1.690 203.390 22.718 19951208.061800 8.971 1.677 204.459 22.727 19951208.062000 8.995 1.664 205.528 22.736 19951208.062200 9.020 1.652 206.599 22.745 19951208.062400 9.044 1.639 207.669 22.755 19951208.062600 9.068 1.626 208.741 22.764 19951208.062800 9.093 1.614 209.814 22.773 19951208.063000 9.117 1.601 210.887 22.782 19951208.063200 9.141 1.589 211.961 22.791 19951208.063400 9.166 1.576 213.035 22.800 19951208.063600 9.190 1.564 214.111 22.809 19951208.063800 9.214 1.551 215.187 22.818 19951208.064000 9.238 1.539 216.263 22.827 19951208.064200 9.263 1.527 217.341 22.835 19951208.064400 9.287 1.515 218.419 22.844 19951208.064600 9.311 1.503 219.498 22.853 19951208.064800 9.335 1.491 220.577 22.861 19951208.065000 9.359 1.479 221.657 22.870 19951208.065200 9.384 1.467 222.738 22.878 19951208.065400 9.408 1.455 223.820 22.887 19951208.065600 9.432 1.443 224.902 22.895 19951208.065800 9.456 1.431 225.985 22.904 19951208.070000 9.480 1.420 227.068 22.912 19951208.070200 9.505 1.408 228.152 22.921 19951208.070400 9.529 1.396 229.237 22.929 19951208.070600 9.553 1.385 230.322 22.937 19951208.070800 9.577 1.373 231.408 22.945 19951208.071000 9.601 1.362 232.495 22.953 19951208.071200 9.625 1.350 233.582 22.962 19951208.071400 9.649 1.339 234.670 22.970 19951208.071600 9.673 1.328 235.758 22.978 19951208.071800 9.697 1.317 236.847 22.986 19951208.072000 9.721 1.305 237.937 22.994 19951208.072200 9.746 1.294 239.027 23.002 19951208.072400 9.770 1.283 240.118 23.009 19951208.072600 9.794 1.272 241.209 23.017 19951208.072800 9.818 1.261 242.301 23.025 19951208.073000 9.842 1.250 243.394 23.033 19951208.073200 9.866 1.239 244.487 23.041 19951208.073400 9.890 1.228 245.580 23.048 19951208.073600 9.914 1.218 246.675 23.056 19951208.073800 9.938 1.207 247.769 23.063 19951208.074000 9.961 1.196 248.865 23.071 19951208.074200 9.985 1.185 249.960 23.079 19951208.074400 10.009 1.175 251.057 23.086 19951208.074600 10.033 1.164 252.154 23.094 19951208.074800 10.057 1.154 253.251 23.101 19951208.075000 10.081 1.143 254.349 23.108 19951208.075200 10.105 1.133 255.448 23.116 19951208.075400 10.129 1.122 256.547 23.123 19951208.075600 10.153 1.112 257.646 23.130 19951208.075800 10.177 1.102 258.747 23.138 19951208.080000 10.200 1.091 259.847 23.145 19951208.080200 10.224 1.081 260.948 23.152 19951208.080400 10.248 1.071 262.050 23.159 19951208.080600 10.272 1.061 263.152 23.166 19951208.080800 10.296 1.051 264.255 23.173 19951208.081000 10.319 1.041 265.358 23.180 19951208.081200 10.343 1.031 266.461 23.188 19951208.081400 10.367 1.021 267.565 23.194 19951208.081600 10.391 1.011 268.670 23.201 19951208.081800 10.415 1.001 269.775 23.208 19951208.082000 10.438 0.991 270.880 23.215 19951208.082200 10.462 0.981 271.986 23.222 19951208.082400 10.486 0.972 273.093 23.229 19951208.082600 10.509 0.962 274.200 23.236 19951208.082800 10.533 0.952 275.307 23.243 19951208.083000 10.557 0.943 276.415 23.249 19951208.083200 10.580 0.933 277.523 23.256 19951208.083400 10.604 0.924 278.632 23.263 19951208.083600 10.628 0.914 279.741 23.269 19951208.083800 10.651 0.905 280.851 23.276 19951208.084000 10.675 0.895 281.961 23.283 19951208.084200 10.699 0.886 283.071 23.289 19951208.084400 10.722 0.876 284.182 23.296 19951208.084600 10.746 0.867 285.293 23.302 19951208.084800 10.769 0.858 286.405 23.309 19951208.085000 10.793 0.849 287.517 23.315 19951208.085200 10.816 0.839 288.630 23.322 19951208.085400 10.840 0.830 289.743 23.328 19951208.085600 10.863 0.821 290.856 23.334 19951208.085800 10.887 0.812 291.970 23.341 19951208.090000 10.910 0.803 293.085 23.347 19951208.090200 10.934 0.794 294.199 23.353 19951208.090400 10.957 0.785 295.314 23.359 19951208.090600 10.981 0.776 296.430 23.366 19951208.090800 11.004 0.767 297.546 23.372 19951208.091000 11.028 0.758 298.662 23.378 19951208.091200 11.051 0.749 299.779 23.384 19951208.091400 11.075 0.741 300.896 23.390 19951208.091600 11.098 0.732 302.013 23.396 19951208.091800 11.121 0.723 303.131 23.403 19951208.092000 11.145 0.714 304.249 23.409 19951208.092200 11.168 0.706 305.368 23.415 19951208.092400 11.191 0.697 306.487 23.421 19951208.092600 11.215 0.689 307.606 23.427 19951208.092800 11.238 0.680 308.726 23.433 19951208.093000 11.261 0.671 309.846 23.438 19951208.093200 11.285 0.663 310.967 23.444 19951208.093400 11.308 0.655 312.088 23.450 19951208.093600 11.331 0.646 313.209 23.456 19951208.093800 11.354 0.638 314.330 23.462 19951208.094000 11.378 0.629 315.452 23.468 19951208.094200 11.401 0.621 316.575 23.474 19951208.094400 11.424 0.613 317.697 23.479 19951208.094600 11.447 0.604 318.820 23.485 19951208.094800 11.471 0.596 319.944 23.491 19951208.095000 11.494 0.588 321.067 23.496 19951208.095200 11.517 0.580 322.191 23.502 19951208.095400 11.540 0.572 323.316 23.508 19951208.095600 11.563 0.564 324.440 23.513 19951208.095800 11.586 0.556 325.565 23.519 19951208.100000 11.610 0.548 326.691 23.524 19951208.100200 11.633 0.540 327.817 23.530 19951208.100400 11.656 0.532 328.943 23.536 19951208.100600 11.679 0.524 330.069 23.541 19951208.100800 11.702 0.516 331.196 23.547 19951208.101000 11.725 0.508 332.323 23.552 19951208.101200 11.748 0.500 333.450 23.557 19951208.101400 11.771 0.492 334.578 23.563 19951208.101600 11.794 0.484 335.706 23.568 19951208.101800 11.817 0.477 336.834 23.574 19951208.102000 11.840 0.469 337.963 23.579 19951208.102200 11.863 0.461 339.092 23.584 19951208.102400 11.886 0.453 340.221 23.590 19951208.102600 11.909 0.446 341.350 23.595 19951208.102800 11.932 0.438 342.480 23.600 19951208.103000 11.955 0.431 343.610 23.605 19951208.103200 11.978 0.423 344.741 23.611 19951208.103400 12.001 0.415 345.872 23.616 19951208.103600 12.024 0.408 347.003 23.621 19951208.103800 12.047 0.400 348.134 23.626 19951208.104000 12.070 0.393 349.266 23.631 19951208.104200 12.093 0.386 350.398 23.637 19951208.104400 12.115 0.378 351.530 23.642 19951208.104600 12.138 0.371 352.662 23.647 19951208.104800 12.161 0.363 353.795 23.652 19951208.105000 12.184 0.356 354.928 23.657 19951208.105200 12.207 0.349 356.062 23.662 19951208.105400 12.230 0.342 357.195 23.667 19951208.105600 12.252 0.334 358.329 23.672 19951208.105800 12.275 0.327 359.463 23.677 19951208.110000 12.298 0.320 0.598 23.682 19951208.110200 12.321 0.313 1.733 23.687 19951208.110400 12.343 0.306 2.868 23.692 19951208.110600 12.366 0.299 4.003 23.697 19951208.110800 12.389 0.291 5.139 23.702 19951208.111000 12.412 0.284 6.275 23.706 19951208.111200 12.434 0.277 7.411 23.711 19951208.111400 12.457 0.270 8.547 23.716 19951208.111600 12.480 0.263 9.684 23.721 19951208.111800 12.502 0.256 10.821 23.726 19951208.112000 12.525 0.249 11.958 23.731 19951208.112200 12.548 0.243 13.095 23.735 19951208.112400 12.570 0.236 14.233 23.740 19951208.112600 12.593 0.229 15.371 23.745 19951208.112800 12.615 0.222 16.509 23.750 19951208.113000 12.638 0.215 17.648 23.754 19951208.113200 12.661 0.208 18.786 23.759 19951208.113400 12.683 0.202 19.925 23.764 19951208.113600 12.706 0.195 21.065 23.768 19951208.113800 12.728 0.188 22.204 23.773 19951208.114000 12.751 0.182 23.344 23.777 19951208.114200 12.773 0.175 24.484 23.782 19951208.114400 12.796 0.168 25.624 23.787 19951208.114600 12.818 0.162 26.764 23.791 19951208.114800 12.841 0.155 27.905 23.796 19951208.115000 12.863 0.148 29.046 23.800 19951208.115200 12.886 0.142 30.187 23.805 19951208.115400 12.908 0.135 31.329 23.809 19951208.115600 12.931 0.129 32.470 23.814 19951208.115800 12.953 0.122 33.612 23.818 19951208.120000 12.975 0.116 34.754 23.823 xplanet-1.3.0/xplanet/origin/README0000644000175000017500000000122210411352756013732 00000000000000The format of an origin file is YYYYMMDD.HHMMSS range lat lon [localtime] Where the date is in GMT and range is in planetary radii. The values for range, lat, and lon refer to the body named with the -origin option. The localtime is optional, but if supplied, it will be used in place of the longitude. There are two origin files included with xplanet. One describes the path of the Galileo spacecraft on its approach to Jupiter, and the other is for Cassini as it arrives at Saturn. An example use is xplanet -origin jupiter -target io -origin_file galileo -wait 10 This updates the image every 10 seconds using the next date in the origin file. xplanet-1.3.0/xplanet/satellites/0000755000175000017500000000000011731372543014021 500000000000000xplanet-1.3.0/xplanet/satellites/iss.tle0000644000175000017500000000077010411353363015242 00000000000000ISS (ZARYA) 1 25544U 98067A 04005.51955591 .00019728 00000-0 19085-3 0 9701 2 25544 51.6297 78.4979 0006431 344.6528 119.5204 15.66405366292649 PROGRESS-M 48 1 27873U 03039A 04004.82500000 .00018733 00000-0 18171-3 0 1068 2 27873 51.6298 82.0291 0006742 342.9757 161.9609 15.66375652 20143 SOYUZ-TMA 3 1 28052U 03047A 04004.82500000 .00018733 00000-0 18171-3 0 695 2 28052 51.6298 82.0291 0006742 342.9757 161.9609 15.66375652 12313 xplanet-1.3.0/xplanet/satellites/README0000644000175000017500000000526011121321025014602 00000000000000A sample TLE entry for the International Space Station looks like this: ISS (ZARYA) 1 25544U 98067A 01286.44085648 .00059265 00000-0 81723-3 0 5959 2 25544 51.6394 213.7002 0007838 194.2620 314.2054 15.56596996165535 Each line in satfile must begin with a satellite ID number (e.g. 25544 for the ISS). Each ID must exist in the associated TLE file. Valid additional keywords are "align", "altcirc", "color", "font", "fontsize", "image", "position", "spacing", "thickness", "trail", "trail_output", and "transparent". The usage for most of these is identical to the usage for arc and marker files. In addition, a string to be plotted with the marker may be enclosed in either double quotes (""), or braces ({}). If a string is not supplied, the marker will take the name of the satellite supplied in the TLE file. The "altcirc" keyword draws altitude circles on the surface of the earth. The format is "altcirc=angle", where a circle is drawn bounding the area where the satellite is greater than angle degrees above the horizon. For example, altcirc=0 draws a circle bounding the region where the satellite is above the horizon, while altcirc=45 draws a circle bounding the region where the satellite is more than 45 degrees above the horizon. This may be specified more than once. The "trail" keyword is used to specify an orbit trail. The format must be "trail={ground|orbit,start_time,end_time,interval}", where the start and end times and interval are each in minutes. The start and end times are relative to the time of the calculation. When using the -projection option, trail will always be "ground". The "trail_output" keyword outputs the satellite's position to a text file, using the same time interval specified by "trail". If the "trail" option is not also present, "trail_output" has no effect. A few sample entries are given below: 25544 This draws a marker with the string "ISS (ZARYA)" for the International Space Station. 25544 "The Space Station" This draws a marker with the string "The Space Station" for the International Space Station. 25544 "" image=iss.png transparent={0,0,0} altcirc=0 This draws iss.png at the current position of the International Space Station. No text string is drawn. A curve containing the area where the International Space Station is above the horizon is drawn. 25544 "" image=iss.png transparent={0,0,0} altcirc=0 altcirc=45 trail={orbit,-5,10,2} As the previous example, but also draw the orbit trail from five minutes before to ten minutes past the current time, calculated every two minutes. A second altitude circle bounding the region where the International Space Station is more than 45 degrees above the horizon is also drawn. xplanet-1.3.0/xplanet/satellites/iss0000644000175000017500000000037210411352756014462 00000000000000# # Get the latest orbital elements from celestrak.com: # wget -O iss.tle http://www.celestrak.com/NORAD/elements/stations.txt # 25544 "" image=iss.png transparent={0,0,0} 25544 "" image=none altcirc=0 altcirc=45 trail={orbit,-10,0,2} color=yellow xplanet-1.3.0/xplanet/images/0000755000175000017500000000000011731372543013115 500000000000000xplanet-1.3.0/xplanet/images/sun.jpg0000644000175000017500000002116510411420230014326 00000000000000JFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?r(:(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xplanet-1.3.0/xplanet/images/odyssey.png0000644000175000017500000000774010411356762015251 00000000000000PNG  IHDRC/wRbKGD pHYsHHFk>IDATxݚkY^纳{vb'vRۉBR*HTU R$JT@BBBB ۇBT-DKh&I8Ʊzo;;;ǨvCSۢY4_s.X!ԍ#ouැ0(k[Uw'nNgĞ,sidOۛd%Dz@Oߨm>;nTȲ a6-H"M\!I ި}$skG #"$I,K@%2ryR*Jr1o~bf9{$8R@Ck1q'qqIb~_#}n5õ)XGBfWs¶l cULNbyryTm0۞mqLd`\Y+!a3_]|Bji._0I8{u[cSi4J*JAi%Bܳxt:QÑX,aqA77_K|`f-M#h)@@@9 cc|`4\%jeRٓEczrE&Ҁz  sqx$94 xAN; @`:F _e U;݌QJR!Lˀ|cp=ĔB`@tM R"!1A$h=id^yEiEE&4ҔRb2AE﭅&I!  Fʸ!mbAm6Ik}Mc8AsBU#V `D$X&]x * V; q̍J E)Ӳx^04,Ԅ" M0&`fpfrS m\k(`1)Aɐb`eYOx4B BJ dyA"XbH1v rne>\+mM否QLP-F !oujRnf%I2z2^SSBwK{.!H{=L1U5!Jc0jUZw7(Pa0Fˆ`ڎYFc V3sᵗ.ꤐ28PM9d A (ghyE/`\aqL2`a&50Ŕ`v캄+,Ρ9@XT+t; 8k%ȥFpj08-ۮ읫=2Y*"Xk-k63N'ς$)< A0b9C I4;5J)e*c;\יMNT8PEr;U_ۤÑk"s=3>eamP* 6hB0Hmx ɫqGHn-}۶Jy?5Q>XƤ"\p;5CH unnMڣQ"%DXG@y)z]0bS848?ԎdJIv,Zxo>xL=I0],fcw.̼q|Ν1vGq4FVbۿ'O*s w,bov5OMzϸx/ĤdA H2\B+AHj2eL"Jx~zo cߞܡ_>~_ɡY!͚1nuevizzxrrmՉg'ƎEidhw j6:Whi_0=D}4KcuI*e-ws5C.'fΙ1!iLJVv5Zya{Z|di]㊰H[+$0LD]IENDB`xplanet-1.3.0/xplanet/images/earth.jpg0000644000175000017500000101054710411344513014640 00000000000000JFIFHH.Photoshop 3.08BIMxHH(FG(HH(d'`8BIMHH8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMland_ocean_ice_20488BIM8BIM8BIM!UAdobe PhotoshopAdobe Photoshop 6.08BIMAdobed        ""    !1A"Qa2qBRbr#3CS$cs4T%Dt !1A"2QBRbraqҁ#3CScs$4 ?RRRRRxMB}1_#@&gخFB`bw,G6ۿ9?W`>xك; F5|LT?L vhڮK`2Q+F/ᕆ `dlw *wxZ$ & Q[9F9VGLEkDn*SNy{^2ۋ{dd,{uc)U͛sƌoб^kSc㵴[À }q&D-yz[&$`e>i_J`s_l6W_+goNko 2-7:&k8M:;E>4:uo}Ly72dq.%Yߚ͢I6'H0E,9jq 8|Rcv -ﳯ2{Ng[m;gd>7wVڀRVu\MrɋX},b]ӭ *rV plPX@!n>uX,e{5P9Bp]+\Ʌs]rlK_Xj-tRυu-d߽ΧAWk6ENZ 7gg'5"܌;kauhdeQ7Nd^e6k"R=4S*ZVqĖ1(L=퍥!Aț;,.%gU-x f A9kƀlz 55t\tNTyokgCuW5m QqVG:{LWrv;>:^svZ2" Z^Om!E'R ?uvK.!J7KV6lo[{}4PA u q{#mquy@ M>5]@ {F`@ŴO8}NoAWm, / B:hzֳ4yߗ?1w4mn6H d,u*c+F{+[k%F};hڥ)?Qr9!/O“Y}z6rm:8lm:|p"Ko04Yu5a- ki%k]Z ',wR ?wgzpiJudkw%~(7<2 58엑ga/$}1Hj;+_b^ջV\Ut1 = ̓8#_F* My-Tq(WAk8Ei.|hܲouf7fʀ q1q 9css}%;ILnv#wRgEqm&Xdve3kG#+ongGq54.NmS9vD?ZhKMYl+{֓ZzV5m_?|[11M$ln^mbm 1/öF@ёPxm>[<>xǼ4i tqiP]:ս5@VV#$W+\?}e{au;=1_Ts5?'ɾO'[Dg|qƂ\Y3e8~_7\ N7 ZJP'ٮYFYS5=jIp>g6CK\Z}Nj.ɖ_I~[nC yuOf&O/+mT4sR=W1 kv<|zħ˿a[;6FSLF~xS.o|}Ihv \To {Vl¶\WĨ99S1p6xѳaZ1u쥎xMQ8Tp,PRHlw(,ozs?EGJ"ZiO4QO]&L72n-[X+%*TWKs?j$>Lup'ٺz<2iE/W/|Nm;o6CHuv\yiQ+ 矋n5Zbz?coOo͟p&[F$m7jsk]LM.pmmmܱ"5x$!ѧf+ypeַWj,r1I 6мI׶+-~罯ViuQ}t׍|Jɑ Ky.q ,z[ WfK%hw^Khгektj&X8O9g+h˽lWmvuMsGZYSs$Ŗ@x4(cyHeOJͣ׷V\Q\tub0Gױy\ϰwoP9 ң:% =Ρ@(C̭hk+Lv݂ω 2"-Qе0CQ\hL`X PB hpb@ʥ%>( s%nl^F$n"} ˁx@Y[+i4ŵWʍZfڇt 5Zt8ۖ\$6j\j >wR7rԓ<]ihoŁ!͂}{~gizK3]#S{HhJ1.bvᮏk649)H6:;K^C- ,5czwAj֑4UWLJ#8#53f?OS)lr iSɣHo[y v̳ Jvé埓Ťv衞1A&.9fZa5|saXᬎUqzkg=X;R;i<9w}|Fȷ&Asj.dpn6}7Gs:W2 1}n:v~r|ݯ --tҞG[r]Û]+ZOjV|fi&E pak]mzN:&~&^sy;x$,ڦ@Eͫn.-ǤKk3|pV0x$5茂?%׏y/0<-%ݯ8%hwQc-rkǦӳ[52kG&stc45wZZǕYzK|q|,:\ψ|>]fdr5n@-& Hn#i;;x ݯX?J~rdjm\̛ kuGѵ4`FlsWGѥN[ql|ad~įfxGbK !l=ʸJ'mO[ CE3cCIŵ&cҍ=26sHK]ydo'.xPCL _*+[rfIhֺF9iŠ_t2 AytbatzInzj#mn k\i45Ǘ.- n.zQG+^1ST%$ hc[7LӮjk9~\5[ΜRQpꦥf۟8縕-oL9{D]ŷv4]EBsZt߫t-oyOq6XnH7{Z>6Ѭ(RMbe/qc^U\  9iyљ)42:7ILUqhsYS#4y hIi0$Rf}iջF١h ?5ƒ[k'e02)M/cC\NwY_*n4q#\)ަ>\m7N<2Gu{mYZLXYcZCuJٴhp卼7 IzSH qI-J0Poێk{=kuF2{X󗱋o͆hx+^~'RgÅ<ϪG s?ufl~g Cw=cCYiN9ymw]+ӛr[o&襔5+u}yؒ2C5\EW/g?.oMyacRyks\j8߼4~/\DZ Z[I/{ʟYiX~z=Ǖ׻Bۘ[qi W=yo};H: `X5VW2\АրHƵ+-/P`#a ;4_yV3۝Yq(•:m1&QkwQofEQd{bfk$Hr(5s4ms5cq~3]=ϛk$5kyqG 7NL/Ek^5mF/LY2Wc7jf̧ -ɲ vKF`qѵpzȞQ?_"6ÿBso3v2Ak5ms ] g3N_=>K<%|-/q!rk0FK̮$_;,sC^g7cμٲWypDg~Z3Duϱx'\msZ^j-y9lklq;廨ۭb| eYk$u^K]n?U<Ѻ-K"9n15s5rI0ѽm1p:>c[=Wαlͯ/[_{=7g{#'IoFw]/-]q.XXL" 9* kΥ+/ډ򧓏#E (ts Mݼո[1l&nnW7k/ ;vY-ksb5aŌS%kzoקWNfe2/If0g zxo|w< {otpրt+u|&ys[alZOPEpK;<-tlͤPCߣ Ror۵27-s pN9r1ˡ Zyclv+=yXZup= 𶦍5jI!k].>"}+Xڬj$%0Gj2e yuA5z(r֘/xY;QZsYivAi+Ļ Nxd3M{-nf^uQMJہs7Uꊍ<'L7rRt &:FxC+=E7A-HSU̷n|SۃK^E]^0j?5np e W˩i3y!kZ\ᤖ1.9Xr]?/޶wFJEԒ ӑ1)xeջC6;c sN-txuk^okm?Cv$c#ݛq/ym<^a|QoﲕkY eko&3{moecdK#M<~cΜzYwwx繷K)O5Mtͥb~|{͞loL=skc*G{I^^x4ԼFvU&gfwXƙS a8kzN%̷q1mp5~z i@Z$!&;R6\0R/{C|WF VRBiXEV=U3"q V㢾)j4]ͻl&F=H"4-/-a@hOp/|XykOfG3VWQtP8g\o ksjtf@ؘ׃5-q;W,^/E~R6k}1x=z˟sۧuu3Oeyz6;Ȼϔ/[u1X e;bs.>;Wv =ׯq{CW4gjz.tk_mLFFZ?әnm6K0Ye n.!-5Ѭ9K2S2Ǚ6gNM2Vrͣ\j7S{wq24ܾdno𫶙%Õ'<7AӸ5-1lstzw;/Yl%"34,͡VG}Λ^,uw9ct.l^•vixug/;-bk$WT/%ic}7oöF4M1dP}ťY:ϼW-pEAk& !L\ۮpUr70bvKC.} 7ۆpD1wÏ'[q޾|y;ikܭ ´k*&ycWYõOQ;vږnK2{L906~}y iw oG+kI/>ޒΙfcVֺ;{ŠH굤O/g']'%omS>Hfz.#o.#<ݝ,dn{ eE'f| AUYDVD @AakEA9O*|毛.6MgPlsy?y\Lgl?ch5D;}x\:fn ',Wl9ڰoe"#RO!v{T(`mr0y#KB\qQ@&L'L,ۀ][6c< ,pm[Զ3:YAip%6LW9c| ݥ=L4CR=SK+٧ס^^vj-גFNWbW"yGYqtm#S /i9ziSyvm: F5bi2pϲ--Mi]\6YZ%h6F4˿ l;uc`Fy2u~uzf/>[|7 t9QV7>GD\3G5,J7jvݢpn? szlfo;Mt| ,,o+cG,nk449n}lm#^pܝ(/76su5tK?=k^5׷Q-Xhc2u$8ICnpyB,ËRm>č;. \ƇktWk~0՚yfvI x5L(*2i9zܬN!"U2O1O(d7ŬV.QxLU <*ar`ʡTa2'a2`#9& ,4a%L5h90eRÂk) &De c++ܓ[I[w9$k&F[llq ;s_o;N7vgtv}wwm+].q^{mol3I#n[vzFqi!d3A݋Yv-t.`$3M7SL{Cf5=Yfg+u=w7K=ss)itoc of77K*L g=\vQ= 0w` P@Mr\ZJKUN.k^ux.GAkm5ykOMcjneIFwnSFlspz{@437+k]3>]{}zlѐl74q4 nl4nql] <_yKn  .)wVoOI|d}PHeNftij:`F&A%ěC#9jpm}ԏ1$oS-alm+= u ^ i_(vHXC~var΢5n_,qSjFmyɤ&ukA,=]nydmm#fsDZ_n.:iOU޲|Nw': -`^z9|:,]&.nyݎqrmn/k- IdbϽͮ]_9oPrh$|]z. +q Ng3]izu[_<~۟C2F% 4>X6=]?Kղk^=Zy2C5uF5tqu,}_t~r~w1ypߤ22RA-n83Xn <+4c.3E1\(LF}LaB+(AHg`W Uk &:3Èϒ@ӈ !蕾kuhw5fkGɎ1&9hyP75+s/kmh7WR]W75I}V'e*|ζ{c5~[zmnFn%8ZYrOЂ{K!x1>48}mnLCXOm%W*C=J+N̷_7 \_O%ɭKkuto3vJ+WM=)մgk\.~dy8$6̏ `᤿Ϳg|9d?=lz|xgkD!-$;H?w“{S|b$6+ˋ\yXӞ#^TFkFd͇oAuo\yA׵Ky#;Xhko6F3\=>AHÈ aRԱx$}M-2^ b%@ r1጑8O ȀR9PH4o.l. nsqUz L4"o-|74ϭh-c=,ۺˆ?4*ћV46;sp$H9?ԥg|kpAo!Rd6潜*{;bs.MZ:!xK裿 Vwo~n/&6邎:t<[tפDX&l IP8y4?Lm˥~|aK4p'YqI\7ţPyP5NZmFܙ5oӤ tѭl˰ntූ\:Sp'*f3݇#ho";T0XzQ\:A^f;1'}\{oFlAe$ 9\GkWic`\&PXIS ̦IT- cG0"f70eV4WrV, S\ekY$%CȧԗY{ݾVPRGئJ:3bRO ~,t,oXdG՞/ j7__;n-M؂*1rl@@@@@@@@@@@@@@@@@@@@@ in[2е;>MA[w:|d׭D{V+nqn\OexoIݭ/o?ome/;/ h_ 9"HHfb6_̻I{o^ϖ[t)X ֿWϫZ\ZY;87]k h [$GaYF˶PsZr8r{ݯrTwf޼bW듨io~sM5ĒtYO:;nFSI\9tHNi`W9XMZ*A5*49 x)UV<jk3UL.$Z8(q΃ \.uCMo\A-nkCڵR@RWA^sO u0%r m?yy:ιtvw=omi/f |_Ok ]oNd5p5ǷԹ/lGi|/\|f,-1U)M+ϷnN>`nWl{ۻ Yguk%qx7aݏk-"R~ w*n3Z[ %Ϲ`ݾ*xngñFFoG.FA&X4Ls=׳,rklX|<]ӀG=.if/7ϕg{]l=6WE#鷟W_DzZ!V.q2U$P/.>ϓeۋ(zRM^m ȱN?k|ȷAm\DqZZ~-+{[}o |%*O~~0W#϶08>G<82֓>4;Oj+>ƺ8|;ݶC;lz ǞӼ\GGn/.C+#-Mؘ{k5&Ǧ Vrm*?RT{ča9EO+&EyΖ89Vƞf~Dhiq*(n9^2k}|mu0iwhjj^iY `$Ju.isG{6;$nQ}ono\V׸_KdԱ=NA-ǖ=ʍ4֞NZ8r]˯\{8evw[{.Î{_N.S8pݺ؛!1 h PNqW>˧m[]ceZ]4'{Zp@w>%L6vhcw27L-jvyc>_뇘[6jƎ|rTKK xWv|j$剕#[wY)盿7 K}H\ha< ͮ9xn^م U@Q2((!KZ,h#%(P炍2W,fִ*ģX2Nggn[(;Sx~]~\98rG:vlvp4^8ù}x}fRi{Ԍ]k=d ]¢yͰvw61qX?7[LNw߾p0c{COBٿ7Ѯg [?ifyTSDMh y-\^ϟ,۷.kdL#kˆ# +oֽDֆk%\ڟKg|`c~f9nC铨9ZakkͻpY5bWOG#_kW9L=4B,TXP Ue`rU Y\ɃNdR10RkYMf}wGkja׉Yn$p PxދTU1R}QY=ާ÷]_m,nlƺbLc4[;_/nm mX\EހmW3W^=6?͒>濘ok]}^IoܗA^8 pA\Ua,b-M"Hu1^._[IwצsM1p6KWo844Z嵱^\gw#pQrӸ$$6(ZGoq.M̮QY$2>jq9ʀSd-ݝn{8`Piͧęf떓6#jQQVkd`(2?+aC]IW!P r/&WIeS浉鷫C/pAlqy<&Cgƻ{1y#==pfڜfh{Dz8[zmuVK[#[r#{Hk%ӕW+;W_?as&:r _4M{$=>|wͣ{CUy>a}iz:M|tb,왧Uw͏+Drq uMv/عwOrP O>nhauU L c쩁fnn+4;ȔC3gPl'=Eς4xo-+ǘF,h{+odOcyq'`\s%}7[˪M19,Y۝\XiPNU\Qhw ibV>FZG @@@4@@@Ah|FdLm.F9-X,m[̻qyv|{Ao`7F ]rIz98ufgvg,|\j\y;H>2~7:>}ߪ6W3PH0b^/.>|fx#*t 7Z{3{d` \A<ufsH}Gi_cyy}IEE0te6mn+mlϷm焑߅7vcŪ[JUt\*Q2TPZ^dTic;ue`s@*q; |FTU+LK]|s iw/W/:^޾^>f$@zne-QoM-oO|\oďyGfF-% Ҁ jը1t')bpp5Y JȢ!54yMo~L]+šx.u/m8M!$8GGMӡ>?&+˩wEŧ ?.(pk}wNvxU|/[H[@q6W>#^od7lۼ\G_ erEM&צkcydVP;@CR*#=oً瞼Sbz4,y q֚gJu8$QK]5Ze!2fPsY\" "-EP.S+K+Z\J&S2\"EEQSTB@ fVU RG+W ӎjݰ$2ZfY!k+aT[-QJԪ̌`FGU|kRoj(S' j>H*e,UmaVp 63#rӝԌFVVB3zG2k9S.-qu!5 ij|3Iv `3%V뺎 u]\=_ioWyDb fy zKp>'sϛakkt2 Eϩ5]_{S|:c%|(y_n鑘+*CAD%H(. @bUJXو4*amᄌm"=g.ܓ[:.D6Pֶ&Օ#Ŀ'} d 5v~\y4m6PD&qh$q%}OC9yv?.ٲBps_[}$_y[[-x8k/?Ɨˇ~F^R7@H_"wjrz%ξLM.2yJ+瘢`4>ļ{͸9SZ7ɷt 2!8}_ǥ77uߊ߱\y}lF~}txm5}ݙ.Ա̽ a}*5҇o?ߋNygf'6jqaW˯KsH Ns$l4ێ[Ս?h&#b`v jo+ nԃvKhelCdkMKIKwDm@AWHZ1xڃ>uպN6i Nt_UϿ-_:տ}euyw(oP^kͶz.ϟjxNؚ?cmC c#W SۼN7{[c6=-3lCvby6F##V5gkw `̇0C<7k$ݷܹFx\M:'76e۾Lr%,4S$yi#K5z;/]S}~&v"]~j8@|즦4QaO̽m~}2o0I_T80 5ƚMf#˶sdPqf˦V5E^FiJIVkHVDcQ0e6[2?jO$0)P0L.R(2 bJb/YM2ݷ.e4^-oFlK8vt- {΃_;moa sq,ek1\eYl'ҹܮnk>sXyymXD]=v?S_._+O^u%ͫt;I /s{]ɧ^55]='PKּ681ρKa}͛uOm :h8~k[ƻ}qXߤ4[K#U~^ 2#{"=B^@"nf{nFsXl<\yorOlA2o[rڽ}1rmc,=>nz:w3:-h\RE$QJ7lz}yl~sqK}i.߻ M?-ݦk0/xoc%WiJw7]~?y{bi.#lWG!S?[XqU'j[;<;+R@{a$ ( uy=_ i51yeڼչ^dŢjdt'C\W?YͿ$7Ǭۺ wUnQ'/.z[[i!A-{kŮW}r^&^lsi 5fZ76 x>/yۍȻݷQHMb!ءyן7yt[EoIWDSFzKo$mN}'kzwgqQiuOx]>M6YѾ[hDN,u+^O&wlNE{tO}n^9w/#~h^_Fη-O0/1nznA:gZ5 xjHŬ;~6еkc[W}u PE#[8EuI1ݿ,Dݰܶ0(qs[CJz[)ݕɹZ\58Fƽdn}Nmcm%n|l~lkw=0鍽8!m5~WOLo~_*iʹqXmWHag{i%QZܢwW9k=^Eosqӣ4;̷W[8 |v8jdqR ף̽|\K9r,Zy"c{/.iU|q'r A*f1ef`@ 3Z` ^) jp4U d/+zHaK1E9~s/77vMв~`dύL]8/6knޣl[xb`d~c>GUKz~%~g.rB;,O43zY~eL#9^'^W+ݽ |\N@ֻޕNoի2W7+MMo[uAylRFXcȵ=޷o˗7y -l6Gai{[얳㗓'̹o|olC\X9n^֥_G6vuӓͦ>.Hd`Φs?ڑ|ǾlfX7~ո69tH,os',_m~'yA$Y:(K^>D5"K{8-Fj}U UɅ'bͭH%٨Zu(0JL]<|#^&}>6o " QTsjEK\!EAA($ bB4d it̀Q@Ҙ2-f[#h=㫝6s-'MFU澯XoCo|6Hq?/6QY'¿%H3r L niWlg_sgq?Y zSOx52ׄRIK eFTʮ0^dqksyF3DLn%Ů5jOVߗdN.FI}]k̳oSŸ2rZ |n]el-M[h*m4^˾˳irB].%թ6ά5!ָ:V/h\jOj+)#{x.]W'llW+:_u 鴮̏vd᎖N@a bqL56Ba3'qĔU$`(ָJ5'gVbjЫ9l;Ũe%hS\3+<,Ϲ2LV״QKWw~_Yoiʀ&UNN?BaZH.W2:50cN.8vRɮf.4*Syqy :4cţ쪖gGNC$_*Y;8(u,F5#aZ& K(@0hwH:q 'sH |p3Y-^4Z^_[%4 C[ZN8z'½Zx~xۍ $eG=1百OY73[f;ȗO\}{RkVss[w[1{ZE50;Ѯ?c㯼ǿ7\]>L2|}ai9kc2d=ﮓ˻us[#O=nuw|et\-sߒs(M;O^K$ r5ڳafU(U09?\w J}*z gW~ǴzOv/ Jv5}:Nz}onG_[\qNf{k[?ʻL1]T[K0y?"EÝ7=+k@]5Ok/+Oa݃6mxc}dZ}pO4i] 1L%p.k.rͻ&I&8AQWTe2|J>[}Zהs51qmoKܱ|^,:&umKI h-Ie2>i<5~wxZF>%gu9i#s[5n雖.(&] զ.ss-{Sˣ_MA- <%b  ˦P{d5)AVk =)شgOxtD;p/?/>s;\74Yyf v9Kvuj÷SQxv䷻:;6;Sha)3Zg*tk?bW!p{+,,s_ZۋHeG944B-b(݄L6{+q2]t<o[ep]Y]M yǗ-U~46`ZGg;t|R8 74ji?RK;xZ!&9\vU˼ݩ4a{Eu8vijs6{\ =Sk:k^]ZVjOouD{A{iVy>'?Oq:GTOnhYQ~_Ygo-^fg Mg,M>ҳGZz7 ӔOkWn=K31\D G+i9-l;8++>Eq0M}g/'6GMe<bk]1ĆP=Q_-NܟΜ7=wm~?g{ycioSNw#j54Ḷ~e;2b+n#hvF3~.n=m???O2s'է0u3%Zu5_쯫yOǫO3mQ2kptfɜ^KtGIog/BW +˪ ]^_1nFy㮬cqo%_t~V^ZJJR88xη󤯫v nP[ 4xicV5O\->mH!6"NN|Oa{K0^_g3sq:I$o&.%}m6-%‚2[s͙8)bs-!q/7$B;x}-^.~36J] {pA`9}no> dNМa&f1*9*QB e0=(efqڳZ{.yE eJ+L.79|OA2/}F?勖E> ͥe. #z/n[1|?gW&ܺO^~λG-ܤJ.v|I:m~~sp..-Z|Uk}J?g*>BssPQcN?jnJڷ'nc!ݬ{0k^HJG<I5ZZ6m`mkpOQ}RϷ=Noghp&NSIo.}+~fˢ|ǥmfׇvk poCW-g;QZDiH]W :@UGz#**VИL@LGj )!E¥EAQQ($ v**( {0W Wl|_h(N4Ɱصm ^NVԐoKͦAJ/n21+`.y s(纍찎HgWoY}ў-t8 4sIkoɿnۚaD cF[4sV{5sl6飍44V>³9W;mOJ޼wneŠ ҬΝ{sx>yM)@^J,skGPIǀ?{YMRhҾկ{8~ً\rU NO6w.W.=mb_aL {&S 9o,x8ajk ])G 4d.Υaw}vm+~ƾ`y\8P9zY7o/S[iuhd,#2|9̃Eeftӵk ][aLş>kI֧XW+7덻7%&oeLy&;xgum/wߴ`WĊ|__Ƕ,뮻LI|[+;kj.Fה$(.ѧe?9RWR ߶,͵=RfT$G^~-f5>g]zx8+W=Oۇk77xуO0xpVk$׷Rty18I(9`ҳKzumynXl}EN}^~9~\7Js&yr/f6wHgnVЏұ|V]aFS$̔+\V)x+^]%b[ͻ- %&A@ϣyAqP`J,o#΢ W+5xȏN(]0ז;Ci eq}Rݕࣤ0χҦbcM}\$67V(ϋb*B๎ @1LM`!qO0i:z+Elw@<ÚakyjWg*UosDYӰz.Z4‚,B|OԘFƤ:6`C[ہY& +৉v4`&-xXF*rܤ}!0f$n `Oژ\u ),R5;U򇝏ٻAi ԑWC%4q.w+{GQ 95lr53O+91Y'O @塯ޏ8.!Ƣx{e~~NJ?M}6k`l[-Oiq-xY355eZo6^'{IXH)f3pۏiK>k+ ]ȩVuZ n sa'Y׭[lE. Cp yuiܽt^mw3:$O_w.mko} f-8/ouX.F4q arLNa^ y]P(H)y26]G}aV05` *\qL+p"q:H&WV8ׅ.P'R1V%(s4U~%~rk* e2jG2enZjԡy5*+!?OL'ft@C'TtY9T~,skXK^w\4-%C^B˞3t7w?,jh8 VUAcm8~g1؇GJx`[jG.[306`gqK#vHV08kץ_cVkVT<]O n=hV$cSkC_OoK2ys5[uI8#U__NܟkcՌ}'LV>/o&6i:60c#G *ymYGS^P MLyխwr q"ǯo=]KxNkxKؾw.qo붲o3&t[n5vm4IPZzN<{yw:1ɳ]?z׬1}Wz IA%잣9k_\~^^t!cM.޳9_/ѹþ:EaڮbCKj)ۊrz+oQ16ٽ SO0݋}O3ov~`}卣.]5k.^Wwqo_ZgZyRw2spֹMq.^O[Ԝvzݿklk9.5$Krmsu[͓99uv}m^ap3\e>K^Uӟb}ݿk3!ft \8r[vHd'i5m%jWq!֬9n_{y % -<ſ쵬Z5x]͓ΐ}v,;cg~;vF1aeRCWǍtɥ5xy~'g=~16VA'٭ܺ}}]=gm0عl$/k Eshh/^5Myk:)XhdWNY̹qۋ`MlY!е,X5ơUaF]JaVtUo.ITeǽkYd}C#;Yq[v6,j@x 궷}Mxom_et&} Z I55\w}q+&+o<>bڙkCZ1}'@NM^׋Wriz:WcòdQU0^Zmw) *ƌ}^mnk'6)[ #@+Wi;. `-޼?BT빦A{ک9 2鸊 rt7&Ζ)$:|$cIX#_i+W7a:b!ĐLct5hij++-nGSqo"V2NW^>}uK%r&N$qWiO/rQϟeO}./N[ic\[i4v`Bfc˶ӱWYoˊ3o ]N;Mt_[;48r5Y^w{N>'-C޿A] 2H Ϳ 뿇we_;ۍJoN=&4_ɫ8mح꼷Da\#gP~%r?~'I;(,s߃?bp}Fpwkq^3%y>˵|^ jFF&3.1'[rӂ тwuQk2zx/v޿{&c^9:"m5bv:wj++ѓ]R2D# r*n`s9i]tKmY{oQOeWlO-. `2mzWCu*dYY@&?//s93䥹l-W~]l׳zGt6L!deJQ~#3k3gK,.8r ۏi}XaI[nmIzkgg8򲵇ԾkK*Ze9fXt ,S A9J%*olѤ`^Aϰd^9Z򭟄W6,0-\vY2PvnѬ&[᫈R՛6\Bq9E%N~_%uiC#f 2ҔQ儿Q:I0Z@$sʹ\48(/* DYF72h 9wFP摚˽TA ĒXUF5Nf ji3k.gnҌ:O3.Q uj~rۓOqrHqjrU33&W橡(ikW ,mFuoYjF^[i 8271Nw +2Ә7ę<%@L"a,ôQ2[>-agbj'G1A2hr` x@ǵjldЦU05g+Cw&Nt |XU̒eU >8 $ŜWSm-˙xsGVK;mݽĆkOv:&̰;8E,VUHW:6[kK4;WL,Q%ƪ=4ir%4hym&}'HK ;5ulj湺Y~3cyȖ?ަUcՌծPQЫA-{糭 &k^/wN ƞW^+|jf2q-w^ˈ{»k)"duT"(1Č ˄: ^r>'W^;lHjxzƖ]L%aOIX؉kLV, jC4 ̙iS0N< 8ԤvNs"Bq];[7Ixml1q{޺f"c:؊ XpAGԺ ,2H1hrbC+ CA qUbfFd jqkviunN{M]k/qշ,/BHCڜi~Uxn'\{`P d)Zs}կ鶽g_q3ӎ#qz ܸ͖{xH2f2=}^owBi4Ye7MlO٤@ 4=mK}a!:]QNvrfrXJwc'AQ}/7]rZ_MuC-tdmܰخq|]߇Vgū67Q~o~SN6ۺa,p˒鸵LY{6l$aXߏǾ?|<[.3&1JY׏t=ϖ?=gUӓI<+w3v_2mL\ȥk .dA®/oL~foY>V6l?.Iٜ)-cA'x=][דizt)u淟~_ ě!to,k[Ć ;oW;Z귽'|xXLgd44s]m3ywNȊVRυWmop9i>8{&kt4o}50  kؼY_qtF_10 &NI qspMhvHj+ᨧmZuDz3_T7iKjgmM;_J$IWi+ܽ ,,`}ԡőAqϕ[g̭wik45>\6jOǪ kxZ<0RlMyfhoM8OZ[]^fysMYÕ>)"~'}x潜x;WA+ۃ:K ӱ\6#v< Lƃ<1&JeL6,l6#K^&Y7MhnPIo0=ɮJ̅ 0 fmuisNӻjLcy\zoS]B{gEA5m6ak+A UP L[HU2 - ࢨETi%AY0!k,a"*\kp2p-mu8Ngu|Q<:j/`.m6Gard`i.m]~2osn5"m!sNK_ ғ2-d5$0O^K^~[&P+ cA}\3Y}(MBԈKMUU ֘q)XN+@s্\[ƚVkkVk=_ r^UI3Mx=/Ͽٕ!-<*{ݯt)$lŹp ˷9#.-e )N ZdzP cJY. 0jbȫyI4YLF#1;a zj9TJI.8g#~HSe!$шڬFXn^|eK&5ƵAP-8ؙ_$8=$9oiYr\ 0?XS-eRq>jW, } LG ≔rW q!+cPj*`X*BHVuZgi S;T{Ua1]9+kHuUmqmNsAs# gL͊'s$K hWYһEqHغ:XP%,M-))x. ]\~y,LPuJl\^3GvnmAԸwn]Iht]JH> n260?;H=j6^ֽ" -qBSk쵋+\*EUۏmflIq\ֵ5 5f )ZY^h\r\+]m[*U;3I -Kr hg^}"HU Y2:鑘k,KS ݑR9;ki)^h qi+M muHƕGH\„ YNV)i^X_S٥œ kRrئ_Osi(/ۨ67O%\QbS%@H@_W ZahLk[X\?r԰c.v)wg]$0pjւNOҽ]-xŞK&\|ď}$ǯ)/ytoݓ Kb4$]ql?_wumM[ږq48Ux_%xo[:/V;hFkC@iLzTMF20.GÀ$+dn$093*eĐ?R\ #BA&YJ]8\.-@6BA.n5スӆwɆ9$ 1L+!qVk8lr%`q"΋*_+DVDƶFNsvۀok$o3W^]qklZ5N#sp$O7r6G_kv2hд_W_Ow??k>ckk[mlcP]2E,/v=sASw{.+yº%6z瓷9]+{i|͗lG5oN}6icnZ't45<1s\aYg}̎kqxcܩKjnk:!w^9:iǐJ048q_7_nv?'9&hks zOf3kcd=IwH鈐`Nfg_FKes'cz U~<-n_$դ~ޚMuKJGFIsHƭxuxPL^ֺFWޫ[1}ןm,_g^ό  E»}y&u.s|w}6oK!26G,e}_2zMfuww( ۥz]toki r%ѿ֋r-\90b\ٴӈLuZx)z{ |߻`(# |\k~ľ_7nNg H]Pִ5KiOymoW|</21-}|7v[՗֔@@@An1:p)]-.8WKyY2ߘ]<6\K\:mw7W];Go1onc.5ѢRPWio#}Kկ7gw]K"xlLjz]s3wp[G$6gQEkFjLkٜrʅT\'RQ@Pd` QصׂQxȝi}7qm?K zs̽w/.n[6<荚c5- NYü_{׮]ɒ\8dv/7:x[jiŇng6Nnfɤ\^[i^{w4a]pc f]% 8:3$mO3lWQKwȖ8OcK;0HB$i`wN6Ѳ;}-;ms.`}?&띻5Xzrs `TU YiGPQR @4$;26.թ$4 \UldRGOiۤ/^bV/j˄Zm,W/s/u%NCp^e^]-&r*k<QvˎN*Z.9uYkMGj@Fc/ӼxL-ߋkHIj<_Y ֵ4jsN {Sۑ_{VYX(hUYnE:-p at@eJQuFW[\p!s4Zcm{vu9˟99x.wFZ5öy[vc'rw^^M[Wt!FXW'68/ƜZ{ofK7k{})-VV5_jtf8&Q^ZtUrFM˽+YeʄWC+:9&WM)IQA45%Lu&Dt`Ø_;|G}լ7##`F@ aqg#*Cca?j,'UN2b\\odӳ1 T'RT5I㘖dV>k8L&T[\KtGy?ܭg;$u~bkZ] ]eiV֊c;QAN@jF ݁a8r]PP]% f,8eTNxqLB.YZYXw**4-`(enWLr0XHʦNa%qx+)\2Y9(<%12ce<$,ە (FBrQd VlڮC#.˥-Zt J3l. \*۷#Q1jWX{sK}+6eXZ0IXED\[Mҙi͕UDיLdh1#vlZ>2Ciެfd5nXS\yeh@%ji•mbsu*Gb7VG, TkuKA/kjcsS"+qh@4էb65e0>XVDS{ S$C+Y,7&iv`_pWYV)b\X㈭A(etⴲA)e@Z( sh \Nڙf. *5pLXZ\KLdUˆIeb~%240h.V5!/hyEy)Ŝ왵 z*/oi| #H̺mel7\6v͆:%nbciԣ}̻ZicH!|{j2}3X 4b^m1m72Jak[hR巭yf86w6HhҽsYu=vpx85葩Qk66X 2%r羓m}{Ml&J}Zs6i-\eS' wf.UhCS}6o-|ng{g7䊌x82ё̥Kq+k5VP4,.֎#ƴ sb)FW3tO.bG況-L%.HAZVGgŻ|ocuqpKoS\Ak+li& iorxÔy`].ɛ;uƇ:TSDɖfno:$2́C(=-i`':+Ct|{R6ܭHnYW;+  .  &TUmdfN5Iۇ(ꁍ(V퉖+ zCH zO=$sIFpƟ}K瞡wۋ-v_ׇLmvt6]~ISX}oyx}Vbk|[mm,ݮn=62*U涗]~:̼&[+M-?S)O}A='fm͐_Fgl%B1cֆ/ߟ|ɷwIwNAxyq欑?W5g|>{|vn9&e|tٟoZJr3k}ir ܷ(Y aA*b^N]x./&sG2j^~?Gŵ/ɻɴs߰ٝjFc^tyv hBo؛ !4]7WOz',n܇H1 я NjWVYY#e N5RL+|uA+ K^0oߺsKr;7[o"s% s^eˆWcy)l cyZCzM{n#Ͷso)kEZj0:Wyki#5yHa"0d" Nj)RCpWV qW 哨2H:½]rwm D/&Z/x:k'YwݾVy&xps 1M9tENWszŮsֺ~]A19 >re/F]= z>lחwg9u# /a{lJ~_3ljtו͕&\yvdE h|ni&,[mua(*(ֈ,וef*5T4tN5۷GTھ/smsO;k5OeZ?oXmj-a|61wך[մHoE/s~@ŷ9{Ζ׉'Q?Z㹓O+{]J`0k'L$HS'^r'U2x8XfS %2CڦVE+\i%0eZV@_L&c\n.- W$WԶ݂J{r_~K~_e  lm{3>7ǥi;oE,PT{3E*\8QoM.&nwc^c/Mk?:^`%0_]xI+je 1Uwg |NM/ʺkפQ4WfXz-q ҵ˼I :H(hE\rea wݕ*^DӴ$9fN-k{R[@dF!uik|w3 ѹdj>M6/&ޚYZa,x{jr8f>кo89:rٍ߼ûu ºjnԒN`-9svcvgl>.ZWOPN9vٛY#&+>AZ ;&a& 'aeCEUbF(; 05{HTn7fGt)EM:qY2CT@J!: +5p9aMFUW .HĶ1y Ld:}>FG:HkhՁ95eYn [Ah^Z -09f2Η ~/TW꜈*`®U\5 42 Qec$Wvkn9b4_J] Ţ +B3"­%;1 jL*]A%jQ2 ?DWu!RF&^f..!%XKF2=SZ{Sˆ%c\:N:kN⬶'PAՀ-}zFāִϗͩZiЦXg _%%cX%(O&Vܾd=+Yoɐ_Ɉ59LoZ<~ATYja15wn\KLP҇UєrF-CZ A핺4 2&tdJᑚ$vcHܹa4rmh ME;95=c 'ՠVp>T}A - 9i8UWĀW7O\#z϶Yc`WJڠVrQ2745z)t#B8+UiYdsfy( 퐌A>3LS '5ւHۀ8"v1jǿhbnS&XE.Z W>˶>#R ϶wxc3d#5esIͧxwopvތr̮$'Zə;qre4eܥiʖPU-״PzVv,bfG$O*<0וf~.һK2+=?ٮcצZ&ÍHaU'F` ˱i_@Α 2JLzkf?eн%Z=b֜s.|ulG~w2W5\w^Miqcn5N'8lkKqY?&Xj\5ٻ>Uh.鞿ٰ%ޣCAK/Lk\8sZr׿N]y&ur[f#?kRsz-v&0#F?iy7|ǻ}9oϜvM1kiE>2OMs?/tO卮^T]]i,ͧ1_kJO^{skc>v#k Kx `|:}W/UV~ lW83G>+{s'i_|獣. ~ .ꠀ|;]lG"i{$Y}k굫^l ya(KbK]vqe{vQeD0Tv !ECEUEXJ*Df7 n)3W咹c2S.U L/}rXV[5)jFT:HU2zTU@'4Zx̋:7dgfg )UE*A8_)EJ&j:>X|\@ gj\QkYk!5Θñh>s{|V{j4m%qru}TҼ7lth8Hai:UsgZG|;ä@r/q}KpFp-3tv0j^決qK/E߃|/7/'h1q+\|zknַTTUuch2 ޫmZn'_2 EZa{kZ. o{OjL{`.*SoEӮC3CE9s(!Wǰ' R[:j\NbkZhZw/WL,wCHjpb/bˆQ08ҸYL.m4`3~m\,~IWlbZ`;TXZ&]} YE\} a}  .'4L4v(qbpT@.9FQ@pjE3u[]09vDQYC(X凨E0#%=)I{̬ҘqiBRFjpb:oHHҹ]fhI{"ഽܮ9Vf\ɠ?سw 't_KI 723VIZ'֠>m8fNI mg I,NތD8*†@L囶@J8V(Q\+3nh\&(;  QR@Ө:D0TXR.kq 梢%:EEU(O֢_emlKy!:e@WM6*1W 2c'V#% .L0E8Eh0\(\W&PU29K L% *npLN,ºm9JY4i=Ojӣ|6[3AV  Q|ejb+v,N'd7 8H?gޟ*^=,h1Nj9he-8ӅT*'% ƀ[|+RTꩍڀDU{e1j4'j:c4yܫHHr\U[ZX=P%s_գT=f8k6X V_oN-|6^YL9`9M3jc]6#ps_X˦[pYٍ"Jaea`H 2{h)vHױc;W~>>v\㻛}KV7MzM(Wf|Xni;1Yy6V9uٴfsliv#h@k)ݧGm˭Hh33,ۆ+x Rles2[VwЮY_bKg)ZYL.] +G¶fa[Oi+0T?[g?y8g|tZ jWvLo-_bэ #2]ĊؗT;3Kl4s2vX R;gB䵕FA3 #K-D?MCu9i/w727+{~G-ub:/x4j.N}6~}}|HOc4 #>L.@{ԣ5VB$$)V8-7JfT12OpNw,T摊w:60i{>Xy&yJZ㏭N&Z5Ern5s)vs˪ִ7.-X{x6m.56;Cҹd\_x^;{ 5=+w2vclLi-=+WkwH՚7jG)]Q&J~nj <*K9`y{*|Sh{8Mreat%ƙ7vme٨1Ո.~%hKC.ykh[H A1&؆43զBh`viy/^fO?Z zܐ EUE0TNL͉AT(YDk5{닽"GH#[ցrӋ^<%[4;KKw5I0Qwռe2ټQU*n˘s7ӝGwYDǣ+q99ap_kObǒ8 Uhqp^Q7i\+46 `+8%K@]$bCl䰐d[#CgJ/a.`k,/:JN}@UZiL{VXTP2ߧ˒c~mZ2cZGMGZy ~@S:/}Co.[ tnjcھfkGn1 DTmkw[F TW]$QZquq‹&^mIsًpX3^C_{|,~֕ý}._)H.nyؿ=8/5r;i+uߒͷηF-H.51ZO^NjuX0kg7ףs< 0 u;p+V&*A 9juk8eLcpEu|ӡHyShcgԻeF)Ck9gKQp>լƲwHLۙ$TO$hÂd`0JffځBbGa˹0cڵ"j,Y-ǴeW;di?jvTEq*嬬K]DPUGP8OX> ӂ=(q= 2vbX5U Ddr&RnuaL3ɃN8v'csS'jdJ:2d/gC$s*eWI\)FJ [9Hiވ$~aAhxTYm)͚ӤgsCaQzLsjuUrۈtdѧf;;6\wo֖iwۆ82y\ߙbh>2ldklLW13Qh-e!F:bȴmuN8?_֠UѸU|V ,c9;1D__ckiv%ݦ=ߋnKgmw?2v4`9iUoMxvWˤ_ɨ}%}-t{5yN `ֹl} ˦\mOEl8e7~K7/ΞIwNKٞ_{~rmz+ؘJk9~ƚ|1{tm?K#P_uc@j{2:`{ #\ =K.͗ж6\Mny~w?vK6cY{o5n|tn\ DekM%ds/oK8:{o>k7[[mLOp17rG5϶z]|yI5nmOms]֘jѯIJ;V½Ny/'xͶ!!h4lJGOixct\[5_ mǮ-=ō jo}]][EojONw ?36;zM+y+귟2v_'-Z!7xCd,˯|YqMey ,\C"tݸ1i 4KVC#SOYomK!4oďwE_l*js4Zݪ΍y, f]B \LkZ+_gs߿~APF9WK\ J,pU (r NJ W&$q0tGNkOx}g6ifuN:90.nJ'w\txCu N_ZϓJ%eGuY..&/I8^γȌ$8.6ȬFgVw.b21,V̬ {vg<@^8+{#|.E7~|Ii=}7u髮vI.ӍRyS?&B Z3]uK\~z{{o$Sioe\Ӵ+ vm\oa_C^O=qgZ,;Bw2|묳66.sƫۿy6/u cXE2w[uں X2 ak11eGQt{'O$C*\"M\)^/0`Ȑ" 8"#R P qepP5 JeSPц% C 1*Wpw2 ;Qjhi))xfԶ! E4hM)Z&Zʏ26Y^W9t-vh}]nW QHaRh 5 L)0af bax 8)`If韴CL'uS >WږfQREob8q#*+س8CFS)k朩V&No6n޶ =N{07GSStz^'I[#,.aiyz1C(7!Џ ‰t<$#lma \;GɄ>wi,畎nc"{PhTn.ŽVtyɞ}5vӆJaR*([[PAP{UFY -tK`r ˅;5Z2wed8MT%lJƱwWǨ8[m~a241t`EM=IM\WMo8Z\s#/\#Hef\j? Wy9L2"cPZY3bdpa OwrF7= Rܵ&`V)M;ӏ-ni6Zm8^/_ɮ|wc'ńAd>ga(nm1 8t E*UR)`vv16݂=fWmz4z6Xđ;SW8D+] k,F{Ue0 iejuRT$q5ۈyʹpg_GGn>{yy&!kSW%omM}~vv/kigKj(q˜Yˣ˲3q! ~zɏxw9pTg dJ0Ymf\%3bTQ`Uex%: bn'Nķ&mhiISmWhZ@1^IKݲﮘa.ktEAA4U(%[U8A5EAj*Ɋ 3B` *23N#%0Hp)0Rc9HQ@NH/nyԙf6Hny6g:Gs yxy6ϗ䟙ֲV콎' a?R2#A:IpUdR&K+G-qraeg(iTlܱTZjGjӪj"ZP"LFZ QrqEūZ݃xF7GLZyr SLe62,V Q2C) B)TȆЮW*942i)EB'ӯL)ڳrh淔g}eb̤`u+Yʯ#"Qgރ P S(4էif* p ծK"&uM1atUiu(E Zs<df }mi RU3ֵOl$MT}\/ ǍTgčd,!5ө9#8dIWPpx:'ԺFpf'%J e* xX+C5cZxs.q5KnCqDSƋ\MK"8_^F6FcQo~JrsOe޼V]٢'KR1vΣ-ˊי϶:s@4\yxu߼zxc4:u^L0H&CA$t[j{Hm׽*ݷۮy~Ť|oCjهUvM4"=Ւ>ב><^4gɿ}.Ko%>~ ^SV"sYoQ@PurETQAfӂ P[ q3]WUi/7oԱGn˙lK;Vj˓ow_ïR+mI>#j^[w/,x`s uGZ寸*^(f% w<Ap.o.z7WSp K{q!YiNr1 jbqj @:Dz#\ d FֈF>"u sx2f =katDZZ"ٯ,2ݦH$ W{tCnu4 $9cCQĹt_WkCVTd;<3#}:[N}/#YeFJ4ׇjS9LQQt%[rEEt{z\8BFYLq!2*#49Zx_QۏY{{gso+l-yda*>Ysqì@v u;*_k~-Z3폌T/ͧ/]om׻FfF9K UQB1YU{+WU'H'vg4Ҕ#WeOwо74̛on*| ^ma =Jq@*1 23۠>plzoaVdua 4fNn>nuCMkLVRVWT{(sy/wݡM v&r_mö="wgЬ`$*$ jQ.U0rk.ƁC(*Tj#ISPE@&@E]qV3RhrDP*SJ55pb*TUjJ Ʌ QWiӉU*VJ[ djD)4Nu]5p䙌ΉPGֳɧK4 !Ĝ)E\7{=q%a:Z(1~Giq_JYk6ƺE kVv.w}`i@/}7)6gMG5}%kr۠.'T N,MX tCS ͺJثJ'$~\=5 _ڴ x7UOoN?oUp׈Z ?B+\Yvyk8]S8/=,_cM[S1 fj}}|cij ن>7+X3 贾slyx;8smg75k~ms;HvdS.>[mc.{MLmz(v-`h_^mo:k KY\8}K~ 5+'hn^OSo>UۏqD?BNc@T189K#8RYgF9"$Se[0EOĬZ.(F)J~ԠƗ>r҃e7[E@`T19`֕$XWxce[-)qYL#ca8f]4w~"`orxYH}PR:^ t]^50WU w>7>,JD֥K^pF+}*jB i[8UEe 4PRFLr"&~W@YkQBOФ[ m [{OS"b FVd6YPltET\#+么*3Uq s{20 8U#tZp& Ƈ*EEm0ΫIg4wőўؙL_Bu6iiJFkYaf40 7l\hH* c<UYm4ss4?m4>z@+S,WJjy!Y QrXE_!pTfi؂z$ {`읒_NW`pP4 z `A$TFo&Yj6dut zV3s b"Hȯ>y'm q<%ɐ_׊cYaraIkDpS[6uuTb2Z^g3pT]JFy\>i<q\ty\ǘ~MY׋hɬW XjHp4ۏl5] 6 sG)?ѧUB_UP*r,z[ ¸dJTU- BY֒*ZkLG]!” 9BͭHLGcUdTecx,z5:a]:3d\c=Ʀ3qˋuOk'[MsXw:}e;|xI;ֹܶi_Tz]~oY+vY$ X% ki\y1\_O⟋^nkvUcYͪk*V YYp#%`7~_o>`źbqkjijs//}j=`F983H|57ѥ$s}FjrMߓN۟q՚-ķ0kWiK~eZ :C@y 0uzB Ihk^-e먩Ԧ0cj L8<2#/bꎅ6ѧwQɛ{Mx\_F R&\Y[52WY%"8_4vW1ڮNʳ "${5Uʣ:%G8JaػibinqHY(E=8)1F'ʗon\N_8\ߣXBNKi&2x.leOpjq.^^_[koa mF&{W^fWM$faV{ڷg]};ͫޣ\d)n{ˉ׻^>g9Fq__N)5yc_srBI ٮ^lNvAk k+mÊb;MĬdq֤bpZ&Mfkapi$aWI㵟KG@쪰謒+5\ EJh:Bk| זg[ҀKg6sZ"Dq22, 5AP=IWk#R(L_$hӨU+=@TvіW< Y9A xEō`#ic9Ch@k+du:4"Avdi&75} pL$4}+63*k,4"O,و@;$ Zc]Xre{OVt.oMǗ){4vVې8}_Bd k`n@Y=44qnHkxTW>ŹW$GJS[e˯~aԹކ[,~ߥE˝qvKq+R!Gx*]L3WYAF֠%j!؟H^U<q˸ ^DK*V2B(ew#ik!pƹW~O΍-IJH[I?u^IYAQĮSCʹk+uXAkYlj1M T,)?F2[*F?J\p&3h\iC3(*\@2Z|p')TILvⴹd!2M %\SkR֙L[{c}wzWodu߅  bvW_\& Xpsy:6= iRϠ0؈ښ ۸))CVV9-fjXGSौKۥ2tm좈NVZATo#>E.j[ .d5J41S&3Y|E4"k׳,,k:\ˊղ< z*<8|9vx72CjQҒ@N >_c9lL(ҿwĤԻI:.^a\Vf1hkp58rݹjJ,w]/3ɖfhzf20*]9.I+&Z x zHQSd~Z]$pJ!4fQ2LbS}#iOo'+J V֧-a0 +GO9~z}7?_Mi{M**^6CӌWMg_3js,uGL q Y%qsKE^VXv8K ap]8i jo<:o{i}g797XƇ`_+~]v.Y;7X$o]5 ITݸ^-$]V{/)r_7{|z8c2\]084, dy Ҵ6Q=17 F wLe%״qX9%k=AA\ kB}^"6Ӵpv(2LAxY)=iUv2Qo(r=gc]HU5- qUL4%"J@ |TĽ~;ѰGesP֓BAk;&1Aʾ~R;{gL}=ʬvYƽ65kFT\2Yaqm\@o Hގ0d +J#5|OAj5YKZIK+*XD5PTIp3t#xq=aepaNkR4 YA (>N*+B( 16 =Ks^֦FV^vnvd/W5;b3ZiUj\;FK<6A+rY9Iz1uq;l$0p^)qV˺*`~f//lm<v=mdb1q=>vý-:bkJWߙm|oGn~&G Cuu1uMw֔ =V`5A˵sfYC1f]й U>R92P]|4^_Y8.oаaLgwҝإ%~*VδwrW|KP@K3X?^TO%ӍÝ$5.q$I^4LkǞmrgsukӬU1W Hu#yC'|u i0ۚ |N q౴F h;UEKۥ[Uc]VFv%k ؒRYF^Yyhn)Rgڳ)J6ʍi?Kfε7v31$~yW96Kq{ kدVnA3֩L{V+1VZ=_o{m++pH{2$T(1N+vfi>S-MVZUPFHA(!EJ Q5Ԡo3psJ/ƣfQ?;>pmAػoŮOG2;lBP׊Qؾ?[v/\_bm!k+#M<,uW^;rƽUq\]gVl{V2x?C)n]&: "ioɣlw0H(D jfjVܓOu>7GC[incb4oR7ۺYxZ~Z ^>h$(A8YjS()+3T7j D}JṭgGEp5e}h -ֵ_2OYCZx6?:@njMj;^n8rVk`8 ~3\ fQf84 ۏks 57;IY~պkCN_On wl^-}k{'hXb(k*Tv)Qjzԟj!Ť^@KM 4(M}wm.O75Ʊ٭'f\szu[6:-&m^!VÊ7/6M&%fN^xyޜ6 nT)+nAtZzmqD-_)6[{\Y}K,:mWEOM.s`838F#*~Fm(iQTc:~匽5v$1ШA²GiOEZLp 9doWLc.2[|qSAbܘemXBZ>RKkQp-뚸k A)uKui@srïmbZvVİFc XASV[@8W *JLayi$bTrEjAh5mRo$9U$L+j_0MZp-3393㷊cՇXchPPujt0 wm᫸Q K㒔^ܼ4kijKv4 ;22@3̭HVjp\7'm#hhU7Ӹ4JdV1p๘cK"im[P?g (״wsU]Z/nQ&muPݘ.k̝l$)+귃ON*&S(~4i@ěߕdzϿ6:Iv}Ih9 GWտ4/ͷ%M1ٿolYRn`pb: 3Lc.if[1$`?JUeÁR+\rg,H)1Te2a-#*Uq8"e8wkMb ]3R6Y EI"*WQļFeJ͹csiZ¬t~TfG]ԎcSBV%"5kV7,ܺ\[˯?,NGM^Evjt3dݤd1P4ߺКԇ8p55˽\=58Q$ec, w6d-L5@pw6|W7ogGbL`QuxvS~r]o&ٙkn&.S^A9񽚷_,ͤ<(ax<^ma}aҽYfi΅2׫$Pr/\G;p«Yw,]oF:k NUXtKds|8s* ћAGRgNne7$F'R>+o_ϓo 6a",:221Jfڹ%_CFFt~jx{L٤nqcLpL^iNb3k+AŠV*UohS rϭ`no]q2dW]UQpj@AڢUDҨ*G@@A(%TB"PTAppU*5&L$.ups.}i{'/ceac 6j/ۧۯ:s}moFd:.{+w˨cket4wOYߕGXyo9y]7+5贈-Š9\]qU|M0qVp͙k3iyaȑŘoX^ \iSI^sjvr z|#U_y3r8 E)O5j#r"HmhN-{KӫGX2l]tWUlGMcn+hĄ\3Ig<mӹo)gV.C^Ա4xVZR=8ZV`R&;hÄ.2ꤖg0piܒ-ZHN@,] 8tmIsNh-1镴'>RFTs%$zK g/ ' p~׀\镘hqQ9Aإk- @ުmx'>76dd{C18ٯEg'^Osui=.IcZ-=8ߦ y. {vӋfKWk.{k=M+FFh%'~V)AtObehH#c k @HY\IQI,/3+R&B洊{3Is#@$saWqྷvgkg;jOѩs6W2ή.&_kݮ}çZh{1*sAجLcs<2JjW,7`ʘd'%R%fuV 1?:H OuT\jZ¥QpMUJg"Z3*lT$.H jFX *qjD,=szE$,<"7;vI]6yKtEJW_-]]Opk+˽%}-8M\ʖχ5|_Ϯo:1QLmƼ\}>~鼻._}FuYnFӟ5kߤzo._=q꺺EG/_sŖ;r5Ҵ#R4%PqF|E _,:MFC4V78#L ƆC9)-tmpAo&Y8%;5yOzq0(n^%oтarBN!'Q}I6[9EI+ZVĒ8ޝ+w@r0լ>Է5GAs7T55p8Ub*=q( ZrTYvA 9f%EGjF{{hF{\iZVGB 2VjEO8ALFыU| "}jձ,\ٺma%ɸLq2UUd TЀ >f;- 8G>hEA4s˅Sv4*IZ8LpҖֲ kQc^KV܎P0ikZщu,ǦբȬ[aQ5S1&eԴTMrr&= j#+pm^|=:K\k9Rֵ.8qkd֎9[+i˹/m209Ƃ$mXuθ4Hy[>K-Tppbޛb]ekl{5J3x:qٷo!K[2+7޺5lb4#=-'viM-Nk޳.ķobNjHT0˗:*?IrչS}b0t Z:5wA@m~ 8aqdån,jO #)AhHn u  thf5 4 bPq8zҒ^oe  j(M*Q22S,ЬM2G@Ԓ.^h\VS85ԍS?J^? |_3k$sىujڜj#6;[N1cp^ɴ<ͦ+`N{\ƍ:O.?+?cLSY)܉Yָتg ]J&G+ã 2䇁1+-) >LqƫVL)v pHMT0 4 QQ *jUPBH@Uq*)D  *QDeAK]+m̚2P } s}?ۥoWFCt KqMe[89ѻS ܫx'/}<{%a[[Q銑;(_]Otn//&iOvq/o+P/;Ct_ђH3m)ۂv2s yN9LkZҿԷ:ѽsvɌҴ<+_бkrk+V}*Zx`1i/;ˎ{:AҙL# m+V Hk`LF%(4e@_2r[תЛPz%XMjO&{F.VYC0kjBޓm|Ͻ^mqi14˹{?f~eWּޗM:yk7uRfBL=ujvA>?U]ih; b^ܳ'vsN-|;(§~ONY翿mƼ08$/zoY9'u~;Qi]Zmq)JM*rͼEca%Q\HƵU.UxӋMT:%bsXˤc,\0URIǽE\+]tL@hoz9QJ!]` eL"**CUeqQ(Qc8kʱ*,َYh $VozA.Ǜ+i`Du<7idBўϤ]ç鮸sOtֶGWOf 9>E=voӅMyW]'gVkMyΖf7Qܿ_bq̺y.iz [I>(=_'[5_|7]bGe 9Ʀf-kmMfR2;r4(g.;XS? XD_o҆m YkdReh44]LzkFP4\Rh=,,mtWk)hm#'qQk@'eXkx 4Ȏ*## 䇴inaͤ+r;H}8L,T}He'i'2fTP) ,"=MI{a7]7#0ZH2AqL ·$KyCi3YTB<ꭋP(Ȑڪkl#0(*UnFvZh5<paf1oޟtnFiV-@?g b]oԸSS]_ojJ׎X7o/˾Z:ΒALϩt q[l㳆> tǷ*93qI&ۯ]s$yq4厭[/GYt|p*X*x١m3Gb sF;tM aS+-;18cH?]co{)zErRFV]&\2g:\6.8q*+#c`]bUtZ.~˼ջ.05Zɮws?8ƠOf%^uVgI[G*ȴPOrRRlN iv)094,ݒ66-i+7l,1N#^}7[vwoՓŚjvߥjơzy9.Z#%NL=YMdގryW1ֽpd|b̽9i.5럵+pQŻZA:=릮[":S|bGe\^*VZd6lF4to SIwGUY^EbvH MAVuee*QJPSM& 0Wp$ *QE U k "QRDj9 8AbpEn[hm+My&6N7[B)*bqn|^iՖ~p\e>/Fiͧ]?x]__; Xcҷ}\pz2޶b]AL~eUW&{7Hp*61 +D Nk t>Ϥͭץ_ҘgqcϡZ҄i痮uMm.kK1f v(BM(M+Ny%d JrWh"Ёb90M• ,Mw0mnFƩ+zۅ !H5 -dIizTjVj \>3y٧3$ŃCPWv~^qP \k!3 ]^jpv#ҽ~3;8RMx|-lZo ^=~g}՛\tpi hq_ eLqX2`jR_әĨN|]aRed]&=FK`k4\Kak['şDdX;6m:ë I}Ohrדf; ^)r#<=Oa];)f%2Z 5|B1=g H-1 kEk[mC x& 4l^9$F;] # GO*23^¢NSJ`WYd  X h8j%oU`I%f晰H GxEܭ8%K4{hU^;⺽6+;Pj-fZX"絆RfxY~;'ORѹs|l.iAoǕvjok;}_g釥$(G7|oS}ltӏ[mǼݮ' I QYZfk94nW^hyb.8L=[cGuwٯtdf0^\3M2I263| ڥci^-FW67Ey1ՂZl{wxp`l9A"ᚫNgL6$w 1[kG+q"h뮒7 -Wj+ؓJ҈cL*( SwY֦):R@ZgwC%Cj=!rog(9}+ۖkI-WŔH&'F$`hR5$S޵,q) 7?JuVgVNF4VRiYhT2^LshedǗ} zh[Әo̜wi{}=!@hEzF07:ǁiؾ=?{/lW,!޳ڷGJ;[ںKvl[۱\G>g^&{yvyvaX[RU+\19.{,k [N!uQ3ZcdnDAئٙ=J*=[xZ{gNY\q9Vza떿Di'M0I* *U @QQD 3G3u&|瑀_"*4E *58fU|c |AYմpbsqYȢ(QTBrB , PD\ TA IUޢchxJz/ǟ<{?kUH~WN[˽=iAmM9ߕ9U$t׭}bo"]\ 6;:p\0i4n`1s ,Ñ$0rvt:ѡl\UˬZxyMh8*I[#Zڽ`\6.ӽ]\M$w88{afձeHqѓv%nC0Ʃj,mQ,iZP;94V\h2:TW˞2>,XK\N'$f!nTaykk\VG6)T+Z=F(Y8JK@Á4äq7̸}Q?~wkyuv }^F0L-+^kxVVэ$7IS s vx}F~K5(tb%:4%n#㕭4XT)0.n%tz^*E3S)"}9+q5\(YE3L7W lYLp=~\5/¼/5np {׷ΚM;{~/G}FTJxPVHEE8/_y o9rkqN\5jo.^??y&1ȑn|2Zy&;Ik Aiiۦv ._I\t&Vfr=75 M2=܅O+鮺|:l& !}H ՞oIt^}Y6v=hxl4p9É+_O]s_ɪZxsqjʗ\({VV1uR8}8)#WnHFշ)3Ս(`,WMXrXtTiE2׈Z"^pL*VCDJJOB4{%h+v;G#jtrޘn9"8I}eBkH}⣬T YkB0,E|Jw^ȮepYڔeJ\XVjR<8+ 9%?HZmи8\qk=6y^gm^aARSߑmmZ .|8ݮ$ $jqrʒ<6W:`;a19`x>ռ =pu-tK0h߼[ @@sNJiZo nfC'PS_ͥYs൴s,P E+_iU0+a=]LVVRYͩhQ԰[Q:}+::}nHh*1p炭Em0055RkQ :+a agVjf.p+LYn?h@Z;͔XQaCVl#.+Z랑і;g<8fx]y\gf tj ^542E+˯̓3GkHYbkx7묵ÓqVE)5i>w/ԵצnO&d`yדGn>n]wX؍1 `YE tE}U+(7-~n[m 1eVF[}K:x -e1я~#f ^t-p+67+]uL%ak]6y9_᯽m]Dqh ?^L/:>Zgy7AsaN =' cWe.K\hEI^-Ѹ9(0W{ ]WI` 9rLjɷ8H:Us1EW {znl-md essfk_eY\EXA4I ٝɴ۳~l=dvY4F.] pԵŃ{:[RASjtà #/BFyq*`Eish 075ǧG 3 ,x"(vV\HdE.Cj]6^&il٫[:銸2XYms/0]zF^o&qy羗KޛI{9 }\h\\V(8 1iaW6,KӠC$AskcP5UZϸ\LངaBh+qcJzKl쉐ݹr@-5'|ߕy+Fxpw"t܈jmn/HYR0vb]{!!*M|@i˟F ሢӆڰ[ºIU5qf ;G1"jd`V4ƿ&W-b` ׄaDfB\ _zUgŘAGCZujL旟Cg(v{ {uKW a_SLr JpD$Tm ŕhsg} -^ yz4.޺Ӽteθ sY9 esX\@SwV-$xs Vݶ0kSQ\6q$H%Đ \kL1Os2]{*m2f .jk[ifh-5GVkr7#kHC2=7Q{1X{ͧj W ]Ҭ+ν8դn/X%H^R.:Hg޳k5θ.<˕ aCũ;\H<Ō%&8a4ݝaʠ45&4bW-Z8ԃ\-XQg16"F 8q]8&3MfkwK"m3+_IӽoqjuƩ eV~Ɍ,mUfkxi^K9}~/<gV{ĐA%Mo[_QݙʺPh`}oOx-+*9ŪvkKVjy e$ֹ.n$@OM[ZpQuiא,s]]I>9 %!81<љݧk[עk]ۺ8 u۬ ~&.ۇ&H@1<+7׸ڱ%ԠإՄm.h3ŷ63|L2,Ԛ=!{4o=o%k;I-|oM#J+2N$roІ[w QkZf2ԭ-Tp\lhΫ^)O{*>jCҝ1nLwuYc nR?zݙg d8==Lo}_sۤt,cl[R&y<4g[ \))Uq-x?Ǘûzײp8FT|=ߍ筒L$)5ҿ_=I<ݯOG|*هG 8PcW?S 8O־nK3Ur"8is}z|~/}.6u D@|彊zU'eprd- 89zI Szi5{[>[OulĢ09e-ŏW_fo'isFZ y8j?]%0y6>bfKӏ kZ9|>q7?-tq(ݗ6h[tlؗ6G¦Fzo}3~3_y&+YovؤHsE^Ct~Po=tKu}/:ka@0*O\pzuf'l[‚ ֞yaml8#&s6jh1H{TGb"id}j5ceUiŞ+vlj:I>7\Io:^P4sK[57+u^]澇 O<|[D#sO;X^gv{浲5aJ.i=1.CUMZ+Unq}e/(I@<}$\.,˴ḿѸ˜]+1X&RECRщ+VwhԮ?jnkːE24 zZ$)bZ [f.]F4zOC=x.k^tV9ZMd=Cxo{~-v:+e w6$a6pJksk(j8WCI_wwm?+_߸\H_G.>٪cnX]F(K y4ϬokjA^qN_Ż[m!8~'گlkSAΙ.sLo<֖{{j71׎mckiJgAiqڻwt-\i\,nG=#עΎ7K2wծuvP;)YQ^XR FMk>2mϗN׍ 8i_ǣ8q6;+u$1iyO-5;~,y>OK]?o3x,4kKZW=}o_w>I|?ѷFZ {^[٩lQ[#Jy+kz$P=8hv6١4•=ˤ^cʻml{&[D5WV]7[6umv&^/p]&iMOyxoJOEDץaa&79uͦ&> '", k_n*fe|3eڬ-ݮ#o+EHvIَ|ܮedW.ZrO/Wc=I7躎:qU,o2wM/#F `s ѧV& .wj]uKƎc{|lZbʓ$qƜ9J\wK{Ԗ:Z̭\#$1ӚԎvY5q4"i f#5rS+7h Sk9r᫺^9A+O-H{~V8#{;;+*xvϗn$wW/lF Fp9VRCf0‚p70\$%}E;k;ZU&1r']BF}F+FWF: kq]9Tf7D9@eYZ;UEF"bw=W:{ۻ' j+B~ͺ./=>6N%"VH8k?L^շn]LquF]8fqGk>Ks!|rx~v;WQ$w3}f]~rIO-\(@?jx?W.{hL#}CY ߯=:}-8jm?uzvS/: tz1\c@F*Tw.JVqvj,YbH#2v$JJ(4 @WA * C8bʨEz H [ؿBeQRUDQ@ (PAQD j@VeE[҂*W%Q`A\&QJ Tڈ0t!@ sU@CEJBSƼW [qV5]o6&gi]dL,m4CV޽^q ]AZPƒ>o BX%AZt..&S^V10K`8څce 22wg\JuPGLAZdlLyYUMr]:8#:B'k*c>77Oޭo]r{Ui+."&2j:7.- m,8TG}W>8[mqit|܅}ds=F hL%d𼽭BbѰ5JN+^,5ԩա-~\jLZ85cUcv+COM|8)TCA; 0ǵ'N#/}~:5v9?7IT{y{<=6w{Zt~AlFJDl?\:Nw Ʌ__^^^=~V>9SVIvYS4/|)Fyq9𸆊Už]>zuNyٟ^|[@OEk<~Yma epyrk\TNCTbݧ6ha;r{]S~"I_f4Qj*DI3gRFS"EIi)ʥfTYceK$iIӂe>VUejiuh)$ #]5W:"*xhV%\aR(PH@E*Z+QVت$;\IdMK-a5"ă\0pHTZVXĢ$DW"dïgẜ|58w_-.1,ZhkFU~Rnok-Q4V`o.|:cWMy׵[-K(ls6&QЬγmŋg-ȴkiMg.1nOj՚ *ؼX|i4$깿#{ &-chטw嵃@ }Eäm'~;{zDrz~=zk/|{v`9?t8{; FE@'[t|!s/p::O2Iy} X58~cmn/MVlx:U]}?-o_X{Hӈ+o7{-k2 Op='ߺ>禆w\2>_#O[Wota\4~5aCPCahs]B&LNڴՅ.$p{S"ۓa.${uף;2KXk5tx#OYLVFml[^ r8ݺ%\%ّ0ףT~(&Et,[]y=Gmg7%4;O/WMg ѻ"xyԾmz.qhtRM:b&"W859S #ԁZRz^iügXopL(A_M/ǵ^̻!ݙZmsLp_e~sοݮ\ >+,kpc#ENrK=>^OŽ0|Ka =:Rȑ?0T:_z?Ӥn>)H|,-|n3BYv}?ۯ|v:z9; u*0}O85;~zցIF2ߔtbKKJ,[g6R(jֺsߖg`bk1W{0:6ׂ͙t7fpk*E V@OЂFJxQ9 ,(QH UTMPTS+@TYU4ɉ_yXY)\J *ER-&PBj")T\0j  QXZZq@q H*5 hIQQT4PWRep5U QU:s}CYx9f=4P;pt5iݥZ컫 kXC\)jmN̥vuz!m WxľOhK5К:B Z()Le\9ZwZtk.x۱>'D1GBk+:'<6 cZinUvbIv<bu jRgZͦ}[2mVt;scikӮw.fpsj+ %cmkrW۵8uZ<kw/gv>Hf e q\n[h hW\$t5Y)4c@xeLPBApQRkn)ms&Dr>5@#D­hpDCP1׌dC` OpmYgfFYoEڱ^Ʊ5?R:3=-~O ؛]c>?˗lˮG+k]8继wkޥ ;/'~=R18` [O(Pg%j4C R;VCHZ("&$ںwoubsm ʅ}?It/m-UW}n6ϿZZݲ7;\yS%vсjr7>MFK5F=Yy:tLI:QV[Q'W!(YšTXHu2U0S&TEUj*Z\]0QVTM@T@8E\; -3+ep!"ZEU+%@i78C&L'UD¥ةFk!p ҳĤc$jjS d,ya^FOOy=f|[q_Haeô1_zk rƠvtףݺW d9rK)/^8婕:H=ZcO0 +֭uIiq0`>?.^5Ja۬}ۚ[Zzv׫Ͷ'wϷ5Y0` ¥K{~q}7kydvgо_b`.֗4TfwQ='c\M*߻ozs^=y{o/˭1l "c>ezM4gg W5\퍚D+;762p2qc\67ݾ.幸pb@Vw!/*^/\/#tR}7rf;,Ϳ8^Yxi+[yx˳/]01Mލ$ARmo&1X릵:@( «nҦiJ.ku^oֻnsmAipk:O+95^?~(,]Ukg&otFyjf7[ S76nirbӏquwvaؚ׈Zq8@.~klKCj-+lʟcN-2c$85eN#%~{>c6#M;B_Q߽n7]Tm4cIoUǯ[g=MXpT)_3gu MhkK]hhc0Xų$B *c}՟K0޲!h6h9Q̳޺y"kXc`1h>7sأc244^?u}/Ev฽xg |OMo$1 \B_zǟ)-: VWZ<]k0Ҭ<ip_yٯ_k]m Ot[IO73e|U\;oQlq}K`RN1?ʖ~ytk8j VGb85AqUyr6=5.)yGSuۇ=-w"NIiko/)ku!`OֹK]^K)# dW6@uhĞxۿ4mҸ2)׼Օ?]C 6mš㖫Ͼ}[rnv!Ҥ}kp4DPdƜ^e8fw_`{xoec8.Xl&t-J*?5M6w$ۚד29~cN{8Mi?VbK#ؚ$4h5kXxuxK^mxsZZkWSNʤ.oCq#bQōH,ygmuXɽQ4{뭅0W孯fM`9kOU>U1ݗ[#_C)¡ЏU+6؞9y$ù`C:>޻F6wbnl{#r:uOY]̷壘%SZ5kvH潭pZeu|4J TVTpM+`=f]ڌ-{5B^fWOV͈$cW¦ `1ϡIZ@>֠]#]ֶc#IVV T^ nVL @Xݑ K|4W+6: I~5m9I/liҕ&*e&[Ƈ:U_;4?3*]SM{JԑgN_.9<и󓌍|djh1B\!1;\m%ss5W+ |-.a4pZ} nv$9ĸU.lYOk48E2ٕGKVӹRx-l+9.L{p+&Zo$b,{jVBb5pbe^o̗7&yz1_w׎Y=&\/hrV3c8cڀr1X֡J6dR=}+z-v]mצ1D~y$F{k5H>Ŵ+&rGR+س X;幮V{'m\M#Z|tk-hW: %Rj E1࢕Պ/eUQP*E]+U (iD'Q G (FJگм!kڊUE5&L& )5&W "jJ ((QSUB (aa!bͧbT>N-$Tbu]V6$Њ1QSTMP( Q*Z%d5tl.z/LA^+}=>b\u{-.cs$4WCK[cm{oq ]='&E`s/8[hKWcO+ri:k&V+s.qjP{ThySZCƎaB@ggeY[;mx݃TnGCchi4^{:oRo6б+KGSL_{M5|kbзY."*Mp6+t}kfZѧH3j'gog12O3ilR6"ESL)[lNqⲱ#ZLT* 0\B*8,m Mp쪙cŅpk™-eJ,ej- 3Uɟk[> V`ȌXǣ^?øC=5Ɯ]طN>({w n>;gkyso3kw$-8MYp<;_*Iy+`h*@]L.Ͳ\MĆJq眺k[kq\(p/CTeV di+k6?],[c*Pتw䟟ɗ1[e c#Np֭rzK9,湝g|0 /_M/cpۛB$.毻6ۋvN9 `qMp+׿o=/oGӭw۶{j6Rp U^+|of.@'-K^}bvŭ-$>M@}=ۯ\y1(78"jIZW:MH]7F&2,K|+mO=kXVfjyҾ.ݞ:fnm[@XF`ckp^cm;H Ŝu׎;˸d p!ՠ=:{N_>3wgmCs_Jkz_:ٚIn lb).,/=q|^O4<"Gu d R |2{/ol[ &?ķXoJ]= +cr9C:*\[\ʲyZj{ؒHobu>*MTq}9A.l_gV L / 4cK3>N.ZB a4JԷckŚK\+Ɗ5M08Z`kL혚3Z駵] ^wYz7nHmh^\}YҳĮ]EB?O^ir+޷sU۫&mK#CYM3,WR ; Y=rF#^]=PF$YK~❙>_mR8[v%G87O|=Q&#'O,. >"Ac-a 4iΫr,Dz& sMHHsX*NzpYpˏUkSN*E-EZ 4YfȘoHN kRÛpEȅH)"2A;| t=U:5!2+cKH鍲 'vnuHթ!:VYF-ǏL.[.KA {oz shсIuzɗk1XkPxߣ2\G,n$&FxS!K)8=GW+;;Wgd6rLj;mՓu;Y1nkmW̽m].S]Oc ݎ3}3qn&kgki)qz1Z@Y[`=֯&'hې|evĒ=-}|xxw8ۭѐ3H4K5.HݚGݗtnys4ڼ ߓw4>^.6T5ƸW'_뇅Y_I+&=y'UJrheѧIkM}-ԯ/ӏ5w^֗֊ElͶ]B$=$19ɭ ngOu;i6l,]F]s(^ O7'/sLm};JTA!Ukx'IYb6ͻ$"\^p"m=U'^gw->R I "u=ev [p{/Gk|~skS5t\M^z ?%skq  Ñz{r PWWbq1ֽ@(?Radz+[%VK2^t[2(q?  M/;ׯ^kdg#~K].+w7ިcKM.f+=IͶ.64H Ck^sβi@\ HX27:W> maz].խV-uS; .U4;J)H&Og,\5-MtsG0?ZF6ٺVZEϽOr >LbaƊNYheGLCxckX/=.3CejE1en/0ZS+=w;tQk΄WSym5rjm|w=rKwӻS__pj SH$IϾnM0m}-iy$@ǁ끫Tn̳Z6VYKXH;C6aMf^țSYm~{{ZZ+\z^;YX^tw*[Ey% n ƔhL%kNZ%tLݚpl vr`z#k/DsZ\L`rxd}.hNرlj7:RIpNj+C}s :pWˢa / v#R+9\9>XK%eI>7Ԧ0y tq;L p5l|L]1+n{^1Z}-w|-ƐYz}]~|*][חqi+KdCmuR3N~K0|[\t88pjuq45+wгF@4p.o#.om5#s3nfqA]esڼM<52=Vݜ>{ʫ9Îֱ4!ēn\cc-:qvMF֊W|/=oxoYF`:=>)y~W{.2tp}V̒D:Q+NJmyo:-11=_~W[yI+8nv+}|zAyM>} Hijmu+f^?wۍ6J_k0@2PC-Yj",>)n=6BoWb{OgX=Cߛ`+Cq+ n#fQਖ਼ЦZni rTdSҲGZBrET3QR]\ɅJ ZO\T8(x**Ex P2 *5A8T(3Dǁ /24RV!EN M{J1UJ (TjS!ZIUW(!EB @@UaP*[(,eKbs+Uһ;^mjѢu׏~<}gvel iumvyn{y0#x.}lZg܃. )LzO;.QU=]XA$yMyF>wTk )6w1µ.'L9[%n9jRjYv_-m>#unD3TgGcݧt^oxkcSPGsxM;9c[H>sp|szo 5t/ o/FTϥyv|z5Zמ],t=Jt\{,n[Kp4-mfl(Z7 +Cjkn;>[M}~e۾>j'^n_ƾzq]}h7{v Ǖ˹4{KtOŷOvWV\t{/nͦ+[GGTMqѮ{<y6vkMi69gI' *N׷Mdy~o[:>J$|<ʪ #oA2u44҉li.ž||tf7rXx'P˙cgƽM792L,Ru:oz>2tuRgl5kήA&g:7tv?2ZIӉruO>;iL:w|;v\J#l\rHX5˗mq2'^O֭.zY$n&Sߍ<6\jA$amwn]72vE2] n$9x.ӏk=ݲ{ek"5= ^tWaj }o)Fa!7PEGmTS`)´>R-w؞LjMu~ ZU;Xywj 0 w]7Icm z;"^hF&Of==O,XxnMݕ]xٶ??ai|;#tZQ}rk>'[cvkK&"P uܶ͟v[NqMF|[k?^rcv}?gSa;\smK_R>ٿݯUcpvs;Z>^OU:˷owWZI!=T@5RּLqڻT"P/NX嶾x|kNx\ҩ%*0 Llqp' N坮Z\6_g-V.6]qe@ ih4jlto< wsO6b|XDm?V_YS+f^Wvm뇴Z^'j _mncsEjL}M?/Qr*rZ喁k@bZ7V 9K'c o bo\뎯c{o=L:Վ}Lʽ|MVmDр./ʸJ6)&n_egm%{vMM;La >wqm}Ԥ:F5rkOQ},<3E[uM*;Ʊ˦dbEDA+N$5RE=o+o'&[qo4Otns iWҵף2mBK:4+J?k7zXFcdv8껁ZXdQ@9FZkqnv7V HOgUlv[ډK@@)4{ Ŧx"me;* s3 Hףi}]y^FPe2 c4 ҵHUdԡ~ťldt ޠrYC#.PÚAt)X `]+#ւ0Wtw+.)Hv ~QP]YN`7EUAߧOYSk770;Piw=~i3g|3/uJZ*%RdPMUDZ (U3AeY*j8jP AQJ@@@A5A=|;\*Tjz/5ѓַKpCZ}Z{>K5vߍ7m̴ F'^>&ƺW08%[qd}d%_ˋ궭afWIema{[ԗwW\5/^Zh~N /ۺkoz+/:z2J{ c]~F#1k hziM)8sa5~Z]{6_kpAPSEKQyF̐ц {ox,nv{dEfǾh]^p9ᜌWomgz+fg~]_|,4Q5R*A `Bb/^xT]o;[si," =WƼkqi<sHwi{Vp.8ZVwcee8yQZߚ.ARaENjis[g|K^PBmbmw]Tcch.` /v{l|9Lix-%,> /Tcxr[l{9csH'좞N{xc~2*kr&؝HG-rs$SXr)4؉GQ⺸WPiZ{%q>ݸs&'ǟ,ߖ_d{߬W$`cUF5#U[Bg\Jm5ݾ<\ۍ{41Oy_ή3qf}9ǀ ν"-̍W[q3FT)k]e[Ix}O\+<~^~`4?R.-}_ ;$\p.޿]/z[,Ap\9\NkXS 2uZkJl]{[Ef. $R3‹6̟{}v ?7\gݞ_SEWt,8/=Y#b"rA!2afBY˩2x ԙ0Ha Zfd٪2QPJYTB QUQ Q(v(MxQg-aR2 )**(@A,!PJ* -2o n{ZCkCP<8N_O]}^_ ;=`G{q q>/gQKz-ZseIsڽmnc-ꜹøŮf#>õ{S ޶ۍڐ=M:-NwvX8>? k\qZ3uFH˘\P >K\,k*܏x{mܣ$;{Fv6{5vʂiku۪pyi{jCj**Hao[U#V5X'PWYcF[8pi=r_DX qofi8o0J *J集MB#ZZHj#b3ôe \j*9jWdV#I4X#,}Q c2*2}4VCPN1BU P;pEfm#E;2n;-bshkpz-n11wŏY'0QJׇYۇ]vo\׭&A*T aA:&%EBTPB 1y `%eE}w}qGpkxW~'%6o kI (qb{8:=? 'P'(W\z07p=mnMX4 }Fif^ֺ,O-~HX#rYyVjF'7~\7p`4.ř3ݻ)f# \ݰlMkYR,.x ;kӨ8Ǐk^mg}ÉJ]l5嵄m (O˿,m6Esnu98ܿ_Lr|˷|Syeӷ~y @xaFV{Չ&W\(t8sۏ]%urFFfi52 iP{jotv--sm •] wbss:'ss-ԎwW9ƤWYq/|i$o/NiM_hvvW:GJ==rY:Y qbk)W͑q2!GYՊWiswEZWxwk^[];Lo5Ww.xwy"̼)Gb2]#b `~mq6&][Plx&Nԝ;m ] pkN.ͼUV[ռW kµ9}Jx\ܴ$4g_Iږh̜(i*֖Qw` xu&jѴ]m"ʙax>|Գ$kb; 15OұN-$2uCӀ dzHWśZqLJD&S}+^S Cj>7DAk34_р\c[vmr[85-'QlG mis6|SR֌7I[\+o;inFWy eB\<] My{xizwRoǚVjWm7^YC ȦZ{(cwa2^:@1{˶Ae.$dQZk?W/Kr+h$Hgz.2=qO%e.ei/MN?kV-n6r.oZg!f K1ڵ'/#~15\W.ÁW y\ ><Rb%H\ϡLY+F&Cإcj{:yjM;R]L:,6 \L(TT4rU]_BX8@SL r[됂jJD"@A!b]L,S, uqW?oBLS_i'秋n}bkn6-mVHt:emL=nKsbӠIw.ys&lӼj\*{ze IMY֕ث-3869@U.Jכɒ14jVl疶۫i o5F|agkM5 Y6AsbK|fܥt$ɭmk쪖k]ZW:#h-Hݟc$:_P,4nKua.69mI*+Sj_ )#ԮIJL9o5Tj%NldԥF1=VZq1q v Z VUQPpZbdgǂADf1=J޺ݮ'ǘx^Hsyr} ZTQ HmxmCED*=_|?fӳc{8}L៚:_t>\m |X1?0+W+-z4ݙxZc\9Ϋq&cj;2Y= ~X9y8yxum7so$ 4:ZJpyuu\smm{|VqxphW>MݯY2C)xc`#92W&vzӶ=P٢)RӒu5 cи MnZ\V]/R;!ZLpTor^:YYGMN-].ί$_]Ho-$I]ӹak\wlz3ui[N@xV;+hI jlc/;y\nMh<_vJuYܽI5toJLnԃ9ԝ1[m% $ SN[ t@ē씲5.#bLڝOqgخ-zoǕÁJęki'IYi$-mъm' jZF޲.+ˋ ?R2ܶuHrRuK\d'\fvC:zpR꒲]l2=zj zΧ)m|9ҒHhGfݶ5%/ :sWnG9iekuoZyV&ހ:GUȲG7ymAd )ݝ?68.:wr_/lg;'OкMsKMО@|BnjkgWMގ>:%o)8JRfj`5&}yo /nzEE,nZbE(4"eF;WP4TPOY18_UfipfH+Ej"IuUKT:'6GRk^t҂vj-c&p:5jq[aʒX]%ZF$N:n=x7Okw%"ˮ lgUJy* Ӹ$qڰu$Б'V$Ulp-sq j[x*0b kَE!g%Ea1B); EԒ15+G8v ƱΣxW*ۊBF-^\sa'VĻ4NW)խ(p+^L`6hνLjEjqͩX^A^I&~'bV{Voۥy .'zm{ϋV&jݣ dmb6iq' \\u.[y]նpx۳.} +Sw;:qktޥWZmՖrKCkD=vq9oǎ{FFQ[}++Gp h@ <]&wCX66H9kz+~+Z Z-*3+'nc+WKيܽz7,.uJa&>2eIjV",9;$ֻmkPֺ[+Įz0S-LEYmk%ًw?pFgG '5vcӦ|&fkn(du7KR >^u@~`va{xcU2[ECecix ۮnհe:v zt3ghٞt[LJAn=<^{?WɽX"eIt;uԀrD켺OFRM s6 =G6Zu_{=YWv뉟b6Xa%wnUvg~dɫumNmZ(@¹&,kR^Op$j}uy\=Kb(1s }eO0I 048a6ק'6lONt{^gxԒѰ7Do#կV[tqi/D-oi _>rM .kh496\Z糜&tD`K+tcZtMɭ<&V[K?k ]j4l$9>!o'Z>M Q#K;\U vQ왒skW=-2#K+:kNx,R5fyB+Zp*_[h8*MuWK*#5Jγ+>V]YaOq4̔LkydFtbxmM,f9ܲp3#qnmnAjҋy-u$AR}'Ks?;k:`e:k.+ƋzR%gf/8p:|MyW>_W^QvcP u̺a* Zks{Z2[M9SKA7Y'~llr͆PKȞޞKv#\JoPJ UDT(%!F @TT ʡUPQU%E*T됀PAEB (p?*ۧs[A*[U>委+ö./mN{[[n62َdKig6[q-ŏ̲wwc˩kr:SpNN6=ov}}^o VXCV凉rR}M#riԨ+ŵjڿ_Pkf%տ7!-l$$юNlz=pp18pXj^>-D5Zgضɶ؏I!yiYʳ RHՎ-5Iћ'l5TjHݜStvl{Zmgs.fl{tQn}Ѫi__ yo|Qi&WymSnn!5ėكN^^o^>;xW)t Lx SesB'1V"Fm'wKA1-v7̽ɪCWyW_/VjƘU.ؑmsRjMrmиmtF: wvvj6/aq8p>rh41뜯=elǗ֚&84 ֦]m$r 7 ,mtĞ Z㶖[8,5 + OM`]uc}h\1]pr_tC4؆S =l5(㜍p.?amYq VJN[oGc>.{['ݭ#݊g}y5MO>,m\6V6os?_'{ɶv::0bi%ZY}๺qJ:ח uNK/f+p f߱uͭ{7 .a{}kեqv{^@wedɤnMw{/q}46Z(}g9 f.hn}.48 ܷ;5d\O| >%;5.^+Xd<ۘpϹcߤxv[=~}Vγk%SӹHR['VG\c\vv90YIpܵ&@[Rj'1fkueIԶHrBt.٭buO5~.-1mv.5kyIrw[-4 y:\n9f%4QWL9)ܶ l$qHQ.1{b5O,q"s|XxhKhaf0ֻOyԃ{YC\DqT}Ur}{l,wȅZ5#!ZѪZwSw GFcy ;O.,=TϐnXV9 kZ0Xpq#QiSVY6-dz_@Hƣ֜y4VW5J8LMiL`s'UJBuϵ [z fd\0uxuj;V|r[ {9OV&;^$Zn}RYC5:f4{?=nѡZn>|hG#~6nHw1ksk.u׫ڛi^f7#/yr`,ct 2RuaϾc jӉcbjMZ^諞MD77JNk*nW`K@d8 RؤyW1;ڬeCkQBԍp[Wp$ʾ޼IIg=Jìb{pXQRTwb~ZQ'AEA *A%Q %6*ImUQSU@ U֨A!EB됀PB FC\ إUUFh[lg?EIF88+I_wiCOosU>/?LzOoYa?ٯV8=O毟~W ::ጆ r_645ukn@e# vzG2akJiJ|CEDit#/o;1vM5oJX7Vti7Qvݮ];"c#*fW\2en~-KZjc]ΙU8>stF+vfn:=0HHytx[cwn]4 r@}_Ļu[_]3+&l|#dq'H;wO7x<8wi|?GaX@@V}^>^uPE.c6mvSv?JwR{5[gh .kK-PmHS3$y/Z^14fq]c\YFHʸOttz6`bq\.cks@b._b4{Nj"sֵMj2h*N8n^KȧqVI`qÊiL፲>8x rp2*OefۍӠk ux ktǷSA*:<{$[.6qõglkRS} zoNgRr*ش<,m k\{MU[XӦ7Q]u^oqCq:Y0sr殜w\o[e-\=д4k$sқjǵ#;~y1h%d;Kf2;Yf˒O7Q}>w/ۯú|Ks|i3̛q\85ƻm}_OѽőZ p%}Bmߩ5& tl`4Pm0]1 ZEBNlakYۖJ1Â.^{՛h-$vs?^5jl~E]+ͼ`nz ֶm{\79~龧χ43>1-uF/_tB4R^]+|>_cyNlȱft=>ix2۶y5 n.r4ne40:]W sVIY; ]((dHz3H^o{Ĺ]ZSݧ6g^KdsX2tHcuEM2ֻ8WVr^DߘT.x#>u{OX]CsԂցè6s[.[rZWVSKVr5.;_cqVilVp N\tW&Wl##YeJi4lJ|>l0_JZ1*R"t[t_l5i̩ZwP:^Iv 9 JX\!(ԡ4_G}Gݦxq7wfׯqxk(rم ZF͸KUA UPPH*J됀PB 26B2[KK~)wp,%=GG=ׇrmi.6wpy۽vJN9WĿ3ö~vגc>]DZ?doI84_ޢso}\ ^Fc,} CrK}C\'=Mo'{~y؛\jFXf9m|.lcH$Qz%Ѯҽrѡ8FicF#뵥&qt._k-:2kq.Rc˻kx. {yWիaIy 9^Z޲EVi 3=R9x6][`(+M*qNY/|S=|Vi.^dԜJyYH@@@@@A ФMF6R0žq]w̞s:tnX'V8Pk{Ǵ䝵v>fǘ݃ Bdu«Va*6 PS+=qk;.ueKAAsi{,^ q$y{O嵮=BFx])ZWtj?S7Y7;z~)ɶoëವڬxk44T2|[wGY۠Ї+z%8S̻okkqI|mrovP8iұWXͼB&Ik0pu!ry96nUJ\<}n+Ode_Ws!e%UZ6ihu}RRۆ!niN&[VIЮ{c{+4^i0kJRڗ;3]6l!Y@KRfɪ5\oBϵӵcņ At&%j\"֜pu.;^GR(+:~^q.Uͦ C Qy^n]1rٺhs=0m7ph'<'DRڍLv};s8kydßA[O3|m[/iz4~GԒ`]%؍'K _O-g>6^cϒyN)~ yGK<';_zo6]Cbewqky29}ףv 6SLkJ%sl﯏XAZ.^yoU?g}~{Lvy8y5-2 :s4͌sN}]mZ4/Ys~ {6}Ų+[VZt¾d7H-bq4F9=CW~>,׻~gڼl3LZD핚^|.fzo)97mye[(hiq4${KىjC-2AJ>h]z.;'Gd ,g.߻:G : fFQM4IMp\|%t:y2>+sVn6?vkG47?R{,Z ۬S45h?+fklv^;t,ﮘɹIIu\j ?Mz5cL2]$\/^;$Ea/xx4%qQ]叚q6yV-7^=MͰöқnktH%9[ۥo*|g%k?L_ul5ŮpG@9cviMzKن+눚ǹKcs#MNs|\cɿC7 'ui1Nsz_2NMNJĻpl]NV=kQPiìZg-E=R湮f:^mk 5Ï7&^mk/?]|S>\겴N憝Npsbm퐇8^ **xoy,Ln,Zc-qo 0)أ,2 v\Cc|fRGY5$ F\%M\W*F7_?]As+R&ZAUN5[Fh'U X7BV2j^mg>/~M<6h[m,m8+dpYNk}QA-SjUD P@@@@@A됀 @ ~VA AsO[k˯/移S[bmqnGݑ=~sywqycza{~M10ͩyW*&9)y1PS%'QmDAd>wޝɅu5#Q8GGyxwtձ<'i,;o[4hkGkovm3'I:D k^tRilc\W #bё;DFg\.3IiU:osؽ=g^npdۀΘpRI@\s!qڵv<#cnG˯G \I׻qt\ p%uul`qq[ӫ;V_.BW{-[}Tv\K6Tca"V./ֻ\W:钴,ucsoIBӐ ;{Vv{jS"* ѮE;qFrm8&tƺNޯCZ#KK+ɵհGEko݉W[ dW3Ǜ[~6`_ǒHrdk{$tZ(TmYU,eS8Z a+;mǚXr 2҇0;<6Hׇ .0H.2tn\}n.atde%e壄WQzu0bis8L7ש ͵48>.]t|t#٥w寝G~9 vH}[}~?c|aޮ6KwCIxp=wy4W]rofm*ɲ6_뷙~SuW)ړxhs%"|]m[0:I8R-|Wm[\ީk bj]]nbX @5 vT.{LCtGN>ĀW..k [!$W2S}&ݞQ+k\ף[<Mk;>L!kǭU}4߿k/`򅧛e"ktQ.k ;W_{k|n|{:|2߼Q/S{j߯s\Ko3׏%w1odf٭m ̿ۤd=W>Ö]:mż߮gTrm;cՎU̼r;7k*Zk ks<5Pٍ<͉6;i_mָ.48%`fևs Rlո` n?, 2`s%j^۱*[+8r7lbt#C5V.oKl/GIs NVWCyR׆1ҹYغY<(HIkp9уT-B]Kۤj1%josp$8߰u;F6.ɱOFf85@@rtltoZJ1h-ntj'VgKRu@2*cpKd V;6Y*Ja}w Lu q٩QX>,gg 50ZFh^KjQ9:&qWEn ᥮$`8vTZh9E% Vb p]CZWuB:׋njxqIG=}9UTUEB #xyhu8wY3yy.q`2S_,3E]'WOIuMv>|'y<:+YKaZiܾǵ.lv}j}-;\*&-|~+]-_޶[=m~f9] Wg6csVHJR5ǵҿeԺ4D n6bikr]\e7NgէI\1-7IiydՏr^IxҀ8WW޿˖Il#sGBcn]Svffnq<XihG] k[땮-UɶfeGFTWi%F7"8: a*$rA6mn$ֵܺNȏW@ڦv#~.{2kIW6׶{7u{ˋ[ 5%W]YM9rz=fz[}ӎ]ߥ|-ٶ4>s9o.[u}-\}? *L6RZO'+ 5|]\鯺ֻ^+}~suelQEeig}K2[m7RP ?R4ŭK3;̵(+G79d#FHMdb,&WL1KּN\n..1 tq(0EiOֱ#ףUpqJaI$ |F`ИcGbS++c~IȁOjkjc 秏쮳W]z-M$֥ORV#Ƌ_gzāKqZ2 KH;ϖ^ws@<↙QoNv5k'~3+pϵqqq:Ku%Q1#$L].^hkPhxSz-g LD&Td4Tf#t@EsfVktW>9+PA5 WcI} pz{V5nXĎq#P.QHiˆrۖ0j<Эi9BtuR8)E"y,KgJQS'u㼛Mun5O56p-Ac)㛏~z)9w\ht#As+_+gGOΆ;VFFh1._ɽkvԏ.I{CMID8jT됀PB A,PYRfN_ysͦ+OBɢG|!1ϔvIs|<$Z_org%&GK$_-z172 tonEW.N=wy=x:' Iҿ5˿3Oz\x~-mwBMГғhVǷ|z{ޟQRf<{#?yME}+$yv'%*h^_+㷮33A)k\H~.6x@@@A(A:[/a>/7o_éf=_<~I\jp__ (.\Uikr1.m9waI[0]_kfj.\m:&!´ "+k,Xڻ]e#Y1vPo QkKz:pmyX\M2Q4oʴc.=6TDZnWY[ 01Tbޮ6"cekC95on\KUvF!np\o# bZ{իf{#?w˷bN-py5r;䍢Ji'Zѱqt.˝ޱۓT)EmڗsI]W⧖-ɡƎN<ԺΝ;[NM[| ϬK=Fv&RuŞm 5?B˔ 1Y6jBs?൭k}Vl S0[ fpbՎӒx%3:|yunJWLZi[g=u܍puhSon;|\Yk,ߺ۾אٸ A/(]VWJսcI&uO267noA.7yh|rcֶՈk5M}c==\;Ԭ׸HxZS˗JǪGؠeáH: p;L$nNϵyB]{WW>Vm^F绞̿>gʽSƞm-gl<.>e).y\\ |}gnKm&KIn\7F{Mө{^uvpۊ^{ov38uwz_r q]0rQDCP|q5r:{Rs $Ml~z149oū{_}݌1^I䍱sKΚ}-}^o'X.agR0^/ Wm&tMBCT}\U)V鍠qW ,BSkih5 3GJZG'2g؈wGAGVW?ZWP&rǖ[ӱ`>ަd)˫[;tv0Ld˷UL_jv^C6<0\^_Z/?-;s Wj#3.DzڽzI-- `yquoh=ϨH]t:[&ˇN\Fl{QI#U{5:(NqW9x&bI)6CqUg?5ͼtbelQ"]oPd[_ ZF}`kU2*ܻ05>kQraCݥx$\X_JcU5bR:“YL{sn~l A0C[W|!&9^ָg\ N> ~jmѭ'v _, - q};{xkgGݼ.?U S Ɠf -qwt{%cpž_|w=+N"ksq_Gp=:[X䯤됀e1is!M}^o]neG1].4.,{@sCND Բ- PB $9\.+LuTȖȖ{ksMMA [E;f=VRoxߺi]H/hq՜OUoE!i':Iri˞-H#kpȏKt{^y;E JKmnm :,lmt{m_?_h@A!q ᜺PyvZ~S]y' u,Q=u\*ϱk7J(@Z=8|><[3b~9,yQE1:^.d}\6 x־xLv Jg.{hřսy[o6:Sſ\mu߼Y;tlW&F8z(ӗ$ׯ9U& lhֳE8`i*NV)ZָΦ$P?j&%bVl4]pmrH<586Bվ2߱t~ح+Hݢ6[F'9x'9;ۓ|]5܎ǤD{W+pZogP8 w5奐% vt,xkђ0p.Us wL )S(jіu*=::5^#z6w.=5h5꼲6zjsJTEUMr]qlL ZN};lqI蟄d49^\vf;in2@x ͩ;ZwUsc{ p5 I:8~aGF٣8Z Q@d8JWNҘ%:2:qZyk n*a4sN9\=˞:;nn^B0wsGI&vnCzO# xfAgҦ::Iesf=<5'׺69Y/[n O=kb{Y fœWM{uMu@HS,YTfm3IZ3?b!e.yI?g8k^nӴG`<4fmפoYկu0#\K znَdxa,[Pq5&<>Nn{Wr)K1cu7˧Zߛ^WfJXz7[[Ùs5~r3o>M]Emͽ4TCJ9 ܞg?T?c0npnW强>`a6 ؃i干>w f˦T#Y^ze !isK%`n$sVKH~\Z|jߵkbƗ?!Ҳ\hm3$6riZ30U\sڽޞKdnN#b/ ӪS-;ѤF,>KQڲ`^j;wٹu~W`A}3f,juy}W&˫Us?ų.qy.ve}a (*UAx1Mj\3f_amȷlq^sXReߨzm罭n?qb_g{w978^ck&GR]_[Ҿg=䷓wP0JS؏\V{L>W|͆E#6F)č  Amcj{.~ʯ>BXyH;1-[0m;[D c][L:} ai {*r6rtI.1UČϔϼi<Ƽwi;l\ tivo#ʾ%6>f?3y q - ]6>*}NOvy+ZueE_ElQ[^O//ޚ_/ҶaUFOKVz}$in_ hC +i3<:+!!?MkĮW:8aG55tqP獆GQ#5/n :h>Vh1Բ^0\w+]In:qp#C.o͑v9aHOSlNÙwa vT/FqѺxcNB]G?ڗ|`ۤg,Oao~IcoNn:C=ydv^>]]7\]Eɷg<Y2s@(/mnN[|?&[%qsɬpתQP=䖒 b48H+/4u됀nr}ZЍ/h#ʸ6g\7 ^HҔj_U5r:m-1zJ@@@@@@@@A!Q( ŎqSFbߕkZCOPFDQ~lmn~Y$m jA5?qm,pf@h)]&vyc%ejg:9-'EGgjƖ6uMk~96/~yͯ4X*M6=Ν|ߪmÉ=ߑLp' Ծ6кa vOkow)V~χq=5`@@A o۽i8kwxGEq3^b[W{|u,8۵{I$qͤ/k}~<m<^PcKK\mw~mVjv{ͦ v_$252ZRsn%F3Fз#M\ͻ[YƣܺHNE@#Ţ#+cs|z}on/16ŬǧKCG3kþu}/nMn_/Bsy_rqc_؜Fg }:=i#mVhuezHR\ί?6KQJ;xtҚ0|5\ӭjj; 6i[ۚm tc2J-hT 믟F8)wW\vRui^ImA8xtw``f%Yå UPBqf}ΡPpY3L5/AԥwY7Op5-r\;S,[sR6DLZ [Lv4ޕ͚\6GnӬb?%rz;ߋ}ޣW]xk~Wt7sgI=oYGn+wʅF r:70Bcm^~Z:o\8>3?/':/vQZ5M\ SN*^oS5~'|l@~=yaGWue 毓f[JK\mhK@skx[4]pa-J +7[ц]xdd5TTӳYkZZqs}~)ҳ7yj9,:/ Mp_:=[tÓ\udX: ׅ ]E8ytr<3'y11TQ-L755 keKѡ49,(rOFATVaθսQyT$MG=6~Tkg-Ӌq%~Y5ũQ,ӆ `ZI|ft{]iN4U>k&K3{_󗺦ײ+UB &!*?됀?ݶ4r 赛n홇%}J 81 UQ(2UhDшeh>N{r~/9b-7/٣fD޿)86oΚܳG\u3i\ꡁfrYY6:&5pu)wm-@"Kض;<~ i?Wϓ_on;%ߍ(jx=V o9kK?J׽ }x6ku-{k[æ<=wc$asWʹ~hm9m>Wwsoc[/B3Irᱞq(Wu9a|GL-wa]5muZFy{p`lMs1ο{W59 ʿ?f^Zw_߸h(?gW?[2  ;955}Kyxö|_K6wm7d\oa__,]S[U'ȆUeaH_ӕk?RiE Bfftu@WLc.q.Sin]2muW ez-q,^Bh >.\7xy6Tiy3Z&M;=yE+03m.*0kjtH^)o.ٹm:f&dkk3>z>Hu00jkuo zmͯ|upMvrym_gwO0cu\QMTNq$x}>v\:@@@@A!F!T{$y÷JLk98zmx'&֑E|?CChFPԭư\NjG+,44ݶl>dNaIsWW7Ӆ]8ԓu=Z~aY\k@Z( Y3;mY|I>ǃZ0-W=7'˯PA*(*[}k{=Huy-v{3@w+ Rk 32Րt8OVkAoÈRKW7DM6Lٰl86#˰Ҿo?Ӹ{~/S護nO/ߋ⟽¹tzܴW :~4ƍS.LaŒ8w)cY$f0i@,u:W;Tdi hEMꖦ*ATcrdQ-5#x6/ \ph~Mxph@@@@A ðy>ރ=.o6H?dØ۹^j8Wb-\jSr: ?/^؟୍{q?QN~"p}xhIĕ@N(:6bcbM,hG/''gjas}-ܝkJsu8ֵP%fCD" rAKY 3 /nag]1lmʹL/VY3@뷷 c-ejou?uz^;6vU`f5^>og~N;Ͼ_鬒`U,?m{axii@ Z5l.{hHG]=0ǿAjevkx|qQ9|{cRteDH.zu/4~]8pcf[3Z^;Z]ѣ;Ѭ^lvCaeq"]Lc`E?Z#,&8jUf%cjecup[5 Vz35q즖h x.gnK}ѷ6%V{ח}L|R>}^z#!YMF9izFcgpS]+^Xbuh q4 ̯>ҷ&Z49;ǞM,7^ji+KH@;Х9dzCaeGooz+@ڳIZsIr o} ym9; .~@,aUkSp Ủj!"8ĚP;Ks]>y$"iY:6k1|۞ͳۡFKgioFhuH0q4MF  N ]5Ku.߰-`h{p-/龞\>uO/&c3ϘwKS4;SxYMuq܂(U;e14 x'Lg-n,~I"ֺWvoݾ/ǾdĖ͓!V'Gc54غvbm6tӦ1& I=281ŕItUyo?V9ͬp8O`]87.lw|qSpd@oKu=\ k%P UAo{!ae>g폵trsnY,{ME1!zfojk`W?Rkut*kp\F;t[+qTT⤾8 iq9S HAK՝ltΖKZ]%sg2<d e9W>esni KhA_i[c-5iV=X^8ſbTJΖFN |;Mv>b8كBs.fcj됀hJPH*Z+*X=Wbrwkuwmcyә2J_rk݉չ5ƗI$Uyu\\xmFߙ!6MO55y'7w ab1o|?W?kbFp\ӏwRά4$汳 Kr[[_~k웕܏H@S8x|M/,Hhc8EV>W4i@gx6{i-cf m7 \hB (3݈\LK'+ ;xLEh;k#8`,u4jT.96`ki61ݫqZkeVe`z -qi\ˉ}.K]ђh(9wR?o5}ikm$4|{]7./ (s+:^Iͼt$Nhgz=r &޷Zr}aa޲6>4z+5>pߓ]XF bcl\1- >pFgCmc~k@gv~Ƭ{ԷOu;,zu%Z\4$)#WiqJ(Mtr˫hۇPʳpre8FyhI>k e9]ǁ +d y%Ztwk.q-mmdpv;ch 0tM2`!t~]^xV wd=RpY^ԻDQRWM|+ 9X=Fغc 볣gZ +غ@#4ֈsYqZtttlIi 㬗G=$}eXS=y91ʈqeO/Wy35]t s7Gq<{m;ђRHߓA9jV|;(\*MWv+C} Eu]y<6~ʷ;# 7Ҡ\7i<[/W6[7ŮBKҺ}dΘV\9d/i>v~{=ޞ>\Z\ Š8y)rcݯXVc_BqN6]h%JrtIp^Ӷ[6^e1啥([9[RW4<4RN+>]VkySVvVw.1iѮI[jhW7Yl{ϵ|yyg9;78OyD w6O<z/[y=]v^(!*} vdH+60ܽEs6MRur-Bg{غX/VZ#@֜*?P_OotǓrr|{5F@`ɡ}OϏB(UTW$G<} !ii7klV4<;I8MCO_s};^.\ާ|ZYs*Vɝ4*ܲn޳W^`45X]S۟|U:r=Rk_Fn4xOZ{U/gi[m1<8nqkDSUʷؿ&ϲ`jYxN8xýkV: Qm#nV6{ɜ 'G ͼ85r\ޝxe`hJ]r-wh8Wk.1_ky8qpkNbo)M^@q8V?6q'gyZ3+KSzf݅tñKwgcY|{:Y/wQ͎ͭ-A&%96$9 kقnJRMvß-usL .\t WW|,R@h(kxlQa Y)m@3'b9˕4āZkhΓew_!JΣ8&ξ߇^|/Ͽ/;+qm-zs0 -/̾oc${I$Ҏg߿m>_?~` ;䏄hKzN>..m޼$89}R>ik{$MN>-"S\Cnyƞf,͠MxaFwdBʃ0_Jŕޘ~bZ|R!, ,#n4=_I4mzt/}|߃okmD f<v\"-s8.YX&DָPNϭ]'$G4tU>`uAdGH15º9~8l-7--41p]y7ڽGp[A,8v7K/<=h#I%ѐ*jiV{ KzG9/s3WҹdZ rj|.oWVSZ**)||u5+&PB됀P @@@@@A(!A *MP(J-3ZP݇w6WvBᷧb3b\F {[WN?mvRX׺ՎkſӶmYkgzY{ճ^ r8 #Ը4kRMyVYӻegmd#'?V70GMsp7Fh;Y{v 5VFv.|{i2zWōvKdSsc7p5ii{+ tD(q]p֌pv)y˛ɀvk8rr}XK3$PܸK٥l@g]pk7HEk{xZOx}eףӯX(7xEΥν7zŎ-wo-z:|+_-g.n\*Fr;ïy9g?Mo_\8#{gx$Ằ.ҽsY:u3=uZ+_ Ӷg{+^o>7}maV,p:_Kfywv\9mo|{0GV'WӚaZA P@@@@@@@@A5@ U88ff_co]= Py_첒4P\a\kz=Ėkyh$z/1²)no,ܿ8 co'x^ʕcs skfr/&kzmeoqudt]SϦl_ 7J KZ)n=a.֙Xאki#Ł@ké#7{_t50 ̺`%'YM{vn? a_JN->nZ G3q{)PN3Kd~]Wcۮ250 ԏi˧<}&gTXq]=p:K CV=^J]ty'yF]ͯ@APZ3_KKϽu^Z=:LԿA 0!P@@@@@@@@@@@@@@@@@@@@@@A됀PB @A'$ DA *D! *($ *%A4TMQ+R1ku,? o|:W,egneu}Q_k~{Os?_,tz]bQh-8Kr:Z'r2o5>(ZCW{WNk:tN2b{kjf703Vυ8pi|o_|8MuIz߅?`Ztw؛}>M?_-;k[^k 5ah$5Go|^[M 18=5s׻ blC"%|ҋ8k)phNP@%-L.P[E0eQBJ@@@@@@@@@@@A(A5Up)ߕgy8iŵ5]K,{wɚq|W-Yߺ|u k|qDZ~wm|n#ik-Mr_cRK(Ep9׊Nj$W$lx%P$sVv@p[m py8jJ/C5b,T*an:r8caВZa̍&FR㉯jܮ;mq:uP[] ]A31"NOӒx$xH4I]6qo ּ(.I|A`9YaeGxҕVgvt F19DwrڿSWrkZq j,"}W;7C#m4ad <us+%JP-ƼNҸaʓwm֙se"e q*\T-5:hבbf#GSNĎz1yChs/vc8 Yp97]˵+Oq!r/Tdd=JiSLyow7k9[ikC}}: r>>]unoEoo`.tdIPMՉ+}O'/˸#N/f2v;V a,kKstۖpV"JI";t<Ƭ}GyO}~?uW,w]o{c]WI&˙#_kz[ݑp+ + x~g7?Fw7[#+oyynz}-Ϟ'foڞe8;VaIz6}wo1kK\O?&>̛8帷6KkP=+<[Q됀P (  *%DBPJQ@TMQ(E( !EH@(@A%P D3ApJaP-qi_.x0Zэƥc].Vumr;CZ~&/6s@}Cot嵈hFg+o{k]-HMkƾSLݾⲗ-+yή_C^I%?<<}2ci:\q'q_3w<ˮޞə#Z & /e}/E~Dys8b_Z-]bf'2=l}>?_ſ\2|ݱHhjr}S]nt_>,]2t{>׺?]ytߋY,/vr}Vl6ƎbS}2{xn>Mv^tC*EE{Uer0Zg,n, -*BJ@@@@@A(@A4UTKXj\ewߦDAӘn_O7ulg}t49Kyqk's'X A_f֒7L1'DI$0H,pX\Pv-aI?^8cKV԰0>bMIou㾬2CpZgPWҥLWm%1Hճm1!g f"$jt.5ur%\9Y4H!Ywfað4`N:V/Cɩ6O(v[G>)+RZ*z:|tt(iq$2` SN^gL25XTEa:fOjikؤk,m48neS!-2`Zr# zViϦq+8ss#n#Qoؼonv ) Gv);gJJNlUp;x8zV9S/@i&~p^JڼC]y8~csth {(&Z&P)Bs(P]NpqRPوӼfsH# tIÂnFT'C@FJJ[pEgеn tCL*hĝ+lkhVlGкg2{7J>i_Bʥviܯu廨5tsN-k7{O{g9};.. twML-~}\7M[k|Geؤ|b3,%==W6ԊFW~Kzi[fۦ;X͸}ܻm'qcpmau+9rKn7̖6JShxkпk?3ww_./ UTPQDDD2[N$lJ1Mwm#y΋W{ᮜ裨?贼o}?ƽ}}?Tv/Ӗ_q}w/l6r88Ԃ;g}?Zz;32I8;}vk>{rb[~v8d;7e~3KNzm3WOr$5.q+kbtt ݶ.%!Fjk9yy6ZӖtף\}YNۂe e0\yn9+\Hܰ^C#Pu_O;4˓8]X ϫhq Yz7k>G={縿<+}M1:Ou됀h Q(!DJ*DDD  U@@@A*DB  DY+GBq[uU(;V\TE݅ PaVÚiRz4jW-1j.)uſAvזm7׾{)ZCB hOzl1z}- s|+r[qnÇr甕s:[]~b~1hMS"J UP{*ߵB ׶/}Sqn{1yq\5n 8j׬^/K}||_S}#oGu ӫy}|TS8j ndkT{_(3 }H}KnY6ms5XoJ}y|t,]s)٧/7W6> yA%y$xGgSsD!#B[g|؟3/W_}U*?됀P*D@ A @U  F&ʖebA5Uvk5h!EB *TQQ#"PB D Q@TJ DDx*IZ ٕridٙDf%1Vԓ k-%sR;] ݝNH^^OKǴVl{;/36 `yxO߃}nzZXhM=#;r@l+IYGh T_$V"F:r?&/s׎Kl5$apԴ'3™f*ނۣ^8S{tNS_Grlݲ.y[,ؖ.ItM**[sxlUtklt d]ZRE7VJ myҢn#+>.KN( p+•8vjĘsIzaF9V}ȩuRT'.]Ղc N#$Cn\F wem3ʸۑbu:"M9fY1~#a?V yo,RpÏbܸtֲm 29q\dgbkӜpm^eOugd=2IZd:&<=oXl. 3ϊ:5Wwlk|Fd{ _*PC2@ld{5{:a5aI2i:x1SznٙqpF`Ufm߷op$vYk7fof.df&G}/2{7vϋX;Ja`XtM@(!T@Q8=8m1z͍}ttF <|Zqi!\g1U2 ,ڊ a!is&=K?'o_u-z O0BG8I.QvkAJeޠB@@@@@@@@@@@@@@@A(!E\  @@@B*QPMh (")D Q(!A (A!Q(& A%TYX*s*Z3]Ik;'Œ1 i,oYz@%1Xj{3H.c,WJBOZFdwm&\gjޏF̹ak YQbGufYq\:Ah`*:JP j0tplְwU.9 m'úұۋZV^JNxoo޳t h a]8FW:_~.Ny'_3X_nwM&O-_$qN?wo#`=yX3zyrmYu s&`yxz8W'Mkyvm?7'sykGл6c!q@[0eU@@@@@@@@@@@A4@TQ(!J 3x"Zvi=ϗ Ƌ{˜kɧWU=?,  3_#X 5`2jՙV/vRfmV35npm{ZzeW|RctdH۲4N=G-D{K׶2Ljt&֯V0.-Je 5QQPJ l|Z>%G 4c/,59wE+,J+SX5PP4s4Tp 3Z烬b^H)\nx18:Iq wY]pٷdmy.'ӗ=m' ^s$jI:K1]27L)tƎz=Kk coHjXiZWvsv(c CZ3[HҶiiZi^mx>($(]ܹi=9vvh "+jZ{qec{oSn]@A3=iUkAirkūC_V4{=Uti<;v۲73"F_}k<ٛ1خ^]`.W~>[+5@@@@@@@@@@@@@@@@@@@@AmgNV% J@EJ TUD(!(@@E  R@U Q%TK]CUeKԮSJ uz'P+{\G7;K;]W_Fph 8L㣧gnH i;-vok#.5\qHm:@x&Zn18V8hn(Y GxL%}ns,5hv iR2!:T50I]Bq SZ[$; .tZj]-$9"lr7R4\En N$V(1_8f=/߆x7]=+~V({l-8s}U>]yg/o {%+h,}mj- T(% A!"@@@Ao7hsY"nG/= Z*aެfC#WKTϘv6'H01^?[Ҹq?#f5U{0~bSpUwgUߘ,1 ;'s6 h2tcψkp.>.goŲ/pUS˻\3Z8p!r]OokPcKrKmc[zpo;P)w^{o$˜lпQOz÷uoM1X2 &r@չ;8DZ58q03ELӵaВqEQP\r\U2d2R#IխWhۍ29V0 =f!%;jN==1 =7ÝrRm1pkd4e~]uulG0*\>Xl6G }Oy믻rM@KM:xV+xRib@4 Qvs1L1L{ptZ4{=:ew8,FX|gpa11 .Xwie֨#rԾj3NvMMvҶK G zw_w_._q>H^q Ue!$b @.)PAQPBP*nm7rɸ ?]bWlx!i _{K;tXȺps8>Π#}>LǗK;_ <nG's˴/Wdy'ѻRұe AA%PA(E*UPPB A%Qs#MUD61( smC7S@W}_GSGä`dN E8E˄'OX\xR̖9Wk[ (sHΊٓ1 \kN+i4ЌFKQ$UHI':0)3s,o> Gjb7m'33t5[fo'Gbp\@#+}w(X#%Glu]I˯>m6+ZZm{Fmkv:f̽Ln H.{L_޺JﮮK {Cg/nho8$ N%L<+[.!LJY<{oW,pIuxZ]n|l"bhk?蕾?_w˿m?y:VR!EB ZqV% QDPB k0btw^>K7[~(=V0FOtۋl_wm[trht8\=_oG;ht7#^WU}M96pے|Q{zj+=8y3c 0 WW}u=6Wm%*dLRt@i3Cy@UqMˀ!`׽/gWiz. G|O[dM߽0úd0<w8_je{bMt}qMq3\q96>V*Ov-9TqfZsNB)mƚS00}*h;ULk*;'9DPN -_8"4C\\ܾEέOЦ%9Th^FP4iU||̬ KCv2H4 [k3]{S%e{ωK_v_tӏ:k޲^L]i?_==Vj[LiIM_fmSqzõ9mΆRI%o}_;EǺUTQ!@(Q@("/#&? ϕM-8h^/[s<.+5jfօ~? m"ǙFfDq.ƙ .1h+5OL"ˆ8%.Y!$2"TecAw|iwujWAob_3J汷EuiHYOe}[.bX1n9,e\>}.&Kdy||}ve9hAYgG]6,.Iu\Siqq sk]O w{]^cYChiwYM/5~|$cLz{W%Zp+۾N[o^O_6_47Phi^q';r/K)A&A7Ż!3FJxov:Z]FkؾOԸftߺBɃ$8{ªI7K0]rcǽֱy6;0Pb tվ﴿AOͳ{~+7o=~ k4f8WOK\5mfJ^_M]B~ݿw8M&é:uciq$UYF#/4%t#;Kcn̦eh${ "7,s7;~繋ck8jW=4.k[6[OtW:W%Ǜ}]'im߇FԷ;l6WNQijbڤcik٦ߥ#.9pSNNm}ut&ZnO)-ϵx^8r' 7&҄zTWLOooH^B)E JA%PA( 8󈀀*"%U DEQJU@@@P*&@ @@@@A(@ ,/ꔽb7%&0S-\Vk̼|Z'_s}5W=CA(yꊪɓ 3VDftu<em̡S\A$tQW?u8Mk*u u^4K[1gSп+u/y+~ ./i QpGIV?%]D @*xfUqn%hUѺ\4yL : Ψ8c{CGU}ƪgX>]JHX85\ bI\dkK9V` R("-5حaTp=ɧ%}|Q=g@5-m=s&J{MbpkoLI9zOmg4lwbsjQ_WS]uOv~ݼ4`hy8 z qdÁ],{cQ@T T*hyn۠UZG9Lc_1YtZbu1̕4 Sfde{t2Vj6wi PTwQr瀼1 c ( µK#qi꜉V9dYR4]"66\[VSmb{nmA{FUrsW[j>O"S |:gߓ_Ti$wks۴n/$hh~ǩzba,QFs;ū^z==z<3]~!էּ/f帑\o.oww2zJJS lk4 {W*.x}xߗvzk}/|csnue4`K?{9ۗ5z@@@@@@@@@@@@@@@@@@@@A(!$;K23M95M'wwn\$vKޯ>ImCj1rn(2xc5s/9|yP ~OzymXMq::0u{ =+溰nW mƸ+f("y!#Enam$[S¡{o.<ogy!~ƺX ~!ğоwqJ[:!քOҿ1=<527kh]P_e}?Cy}c̲F :1½]%\-\IXߎs"U%њ(ZtۨvSt+fcc,,:XYϻͽKl:vN^yu\HXq4b9Xߏu&{=[.[Ҿg\'[Z{{EWę6CXKZ d>y㯖m.}k%Ɇ7Ks.oK|Y0ON~[-ٲ厅tZz<5~?޹?̌v-N2*h>ՍתeGx*.W(A  @PBPJP*UD?됀PB A%P@@*@@@@A*DB A% B @AvFk3[un0- y~?)LuԾgL|[ܳ?o^as[1BbkH2;W=|6WqZ?Myk WW5!8q:oϔT1ZK[Rj(WVNx"kq zU‘ECZ]0He)JqYYU4UVR׸*,Z@#TVRڞb3[F *^Vc8+c6 h Z[6bIÁ*-j0Db\@#m!_oūu>f8FkY=-Z0܂$->*qͱvch09סapdk^mHk^Y.+FcE\G)69d3ݙt ] Erҷ3svͥ |/go27wc=ѵa5u=An򷹹yUYYTB(|{ZzBKw]ѳk}iZz_z ^5^ۼ=}вSn=9:m&.9Soߢ.Ryiy}GӗrgVoxh\%KiQj~>/m;ގfxIkZܦH/꾝xgۇ}n>(Iʥ{=߇yvǽ/ճ3^lڷ!d]S?||r\`[E!Ȼ !|7~1hxa@|mǷG8H MbO.uڌvV͋ln~}/WHZjUi52lk\d 3kmk# nYu9z};9ہ_SJރbAcq%q|/W5gn71csuyr^~OO_}gHm`-Iڱ~1a?B]etmǭ^j>}LEm=M#9<j-M:&^gU}5 i.M;uǹн4A~~ɉ}ͿgkcWtAEddnÒJ-m2F9Aqͼlo`3]?됀(% A*%PDJ Qz*A*)TQPaZP@e7tּ+}elб,-n$ͬTtϳ_L_W5_;ks-0;A΀Uf @`cV\)T rL ,])AAB*2LWUW+HYHN=_5+8Žmt0,1DeSp@-#VDzDaq\^醱z R?\ RDkK#܍HҠ'6eq"QSGxo8`z&rƞ=?.>^{<ŎqtosAqkIۧxޙK.PJ W kBfƐ3C [u{.,dW}[~,MڂWݐSmkhh'v#@Fe~rJ+*,kh(*,0:ԡ[b8[i4%qUX8 )Ra^4 ¨06nkNY۳6'Pn]8y6mڷjq2sc"RIx-Wmk/hu87 `+<7=FK֍ß0@fV[!o1r+>r9{% 4#.OKϿ%7$s=S+tkHTA$ˆ!   ZMHኙm`|D6~a w~7맻k8CM5tǒ|گ\'Zm Q}fW,\R+p5QQApz7]NAﵾ8NX4u`?דiٿw̻t:9$Sޞ8y5q_U(!(Qު%u+Lϰd pڃx3W^qm_R=~ž_ Y'3WUxrۗ_z'hp+]lMf4.(%M~WkKaEVҺZ;X컙%=o<ȅ5п#KumG đ,oUP‹XY (\uF2iЩmQ2-Mĩzߨ}8Qc"if"R}RRpn%f Mi&k(FbĢ.g#nk!ҫ5*1RUlYYJ0KFhv f5Wm fb >j75kiG;;m^ѫ#Sk D.>4[dܚ7hh#:]z34ugTSֶ8 ֝m97!l㻕3Y+YvDITApTyYDW ֦]].nrO OS>/j_<f+/Ǿhju Fŵȡ'JFt#2B+Jm/A")c;F0Y)KX;;7"@!)Vn7&w R֫x.Yi^D(prM7_K4|h,Nfǩ۶;4ƚ_~8g"~V]gOy*8W^~0hZz=~\)*6݊NIpWiů_מ\H<[Ui_.1ݩƝ i]o&_%fpvuiN5[ϵP8P2ԿYcUNs)ή%*%%tp 'YHൕpv\{mͭh} ;h]4ЅW.LX{f-5Ci9T/}[_s,fT>l攌}?V%Tm•4Y1D[NBڻHum]|Kz];j^YZLL5U uOv0 ǍH^ -klukrpFk֨AבnVY^s/ľVſٞc%Xp{bs>?y.됀P(D QA%P%P@T P*A 34`mu.5-v8Kw̖2=GE˥|_[:~Y3sRt /ӓ9"aaN!,يe`k 顡+ZiPV"dDi?R 9hHdeVF2y Ud v5T]%BdY;IrJPn.PfpOMx H܌cAkՄi͹E PW`U{ՇwBxN!\k%d %1*Za=Fpg +Vmjͫe\*m\v/^)~qjp A ·'5{qv-ʿ/L9=kaΩZ}Stenي]_W E8V7fF}ZD@ MARFiWI$xf. 4vrڱ `u Itio-@y8 z;uۆW>^^nż\9qݟuYu] K(cQ{ڬ^:c_/ܴDCNrmc\cckyEGUu^Ϝ^<>BuI<\B @QPAQPʢMPEDB(HTJ#=rua :Uq✳ou TCp_3z߆0mhi_iqz|_:o&?af[_v޲[uy yoyjcTPT/?'94K߮;aϽi)Oa^_OxW}rS/kmi$ok|[j\[[0HhQ4RS{tbb6_s F"¿cދA!uykN׿O/yu3 4bp y[-狏 1qyFC58~K}nd`BM6 n8dUA(!T P@@AQJ*%EBU !   ͙,[e/%Ȝ'Yiz4J(\EOW.OKu4`DlцW,OA5l]^nt6j /sܺ;]aS-EyӃ_y|ls'n'.. iK#NK4Y~/Amp'qLL-_+3yGcXD}?mmrvsxJB##M V˱t9]"q,L3S5|dZм8iغ{5Br7FoOnsm팣̑[4ېN?Y]3Sp}^ 5 18'\]9z{^ۨŴƒ9u~{Owtf6A{' U=8Sυp,ǏfK\^o:{uchLp5zuo3?f0S/KiEMFjYY95Ơd5a$*TJӋa-%4٢&ȴ]F 됀PQEU%DIA1Ws[v.\1U] 4u7${!].>ȯ h=qZ7?sz}.= ;UZ'п.vhyԣc Ҙg4@@J,Iᚃ,Q9&,mHf/ l*[v H9bHcnX r8VlgU®AI.MkWݼeZnpuqN˱[6-48 k<иtlޣYտ5BtWEG0%åoM8R}"&HjV9wZQɎZv-V촼 qArkki:\oG9~+JE{7CpH57ENNZ @Tk\*mOv?.9+Ic/lhז֢GXZ0m5#h}|{te̅F4%ԽI *8-:VaƲ'ftFh42acZ G0i$\%=P^P;-۞&Fg~(֎eZܲ`9ԣZ }i6nk9g] 8/[8)2!ivq<kWm>_ahjEp# ;LӁ`EU=F1'Yy_YIe;{ ?*q7ij0-UA @@@@@@@@@@@A5@A5@PB A%@A&!@TJ"jPK\Ucݺ'!v+7uO{cq\95R.kmv۴t2a^Mo6]4.cq ӧ&=)ӳAW &vT{['|nGpuΉ;rk6 W.`D0m~*f8yy>^o~Ǡ%PZ*_M}z!U妡 , L*50҈TK]?Jeq*QPAࠅA됂T Rգ1E>2E0+P@@@@@@@@@@@@@@@@@@@A(!J&L.+݉(*Vݔ7Ҵ9.WMs0|g BoYsts #H;MKKI{Iy?ObW>aF`Ǽ~_{p`@>\7-+m:kS,±&oRanÞ `:dyw <(.TU)tհkJ54@3qZ.iQlZ27KhH<gr2VVPKXvjK9ws[w9)Pl/:[GRaFihđtVfTRي13rKo$*Ҙ0߾stAQav e!#f R_" kt-'a\7J}p!n8-G.9s-shi/?_-^O$_a D6v'_\muHA\bxo1خٵG ON*{ܷݯz>1upܱ")5.8֕ KkH0s55N"HuVc#j;hjsskRkr_6Uą,sa1ƭ+8f%ViSUǷZgSڣXэhO;$6{PK}.M\0#ҕYƒ^ſ?>_wlehs0`tۭl!Ja-%Wk M",eÛ엣\rk% \js*IUQ< [ 7*p=_ɶIfO>n 4q+d7,ǯUTQ("*J@A4@ PB @ TX5T<1QRfn< 0+:6̗XrhZm{&mNmnIW5'u1Q@C=i_eH^Ō'*7_^{iv}iE#5ᖕwaB8Sʞ-X9|o4O-^qtu!c+/=[LޮL[Aqe;DSCU"(<`pYrjap%iJaꖜ kgZ;sS+z p r3&6b!rΝ4F`sVԀV\ \Uj097CqģD_42f*_~60Zðzonz&$])ڢkxSȜ&L1[1e-В[p_pBA ^פ\J6↧ ?2k<#_m4:8 g˒<Vт `wӳWÒ[xw_Q%EB @@@@@@@@@A5A ,Yݕ/ IYyfyrȲFF:H$*?|ӊwz/6R4^-y6|OOaI,puSW5{=?iIe('9`9ʹ_>'^k4V%ucK@ʏm1*o+c1h?ܿAݴ[_o,߃3I3JKW֚MzN.X=wne3ْ}Gj{i ɣAʻmgledw?{5|%tNnBc:k<7_. 5l>7?o/H-cAPjs ſlon;u&SY 28zV$yy,⢔,VrinƤ(IU•`2C3Xj+ޙ\G&A5Z±qҘ*JEsE0Ur܌95;5:m55ZaN- *"iw2±ʺ֪e[,hHUpّσGj_\udž~M pN%sw1y8֡qu3N$s@ +ރ_)sBBD*.\Bg,6n9_ ec agkC; \m~f>k|MM8_"7f$ʼn8:?ɷ82A8-Ja3C9L@@mࢧAе2 {H--ÄܿV!CpZ!c\Z5Ϯf(e[+V?uE]@?R3%VdDÛ'iQ˦[kֳݲZ#L{,/eBXC\*+2/kp~gV`)3NWز]ؘc:KS+hCZνvyo5ײַ둑_\y ѺףAZs.d2uf̸ߓс8~?㾚Ny^ZL8 Ҵ_NMy&uymמ? 5[׬v{OXs;+}Syfk%8S_sqh2)Lhx,e|_5󅜰)\*2~[x7^}}VDPH0 *;=OƇݬ ƛ[)ХiqC-c 4мkn5>OZ㒪 P^0PAqY`ƶ% PHU!\%k,៯Fh[r Q]7{LW6V^Iq|67ۯ ΏWVe~Oz;|sz'+m]9Ċy+׻e'lj# r)?a{pK\u-\vxː0a e߆{SӕBuj^axQZ)$ÈU@{\U$"4qܷ. ᷷19^j@)52C"#%:acPQR7UY!pG` pYK2*@Gj+m% Ny"a8*H@.`OJH VoдVB?3\K-ϸ/p.:w؏nd2=.$-6㣁#"}]5÷foW\ۆ g9ii~^Iœ;UHي1擀9c"᡼Y@Ԧk5o+\ +"e.^CGRQې_[}?-?w+zG4Ӌ}UݤQEMGb .׉/}Gky1}xm{ZK(Cx/e]<(緫; ^M+3x|{w)F}Kc_H^H!%\#jcuea{j;&|n>,V3vX" 0ie/smsz[+z ZX@\-uBE1T$4$2kN^lpÂIpy[RX[ &.Slrk8Q@;WO,Y&a%-i%&K &ix 3i/IpVY#j(Gjֻ˃}ˆ\$i:OcL~?_kO{ߓGgI}ɻ\QZ[L1&Շ?/-~צ.b1ljA<orZmpT~U{==cxy/(" Q# (+ϱ*b*lI"|}~糞\9 $5ۏPB % N TJP\+Hp̫px]SU ! Qy0Kߺvݵ[+C5CqcSlՎm,3 R֍exa޶+ɩSe,en O5aΫ+ڼv1V[ffűhksÕIҴjnd5ӹ"I{|1T!O]%t ޤd7kVurQ7Ҩ ]在ؕ0YpGТJD\9iǍBjѿCbhy:.8oc˓Me {ZN8bN?S_ETQ,0X{Ǯ& 級^j3~zq~/o\AnexFUpiҿ >&3GU v} X=־o٬nׇ5Αch84]$yx 7)3i3{o|cP)RY 4ZTW,ǽHT&slfŗ-ۈtT#EVr=11ma~&W :6-PphZмTJ:%dt35׷VY˦f62@ 8%]:#SMkjÓ6A'WN}moH3Ldq81ЂBTWet.nW!\>-q틏{kMC^/GXPP'БAn41OOz|ͦV/~LTJA(!hUDW 8bW>YU_/cBnVVBA@dTsç".| bƅbAZ 5nۛ@F|2&Y e[<\+֬s+K\XF=.=(FZFj}\v'K#5Hi9::^6`ȋ(hs[.[L1ۻQ*^ssGҝ^Mq9khpu]alb]ط#9˝u6j0-xʗV7[qq S:N/YbݶSGӻ{Zo>̺ߺ,/ c% z} >#v㺲Pᤸխk#y`lm4UW>2xV\&ѭ51P09lMm^i%KXڶ{1dlLq{L\Y|EYwݞoG6]ڻ%t5v[ [n?$W {hEfO!x VfӊH:d oTRN ԟEۺ/)CF4ù{}.gK>fq'cYi%^a(6ou7/KcҎ0u _WњgtQ'SGk.؏拞,'ovw:< B ^$-: iǔ>𵫣lt0y̅9%BF s&jsA&@@Af+{wͽfG weENMxv)t^^$@0]@xͿn0W F;+ˈ~|_o}mz[Vmmk@*~j|OQ׷N=5P0Oh^L=9?\8aT^LGZ:/QlFcZ3 qhŝ]R((1֫eK(u} h)5nEt :@aE2.%BNTo lsf~YPz6s*x7 8\H8w iWǸYjp¸ұZ|33 u;F "6]rb=``&luÝoVUYK4#0T;ov m=Xc ;y{t}^i'69~QͦJX6,O2rCýsIz-{hya"py{|_{Qkqqmf됀ڍ40* *, r5%Q`*ᜲW0+G?$;ἵLL`9F~+_>M毿*Pµ8nlEَFԫ:;6§e,:ekfKUϳ$s@"8g-as VWVG6k\x t! ZJdi@$,(߻RצʴkcmZ"Ć9`\8ӊXҸqx,v|w;A~Njk6\cItQ@(:^^u]1q 3_TgL6b@Ư[oZӣבca8fTca7ng(3W=㟛y\>"NGQִs{ k UA*A%H!tlQ4ĜLӻl_-z۷P:Wq<_?-|yvX[ G8m|}MxƬӇֹMw{YZqJVLpך}ꤋk<2`+7BS3S-zPM"FKyH8~)Z 1=7hdoh v}T{ϊ9sd]75kn_0>}zx$(8-w;7.אj51.pqWqoovZ3F]y|m:=Z-/n#ý[+UO9ftNR1)ЂVF 5r5,qtM_sLt ޵ pѹ2V[rU׌ZZKAė9BH~.sGpuw|b|_syf0FMC]_s_ofGM/{k1>醲%$*3NtUѵMA]ɿW^3p7TU8Φ}[_ë>Kxkvװ:h/:Hd:Eu 3>Bï[]4nS,T\kܳQˈ*Ōqh?O&sn\\޶G:1B;OoVb*B|rI.Y{^BC5/E a*jIhdh$M/j%”UGqB WOaMmn\@ŸHk} ?kv@%PF+/tӌ zi紟&_5s'2bA%@@A *J U yRy;fZe괍9c4noInf-X´fD7Atd}+Zl},T.?<~>KyP8*fVѦR# Z[rλ0ߎԻ?Աk;Ei)r\vjHd&-NҝDұ+Y*k6u)Z`غyۤ|ͷmvtҸs~ɪԏs\kwEsNإyqyQr0ޘf[3iFV BYV6Ui1kJ7",դV.I. Yc0yr9T}sFc[n#gv ;7}w?w_9fr\I'55a&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A5A!TYDVm!]c!<&sٿ{_~;>;NOmLgKwN99iWe__#Nϡ=otJ9Oӱw捏PքZŎPecu qǑbZAXI F 6<G d0֣.-É-.૕Q$0[%l۰AnVH-SMA<>Wˮ0@=.YjY5d9Gq}[+~?}ww/ߠ`|sxc^aED(&D}_M/`80=pWxvw;(YZ=.8軾e]᳽쌀^@Mhяh}=im^A}1*$ ZBQD~ͫywk<zduo25xWW:c5;r0M& fs1f#*Rp\[fud}Q0FJMZe%ƦjnrV$nϸ@9L8mVPcLzXk1d`|PYs:EpIi49\9Hgxq!R_kZ魐svZw\(3.2F-Hp9u7yyE*aE{0D\DӆC^}чn}IEC[iF;uvGWJӇ8q_nTL #p]w\:-ɗny%Gv []\k#ţkveu] sH-ilc:p QĂqiQֻ]zˇ-|ykXuG!4 1^NMm.fr(h됀B TNS+.WY|oRZuq~zx8&w}(&(`sMeFy?K[rwud0q\Jey*WH-Z2~UY]YYSNDEr4Uw9D(Cd.YL/.k\L4PC;rHI[\TGAiZÝ4ҺVNZ );:F+PFa!{8!.!}1vx/8v,QA% j2-㖥nW;ӆ5^Z^ 1nZ/&/}W6 +kg/鵝+[x3:~Ǘ]r/E۞h+s fx#W:ٞ8FhAoy/v.4}4up3+\ӿXvv$bT8iash1 ٥ׇF7x涯:sy偮=2چvpW=￳7?KD"%xtNa-#" m_W6WH rӋ]>ݢMWA%TJA (PDD D 7<Ƨtg_}r' JGv/M|_'[=hh,+c/Gۇ#r=DC2*Kr>k1ߚ+LAa'ek$qxŹ3Ww(FIU@c'& FMxTRaCOА" Wī:vod`=-[cs5TcǴ2<+J+Ѷ؟oS=>m]ƄE{̱d;ƊLfteܧin$zx.ufL18b B\ra{ݩkBܬep װqUE䗪TzM*:.^B]:d'?OmjZq4kև G)s]wڙN^1\zXI?ZXY65f ok.{4,Ĝʏ>ϛy|gދO9皹 ܂@E!EB %TUEH(%TI ٵHb%i#0Uͦ+9=m#pQ|.cmzJ{2<>JT9`;3ѹ{8XkkLjhq-Q,ϣHbֵEXrx{Ybdʝe{T$x<8UiʿjtdƀEI|LC5ȁ$.io{a,ތZhXi .yL#6Z%*G;-ltrmz*ۛ--`gU HT|aX58 F+]&SZ^i7 zf]7;QWt9Yh4Țp[˕c!ګe̖G#K9hUJ6˩惙9v+\6ї s]M-a# Vx[kϼb9\%rtUJ 됀B Uh*ZHе/|k.+JgW~ms}__&D23Z<-n{wz2>3\5 >bdb6mYdy hx\: N4J3\mqhq#{^ʒvkږ_!6\ݡ򶀷GEنӣAq¿c |EZ0do)*^RՑԎ6apn8}hcJaY G_ԡWZnl׻dUcV4֧]8/6:g}[5P S8u˚WGAQA% ; V㕌`z&\|wŬՓo㦿3Nm|[<.׃>9łFv<؂+Bnߵ ގlt@ -§%uVqXi'?YO vqnWOҷݜ.n^qɷ^Vu4KRig]a@q+8jk8щ%V^4x݋i#a:S{5ގu/.:C#݉q_ED ! %@@tk Hldq!زiJS2{>?WlMZ+2˩(DG` ^/D, JAT,T#>Yul<遦+26W=miīgm߱[fFAXϗVSL:ycÚ^ETJȞR:s&G\/̠ܭ۸~l1Mj.ul8-k$6cn;kLZ\ף~}%1H=ik\{\9%ۦjf$f=+ݢYMa6Es w6J+ ϳr2rˮ#Lk s'%{eK+Lyqj Y*e:ۃOBvf֝쎤)\kMu kRI94UW[K'YΧ}f}N#%Mpr_餗sU됀ʢ@ApTdiZa5_[򍃬ɯw;H_<7{p|;clVAJj^]^ѡ%!]m-i8e;]^N!:x(>>%6mM^ψ2ǔ#&3G;ƴ Z dW6wo,Y#^]k6`eܫf00FشeUH pSe]KZ29# mĵqW{-fy^pY1ux2]4Iю[\i~p:[o>[<+@@AAA*HA`*]&[jAphi^MRyZA٢'ž_¿oSNo='Gt0PS+aߠSUx֪MC#5>&IF5 -p+i۳FRجsڵ@+QϽɩ *jMM3ekߍ'\\.ߺq^]g~{n.q#$W$OcQPDJQPU .Ue ^@L{^_Wۋi>[7-hc{kBǮlۊ ] 8ԗ k\g٦q-qƺ}.WiT`Ӈ4:" {M%YY"@Z憚@':ebx ;C-ւְbm ;VLYjjAv,Z-p%kwVЦ]`ul6#.v G)]ήۺIlsǞ?ZfLPnAXӎ Iw4w_0"p/1ύjoHmSMon \ڊrҵn+ƴk}LŴGmv+X؍' 88K"MuWQvj\^A˟1_JͶіs7:(H%rӻ}XK!vޮ;o\K7 ;"G\ 0f~KljRim^H2 @@@@@A(!됀PB Y}4W *U+6p/* ޱR9 4N.( 坿ߺHdRh֊y"Ruk*Z ^@ƴ෗=}v(DCEp8ÜZQL֞{2f!T[;27 S?L-&۝,C }+Me c44-V&\,N`p/p{W<^{y}?ᗞ_}DQUAQ Q J@@@@@@@@@@@@@@@A4@A*(Q@E զj+4QXg Է<.&+#7e 3gܿ,RZt:5s~yy<'s;}s$kF#?/jr'G}6>m&) {n~.r u 9pXo MlzF #Yن嬸ak68gBkm(,fD⏄q,f(g.a}WLcNbg-+RSJ}-̳>o'uƳrĕ½U(('J!EA"@@@@A!!JA(@@ UB hY)-enXt7>K}s+ˀӎk'WVga; vcNaL6<TM k/0כJr3#)0AFG8-aG xM4F$_Cos_sۓx}rNrw/ǯƮmUBQ hQEPE(*@@%TX5TMAAf8ˎ%wf׬bsl7RJmɵ.ouɤP:ԼT4qzopA=.sn}u.+>}Y˚Y%aPҫUyt0ߧ|mo{Gwk+iLk<^{uGL fT/Z5"`p^S77߫S\O(#|]o'1׏oGxK7›nHyZAē{'cy}G$AC^=q.|<]'Y f;?Lesw fY,wQ3j.sf9`:1ro-C:-epΥb=R]aXymrwY$H \XIIppuga^O8]>ڟ/q9\`[h@@@@@AD QD*JA(!ED,j#,6n3mu<6ΚV#ѽKƆx}o'OG_F>6vq8d35tϏ<37;jC!.I~Ϸ\=s_{]MMx.j#kI"#ڔmi8,kܡIˊ˝ϼ|Nn\ӏ 9]ٺ6SB)N,LyZXUmaΧxpS^Ǿ]sviɒ4ȩa{iUfgK# n7/}ּPT|v-+aW}7kfܞlziO)$!~..' I J3\)EZ(Ң5TJ P (UQ@QDR("Eި1E(h R%@@A!P!D+Q%VWkJʖ/ +._'<{z4PS |Q]/wM77z5u$Ef|wμkG Ritkwy~y78 WX\[lR{s޽:I˖s.5) P"J Q@@@@AQJ*  UEQEB @A4A&A&@B(% DT`p\5i!a2iri[+|M\x&[bx ir+oVzQI- ?JiZǟ# LSX:@>kWnL~V/Z;0 [k7 G-/K5YT}Wj1 QU*(AUW)p`arjS+|m8Ksk\dw̼HÉsݕ@՚_wl{Ŏ^eܵ:{ t=gcOi`I gxFmhXL/Bzx *ɖAKt0g*nP̪m~=Y5Z#.H58e\փ~r+ӣo2  ~O/n\ E T( j8蕒XKNƼ_{䕯EPEQDQA% MA4@A% B U (!MDUU DI  *$ kQPV֌UxBbӸֽSX6`~W\[tɱHn k]eZu :V;Phj?^~ 1茿6":ɍ[Bq/?7Z۫fLʂm,O4fv-ZG1Q's>Ů  Bhb1I#M8១i1 `q*a2n5u}v^mlF:˳WY}ےt_y{tPSHWړn\NZZqsH\I\m{u`àઈQRD)+iU2!KU(QPD  *QJ *4(h1@QEMUDdZ*J-CDɂB *0IXi*(D PB P(%TBTQ@ UP(D (Q$UTdh5pe}H.-)5D8QD LU\j)EQPBUQD o=Q#L(@-Y/>~, vkCA+_/כ?OL{}aVy@#?+ v3ѧ#jwI$z0F+ɽ ha˵HMi#W,ݺÏqL쁮 Vk71.tp<]F`N7<Ʉ }z^95'V*TTQ@@@@@@@A!Q *A]6 9PWI_zK>?{2: 4/3SfE (p_}A(* AE(DP((@@A%*&*(E%PPB @Q9"!EP@J TUAA!DEQvVlek0[VX<@vF6 8zkŮdcMrZɡ+_kN['VlolYkY[Vfɧ/Vxɇm&^Gqnq$zFC})u>ۛN\vpʴFljB#8;^cЮ|$k'V-ekN\Yk<;P᝚{UN2A#9`"GKu}G'?y.iHj^A8np*T,#%55R! V! hںT\EA`* E@&PtN )%4DP SV ,2QT\Z\`D0e!!"P@QV-LA$*(V Pd*UPP SU-S JEE QPP((DD(REP( Rc4sPVQJUEB(Q@@@TJ ('5A U]aު*qÂU5QRI4E\T&2BHҢ A*%Tz(nqFn$q=zWcycF˒4eWѹ`})NoncKqʇ'WR9MuL\^;YkndcvVܛ ;"h@WIŶͿ>d-t!AiEMf:}nr!(TETdcHp-F,{+x 9~ooO}^jlW2_ok&/~he4`UwK5ޭy0i]@Wr*TTR)D PB @@E@UPB*Q * @TP ! "% A&Lմ+0bJj VՌiv⼞[xlG҈y@Tj@66b˩kߩ۹y<>uuboSC#ڼOVv{Girŕ [skM>*aε]+i40ïGܔ⼗˓6vPq^[h=^fg0\+{3}\G:2?`dA|˶ܧey-<2 Ӌpݻ5f ~*'<#̆%L$J& Zi:bkX[ĎH2OJFɥ *v" i4DB*TSJ҆PX(Ҙ2LM()e YF+Xg*1Rŕ^(-**q*PNjGUT@QLMCR TX PE(B8⢤ʠJҊ(OUE[IW  R. *Hjv& ISQ0Aj`ȂPH %\&Wr8,ԦR .Q0e-QPB *$ 2 -TM R$ TzPTA!UE(@DJ %T(AUU Uij5\,(UD9)R!E@ETUQEHU B"Uer)+^Yǘ8}<4VAg~ |$ =*6\ CAc^[xqJn\nn?kD *J䁦fKJᜅTXԬ0R(*$1pn&kve^q 9{Kޫm}fG#Hҵ>Υۋoɼ_u\  ^S5YiܾC,8.4蓫ͣ,<@䂤(ҋҙ DiJ`ʤ(*U v ET (($* KN8W (2P!i̡Yi`P@ ؊h@""DHU ( 5U-iQJfQ  *&  +j1ka(9YnE1_"qݹ{-i)g6a-`cc]BWSS˿h>^fpGW.[W߾_GN̖&$u*driLsZ1Era@<6#JxriwI<~]:SEh@<ɑ?~_KK~?.f]dꐯ{fF0*ŹQT`Z^h׳aQkV DQkQqg%>P P4(";VIobaT.EB @*&*S+`0UJ ಪ(JjMjYmm S**2[@A' Uق(@8(@0DAA!iE`%( &)i#aDE#I *4*īwYBAPJPA *ar*TDVA!LqC)"R#J"0L`,gK3bTQp9WMT\6F0dИ\Ie`d-C - `YlH$"%P@@AU4UDP"%PA(*wj+jU0ST8 *RZ" 4(U"TT**Qg"QW842kha8%=o]5uoKOaÏs/ZB^? &ceTshJ$-I"R Afq4V(@AeaeEEVH-3#ish$-Եߕ׶l4{k1-Ηpɡy|S꼧umtVx#c^w>8Yi|%uηLn:bq W}73{W ҽl+ƪ*E*Pp~MJΩn 1X땕CEMBڡ 0e&QPQ@hIEi$*PA( -V"UPHA'A`E*j*8 EREUjB@ @**PE2@-J*f5Q."($ Q%TJ@@@@"UDE. +ʳkz  ΫmY˭tU&DNR9 ۪Y7O>|i=8`C`Hte#&c7/1{\tftdǤB Âj47'{]{y&1]5uBgo}V\GdFLJ TbwC\ ,VUbu*JѲe\|Q0 LQbQS &hHVC~"4(Ey (ٛ "@c.S-MpUQTTL*QS5A&`*֒9E*\D)UBhefźRL!!2F2AAusW)WB]CtYh2Xd) Q@UCR.!PQDDEXQRڕ!0d +i!TKEUSd bH+J("$`ˠ-af4!,%TpQr= $0Y” ((US K,bVCʺ;Rxv,{Uzw D@+Qpk(V)DEB&@VTpQ"CJ[ǂLQPrTڄ2rDqA5 JE'P@UHEE4pL&U MVFzA`rUxZ#f?#{zf2''P9acyaֶ J5bt-&6ƌȭf_=FN =?ӆvs]q&<د_d6B@[RQfJ6'몠(V5 g,nQH5Qju⊶0@5*b PЮb" n qDSFH pL&Vt,} VN,+LTZņ ؓeCh)2p jN%Q$Wv*ub0UH*5YA5QD ITGE=T `jQ@!Ʉ45 *,UFԫ8MB&""!RUDAIR0䋔b QXm `s}jr5B5nY. hv+cMzj7Q5+w+w. 23jU+EZ )E5ra{ eBaBTU# &Q H5A`U STkqj^XFPKUJ*X8SYU*J*TTe#DDE4B(B"H*3NuRBW ZvܣƲ@UDP( 4JqA* QQ pDI*B((+EjQ`rU*dltjFm_,D`QrH^sc2Az0Ze4QQ ()Ke4J]ĩ0ec׆ HBOu^cܺmH(D4A]GS[+m[yq\Jn- ap>)O\NךN;D8A/ooܼu9}G3,Q -C!TFS_{B+¨-9`e-xva\,$ 3RVTUiLh3DKd'KJۚ,8Ê :e&#JBa< Ɗa5Hū}KQ*˜ʄTڥT4C(SWlD f4L.R֚+ԖbLJ2PqA-μ%I%Q`U\U,L5ˆJ0a2R YȡUrU0e< (r+- 0vR&iLH5Q(Q P4AnTCF*BDZ(Y f[جJ( (EEDEfYj܌ZjF-m0 7o=l۶W,cK\HkFܜyq|M/nmp}nRԆYG3[Z۹?$6:I̛f6ͰLS]WY֯z\GZҘaՂ{(nn':).뗚<2DK }mOI/Yfb-^akiItcl4հ" E¤U:{H4WŬ'UDD+AQV"U4§{P 2؄̊H]Hahdъ aZPZMj ̪H9(HjQ-C җ;?W90A -:%ЮL#YL;DT̒G0g eB*AfUGPX}jKS iL.QDB4W)PT,(6BYI%((D]QTɓ VR]\ S& I UT[XU(ppYE h%*$ Ђk1Ao{d=UKV3F0V%WةDZf֦o&LIF%,YpeS+F-1GM)jRrA84+-QR K*arb$,⭉6PUPhe2`TɄDkFlI4&"#B\Yr4!M$䩔(d`S UQ8" 4& *TiQQTTX+1㒲%c]*hRZ+LX㒨" ՌM"bP *((( `@Yު(sYi9Q:) !ARQ A\0[ ed$D Le!jUY  na\VkqBpITAsQr؎s "Z$.?.oQ5z&殜iɩ r]UEXCchA WW,ܺOz!`RM8.\ݰz龕>o'Oq|k&Æ'+ZypRTYbKuqe]&Sk/S&Ʉ%S E(*EJ`eKZDdf`X⥦YtK]L,HU,*N*䶥VXkSPAY!**kÊ<ڸQ UQR\!EAr(\`j2 g! 0QP TF E)\XK *!Qq%Dar*4*jTVY4TqZ9CLBBzL/՚Y¤H PFcvՅxd*EN * jJR"f0Ԥ*i#*. Dbb8sRDfU+-eHƎ㥡-=aخ^\[LpSNYfX\"ZP&r܊2LW LT *ҴmUWc{URH*‹67*A:0jCsi%@(DMPU@ EA@ڪ3\Fbx$-iK6QSDC,ArfECoaA"DTXB`h8b)؀Eq+EEXw %2K@LD '${BA-= 8ŽTRS fQR4GQm=2\\AdEKi*`j}*U#Af9˅*p[~&Vl`+Xg! ;ZLn'2i$WXe[{G9$:5Wh2R_T\HpZgڭIQV QbuNY+Yg9:|#?oyӀCZFUUTVhp[lCHrH,p"1Yy4e4T(Fq eq@j*JAT2G*Xq$i=eBN?ZYI* ( k*21= u\ƇU&j7BLPbP)ni>sze<<]ڿI^(EWIj,PЂTYRn"PP ƪ*E e2MIEDYH*i[^+Jar+riL.M(e 5\((<XvECҵ&**LBYY:Aja2 `U`(Pw*4 car0+-2P[EEUeJg]*Kq*&j*5QC 4amSP*YbB 抑DC\W #rR'w096: u5ުgsu}俟xCA+$duZGӣ_7LtGk)osZh[RR9FZ\EczxeɹWFI8^4+go^nYwǀZs~YzÖX(hj"ZS XKB˦U,:GP tYis.㼨^~Q4c {Rz{}>Ur`Nˍ}-pzq]}( 12EHUD{Qi MH Dʅ;SNhʡQ(Sb J*q LD2QP%S&5q LRµEU梪[\8?REEJ  JeQ-DKUI J*PI PPKhp%jEObЪ8Qª*@D ( "U B @Df Ĩx'ХXt *aBs(+N%FpYڦӱT 2afWV% *P4& 0e8B,%­* l`cRas9PHL.QN*)J*R*((A!@PiA. x*PZfbs9*"qj@90P(S1eGTVUQk%JEIDTcAb3W `]rW *%0ZU +ڈ@ 26a*囫%0XS$i`EE0 6"ФZ L*דk kvNZ8H!;ԫ n)@Kfp*HiekLgخ"5! IeePDd܏Ȫ YeXꅊ)ڂ-2ʦ)$ؒ5HbZ(SW Z9ܪeVA$cDcZYiW mߖ ig҆U-ǵE; 9Rvt݊噫Zb\붸Uh4%[*^A$C&sxथ+5pZ8_Vp+LU&#Tk7rW 8i R#x /Y/bW|\sHBT2(8-9Z XU-~Ld;k#{8"TI#4TdZj1PJE"$׽QŊހ\pENL9*e8W*UEAU8P הλjB3Yi8w-F*-Q{5P8d¯a*X QjNQ`H,R 8b`0FJXLh+Nv gĘcpUF(!ULPT-0ꬷVbڪ*AL֘4Xڱ|{ۚL1zu{#CinG=Kw#Hd>Gi_3=ޛc{\_w-6н qà ncvzɷۧg 6m:2Njƽ 4֯k_=5\HtK28 Վ7׋km?[ŷI d| ]$'eVYT0NpILKE )*\HV8HTK9|tmxbՋkRZ4(-EPTq )A`S QBiWԤJ`㒊"ɕ¢%CTX<`FXvYDЬJAQM8`LA:ULQd* h̨E( QR\P1TQTEj jL qQRtС+˒7 Pꌔ)Uq(Y)ZW$0**ԢH*UT2o3AϢZHQm 8,Ἤpʲ:O&k?~ĊM8QV(depPE)D^& uiln1FuKq=dkSQ@+hD=*A 㒨ӗԷ0)T*HcHԌɖi Բҥ.Pх-K]DG:)"˚-C5 ƪb`C) 栝E\EETUg+зwXQ0؂ ӡS eR0e!`Afj;RdQTpYE5s($bs{kRv̮דYj #5RfsuZ3C*K! ͍m1]2uRGEsYtVQVU0!TH!)h e.>c,:P" ar B)5**@VKx P*m2Qrx VEG.^J$2Dc4<8r\gd5UÝَG kޣR5i8cbQS,#\&R֖$KV8D.(,9ƕU0zInW sc܌:pȳQ.8ҫ.׳dZq"XqgtYS%\+)XX4TPe]0Zrw Jֵ@Bganj,#w2ٚyp?bgεt׵GLW0;X˸;KE2HVVh"|)P7{9kZ绿lnywu`gZIqfs1ʸ÷.b;ڏk 9ѓFnZzo/޾?ouۊ{w;ĭx_7NN-^ywV؀B?Sn?oOg]} ~vscҷ,pҴJHUtTarW6)Z]G%f+6/Qi0c0Vf%[B#B* Yh8*e~(0;%+r$h{gJv3-oyXG|d,A4{Bh8dKW+LP"Z >-…@S eGw,AI8+'L֊`쎇jFm_A.Ү+>Y3Ch֪JT?k\$ Q5)+L"FT.,Z9(m1BV3qn 0Ud&L\,n55Yj%bCULڌIZe:81v,2O 2VRA5/ -$PT\!qBŃk&X_ lt,ȫ"Z\3PUkL:LE 8o1fpdd Y+#7fJ)ZaV\j5Ɩ7Jі*ev.Ha:x0c{ ͍ʖ0DWW=g?0͸KKusjL/rfjNJvÀCf,!)^J(ܘgq482i8XHô XȠõM\9"%bVrܪ4aWe2V.+3y!W:PB+qToZj8,(88 *pdH 0@eC*3?R1ƪ1QSip9c[J51xqLb2yO,ܾB;`46 tN a唼8bV%АӁ0fb5AQSQ()5$n>+Rv-Fj\'P04VYSPQDZf*(ejaɉf]"-+0TSA c5,Q[0[qq 8j!(a!`S.F:rXIxϏ/%{R:[͎m3a\wr羝?ս "Ꭴivyqv,?nrͫM(ڻi鴓{\fǙӵz&vn1S Ddj]3"mO2e3NGi(-GFYrs]"ZԐ %̣C5CP9GM݅ECSXc) $6/Y|tUúҠjSQ$ `Lt`#4,ǵVmx|m~I݈o 5[SBhM冊X޻AS :jLP L#L&Q#)*Ub=X:ؕdKLa$t50Np@UE[JL0QAުKiT(MrA&%UePңKL@+R8Q `$62A@(  =KZ-h#%Q\bT;Рb-Aܬc~MJEpϟDKnփVHԱqЩlEkE\c-pk!k]ǽS8c8,%H[H5'D]!*+R4e:-3kڢq1=YȀJs*ki\8ERte(cňF آ;%dfػM9*gIUrFQIYB!ZBi!TCXrL.Fd@Zg[-.*Frӹ S xGВ&Xmi.%0jK`(FPSsqnrkE\I%YmCx(UYH#4[Ցf;@;*Fv[G]E\9a!TfVأzca#@QmYծݑеl0(pr>*U[n Vuݬ]4֦fTJ"ZTDg1FGܣv?BӍf0o2 'ثVXSJ#ZH6 桂kG2qN*PʅPu#] =UQ2Xco#j[ b"eM*5FA3ErnjYJgުI7`pQ#: $ ]:8 7FBG1*.4 HR5+q ت]40P%\3v0LDeH\3®scIUkYtO*;N/qĪQbH(fU͕tYC4FWZqPZ,L elըd00*Ĭ6ҡGLLTE>UTGu0AG(A5AM-<o502LAb2)1+:50Ic(0Yа& LFU0e)L.RDem5U2P樳Q)D3$*Qrojk&BqiaE%[xk}7[VJpEH%Y\nkNb VqDTk 8:dbVUL75A J`(!^u,Ams9*1R{¨^ MM||Cj `} hJ-\*XW(}*U$@i)Ѩ"gkT\[LIU!PC06&*pRTWFGr\ L(U5T40eZarUd-?RSA!H 0) sF5D< 0T V,…ڹk\0b\9 Ĩ~3ШZ*J0ʽRA$caCx1m4b)^Qbfj1s 7C*Y!f1pL3vUqn)bŠ7hZEQVpUYLT"u*sp LB.MJFo]`uZB ff0(-'ңHʵ(W0Fe!h58!85„!3 0`19Ǵ=!/)p?Ro3QjzT\smXq<I>8jN$gFvOjkb7vvVH8,v05*zLXMZ OԦW#õUTFAQ4.՗^bʹţتelSnjۺgڤmc3[(cvA-)9YBeVkb4+3\ YPjIXm8ٯ,!ce.nձe+Xr,AmRͫCUy1|9*a&hP ደ8F=NdYe(…pQV UfQܫ}(tׂa|Y֍h9fS 7GlI#BlSKNF #Z.p##-ksQվ&F rzS)*jj5qQv>GЩ$GP 5EAy<+W% 26GEl8S@f0C+G*8 3ƴr9O$fmpU넂(V p%JMMV++KIJֵN!5dNS y sP V ”# # >HŊ6j*ɨ05IX_Q}(-4T*amF PʅQA-MQ/T2r JT4DZ܆PZF#"M`fhW µYXEYTCĚՕ,]5U"z.&y7ؘ<*aXG2WU8(VL-5q%InZTQ (H^I&#YKgء0WīTX1=A=XxQ=1Ra^LԅgulWsyn+]RcXe4# *u3T!V38E0RL*vؐST 4PqAn*2L'0AAaU0eP0YTRh$+@DNy*֊pU-deܫ LXGJS   jV2fX! *A&ʴpTZkUw`!-a4̎LD{S yCJyFʽ*$)WFhJj\GQT:T*C8a&2h WFZTʻ@ c4q 4&!@J'/DiĜLYM\B1^tBkצ*λ寣BIe"edcK@F-[$JՀpBO` 63 ӐFHRq(yeI {7#[+U2ߎ;iUrکxG#0_|( * 8j"1#AT2aQFM*jPYxwo-b,n Z(|HXࡋGi&+dD> W.噛jqa҇u2Iޣ!11weԹ]Y,cmUqa4 ,My7B7% D2:VE6G0nqM%]FC\NJHC,f[`8Tvn Q  d+#Ћie5BjŢ>Lnp1{`F_R3 qb&b™S8XS*u6kf\P+h5iP UqXJ7V\ADΣR>1D3W.*.VQ^1 uExL5ܔt1=I)aL˜'-m.p 7_ӫ^S\uQ^`cMH2qO(xi?RSY)CtT޹U)UmfJkio+gR4?)ƴօfj`z\Jcڃ+'Vugd'b=b,ţ"2bJqFp N9݊2 &Jig*8B.Y`µMe\LTvӤRqEI5Tda/ʼQӪ1TjYPWQsr5ż*9V' tFD \jvd4PŶfvJ/bi8*זb@pEna,\ ^VJc@`لN*:gx)-(@P]VdT U#dӀU1N9"]YdpL5{i$fs6X'%YFE[b3%U19A4ЊpEY.PMrEk4ҶX!ZIwkqrul?dcZ- yxoŦzyCƂ*bU iF 3yTqic|EչjnpV\z1g)l$SB3EZ8kf1>y k#ish/uesmQ*##q@$Zwf%ݮٷX$j4|z޲lL)76I%C.>/Ujm+F1r4ൗ?ʧVfPV/vWyٕx*oVFC^*vd1W5XX[SܘO5@F|h94pBmͥ5QFX4Do\1CZ4L5c^RԺYP"MGf;I# EV\P4.oO *sB%⩗I4ڋd{Yqӕ;S-MV5&LH&0K#jʊ¤PJ!udhzU`Ƽh:*Tѧk*Qrך0+:X)S J0[՞'\Nk %0yG+EfNv>&15CĪndjmXE{xUWZ]½ج[ŃA{Z=g4袹'-d590QE]e{u`()Gr:MĬ{k]NpC]lSGNʘEʺH]3bQTH!0U\-[lv.,CdPi糩̼ie;}~{=hysS۫Tc?6q-Nmv'n)Bc4 ͶknƃJ⎳kX0F#uc3kw`H6Ln׹=׽|}8Ǘ߶݂]su6vui6,eܵ-qtF?s=~Vk9W$ǯ_gg}=+)]m. Co$za3OzG=yx45o|2]q::ݫj>e-ob8lYlAk h!ļ?K}(~d7+9eWS[7^6ҹ'YkqvEMjx+ti6k{9׻EՌ !Gp«RukMm-sѼR{KN9`ԕlfn*ۆ5֨96!]5wL12:Sɵܠ~5'F8jc%mygM0[nkMm6vhuo36(L6y}q6~Kc>[5xs:=@yy[,N|W7I).#N~U]zom/d7D R5hXz'inbUgMb zW_4cz>do=Y#ܬ.v#cs5 3F}^mvXv<֚pᒬe$+ qpb1fCP0|9q$0,!;B  vd|9a4 ӱS+0Q 3f,wVVļF4(ֳZ>F9&f8m%f[\hUsa4Nn ⣮g4n@AUX|ϸ 毶5hǨzZh˽ "S} %SrSKbݨkmsKkM> {ϕ,w_3IWΓoKzy|#Ѥ~޿-]l֏trGr\-c>VQr.E͔U[&GjFoowOMQߖ *6X4v_.7 xsvci^۵˩gc^^Mou#` X_ָ|z"cќuxlޮ^ݪ C $jn]G|27rۣܼehalrF=I.mo7xy=^.5vׇ{O-m v Y8;Ԓ:5ѵ[y<ug"x6%z/\>/Sț$pK 01vO9>^ Žs7ymٝ)Xo G c\3T<Oz稒f KLm~,Ln wM16񵺿z=ܾmWrfnڿVj :_sxm6^n$bBO,n~,)3;q{5z5e|R׏YT-NtQ6KooR8H`՝Փ/]Nyxlk;u:ُu+L?sX,:[&@a7湼2syA}&F\dk D['3:_?$_;OUfz/[2y~{mj tgKk9h}o kͮ%pێHJtgznVh @<×:pEi/b$@@¼Q}{yJ}"a.nze׮MOsӥylͽFÅ呑L&^~3[tOX6;-g3u`3vg7s2=r-m}gG Tz2> Cu7SU'RQE 5FR9҉uqV.Rl4 \̲5#2UJaVtL$gBYXfiߒ\D9 åO*n>nbٶ]! h ;kW=LmuF76ì)#i_̊7uYhx&û̘n 6wHyc $R4`xkIGO%.(B:dVm@!-wgw^ZXI!Uk  7)n'F@F4hdZ i4u*sh!໑#["Z1*W(Da#%s#>sna025cAFʽNtm3qD`s=s/O͡pۚN{?ݺ{>+;ys ,dQŤL}G>I$lOvk4i^}Uޞ_o<]#ͽ68X7w2Y鸆Uo\LN=xܸzο ]o^8eՔ7ut"nKX?[Z2x=../\y8n|F[0($e%{}U{kf k˼޲/I Я M>+^9> |&Z&Ϡ|_O5jI$_S!s܌kɝ^;3< ;ͷZDcd=Ko<\ܯkxn׻Y=^aoM٭,΍e'&o{&l&[׳ʏ3^֭۷IH>,5Y/LNͣ6Wf=lqd=6ތ&IC>Yѫ+/t]tóy2[崺MmXgs=.{og|~-Gv6㕷Xd}Camg|4ܬr鶺37ߕ^e4}wmoڼ[uq͆a6h Һkf9lõ2,k] C$,ag׻6S)C=y'`|vcczOIUᾫLvl콲[imsu˙shC:d3Dz/L6vK3MܣAԶ7:d8xW7<Ǐ]i7;-ѳPvѮv5ϓm}&s^,ߋ⟼vOo$,]b,,-"=kY?+ +'oO.s+.؏ ̓mmsn2>Dqe!5"FGONlн_'\6輁B7Z{}їKjN\ ]kClG[\ N|5I6ޫN736:4O'I{K>V}=V;rl춉a{hǰN;[}=x0u55%kZDL`o7MNmz*̥y {-1/gʍ12\W lE%4.N+W]x8g|[#A3_oזQO^;׭o:-oG_Ҿb#tՅ Lp#fcogĺq~.[bt^ sG]>whu9 EO_lyN̈ʋ<\xlcI-q#Fs 8{So7/4I v}r:7i0Ԋs}3ZNO^ke6٣Vꗬ:@־mO++wIgf|;X Q\u@'KNujfvyv2?6n v%9c}5gmy;ߖd{#K^>Tח]ǜx+1DSP"z5qRI)uFѱ*c;t_{I.M6ba ȵ͡Ҧ#gvuh=i^?cAۀF(;k` Am,84+#5#{n.adBԼ4:NѾ\2sx^>]Aw.FcL-&pӦ^;<>)߅ =k?.̸sM;88vzo[]rfd{mu7ﺈoo9 n?[_V>[}=|]ټ2hH nF葝(e]O/?<>/ifݶ^Mݣ_1 gkZ=]PҾ9#N3vxoގO ,q;w! TѺ-Z%#WN-r_ygON{GB#l\эG)!mZw#}L:*yKe[JtQStN]w~;=RyA:ηvqif?Ku˷.}m}L=kYds΃{_^}nӻ{W])$ČXXoY/W;Hghi 7v.voQ+{]lc}]*^]6i pܬYpLZ٭v. c<-roϬʜ~fVd ȒLɬ7L,խ= 귷jpk#\k%nv>yZ QmxߖV]&oW]<|?vb -Z}V6zַXY>ok/]\!89u v_lq{9v`6rjR"#a +է5hYkz_ޢxV۾K9dtpۙ|OW.:;_W&ZóIHoV7!&6ikh{5?Ս8wgwYm&wGU06>Y{eN}D㘦~O|n ۽[ X`1&k54\gK-xle/ޖm{EeCC[$Uck;N}qFז~Vyo#fu BV\ٺRx4^Ghzkn3ӎθ}fkn &˨!h6WSwMh/gxvkoӧ]m27Wɩ܏BN9]}^d_gG-7X .o#*=|{s >FT4ryr{x$6VR/졞M-mm/6蹲0?u4z^/[Nj)~uM n߷0IDxa26~lԾ7޿=<|:#uG<;SY˫-:yvFVY\z}Nھ JJ-%:4u 4c\I?÷gq磷ȏ5m<\nYl-x-/Fck cz\|7Ynaܰ\uHzz:cn| l ZF^(~˹_Qqm=y͂{Wk4/kZO.w7]fc}mi bRc´[m׺:E#ggrF.Xh7,%4?X]We6:>Uyҷduɀ4ɤi]>77ťk[[fh=zzʳwvƤX=;)ٶ*mn]1k!Km3OWߚ㯿^Ww+~E(f6 !$\RBWfx)ŦݾוW`Uǘ.˻7b[+u嵭gV_rI|cn=z_|̿%mm<<۽>Xшaa(![~^yӧNwI+\A[}ͤrۄat[^W գ/WQեymsף*|;_">魒f[[8nkK5G^;G? {9\_v6n?U4gG_~fR%Ynfwm[,ptէ189Fns|/moßY}/3>fSLn{MThqͫ[mt/`:Vuiv8bq1Oez4w|}4,޺?OVjt]K55ۯgW>c۳˃!RG-筥ik4uW7>fh?/Z]GVGJu}=ysYiYynsK|YXI=/]Nbߐ>ru#^P1'fKZgz'A5u gB{ڨ^]vb|? ]ANº[E,mə-k}#hk49o7:15Z0{ylT4If-xeVzt ,Kcw3OVסj-9.q~5y[[[6sb8۾Yg^76Ep03Igwu/>^$|ol?(mv?ty5:Y%fM-o/-l=uWat&AXS<5қi!Ͷ6[N1-k@#?&l>7^Ls+6˸y~#e-6[,:[IԦMzՙ#>\Z\廽s|5e,I=fghӭX_k_%2[3n"۷xZ_[8sWKz F;kkuMv1Ѡ3\EtwF8%uyvN>-+ah:es@--^L绡42K8sǨ;I;JgtrF1ih!dbUZchht ?sOi{xD1 \\Kbhiu h5ms#t3s^@Z  lzy;ƮQ7\?iwIG ys\cef\_$nR9ji.fZ.H(mp>m%>6O;0(9 м,/YqƆNz@l֖V&&g =y3'4O.NGnneۉo,Ͻ=6(s͏S%:-:WOQ{wM'}ݔOFF9}_zg9:(7xekD\HceѮ=mH\<\m&n󗅷.g ;f'–y./C K#kl齞 <<mnm~=7ھM?.^dt,oG+cdDKt4{ti1/5߱_/|v$RԈa\$=3gs}n-f3{o_7g|kmV㴇Iskb.,H=?tߓQ]ѷۅѣ-^՚vG4o#ek\eMno[]NԋwE 8 Xf{=87o'~^z/{{SQOp ܮv믁]K6bmMԂgΑ6}8L~c9<Fz/_Xݾy[u/6ExrA_S]1c&ѳ\ {n:rCkZ:-H;ZkM̝z[ז-]/CDtWχw~w?fq3r(i{#ELtGdRk VvXtYӳ՟{;mݩN]sUiLQo]EN_'>' %nKig+K}7.DBf9w?n-Xs 66NM1?.:gL|^oeY(L6O=N9/?ۏYetmzw)~X$yp]41 㞷g{;[+V[@bv$$WŦ%Ďлz>+Xⷳoӧ6V޾;[C\ql9굷';p?&7KXfg6I,isb0\[I,N+mIg=2L57 -\_M99sq<{9v;#,4 :f2Jx߫]n^V|3; |DZll{)lNE8LWˣ̚/}3vk}KڹJc1P0gOwyy_<^hm/=uBc1_ΎO]irm&p|Sn{'wY`}9?R{z_ޞ,=[X[3s@d;ZsѺNn}z.v.γ/1uZawO+ HxdoUms1t+i~ &Ƹ֭dd!t hqZq]YXZxH8|\3yzdr|iWO֎_CVaCq周Hjiޫ̶_9Ǔo7양ht,;Sӷ$⾻ߒ~H6rQ#hTbHۮXE~Lkt.lw;iI0Rs#W3>7J|Il/_<|e6۴[j0ծe=|T|9'5tXObu۶HCZei]5/WN9^+gB䏜-0myy4|gIw]fz/>Ň'Xd 2k55_7Mrzo.<'踵St ^Kk+/t}3t'Hɭc엪AtrԵs.zQ?o/[I-'eaxca3u[t{V9=WoMx?9#ݡl&Yn,|'Nt}gO̿+V߃J/XS&Is^o?|_,/7?-mgokf#g֘X&K4z~Fx=zsxw{qێ^V*6_(2yϿCYI ~on*gk;6gvpM0//#=L|zV}7X<+o_>;ƵꇵҳceXc8?_;szɣىYXՍLkY]z|MOMe}iy'w1Z[r c<\w޴Hy>gf]{<盢G`IF w{@1Gg>fI'Z/k_tNgs}o+/<7"9]bI,,s:f>Nl7].Wͥg+?˾?w9rNY<'GS,ԍ?gqi/z~^=Wa$f5- ֶwSGhv<2R.gYעh۶n~wMeɏw+c:fըnil^N_2|݃eDC4]1+Frswm'FR7zsa98ψTek5~htd](lE.'@꘢jw484'^5z)};Fw1CNbkK WG?s\=<9|G۶2oݔ{޽9 }}>%w\o]1;ϜWs\MgrdA'}>b($^/] 44>`o& wVTl4YLзO+]XֿJ8Zmw# /6\ۋh}یcK58;m;C5j NgN~;^LBd0G7 /8tY+E̻&ݶV3 Fs+~iW^lk0Lv%H.@jboj'''.nK}ɶvlF-,)Z Z&|9ylώ6Mx$~eX2w=sg >W\v˓77l62x\y6v'<{'Omu5:VV]ަOko??lBm%h-$x_O0sF޾Iyk[yhvs7TEr-+z6x6Ȼ wvEH+]g&~}ɛk,22VE3-'XwpwA+eyp2plͥԝ}ao3P9*+ui_iLvwg|ѷ3uڭuϙ/,vWokzveܾGygA&;jFC. QھNOڮ霱?'Olr{m{>77Aa.۩P $Fkhӣcחk%/V7r~u1:/.mnD,˴p_,1v[ܳެs/Hu$4;SKmˎ,nf6g]/.vۨ%=,om#5<}m+聯lgo/74[< :;[cLas\N2gl-~nƼ^OtfFZVi,s _[+]k3iev.wQ^YkKc_k9_$OHM?6>+'3&*ckg?YFj;HmX Y5hX$mm{۟lz}uy2y+nsPz\|˜[v5yIn1Nqks[_7r>V_}er{5+{k?/kݤonq<766_fzyWi-Ykg dFI%-իyW.MV,$bNKr APy3|w[(4< .=Mqqg+iڹǮ?3m&VI]^v}4/~^m{ԎFHx>:Խ_imnum_n76 Chs|N{yuK8~e&q7/7c$~m!9tI \8k]'\W$lƿo=祏0E%/F岻C9%c]>MzzϞy^|{{VպD$|bv9=Qd~:zuy<0yok+. _.O^WpM潬Wli#/IX 9)l̍Lszu5uG}go puN>H?N}Y#.M{ǟn=7r7v-ٹWh&v=n9: ]uՍt~;_f_!loe[vƾ>MT{=es3wog}5=^a}31BN+]3lW_]kMԻ|>؟/ipq]mnd.nn-8[ԕ4lώH8Ie_+5.{mk/wwqe;pL~S2F:_̸W5ؾ=ecˍyC.#eO4G-]} )m\ 9s7KmM^3^gcnvY#d\^]:?j.1iN_5v-mW`tLV -Zk[_?p]ǫI n{m[so3oH57[tZ\_eK=msK/ĝ"aдdly{ȺM{g;V^k}{zz, u-r7elܜ=h|n!iӡkԺk6khrvMA, {Hw-Ky&<ѮKI?9fsROn>8M,i +^^Iʈ+mi` &SjO^NOs\$s;Φ[V7z?˝<ñE>Y"QGH+^i$raYQ {Ɔ]FZ @{C=ˎf\x78V7)[ ui{%11ڎ&F4@):6@@@@@A2M3nYd 3J<^=U6˙s2 /|:GR\0MA#OC˧nzm2㷧}G2u`z~|86]^˽ɛ㸳c-dKܓ-?Sɴrj]wӼߩe{T|!k5a$P1];z۾D -d$`u+wۻ\eK]q6/ [k}=/^vu/5ˬq{gU9m~]Qu-Օn{YZqgSM1wWNOWw|~@YK6\AᅎWi9/5}q{=q\[$lW2m<>8Һs}rm;Z_c?#l- Uei]5f}y$yfIL4ǴeOrO[v֦&^ElL#hgG+݊--&;bdReucMǼ<yrigxt#{.wmy#f`.$xt۫_XmVqm.Sp6]Wɦ9utj/-]i=9+owm&Iaǫ-7ײm+/OmX;H|Gc\ֵk.l-mLT=֞bؘʿ-z2[tcͫ#K[rwRIaɶg2&LshE7R(ݤ^>eotm|nkRofz'eǖj9`\IqoS:>nwW^M>\)|ۤE: ݧ_J].s]zۇSŰ^ntӁ.Eck-3'/g߈P@@@"6?ԉ'sVvd'OJZ1kw-uۻ䫋sl"FI&-OU{ m1i$͂.#Vzgm5gaslA< ,mqu^՛[p f\Ï_ĻOSxp3yf6L4"vS|Dr=Utok"{O7J;V#&NZӭV'7T}~ޚ^!IP>K[&-cwkO]=K'leǎ@?U6?E|fn+ewYϏF-knVG$1[/[lqR9huX_5ܫϱp6i7m e#卭 {uu[1~,Is'SQpJ=G ¸Д.{[F5?lfTcv;XkGS+P) \PiͳYOp`1x%,i{~ּd_~;7LCuY>DksSqeԚ A\#'S`(KN1x%lbлE tEskdQs?+a~Wonާ9h蹒KmOLGoX\9sg/jm۾Ed>49Q3kjnigɦK׫y*/5:v[|<Qw+? 'o=|`%HacCdcXjE5:hM9R/GCʾToYPN.ws[殺; B R3,gŠ_dW#]}Ԏ]ؽ椆i3J9?>Cpo{[ẽ 0enky<uxn; j,&ݮc4H#4-oUbmeW\l7mm˯#tYh:ULapw\9 ư;\I-ouQ &(+ oۤtvC+Ɨ=k\R=jw;oYWk{7TAcIYC_>e\3;vK_0Es .7ŧķ:Y>7yvsgٛW4ŭc[VNk|kz޻Z3+vM⛕푲gi-d=/>\Z^e?1Oqw{jEitͮL5󟯩w2 +yg˶]lJ hCS"Wn1XhA3L#dhp`es98 ؋Yѯ_kZ ǒI\ N*y9ۦSٛ?k؟#WKaƾxD-ÌDf##CcoScsGФ,%RSXRyWLG.ߗ.ÄeQpw3[V%˴/cݾ\웞݊[v6鏧25i&K^-lǺbrR89ӣC4`aӫKuM?ۓflwLBf"/|b3EUVY`lMvQsFiV.,w[D0ncZ)5ҳٽL; -}tnv֖6GH28}-a0Ѿo_.-nr's[ #oT7_M[XZNv;jN-cqmmY6[I#ͳ 2fng\ԾiZ[L=(F >ۧ.^Xf|v|]<\dq~.,:/2ǝW9o/nPyacKDt\ -OKSiOySI$-Ds|tiu&ofvzq;|ǭ$"ZY#M:&<vbic-"Ay)mWFKkIDЀ!-u:3uXh@AqZܒBE s+6,iͲn##k\[khէjlũ5ЀA߼ol1K k}kڱnn&XMQK#HszoK㙴O {6mpd mi]yK{zy{]ol.g}2@KHD1Z3=:#KS^4\DZsln鉟KkӞGodn,5͜p/c-{49޳Yuכmzez]NdR}m/jBnw4=z'zk$ f)ܺMv۔s4ֶxHhɺ_]=Comzin)ڥ~HOkyuK. ݖo!df+iS=GbĜw}/Gaisn7kN=8^ͽ'.&?}lۢm&+sr1+-S Քmq$oc?yYpewWn}sdd9н|3=]Kk,^9Xf獾{a3G+_#y\O=۾qؼK0tNkZm&%V3tN s XMBF=řpe}Nez<<\ʿk-ɿ7Okw[GۋٮY/ RtI9{]Rzcϑ5m|w]A3cnoկXvoMqz~韷nn_ԗo9>]&ȻNpn#|v`.K.b873~N6ZqS9#P)&wiî7uNv2 |s]#:}WDe-jayu;8zSOFޘOymvWp$ f]a윚 s?zUN>/nr~OdR L ^6x1*2Uǿ PW8i5U}inG *Lzzgej>Y]!SY(H˔(!V !UQ&שǻ$LOj'vyo2`EvPd72NڏL.WdcL/Vw܀56允Uehm hePe/L5vAR`:E0e30xA?ba2s+) TFj\]܊^ tŢBaitpoQs YQJ8}4DA0ReV?JEܽ`LYpS v!!Z;ȮNeHP= TQTyxqƘW ]R i#Q 30f5 ;Pb6i,-]zL8qY2֣[˞:Į5fOVپ-5f_YYYgk Ҋ4qp%\&Hnc7S:& ( >f3 f\ۀ,bW+g"eY4k  d&GFf"p!D[b.a8Z?%S EF< zPl2jTV7҃ FLhe.hw*~~Ʉ=#&J۾#5t? >b\ %t[j_n, VLn]:QV**28и** +DPFPw \@'A$ {Q.4Qb3DA1`m|b QBi>DjՖh,Cފq9[< (ZanHبPe '^AT PpeTF(2n9 Ðs (DuUS v%g-9%ڟB~)7P'PP܆W ~Ю _@q{o.:[{gɼV@@@@@@@@@@@@@@@@ARAZ@@@@@@@@@@&5k hp?W 嶣Mi|"CVX` <0ش"C5mp X\`A2Ll$d Dt-x\}ȟPo5ƺH8 ,iTADCpgQQmtWTVPU5>7qX+˝#$&4v%Օp#Ҫum|\S e͐U-,R4qb,3W !}L(3FZ[\X@1!Ekz9J (a܃1UEtDF>IH,:(G \Fs+ʿ (gk I5Ӈ`Ar̍AQZiΩ,?ZH_ߐa2>C(2spU/yTUϬ~%i<Dx\G5g2ij]qeA##2d# fk*+#$ C./n@zbSIq$״`Y}!dz WO kGpL\[N_$^1pLcvwDhRDXH3(J fUu14 |l ZAlQ `ET h'4BAj  !z PʅUBg@5fh yY>7>(zP )9.U[6W!7Lc$}34`f3 ZXcPcTaEHe!TEET!T uVA`j* Ђ>Q¨h iP(T""Ap( EH(&@Ԃ݈1=֪AB(. **+#\;POZB3w!zXUT5Jh,%:@("hj6`+-XhXӄsHU9lJo<_GQr&KA5L dBdr0z[a|,ܡqNv;S e;keK0KU@@@@ARGr .R;e]Lp q(1iG5?ZWsWz lp |,ծ&W `3ui(25Ye+Nqݵ4ap\GHd& ("  brAFZZI9j9`fT9&{.z,HO`0G1 i;(0?;Id,F(+qP,]GTp}">shAb;>Vn %D8>8cW 7]8VS v>2854Ve8jvz =(()btP-f-BN%hpD;PVFb`,rp{+Tq#c -4ɳAQE*t\'& pcц0JȢ)La% .΃4F+s(7nw>3#@ Ωz1wɈr5DY+{\}AWAEYƕPct,*loF7\D42dӱPǀ" ]rDK_RT^}#2܈Ov kKx]ZbR&ih`n*~2k+(1C,:K IQ$j"""* ARUDjAA@ Ԃ5J"CPKXYТE[I@ҁJ(*\/TTDFE*81%SDhA}8( @@,M8 dUP1NyJ xwh65k e&e {=\% pPE$qqʹ)[Q[!F2Ҧՠ &S (R5"eAZ }eMf`p Zy,ew8T\:N4eK4 zFf`+]mi(*jqB99suEʘ*6js4`&)?J 2Aw7 :W2_NJ pS*AP4ˊ#8-p~NUܨP Ea9** K]4zkq|j\_-Ҧ v>2C w(0e-ڏ0e:zJֳa qs@hY3$-LJҢC*kuTX5iPKc\kދAcS <**TqTPzQ*t #Ш8jPRF ވ80 }(36 ڋ]FV(/G1q'Gm>x`e @wާ[(PC zPcu,= 2vb3@M޳OИ2cS &'2UDI'ց@s eAJ"QS J"*EX9AX8j@x 81A"Q؂*AA1@*xbA@A B( ¡09E3A]AK+؂(J B&8*0F& ESWbFC(jP\""+\ Ti>ZH ]A)m\A>QEYRHƧz Fp ]xE0KnvO>),E{ kI滇aIr[!,<*hUIr,yp#z[TDp5B,^:GOe} yVp7e>&A P[4v`j0l@:j(MPANJ"ӍPcd &,L}jIP.W"&s6JG3t~`-,rEdq * Т) c$Fa8L.GO^e]}k(DO,vVFA.c\3Xlj+C>@A e(,z Jq(@A2$ g$&YZz++cna羿ޢ|4/UW ]O ⨰x5LKjߩ2a Ɇqf5hW mcc) & UH0{t{A9b,żI'UY]k?{{!g͇qp}S3Usv.]?BV/hǿapr tF\ʋ5A! Pq(dP a*LBΪW]E}!w c<(xpԊ5A 4 \iڂ j48 r'k*k]}VE5S+3KxEb\6"'ҲPU5"wOv?\&c;\EEJ K+nSd+&YaΗ~kGkŏ68{~O*܋pwpܭo gئ97bn5[:gyGH]^~f/VhZSVAѵH0@7p *R P:eBUEkN(.EZAvEj Ģ`e"v؆Q v{RaV^S&ۊmEAa=.äR2WPp ", E )S؂uS䂢JQx!`ZjTx 5EAQ@P 5Qu*J$2 (#X(*MPWWj",(p⢲7IA4EA!T(EB.*\vPJ`   jւ5 vhA L AJ 3 dQV'pAG%TA( ܀c8 T@-Ԁ\5 UEMPX%jj-Šs@S'$I  q + -" fO1Ykw'k[GXæXpʟk:^Upn2COYXd] R"5%/e0quY0S ۂwI[NܔXʢU'ڮSUL0?nuj}a\`DaCPDoԠ_Q=ZpTPGST ύ(SŽPfB "%h .((pj!PvJD4Aaނu(PFYނ4#"Ch8׊ ,uFACڂ]hPc5DO1NP@LTT4+"iB,n%̠`sL/\L X?W ؊n0hL5B0[K_Wo1ˉO%nmx5)Ȣ i"1W ݣMՕB}e8 v*2 V:hTj6Qm)NcL([("y*x\ݷBr0\kxLp#OҮRZmH{9PpZaz; -34 .R  fj(@̚((#_ւաPXFH.AA J"u:^ƑA 4 F-"%PVbW* R4`?B +\sA]t¨>UMA((vRu h蠞)@"5hFD %R QP k䊷TyD5"Y@PGPj(*P*2@@@@ PT  (PNT@-E*U** @TXaECނTW TD B("BP4*C זfMx-=kpW Ar\Orh=0).ofs}6HeMWӊ\3X(R "3B@KX?L'X3kЮ?b&$5S оd3ZrUDk@ւ+܈j=8$(($; GA:5qA-E_J5MO=,3ĠP[]Q@r2@3PX8 @ Mj@ * DkJ"QqEAz*5TR&#_}1Uc0!mr-Egu|Mᮙdnx q4p"؈`CMN4⩖pҸᕰ T PkD\'NFTrc1NH*g*:@spkS QXL7Rau&ARS h)VZkm<P}KYl@@@@@@@@@@@AR=%-[xd`FmrT-0oA W& ; w Р8"7Z$+ cĢA$ U ?R U$RpJ  AHit^#D}'QpD 2X0"-[A@"*kD5 樮?Z" D ;PA[TүC 6 ]R) t",GR 0MJH>VE`poQ;a+ϛ(1̫J Gi0ypR`X]|N} 5v\JwXt>Uy6C[I* ).8cOsnRTvt4._MS&nJ5^~d0DTeD[~ z 0P(25T(,x*p c՛PM3Z2 tڂ~ V(h*W OTIAWHZ1ա DLИL N5Apb0@ւ5jA5 H UQ @*  EJ A@@@@(@@A2Q:~sZ14&ЌHP(D }%A4@ҁD (@A5AA5@ԁ5 j@ցkA BrxE*(pv׵PMPCZ  7ʸg-{_@ֵr%7*[\Dhi;Ԃt> ~ { b@ RK!iTAm( P4HAfE[E;hjJ)@"!jj [~LAW$R>#U *:p'zG4T5uĠ41=Zd8w*z_601 >j {0AljTPg_ A`$B*"VB@hD6 T-M23*C]'9 \Kqcq%j{}\RÀÿ4FFE#1û҂jH\Wv* W D kAH"*T U E(&A(!HA@@!A9 QA4@( "PEJ"u"EQ j@ T D WRN%} Aͅp$gB@UWT @+ԂKH4iCZ_IOA&B1O0C)41eⴢ ð ˆ  r@A('J DBD s@8AS?j"R(aG۵IjL*m[R1) @ 4ƥI$#8҅C $ZaE B+ 79(q̂Ucxø!1s둭mUޥrfg,m}'Y-T9i#Jx9*'dn ΢L/dJasmN`cFeZ.XhԫP33R)S TVV@ M5EgebJkWArD pn26[yzQsVm0e]b;uti۩LKǽyiJ~_6hv8ҭ _&q~t0HnZjb`ar{!hWWb㧏f)դWTD[|ή;ҙI̴1fւr9W 4}_Lu~Y_SBŵ cpL/kkJv;M:cءiZ`&Ua ۚD /ЌcD0 JH!u)q4s@UdbS)1N̮So.™0ҍa͗]ښ.$Y,imܦW'j%w&@3?j\0B\C.06T2a%7CG zY;TdjL7!'J *k#3[SBC QR@oGeXYYY*N1m= :"/Vpт(zdPJs"po/u)L-%ԆX)J҂DM H,|:)F" FԈnBar#42 9xØAc@Agz CGj ѹ`($FOU͹vx&L,1ĩ 6͙W ր!@v U!B{A9WЈFzAjc) x 0iE Mҩ807*c@ Ҡ #1h*1\` ՈF%8a_֪227R{@H D(EOm(#aPXFC{4 P(PA xOThx g>ug@. H58䠶V8*A?b 1x 8 R (*G DQ>iB ЁƂ ]Ĕv*(" KA($`(hP|aœ{POHRԨ! 0T h![1C5At CB  (B(Di4h@P4 (P4('J)T@ !JPQA4(@@PN (&P4i@ҁD (&@F (P4i@҂tJB ЁB hBJ dT AR A4܂%@@%@A*(P@(&-PA%D,Am{(PHp* s B(Q5)z' .0=i )*(D QT S>A_i5L,"##D\%$PU!ymP cAaݟjH TAQ;PXFT 0tNހZӝPFw3?R p)J;j L}e壇ژ2'i\XZ(%zPIGւ(d׀XLЁ k ؁Qj#@C;ZiPO(b'40CDBG 22@("(#ѧb:~ A.(` ɄOj:`0&L$@:AzaA~;4 P( UAaiH"J;Yi҂tw:eށwhRL?b ҂z`qENBm)܁BTq9QPB QQ@ARB =#Q*0tb(2thh4Ux"Gj!KJ"t7*4vR1w"a.ʪ8W{⠁9@DOHS+Bd:'":eE3({Jw(Gj 4(P4P4P4iAPN (P4 h@ЁJҁJ (P4 h@ЈhA4 hT4(#t(2:ePFt95&@A5=&Q@{H'A5( Q@ҁD i(P4h 5A:P(D}24x )Q РTv Ъ"" ;B Bjaځ ;P0@õР}!Pô(*'Р;Bʆ Q8vô**;Bô* Tv  a ;BvP /hT(Ђh;~ 7Aooڈior;O/r9{O/rTtA܈7CPGN?Pы!'D} A.ڈaSk2a dvLO8LH0kGgoAoEE#P4ECL}K;4G>bGw֢TAc?A&vMj ,vX87(ڨ7"[igwւ47A!A</j)ځځVUjGh@{~VUj {~ MZځ'[;57AQooڠM[@r4D'(/w}j*5 mNbZS{B;BvC[{B Рkojm@54MT55PP5CS{TCS{URD55SP55@;QMCP MjY܊MPAs{CS;OT"XD57A4 ёA5E5Ё"'XE DEGrA> k @PFA5 ;P*;QL;Q^^9{PO/jGjQڨTvaL;B!hE0ЁQ ШTv Њa*;B!Q^ШTvPô Tv ;BGjGj)Qڢv B Tv*Gh@ a0D0@ GjPQ܁Q܁Q܁PPPPQڢUQQځQځQځQځQځPQځQځQځQ*;BGh@ GhTMGjQځQVB4;Txplanet-1.3.0/xplanet/images/mgs.png0000644000175000017500000001422310411356762014332 00000000000000PNG  IHDRSE6=چbKGD pHYs  ~tIME66 oV IDATxyeW}?gۗ{gzfzbpXPIl*2Tũ$TpBl+UIrR6(B #BIo3=w}-VfLfww~y~_*!RoD[Gr5ALm!>r>7jܽsŦ,,RL芋=|2}<>0ٴ)z+vQ2ժ]nH[3SNߺcb2,i;\gNdpn:tu|-^4}"jHe綽,|oJ !+U{3j(0c/HB¶%(Q^hض}=/:˂ifnDVu,M_ʬͪΝp, iBjI,T 5em߆sY0rTgpR M: Y3fW>iv޳gЄOOzLƱ(EF* /%a9"R>::zF='ww \)^{mH{wcLWKxQXWA!0;GO,Kg$Eڭ6*FS![&9fۍ$,~pdQj㙜9W&Xi0GA!vO\h/ 3QѬ.3q~k3ׄ/Թ}w_^;g* Cg+wg*t@LGR 5vm.^%aj- zmN3^Pޫ3kV9PF[˶HƠB) ƠlAlJE1`p@G:6Krm%cϱ|{OONWhban -;G&Wdia8 C!I8M^ ch҄A@l( K6vy2~`Kg[*MO<ˑS[?vo-yz}rI_*ysbuYY\(00 R²m8J!KILl3A‹ 4vϝY3f/6mR'G ul!Z_oD^2gKgPAA5 0tM841Q DZ{=\fdFy(Z}gCn?$Nٺ44ٹ%uì6F&wlFJU&{Ҝ>7-b,%Qq1@$AFm:K)L:6i:57(ɦ]^<>ϣOR=Fl"Z*}͵MCuAߵqR5,K~%%Z+,B <۶JbDk !%RJ,mQ,Q(< /xpEMKvYkˠQNY+uWt]$Qm.225 GZ$ltEջN7[j1t._'!( R rgYh8Cx1Q f|0qLx)H8:i¸c|?R gjvifJJ>wtZ}(Ė1J*0CVrRmB`XXhҚ8iYBR8CR}֧>A~7z-f8W\I 2d<˛OpxS6ݵY,fV*?qIQ )qakE2$Xzm/TRZHBH%5RX(B X v;vɻuy/QW5oxE0Wkh_p}f(ϓ83[gr,Zܗ $MXkelļxꧧR4w;ȗJ*0sfE\EJMߧN+o~sOY PK!q^IӜ+3kI^tj~sU^'ٻgqb"QOh)cZ ni0qōv`;rCiJ*>w89A)~듟}A|EW9^pϼX>cgK⎡I4MIHYfcv1 l`tJE%1!59aycc-6]J 6$iNnchCwn%+Ul{;h |2af4 bH-"KńfaJy}YX*cm,)ocD/9k{qEض2Қ\:\fD&Cz7Z"~ѧ{`C\=wj9|J-dA397oW! Î Y>hjPع{qjjvG8Jk2f$E2$b,at;Gw/?0?:rz. 7Rmx.D{Nϝn k>ϏPP*A&m~xfHb2F w-jmmp],HX &w|n? s_O=  r6O~/6xǭ0:w1[(i 릐*bY&&d3#LݣX,R,G+`bDZ-RDQeٌs}l#?bjvC|E_஢Gwٖ8)379[g4ZT ]x“>S6u[Z-bcH2dRI,,..B6>Y{o+pz@|Eyjp9sǶao+B65ka"I1@Sz ˰Z됷\nM9pv5mN9Hd3KKt:Kiw޻G>_}o~|?¡Mk`fX ]/A͊Iw:)w ]Cgsግ Kҋsf( ydb6OyfO?ƙM ]ܹku" {Mvl(86JPonraZ]zdN:aHP06]<^>wט^YʛQ9: cZmF9?3jĮ̞٢XbDȖKZ0&/$BcC!-ʭ7 o7#3>#̯4_x[t>Q"0QĶRH r%wCᙒ٘wH%7P(aXjhxB9O[7u^.2G7lq~* N˲s!uB3)lOa &Y =Ni>$iC=#SHC&"b8X(^VC;$ڟY^]&(B2]1KT[t΁! /6.NbI|L*pfC"D1JI\5KZ+ hתTHjfz Z?]d.<sI6w޺CHﺟΗjRlqĚJ^^ק’c9(-tu}ˊgN7(w,Xa4"՜mI~sgn4uIK)Ѷtc#Z#D;l0\*)Zlp.eb9<0 x (/8@EhSJ=Ҟpx*̛jJKk84t[n}Fحp~ÿ'șF( զnɘ,M2% cK+ꌤ;_h2h6f+Vy;uNF>H+PJZc8B!+hTYzSs_ X?jE>__9޻!k$cz(K/BОk$(Ч8wx'kZ<3gL,/\ aUrC3-94 @r)3:Љk6Yko)`wkr+oo|2٥զ(W NՄ1c~" "~u+n&f߸˰[e/ŖIͮ3DFqtaeu{\Sڜ캴z)iQ5ixz]Vf.1?c's( }V2$:FfM@?yR|_(KK]e_:*^]nñIENDB`xplanet-1.3.0/xplanet/images/subsolar.png0000644000175000017500000000054710411344513015371 00000000000000PNG  IHDRrP6gAMA abKGD pHYs  d_tIME  7IDATx DCr c9aT`36xs{DyH&}fX`-c@AR!Ⱥ1ǘʅio )J A4Ϡ֠RZ|V688lo31 +SJSvD^+kK0ދ=8 omUtȽI }k{1RNN!B=uݍ/|mk4޳/l5вӾ#g}Q~ IENDB`xplanet-1.3.0/xplanet/images/smile.png0000644000175000017500000000052210411344513014641 00000000000000PNG  IHDR~+gAMA aPLTEff3`}8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2).IoIDATxUϱ 0 E '@L@4'Eo dٽ1(Z4Udc^Io'0=\{x;8J썉mW c7rZN4VR&tIME:/>tEXtCommentMade with GIMP~eIENDB`xplanet-1.3.0/xplanet/images/hubble.png0000644000175000017500000001166410411344513015002 00000000000000PNG  IHDR83M#\bKGD pHYs  ~tIME %pPAIDATxYdu̻սuk^C H"))B&d;`W.a+dˡMM]~{3z83@ >'39O0!8 eEq sMʜ/tMm_臮w=V/Oj54rRc8nvZFQ)_Yۘͯn;0SѤs6Y/*eMע8a_z7VVL&Iwsխ2wڭVgpucE/ \)i[)挟r'GϿWjz βky O?Y|6W kNn ׶7*rh|3Nӈ}}/ik[}JJ\)7'a0c?V9S,k;a0ϲ, ?(Q44wA\4M ;qx6{ܜp.pNoԃLuF3μh\")2!;jO>>8z/DDa&X3g|*&dWN$ 8I aŜ0^)[ $M0" B^*d_ˁ2V+AGYAh7T*S]GCa 8OS&xgٚbiL%E)br ]R_P.rseWWۖcKRx<ONv_d ۃI!t}ADe pb[ZӻG@k?;Ov㈈s}g Dpҟ=/Nl\4v6oݼj;p؟r"!;nfABrpS28 5if~CPblɂNvPӸ1s 4^T Nٍrի[Y#&cX?kOgf=wx~pd8"0545Թ8RABhOO/V1!@, NgϻisyFP}ߊC\r߿w*N76%RQ Hlt(P*ɤ,0(8E,"$RLe9Mr<(Y9Sww֞;j4W)}Lwf!gzޕ.Ͻop(ݙP qږ)0͕:g_8~pgMe2͘$0c0Zs%F`&!HeI RaJ`ww6N['ܮ76?9cP_X~oTn4jmQ+MC4WqƿkUty7ӈ$F'mu]DaI9`L]dT(&w'IP}O: |zsf>zw*i?{Ý7-Ys CPD2Xz;`ue5uL 2:'SƽXJ#wlC?[^\H*ȴ<|wS/Wwv7fuaD~,/3t=v6ΉҐcź1Y(3䜧y a,/O[3OIU T7yXyke8=Umz@Dz3DP 4J'bu=IS-kƱSH$q(Kiol\ vr;kZ=tS/ʗݾ{GY:Wk5Vcwj:7ݽo115E `(IY5rR_cP0B@$"@I՝K@z|Kƅ`@W#@yk%ͭ忺%? ih{tr>oUu*{qcfpǿ;̓U*@)q44Zoo(BDgLX*XJՉL'o^JERw>ܓY 0lrTf' 5b 㘼-Lċ bd1n)3BPaC_l]n,>=(>|EY9CqNƣ^f #g ~e]aHĈJb`MWVV.=j6R` ya$jA@T7Ű]]Z8`8Pf1Mej2hBCյjXш,'}zwgk|(bJ"Csf $KAϙa,Θ$./X䨪AJfB0;z]-W\k4̈HsA2#-W?a8.V˝֨`B-*6P cR^0T)%L}dG@&,Vv2){"썦Q0BX:[VkH gqOr1KiRbi{K1 HˈA9o)) ]0]Yjƃe .8" JX"k\;wQ](+e" R$ 0(`9Sd*Pgi:TaZu[8` IT8qoT.i=su?af 3ÍI*nw3&Lcq kL&ՊC[LNFh46z'%`J4({߻߾Q+pn>Iڽ]KCDPĈ;BqX=oj5FqT"/`6E\MƦIB;O;puƛnO gE.Tڕj!}0ٚ<>MY/a^JD)ao^_ 19gbJjKS)8Ϥ?"ţZcA4?{q%bza\5H2]0!Lf00^}zZƨ9V;$Rb"_<RJLIENDB`xplanet-1.3.0/xplanet/images/iss.png0000644000175000017500000001120010411344513014321 00000000000000PNG  IHDR`L%"bKGD pHYs  ~tIME  6Nj IDATxye}.g^!!aQAV*fZqRkkuڪՎ nX8ʴ (Z*KSHBHv~O.?L83g|y{~{~o _{>aȑ/j@_o>ף*wMN9x/R=fKk֬_kĕ{=cvG5[ .ݰn%ix**̽6:CR/_>޶d~=7޸uvth7[ ssŨQ߸z'KoyGh@)d!!XeK4[ ufy.X8pg^;\*5j0i/:.>se}}7`K'N7[57TkF3s3Zo|CZ׼bō(N8O,\l3ty ;; PCCJ͖:CK6!2KrR.%ݏ<3/\ߗ /se)eիWKe)aQ5e< 3ccX^0LEQSe&ljc>u悯¼,^Z)/η\pc:mQ1V|?c#+r[6 |heu*=ӧ}ˇ2ܩ9K׷,^bڋfs#o~T;Zc-rK9뮿y_*Kgw%K'߼o@+F|jTLfmJI)˞_hxη_w}&I)O '>9V! W=ns'(Bլz~PZMTBI~vlѓ&˕J.ڵ۶]br ƭmq8[t؋7 r|q f\#D!ĸ(YHe#0zz|/J".FbÎb@3!c~Ws6C׫y6[IH0>B|3>G̾7{}קPu'8~NF-)8h#Ku7C߀Jo * :B|g45L{m,\hdxh&Ə=3wv{{gg(Qk(MVi]~6ߴ̓n!vOώ?l)9j\vٖޙ4eC"@+~;駞16]_tWMɏ_޻rx#c?y򉧚+%oiG^zii_h-Ȫw֋.8._1r饛WY:;|YA Y|ĉB\5WUzUKHUn O>tZzE/(W Pp*MJ@z-sA> /|Rç$E 1pӎ3,b:hp|{Ǯ{Y,2"f]rX­[u2lc:ڻ(*Sqm/ zj?_ga2a{L)!qABRB0g #JAb u`9F$}CD Ou2cǎ3^{%=o/ݰe˖~ÞW^h\ZxڵP&&N#V~~|Z{߿ YQzC@oW;%s#YzG)?Zg℄ej0F78'B)PS J4>\#ʙDF.ߩ&Tpʽ\JҫLݹ; ,$IT^9zeCQ,_8cSNS'u`/V="KAhhJ}G4.u5LuC'+8xF'z=)*\uzr=SNU;p&˥I]!2;q,m5RXpQ׉8rBYi8pC(8) ,=v5x /x!KBXΙ0rSk)wR%d=R"MY}8=?!'9B_,9{Ke ZcPBP&  =ЃP}>:o,0F"9<1G>ks:!;SOD Sib)%E0byzA+xy@WI%5XPLG6[uk/*5RFRc)Ȃ3BOh{~!HrΘ2)! v7_q833;iUJ?njpZ#c[ksyj:Y`kFRKQΈC! KhH)wX0h(ŌRi㬔 v7}>uN@lѹ}m 8ksJk38+pY:0KO ^ %!b1`8~ef&+aySl455iSrS |4uLQ\gCJ&N#-6ID!!,F4F$Mu%DXe!:319}>xـq1 –`D(90͆ȁ3Bq@# DgR8||#kR-0%4|Z1U X+ 0 !M:kVYe,rY18р#k8G5RQRX࣏$IENDB`xplanet-1.3.0/xplanet/images/night.jpg0000644000175000017500000045034710411344513014653 00000000000000JFIFHH$>$>$>$>$`KĚ-eVM B ac(c|Z|(l#XSD1lxɢuy{ Ԇ>$| R)R`-od!kx>#"QGhJ@ X8&Q}Xؼh#eB(iHLj %01UmkV%Y*/L r)U,)Q풍x\[eSy qٔq ieV즅[Phu8p%&F :{#T JDCF -_q ѕ}҈IH19?Fv-B³V}3x[Qo5Ċµac&7혝D SJ4YE L,  :¢MsXI4'oxIjd5·Y}lpb>bw%<ǴTVQedнF2)zxƋQJu?>$ w c~: Ҥˈ05߱gbݬr\#lǁq(MI" b(8 }- O_Awg7'9V-؏ei`Ud 9K^4f}C~"_pxOq h5$F޶/ dBaYhыdb%RwF3!bn,fm)vw"dd3^ |D9S&u(D(RAB2@h=6&>5:hCM6I/Gt[5G3fzJi֌h}F۠:5ΘSO`X% 2%F*O(M}Ae8'PxR@$6.:f# { 1V_ %U >$ @M` KEk& A(R#P14 Xѐ+.[C&hT,+!]A5::KlBRj#eH0lX:CxƉq xԙ4NxFBx%f15Ype(@@@@@@@@@@@@@@@@@@@@@@@@@@@ :06dc:xIְ2 a!+M?ps)%4  lމzGBcSB²{A|B=6=vOhӗV#uڌm$tAnMo \x΀NOo=Dl`Q %A1z/ѥ(+.bwxM{d۴@{|۷?au.< V ` ] 45FF jk.j']Ϩǵ#5EL3%7nygz7_p7 ¾~6kE< ix8se_PUŌϵTlI{QuD'X)WIe]2P|,Ɗ(MeIgsV17{횝X!/8=^'݋"05r2BQ+|  ERi$>$ `dIQ H@@TA-J6ۭfp.ˣ.2)Afhї{D I!G əe6Kђ-(DŽA:"Ś,7:HM4,&}л^e'>kQ5(ڪ5l#F/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@әfѨeΫ xQg{ -itL>Ƚs6t9?{  *oҜկ,;,(u{AnҀ~@`PtlLMG,M4jk_xc^2 X #N\q4 YQuP~#ڇ]MH4$4b8 4cs 9)o It/he] +H^S(c h"+l1pjLM%f-J[ cPxd8@Ѱs]IW+ܞZ9hək1n nj@#Z#Ox}:1d¢`4dPE% N,$. I l\ۃ h3Dd ݬVuhxH+ U}Z8ԾF5[qO{&˓+>n FJJ056Q멯jQ35MO~ڝ '#n{ Yw }8LÝ|fE=߶]ev-ف<$я H @RQj`J]+@H-%()(RA)ݠ2US5:) zTQOMm^魿ۧyߤ^aQI82 + 4 e3*dUrSZ~ٮQ_|ѿi#n ˁkA^- Z195ǏD L Μ8J2ӄdZxFE>2P &(V>$ bqL kRM5bx)DH- e(@@0ʌIH֖$rdi_ bN dN4`֎&A@}13c_6l;T&eP+`θ7r|q^s^]DR, HJ8%ݶNOvLS:ңdOʵWN"xϙXpҞrjeUSOi@. ld X H, $ J%`+X YE0$(*i oZPk/OΓĂH9| ;>&?rwyOFvn$2d @@@@VQp' q. >2ۋ onD50lKST2}J.!b >0&%Q)* AXz%:|dJriJV4+S@ enk "`q&0lʼn%uUiA:#ji9609D.ġ>$ yifhկȴWi;ˢ>2 tZ BIu洙-.h'4UFP{d@jIRkMD`*OdC>0E]aS"Zq謓etǶk?:e^k=A?kMh|,&laCA$J6A5nCQO ߯f]a0lI0}3{*. Փ0CVn<$ ys?1fjr2d#omH}7>Q'l ĻwaƸAJb2 8N?*cnQ~0NSI8lȼNFL T,cnL#fqS\|ߌz}TV*@@@@@@@@Qx 䚁B}PvT-GF<˓gIQP8cFj5:4VK妣Pf}pjb@B&h͌UFbk#k @@@@@@V H`JV@@*B%I B `QJ(0D4bZdHTN:unuɼNsrYJ@R@@ XK:鈝%F Y85"jҋVѫ-.mi3\רި[6nt+  X .4K. #7,F}L^-.zؾ)v >/o%pu]F>2*NcA<٩F%IxIcLXhF%Adv6#SrW^-z]FW{ݢ =DD9KhN cMhe#.ٛ DŽ2 K!huȊtϨ1Ge4e$ | '3FP+Q` 4 tf.5 KmD kmú8ͬ 탼k;![ds`̣qXU0 ѭ$EY/adkNѼ ju9X9*@` O4 X,6bI J^46mȸ;͑QA^fhm784me WZm<-]DŅH8;6i(#0mbO!,FVBUVA3#-` d%!h  7&Odɍ&-IyN*Ƶ+H,YxF&j 范J-`sf<ÌbÒ,"- X e]$`4xd6VhJV4+(d¥L@je`,>1ue LSqJQcF5+X )c(5qIu&1@ۦj_'wO:{DQ4Kp M8ɢ 4l*h EG1%J< BI`Fd鋇gρiB}{ ҵ@0)YFm]-YFefM}'.6Q7 "N1Q3G:3o rjyF𲚚I"lu&CK(7f43~ʭh}h&JpF͕F1>9JS9UcH @@H @:qfSE`?l쉓6#Tp`dRL+ڵɩn0d SR8&mv|$*jx1$` ) Z@RT-Zh*illP=EZ>=ԽF1V9^Uj[ln #{~kr;-rNFe-ֲ6p]"J)MNBd\E- _otb6a8qY限z7,͜ǜЦWP4eM1k[pʰ 4ӏw"rSu 9=Jbր}< %/{1^~mLpdleỚk`^;~˲/򦞅lf7En9vǁod눇 0cH @J-%ؘKk,V,$ @(%Vj`S tlL |I{c8=Ua& u7.)Ҟ. e*d]FP 2PdN @xT&T2B2`) { Q.YEepD IC R@I!h@ʴZ7@ @ _)U >2)Q4)gLY}µ|4)dT@A!P2 *)p%/hƅ5 Bd2jeRo~#t{ KqaX6frj*+YkX$Khѐ|cFiIZx( YhlKAVq|Xd(AEӘS_Dp·7썀+fdAE2hDW Q&)Si4!sW$iH%][Q.0xixz &t~1CƦHA)H 34j]ꮄ@MɈeO.P2. epD S5es,5rs3z/\h۩?b?kqZY< $ @ %@ +j$C@ Y`U֋<'[f. M$"m:.1=VI0?|7r:*zfoz4gn&cj-vA )V`%  )H @, )LGa(crfb`U<ޕJڿk~?ܭ~Ǎ6.\B)#RmJ/0jzogKnC]2-`m:rq(< pm܅qZۚ(G$S:y7= XEOQEpK0,/Ry,sA5̬ؑqPHQ­O,…Ɯx>7]ߵrM{~w\v\jɏ:Kdν6&dؖu:Y9E'}i: @:H>|$F5X! N4cYFB 1*N@ M )YFA| fPSN28 mAb@'YQBgK֋NjLt33_lzn=qX &EK.l_< Aƺe6ÓLދPB!cU A< U!0H,FMĒNdR @ [IDN2h6jxE{ 8:ƋYt[i"IB4U2 +-e`C@ 0P=AV8J1-CCdѯ&Ri$Š+D"/U&Ÿђbf%to܈3{i$(r ˣ#ZYgsMҢΛmɠcUx֥7) E k pƚJc@:娣!֣em8G\X.UnɠU<柌[?pDCV?&Vpid[ ڻlPӭP_-:200c cb mM`WÄ+1e+A J,` URԟll&P7* 4Jk*qpr.%q1PۑWw?4y5o7fɚ٩' &pIԴ )^}fUm8ٳ.ś5/1y|(A5"=Nׇ>}<*ɏ&R2,:V}+wN}MXpj㸪 i[V|S[2bɳb˒S5؈Q1>,O&zi<9.7ET't_PHG%͓@QA[G<Ը+Cj "5qeTtv0%Oؼ7'-]F魼-_c(noP%A-edd*&A(+X}e V+ hj Et.kÌ76l]oVJd@yokcms:Ճc(~ѾVGNLе0Ԫr>F@H3 Q) Yr6Ss[c0a X QA&$H,H7mvp0ȜuF3xn `$-ֵ=CR&E% @R WN 3Ѝk(VdJk"eX`JH-I J@)(EPP- e`͑jQwe|ȣv|@1:.V k(ӓ1O. œ$k7ȭ?lܨΒi ]^X"V5SZ HN0%)jiok ݟww+mJڀZ \{g d~}OC#4{ pi6H6)@TB {c0Cc1tφfx#;2-w7|~/O7UEDm8H0 A:U>|2(. ZҴ:| [EeV J­iPiCO:Ƀ!ZkHkf]:f*u" pūÆU!$3LlMWYm}Q?O2zv,t?hs`I36M [dϗQŊ<ڏ|KoEC7gܾO4j̄ VAӃwe+nKzZtGV53[4!409oU9c/qv_휯䫍gtLUjg-5ftcXX xp워N  keP@չW3ǍT r55U1Aj!x~3g9ܾ$1mgnLXf5Tfe\o3r<Ӥ>n,7>?]/aRyV1 cKR++y[0Ew^5+<[jdk]}``VLƢ%53۴H7lg͸Qeac*o.>[?QoBNSw.{fvN5z[;g^{Ęw6_"qݨ:T|z}E>s_x}K~Eϋr˗\X^=.w_E]?$c- .Sth2vMmȍoRq\)1)vE? W7'<`-Ƌu>'JFQ`91E*, (KG5V 8͸ԳjhM$qffEHI#A]xy6%` d6T'u?e]_%ў]-룑DbTpFMŴkxɠ208>n3S7in A%j*E˯>*f[L 9CF_+42቗1?/͹lsU`+` C@ ZЛ. КW&w/p˵|[#[/ e;㿛 O_I]sޭcOwܮ3lٶLC%ܶ?仟WL7gOyxL2v!c| j/5o.3Lmm<5REhyCr~KϨaQA=n[C7lc)YQy:Un{y1/tOmWwڷqts6mu17{>|͗!939'RI&2GL6]]z\ر O6||ܫ1q7ز9.UjJ"&2܌ugY8KXRԚ:j^U5^ vj7R33zNUrEW#rWuE63z|&vDuT,n9>&LΪ4@$U1" qXj5< רJ1 ߧսhYBPj `z |.[*-goo8+0Jh(?A,EЎfjIV5Bd imxk_l' )iR,Um$J~oD_E+A0%ĊkOd 4œ(\jPMGH]Y. CSN(8<1AJdx@Z@@V2b 4`  `J+)SFa'ZRNR5tUH5PܰZgZ Ni((@'NdWS;˨P1p*Qdry|Sl1f\:ծ%^Ur9֔faSXҖ6TIh{|`1=)Vrח>'7u1&BZ6-sSYp{u\wtn#6&_ ϕʊ<ӟYe|wuEM_*NI83Cߺ>-'6pIElV&jOyniûxbBCs;zr[+?7:F;|64/5F/S̿];k{6nfVܘڗ^mmUw5mٙfWvz1X/I~.[>5흠1FsˉlbгyyX?:|b:=Cm@_*,UQruxq:k40\FP~i ٛmˢ[V/%>UL̤IfEJAٶϷǍ,F)̶yl\zQ6$ * t2LGmJhj?|cZ@ى-:kbVB.4 Nٯr@7wu0"2Q,kaM&nM N0(?/f&[yq=h풬HO|=S%ӓ u`iE|ʶm6ʛ|eU0P]Oő>f0ˉdlYE R=D1-.(` (ɤhhƲ c ]OWH E8ȬНiDd Eh&x@@&kXB"uifF0 [%0X:+: qxCmN6b8H(2G*}H )! (߇tS탷'go܉N)J4ZV}h8ϿeyΩX @@@@@` H H @m3\k@=A "{qw̓:H(.ny,dd.Z\eSNssuFdݲ9%Ts|Lܿkɽ>'mcEbѕ.<γwmVߺ\]: 3czV¶ܮbr5zܻK#uMs:FZzydl̓TUȬWbų6m,c>+IΎ,*QŮQ ])eAkujxP鯇~*N`ڒ|9?K`f`j R>Г@]IN r1.֡}Z.HҢ]|G|i|3N x31-o ɖ& 7"&+G1&Q޻۸w<6(]`ZigYןJ q5>0kvnrB%ș1t67⤃Ba ZMi1`@I"`T{)@@RM}-|  J + ǦZ\x06k)cs|7f7B0eRV梕If $DZOj?| FT@Vx@uaN;+ľdf˲.6F$Gdj!ɗ"'ӽ+MonA&*TfL`~|6|jl$[mFl\xGR /v7i5SvI}lqP]nf:yOnGoh;EbhIl fw}9ݸp`wa|PGd#%܋̼7mo͏&L9saZ^#\'OcnL|X?I| Qb%]1ѐoYۥؕrs0bPQA1M]mɃ-4:2ܔŒs,dSԞv$:^-/33Luv4ac)Lg6@x>GDoV9^w[.|[6\f ;q_n7!3\y!34kx=e؍qeg5Qk7//>c޾^~s7 %W7^\>!pm1.1`R8zG9?Fd͑IH]*d/Y1nv񐩕2iRT5+ZSWK(.$UM)+k,:OewLlv&nTk'qτ.6RS)YQۺ{rbݑ5<| eu-E/5Eji[]IG%*iZ@P:S٬ PP5?3*%mhMH]<'fbB&h>Z{G N{qAhMei:ѭ h>C{vʹn66ۊBhެN? 1V ЏgwGpm>۸&FM€!eu!ҽUވ9wo1clq6V9U^T(:LYkq6WOGlc,BT驤 CA}3>jABy̳8\H447i( x7lOϏuL.nZK4}zw~N=r]EVh-EvuσiN_[AwvoƠUفŲ^zKb_[D5r8e. 1$\5Gmɸy{7'`YXbj*_絞ޒzۜcþŘ6w4 2ّr]d7Gaub U8B}<ޛm~gw3n^ӷt Uwv|5Rk%K4xp咘:x*,k3\l>E*+FYtj<@.407 DzAᐓZi_ <] 2_Ohͷ9p+B@>Km<̓x@ 7Q\wYw2* B@_wf:7یy],x]QA+f]2d?o,̟UsÌ-H]IT~W嶣se0Ն<3ЁQ)|$Fjfўm] 8b 0#'\979sbiLe].KUui=qڷ;LK+%WGZ?K}U~RZTk]49BMZ=+/e*hMҍb@rJR}[oh>FjQ}⫡ѠN淊᱅ԎG{omz[Nۋm*CSMr?WLe殼wUu,Cu-.rm[k'>MҦj[J\v+FuD~C-#kwkwkPbmދ;wƮ;s+%W62[U>t9^K|uӒ6L^mR<͑2u.4w9+ݻ&U<x&dk+oMp[Q=<_q1cA^bBnU]9mNyr#lj5Գh|tnUUJ>d%C5HVeFqcLw9wjTb¸ ol^Obۼ+p\9fTx 8MDaaiH*WB>cACPE=Ǘ2njJܷIx yJO{.JxOg恍x()xv|90flY.Lq.?'q~? s`A#HS5` Fs5SK ۤt5PS^>Ȝ?IV7]~pKR(C!! Q1 q spZ_T^ۏnڜtަG %c 1%1e0(2JnBej ExÄR"ͼge8EҢjSw33H @@@( B|Ÿi1h2 H @QBu'A*d+e%2%{ׄjv'A3Uj8LlR$ 1J1A Z&Y+P*=@)( X cKmL`dѬ̍5YXn+ V XD XvIe (|DjTpe'=ߍf)+Ҡǃ{<&pjv"Dr4@Pfh|;qcϑ5B $mwڷ%FL>@P~nSԒu;N~Ly۬9E ykEd7ꛈ9Ő<NJc[.瑻azĨ?uR}na%틎|S+p.i ᵗ)4=Ӌc3b3bRr]D5*.<_"sclkg E(h}A12ˉ=?C` <| bm3ۏZh< b5(O03DžTTVŅG5BbqɃI P [I@ۀk4+tb21*t@ X X d rۡ?,616 <Zf>=߾AlkKyrV)ɵƃpZ7cO2ӷ_R|)Nv32J f ]W P<kgÏ/BUBB£[cޭYW_wYA`'f`)?˴eya*ȿcJmnWVۦ݄m2ݮ@r[F4nyL* tcewkPyɫȿNXso!Șx孽3'~%>)G :y}Vϔ՜jImdqbQߋi=1쁈5v%up#peo.Q'6mJڵ bp;;??@n_>Lߟv_IҕuԿ,D{PZEM)8 cAE[F)4flwWuĤB>j-I5nEm5Woƀ kOo65^l-mGerW% ɐLxvyvŎFǼBL9}>`ػO.[c3m 9҆b[m+.L`FwVmyaڣ 8n,1+sō٭_4'ٻțl7[Wc#oPu(tFm99.39Pv]?qqX-M2-oiGvs}]GwڶEB̌ޟR;رeqčMqp lxޗޝV}Vvv̙aȿkCKqfl}^2.{"H9`8WP[ U[zf u>jgɊ4`O^̹:;t&Go?N=u;> B\׮EUKyIwo?pwlwY+V\#_XM$Q2Xp`uۭ6'\'1d+XKprJl_F3bWeJ%Iy_2$j«X=t$qt,lmI :@>F@ jb&uדnqbL1>=zY2) N X@(GQُ:= RXz'aЛE2#]5 \PWZ'2I0`n8WC)CP-k/7,hbX\8T p[۞UݷnnrIkX1 -ӕ3zgm6cKAܞ ,<'䜺vkş6mnjP >{Y;q/Q@ Ś.1;ș| _:ߏvft]ubhjpb,*?Qcˠu qu >@ŴJ2ɋrAˤ̺1}Ҍ5 K5*O5WZ.'QeCQP XՁol|H00AGQRF X1*0bq{$:F0 & m$b-Z M`@ ZP +M8V@eqtbDkR+R` C@@@J`JٱۥN (O,瑖fۅgqzyZ/(>ݙ7C1oeQ1ξ[CsuyϿ[lʱ[ww_=gdvÇ /sg7&;4殾Oϳ7{_fۗ0-C7ԶJ.:[[MWJe[BVM9ȐJ@(ۇ@ Pe[mf+sembEo,drwÃ#]#4,2s)u":{gĤcֻyv.ݻ~00 d?moJĶ"%S}2uv#^q9q]jNl<6|M7Ӥ"kn;dYbjQmTÌܾ̟S}naYdw{""\습[UTQyq1`ւ ~Ytv웭ljqyIScb_7eY1dɌd rQ\Ys71|[86[~݁"fBh:IFo75bzqVk+k5-˝28~؆VZ(?pn͵feȻ&- 3潹lrRKu\V^5f8[]i|i\p$uPo'<8khgƋ]tbr=/>_m? V4\m2N1)A!7]4ԿA*\ZC,LrTksTr(iJ~jARA>`g߷)5.QL:1tq˜{g[Q|q;hԧ oq)b!-9̱ǧ~M]keޢm@Gb!y1%Lt6-xw<%قW.4RnȍaϏ33uC 믻df uw& T[o:{_˹oonzyʂ}\gIۊ㣾}>sd?TUqa]`cIϏ$+( _r<~ y3l_&V՝&k#,=*|Nrq93SrZ=Mtc6AVȘ3UK0f^zymiSwV#w{1./MFV,Gc]|uu6=yq@"j|7zI&lXr!m (ъ  `$R֑5[T|?`ƢQX 0<H6v-"%/3% :he BTmJF&r X O6GM&`Z"hAR ` _d S%c.Pek(43<ڙQ= k#@$0@V` : W_ G+:Pkqu[QjV)BLF H%`+R, H` f_Ahk Ǜmp Mn5yf+LMhrT-nZ,Ѥn2Kc}q/I ֝/ W̓R#TZA p+㬃~#Jlu nJd[V콻kŹ˻ڶEDw9_>N̪֫k:" :ɹ/+QFjV 7*mm"TYc컜| R6u9[Z[fs/duUɗ)ffךX;{H?>nNݐ6qak T9-dr\oRqU+%:]øbt"W$Ryjc+~53:ĥp`iw曨Ի~J-@Xk\m:lt2l֔9L N58?, 2aX8B@er֍H^QJymyWi(ZOIMfhƒP` dM)oMfdIaNF7ۤ I8ђjՂW_{XUm}nJzmAzQATF r02f$[SJ֞GQ}4*L`CO252 D`+ X,`J@V(2AR~-%UuP}:x_:+hF緕[cݏ 6v ˉÀڗu/ę{t]|V#;]q(*'߆^ nqoFU-;Yw"43c7Wl;Of(jz!"WS᜻~Y|%\2r^gj]Ǚ;QQp@ᶭlyvv߁xM32輜͗eԭqoGwWۢ,t[;[qw$&x+aT_WkDgl$drYtUDLBSrd`+w/;vlX0gG5UQo^UV?WKܖf4nyzoyߵr# *ԽK2ܱzo^Vl>R KI'sVk6cw4Еƾi>oI b͍BdPCjG[=. LɃ RN1R]z3'!gKםlB-4z0)U4e[FFZ A A #䀠[dԭ+SPun!xtm|u5#0dSq_W"q9BEA8Ȭ:tK5^#_2"QIB@h-QiAMj}_{sݰ63XM3WguW'LKlb— uo.t]U3zǸq>ݸ#f$Wsht?zԵgzZVMʌ|zLəjƴ30]ӶٮT,nY޻mpeBdzh]um&;f;,d¹%2 e|=De+IG1Щ5bu?Z| 4P+Huh @2]ۧ/ʱ.+">mݔnL@T8שO%Ow/,e+J.Fb <4VP ־1$00 rOly:Pq@@@cfɠq֒֠WzF jiAQR/&dƕ! %0 Ӆe644{ko@<i`F(F4cX#c84& 5 vQIT6| =4I0, % @؜jf(ō({q1S@$1d$D ?:5BׄR HҾF ` X23] kHӌԣO:nICͤŘWoܦqsƆ Zgك 6!Ý 5T#skF^hF+[$H:{Di|.;>m<˴;n6W"5zbu{>QZ^ mvp&Uԥ :`<ީ۾/i1f.C1rKe} =l1>c%- A <)q3ѓ]wƞzq߶7tM&E*|<9Y  4۹ѧ~3RbJך777$ljMƂԖ&2m_Fބ=&XSM <=(AE  X VAk(2P :pNQ t$k V7s`lI+YKXjҊF)j((QH6wYwY[>w923}$J(M|o홣TH", )@$ @ʰ$ T50>amU{ܹrr1-[UTb|cSVcaVaM@~+ovVR/9S4<;n6(`G#[5zɿ6"U@y1UUof,]}nccblJqKL-26U6}~W$g?|=gDZ8,ԩ>O;>DyzKic1m[?T]q/5'AOv-s̅;@J%S gǨ>kFK#mۼ-c^ #\ꍔ*+ <˸krcLmVAߟԳDzov#ͺQޫ:KL'ر*™TJӮw~7&YǟcjF'*rUz|{if3žQJyUFZ5s;:34w1qsdM艌JU%r/'fѫC"U-j/|cwc;w4sK]^a|oll5f#3ZK*r&S^ٓ̒;wvݘپ[ӓ1{NG'r컮Ѽ788K#Cyjη_m 91&wv[lE,æsFT^k.鯚[(U1 (|uVdȊ1PH[` ˊfj[KzXk9jaKעx G;*6&9l ȊCdcBOˣ,,;ma;ˉI&"q[y kIx.Ɣ>e_v;<}&BmÍHzKm3V`b|>lS!qנg俥<(^bX"GN\Żz[Ui[j[]3 w fgCvpLV4#-9dڼ{y?/MvRug23WwʥqҌKӆn:S.nۛk]t#"ykۖY?ka˜UUEIn0ڲ >rr@",`: '5gc rշ*7Ggoy۶d˕שW5,g9M x[4m}ҦElh|V μߗ{}GA^ jI0jLe 41R PLeJV0D>}tl]bmǻERS-2VY\p\wnM2*r.DV<5׷ԯ1A*45S4I<(8K+H4:(@ۇg:dˋ<"쌪H@M.?44- OE Dc^(4D@ +s:!qS| W PPVq]W('R?D"bJR)ZJT@PӏH-iN+<1lQSR‹,IvqLWodJd=;Mjv\E.7V_7%ǖN%$(}G};twS&E%*E(6ogǜ;v=w۸qRT*.xOuqXkUN^Y(V9 2Tu~`J/FY36JI'FUᮼX:sR`d܏OhO 5$KXR(Xt ݝ[9vUFX.~~o7$\{|J3,MyI?\4"W6GQqKMNmJ4>yM1('< TT^]mi լ V @@QRխ4/D' bc i4R`+&htd^>+d/Km(O  -rZ5 3:Pb\.RO;=ɶu0jTR]=U( $ B@ @@@@@@"@ˌ)5;6}>"ېPJG1yrϹ9273|h9d82Ke3 K1ڎr(WfNOo0}-l{v|6uLh &EE?uNV,ޙ.l_r`b^&,n3_oرےj\B'7=sNTZϩjs'=}iϟ~[&v#Ww|:Jc hOG&?._/N;=&\xql9ebWy|$cQO..MsǟotzL rLjeUU+l_'y~}+S쯵iw;]9ƺ'˫.6u?$[7w[O( geA ɖ\ y9y?}~ϫ{ݳ?Ec39,T>$-v*>U{_fc&ồ^#edpcz[͓''o˙N\:10=MϏ|5^f.qsi\C%TZYy]n;z9yf{R<ۨۓwpU@YJFVW+45gcVEO kj;%r[lI;Iiwɉ݁룓67S~^eN]51]W]D*Xm#c峕Y̟~܏mgLOQ".M]lE8FV&D͎e4<8tp[yY>[*/8ԪT{"le|Q8 crmrd0kqRr8ѭp&ڲ7XVPtSԣ#t,&_bkFC1OlY ەT(=̓7rh5& )k4:MR1ETo`mfQNRAӱnf}9 aT,ͳZprIDg!JZ|3[FAFĭҹ&Vf!SОI,0rnWsɟ\I̭/nたeeӶúE.t өh_Nvbrv͍Z|i_qܮw\O\XVǍmvyed9!$0$O3xshiwθZƪiˌ^hGxlNMLUc|ms$m⮸5\nhAR963yo>61|Llob}GÙA3tMH*4#Q-Y (Qio[?-<%ݯ{^l{̈́iJO+oTnuwywB@c\`> `/fu-ypst'؏Wb2>&uކ,jUϚbo #ЀxNFJQWPR06f!>Y0b2 WOg0JQkPnxN,08! ʶ˓EfΨT+p"8j~,)@jGۻlÓor1ȶs/C-+_:Y~i.,n>cS:jlm C Ef$Q凥ܾYp,FNV/4 }>G&VfvԳ$%*2(A[S%yWH>_nr7 yD@OwzZ(gTb\OC@tV}K3f=OMm@I$ȡ[&FleVvKn`j,9m{ V_[[S\ۜ|:U^Jio? `1@o?Mr0WC^Ōä ,=OY|F*U(:5 #>bT:|E9տGk%lk_N6Lw#"4@;0n0  Km-m̟1֏4͊w:dk`1uPr>VIMf2(ۥk_°6Y0X#p,k$9Ɯen񁥲Ԓ&v "4 )#⭭Q F) P20!ed1(ˣj`c@qk@` Q $;! @VLD R  )H`H@ǻz lǧ|+Sn`UVMJnf_Z;v|c&zz7ƭrt.Wfw+cOs]\bNtύ-ՃeK]]ٯyjc)+kkQ (i[S]-uvǺn`v8pqSuC 6_嘷+/.lGe &sX[d]dtq"a]E :\+r--f{sۃmrʠ!ɡ$oOKK/[n˳WbeMPs35R, _+go+0n2=UR/m3k0C I,Pµ!@-SqQ2.l :i:饌7K;n636JbP/ޑt}uş"`e>^ L{ou`llcw0rӔf kd?ᘝlFeLafePZDCcӥSݽxuV?/6w8d=̊ }o/_3y'Il`v|M kNT>Lj0ƩuI@H]=^"3lx|xkTk[+⾛fP 8ƜNDZj?၀RxTQ^]ZZA)[|H3mPڣAFJ2[M+͢+l .6`21U ]}:UdF? _lOCJ{IB%-6nw-iuX=6?3e*[4KM)Lum- ZHO `Dlk*tւMZWC{\#+bu$Wo|l4r n[Y6;Wm>-NV 9}W; [#+D^oM׾<͢ ID H @ XxJ$8{ۿ266[ n\͟Q>Yto+NGp[1EUEaf5UŶju5vݧ>9&%T[#N%l}Ezl\k;0`˜X<^ؘ-Ym6/&,1;s^Kg\Nվ>黎e]:lj@zZ+rYIz>ܮ^{Bħ#,ؼ4U"ڞitW_?e9ܒn2u7=$Mwvۗܛo@g{O23={N.4bgųX,ZY*rw}d߷ەG#psB mͨ%ܳ?lZ콡;6]";Er5o[\O鰻q$ [yv>\u#aT<ܜMٮo=b{gbvR[r2(V̜$ϑz &&.Ġ~Bh9ImJ-e62fFw\-u'h@_KQ URYR d_YV'5{0W "+8>nSŽ3ecIj'/7}n^cfSPB[UU/Ҥ~f* FŊ aҧ3 . [L&&qQ}QzE| |"9!P R . X|$2T*}~S%3T 2 cf~||rлtbhh nvncP)]u>ymG; M8HW#.3-v@SQ B8_j,Ta%%ug͍m}7L٣Y\x6aBϲc4%u_#y}S2ߑĴxlЄ; GzbmC5U9 ]|O51:#\겂=?hB* 9fxEuIB*ֺ[K9@()}X"-L>(ƒ2 P }8qY 0LcB XB32Y@ +@ )`H@, )o']!L µb@6euks93A .-'YYz&$Bkhkv1Smt%6UZU@fVuEe9TM_5("'AQ}߶:U 줭ۢ6;nʲ\3=Ubzu3K)$}Nwm/G2%heė|1ۺvm2=n/n=ȳ9o\w6ݛ`$L B/5j#d\~0ʊTv2ʘq6.,gEǐ]*rѫr^_w哤W Q$bK  z)]G ULCKl<ⷕu*͹ɘK/8v{]6>pl8(lx2cNyQ۞, ( h+kg'Nz]cAU2^Lc->G'yUϘcTܾ'\;\1OQs='Yyspv9;fi>>use+`+OzL_3y>]3d#!^G`V]r_s35=n6=7gh0?I7.Ft3_,js>{6{xcjYuC}%|.KKlܰb0d͉X-y^yfU訅TQG_U;䷙|עk- Y±\(b,)]so'F쭇{#gqcT3UV2|&TR}:sw#@Qj* :3Q1XdLNWlQfRz i42ˑݘi>>YW "xZr {2!]B{@ c=&|Ý0d˗*zE~Z7-|r=uv,~QS̋;7f"fŇi͋51QȴedʙYG}Rsb~Y;ęeV@:fY0'Goy| o8ٵ|j2'g-ܹS|lx{gG n(œP [͒tc.q9VȭERTzOtQ@BƵvߋv7gtnYخ6ވn x8_F񺦔Kf7ZR65ЄH( 'QVBR)JxzlH([`|2 Ixv3ljKFhW^ɏ.!ǑJdZV V#Eb5hM=/N]TOF @R02ɍr*HQ5)0bJJ{xRAzu:>1p0k. 4A]<%ѐ244UU$)l)3F# L_ EE*jPAI0g3LĒ} e$/! I(FkoReaB Xk."R-%$\>%ҵ2ߌ 3 5[Ƨ?0Nō[RDhTy׈QqZ]{۵\mui܎54 "Aٺkً5f<[]k0q:M SX7J1  3X!f8M ^uғ# @R, @ L X Z@0$ @V`H@` HpcdfsHWӯ4}ݻg[w 51f\ -J>\y{pO3ߎӦBw8Ty_Zwq6pTdŔP3 LXN/.TǸ}sxVpc{QE,Jn_'tueټ}lUQǑ6;۟&v>2UѴ *˼̔'CJ=wx,=ul{=ÖC.䱙z1;N] L(^K[uV9dy屸ׇ:"2"Aۓ0a]b=<]EScg[6M/Rhjfg{>= ǕʤW>kw9{ɹ`~mw=#\;t95 >FcǍ%,4Z @zdbiUa3g+& >o/[4zr};]q#NbE,ʋr;$,^t֒`I,` %)+5 Jq  AЈny?ʭBZ#̍̕ydek;F%ڜّnlyn[#]|>iʬ:0ܘT0v%a,:9k2>g͗!,\QnǓO*',w5&\RQGD[Y?5/z'nvq @ш(Wnv{2']'5w=D˷+fRZzy1vE^7'di;],w郕P(.GGOE$oͻ\;}mΡJPN_sɯFd[ј37ļy]F6YGm%NW.]nQ&4 ;c*/iSm1m6K *CoIbm̨my;<͵' @ch ʜ5VG[0ڦ<:f؂%jYGR)ɩnMVzokv;|-}@kpd[.Fw/S7[|y*Av ԑeUJcs,Gp͌Ca6A՛g>O_^qѷy 5M<_jFv\WB+FGWLևCK<)jey(ځ0E8P.Ů7f{E &<@P9,_ >ly=6V{wX-rYsZʶ~uVUl{I[ȝ7DbdɃwWVV#m*XtjcN2 cƘrgjH5 &(Ȥt<*=Am`Miӌ ot<+AX: kJhI`9PbA ,j ?](AN` 6tSm8@d`=]9%'RL%% I, R=14kcI*t RiX*kSFfFKܿ݋n& *.cet&-˷˶||qeVJT]w5J3jku ,7ߖAt62H65[IL{q(*i/TEu,V[~(1}TAe@´cjV${Og׈MˉbV˵fm<|xJqѤv\ďK>-l[:=w=OVk7o7/G;ey&mQJ0 RA 43q:@ZdK-X,`+i:@`+X , @$ @@@, @%` ztvyE VJܞg1c{gwS}W\.YO8 ozNLwX3*A+?ӷ?:me׳vț|`Gy5Ⱦ<תaŏ-B,ٹ2>O놼L&&BBX0+/H|FQh5П˃ l&AZgh<9~urɑ9}R^73m[8;?4W ^\]^^Aɍr\drg;e]P%QMLl9nJC7oe͎\xckFF\K/o-W(r(C4(9lFEVuezds^qPЎ% PVbM(4V03FVZRkjجLTdq* @*0ipJ+ z!*r D zEnE_Uj >,}u. ƪr1rs^iKy9;n P5ٱٹպ7fi+f(ZѮ7olemV?KrbRIByH 4 wlunÉKbA+B9tv>\yɅ ٍ)W<6LxqƬBcRs-lݗk=+HQ G 5[7M卝jɏ {Dm@NC`BҿOD_dҤW={v9;{nz4'7/ȭ1bʵg!e2_ieGza*lTv,+eyvNU}B}L[>司pL?Sb}g]wwL[ eaFT˛ _srcj_~Qmfy͟fzX4O1eɑw-[kdBք ڷ5}/淓u=]-Ԋ|g:#]˳ ʤ>zr~_4ϟ*0x7[%9s1rQq櫲`euWcߥutw9* B,7-__vwp[XlnAFTkSWoğR?1N:=y&WDɏ57R2NUiG>#u_+cI4 37'#gwn|9w˅_1XpYORxh@@V, +IiH@@@@@@J(0YD J@R ZVx؆ 5_;*Ę*WtF9V'Ԙ8ڦpɸU8iۏK>5meǟiN|Fi{gPԣMz, 0&TGfc;>=|ʹmN;_.,r/Iϛ䬳v 1QGktN tZ3cnedUo6]ɻzw <{0Í yw4ļ2ݏ|81`WdȫԶow~ev|ͳޭ1gdωҍɍ*}&o=:Is,ClhÙ w.L#ol{xǃ;.6b+dÕRHz%?aWv[,|{w6\[y;fC9V%J1ϿSg. ))|yhej|Y~F{\Mg›x.0[Z܇P//3\י~ lģw;vyrɀm`TTH%2:?,y+ 3fbqhPԨpƩvҟo0\ͅmȂ,I1j>5 jZn2beB+s]jܽ@]u cmW[y--<=o.٘c͐&G (5,ך~Y(%ק}SK{V9Ou UGky?; v웜;B]F$V]+r?]s꠵Aִ// >|)k?_$^ o̹iíqkOEӐc3s4˒@)@yY@h50(i0v.ݓt) 9s(T ~ɋ>l/**=Ҁ"@$@@  V R  Y%` ) QX` H @$0-` H @@Re|%qdե _3f}ߏqWnkyӕQg?PnpcÍpf`W*z[#z;N2זVNڛЏr`f\ ܩU$TKq[lXwܻRc6tJkUe♖[]3*H>Y=AQIui60-޶/UL^qqÐ0nqi>twlwGn_&Wi3a1b(G)Wp晼vosyZ!F uʫ2\neBዡrEbL}Ϸpn6=w'1굊'GˑRֹYUx|[}\2>1Svs.c0ro1ovpϑ!dG 1nԻ5ο5 =|#7QN j\R_Z_#y;ųmdIrd6S Gnu2d_'+I>f\)j*k?`YֲL6+ez)m3**bU.0q䱹w?\ikfL dP/e+ٓ]J0Sm :mȫU*nї.{S,boOOdYLJ.,{2嘝G6۲ 껝.2NnucTgM/^Y9;V3n<Td Ÿ5](%gw>Н&6˷C7O)fl&v[8zEZ8.&N|Lyyy66؁l V3 Ek1\5n{ڱfbBیc繫j-_*kߵd+d֬6Ʒ%?2e.wp7u҆d$WJP[tX:ɜ#wO+!~-ǚQ~^T=n6 cɌfCyd~+|LW_j/bɐX2a|'*3R2xQ_/|q4mJ!D @$ `  }s*bvE[ H ~_g Xr5ƁI?]ɦQ.F1O$l1g@6GʼnwWst&K~dnk[9iŴۍ`ö9?WdFbJ?.?QnVۻ; xl6E/*ղ&fO2ӝvrݎ3ˋrta56#;Oڽu9n=rϖTԖ3aˋ:+]r9b;ײǃnY}7ks&&dQynӻ:m_տ:$.|,.T_CZ,;Md\ycJy&gݷضm)du9'6&L7-_e9Y7Uo6g5*uN6 # @EOSUL̼i|#N'd I[У5~6gz Flϸru#%?]Vܭ|g?˜UA\P<|ѯ~<fw`" 5O|ߑb@PY4aaMe8Zdܾa ݽweɽ۪I5cNE0qvS(L V!4* c{ӖK4vÿ[;c؏uz[}s[YvK ҰEb9s1fWY7{~2gfn]U *sKF}rbrĈr9$щSD'6T h8Ac|sf>G/W>:L(:FMi9ڬ1e j&eTz:Mӄ :ϑ1[)&j@#X{JufqPs:~э}tfv-/iRWh[MTznɣ"iFHڴ @.ø|` NT &YX޹'VdA<{3QukQ}ˣmq* g/IFˀc-VmK-r;'"ۅ,KSv6l6:zl/ebw\x Zq֞3h WH`)H` )@:@R H @@@@- +`H` J@@V, Xgm ؔ3F+@zY3hunVM#ɕ5Kd*ы*LHŭj(_)ei@f33QI$(ҧ(+Znh|Q߸{!~76 q`u?/灿l;so1lCldl}W71s?ԮWaɛ֩k,!Nj# kF'%^E1&,bP)Y..%rwhAjW^`[_0MDΥw{/er>m9NZ= ӧcV[L^uK干/B 4AQmcWx1LH#Jk]>/ 6pʊVCd(.n(Nk[fjq`]AMUZylLUzwuɐq k?O̞~I6Wّ11Fµ"9eϛb#6-½ !kےtG]=ʾLZ7YnAa/E"Sš^̫w{-C;w¸'ssuo\nNvg]ݯ~e]2XnUn8\k/%kWRǻ61YzOQ۟}ߒ$}gpwh;Cuk[26lA3:[wɉۏc;;.li;Kyy}A=)sovyrbeV8#r9չyokF?};>|;9V%z>NGOZ[lz[שabsv%bpυna®˗;<8ܷocŹfJS-]s7g;\C͘ZޟIz:|irn;,$~p2[2SR1ȍܯw,ߪ=ыy&L=>n0vl[TkխOg>ۼx ;xq ߬Ʌ=c^y}{Goa7{:߶ʋ[ o^\x~_}dZ?,KRu$Ya g>LYqP_Y` 0$ X, @@` H @$`}G_oɅ,9cmŎ..W7lnNWŎݻt-nN\֮Zb h\}h5^ȶ*rIwwOnڷwȬn _7TYb3K7s1ݻeʹU)Fs:Ԟ_7:Lk0}Fi +3'Ƣ]K㋯@[qvvϼcǗ(4vCu3dYkr3Wvn7y18S]#WkOnu\9p؃{ХMU0f\v?23qA6r\neKͲb+oߝvMv>۸L[ xɵCU]_'5r I/%yi=7n:jZFEucKy"ygN'o)/ݓ*ɓn^S}ɓ'ѭlO\K;Y$3/Oe؆\ĝ,'(RMXAyiֲ쟑|LۊC# B-qG>%F6tz ۲*ekd(Qm8ѭE5dc׽cݩYPd5^+m~&.a5yv6bs:`Z佞Kns1p͈2T[Ï ,E|vbEJ+&5N'hiQ@l~r|%i/ӕ||ϙ71a(WG3cLXŎ+Bլk7TiHַ|/ TgVCBVK~8Yn.#ѲJ>ҾWy|._Nj&5{`~${ag|C)mkc[o'%ԹeG16'(G}\ m`:A5׶Km I߯meBUREpҴَVҤk)"3h :vی6!h?gPҋ&,8;&6& 29n@Lw|>WͲ(\rg5X8 ֠)Mj:pƔ캶S嘾ee_br'n;uqPH~_/=pm_t쩓4W6;#X_&;uΒdݳd/AMjBO@Oᚙ0-֜h'D7֕2 ´0LժO 0e)PfOoF AV$dJT^'|ZYpc1H.;Ue]t2Jnm_w502RX |dIQe$ DjVQ"&$VA }umw -5uBlQyf CC-#EPj!t7 L!|jН [[[6:e8q96)j׍BY5+֤R~ɸ"T9;~DR0j_%-cFd.U+k;0Z_M9׌У*PHe{]p*Y˚,k6<~oLurn;n;bs֪Lv*ͳGR^krګboԝ&oS*Te_LQ2bː&F:OiE4ubGMnWrS!T+6KnY>|+nm(&͏STWYy#Lwܖv "?&.}b15SNqE#=my"1bE*jJ[s|^=<[mW.& pU$QjryO} vܝ F^krXyF Q6_~f6f\%|9l{r>߿awO ߲xɃ&(ˏ*_%\~8[_o0% \͔Ci1BH%`+``J` Cq, X ,L0+  Xg;xnמޟNƬllXv<>ϨȌǠ6n[`Ǔsn.^F'Mqa`a 6W7%,'%Y`821&V^4y~Yg`sq(*M׭y~yY,=Mg022EѹSnf*cw<*kN<`iƿQӻ%{l_[z?j»d;Ҹ3d3e5"c\^Wq۳W (\kj*Tׯķ^d3ÁʼnK*RO 4}=}ˍ Ym7c=G[- 辯,ŸGz1c5N ֗:O.1ۧ7}mCնw:[~7*Isʻ\Jfɵ%HǙԩm}ܬ~ӷ×ݿzdm e F'[&G/qʾK bq8C+ y:VvcOm˕q8ȩk^Nec|.4>VR(hi_A,⾯L"3(!l@*[kƫ`Bm '/r\YL%q/m|.&W$(i-.*M$:d`3%l-.Y.51-ᜑ{SsQ ֊5֕>X:v;̹wXF|+ZO}ڲnnϳ0)&ʾ[9G+,9E@Ym2c㯔7>b(hx^7'LVt~ف(AY>!m&͚2:7hq2CA*8YUʵpnڶ*+aҼ`G . `j꯶gF;lą$>}mne΃tpb F/-Nk=ۻ~MTÌq@<ӯnޱ}trYY`X W^qQ}ܺZW&>A*騔m͌&BÅ:2OkO]P)?KxdrQISƑ v-Fֵ?$ӌV%(Z)u|L XVQ`F=ﵷtˑ".=A(5W3YryZy$cQ~)ɶ39ͷ fm|y_DMTy^_=fLcEAFzq4Nkj1/{F㾷nə1M\ag7#z|sƜXrɌ-53 ԋt4c6&gǣ5ul,Xu:WMx4`clJ[R*?jw+q/J*szO/a[d{fLL:QuzV̷+zg9,kiM%r.>u[Ӵ Kݔlj嵗_ߋg(-tPr9u ޸:N]O&\/351 l^&UnD[y7\}g`ms=0*">lWr91ob6CK½jW4?/zq%ⶁ'NBЫRTh)M6 %m|[:ۜ+1;dZWyY5wWtܵand>K-j Wn30dOo,o>1pvط̸O1NcNtv͛I2j_hܦ67G\_f$Tk2kS6EO:\<{ͷk>lifq5?~,xzgŏS똶软[^Ŷϛ>mwآ0[|vMrcvG_>U]il2 ,9 /\_űttWM_3ɝL1$aZ@@ X$ XLS((0!`H$$jdQL`H X@@6S5^ y"޶}2rbȖ ,R8QW0ńO>bmT.[=_ wn9Xj*BWr[VUNGO=\.$Qu*J9M|zNo [滍cWusQ^ [UI2??9uE 񅻪- 7yf;O^

ۖM֣6Ktd|<1'5'o*|/uEdU-z&Sa^2J JmLmr.c̊q "5Qt mnmr [ xh>29>r\Đ.V;8_&e#b`V ;,fZqCplIF+<'+kaFX C/Hz/_---S}}ω3Wc"Vwd^'/sNm{l+沿Mu;]:f8:W%QO<ӧ^ɷ#m1Xcfqb:=3dW}}\{~r:mjLjXE~bO^'b 'SJhˍFk)G6%s:u_ J[,yw;ڸ3,|MZ>DzoNws[wWr).6Vo7+Zx} pW; ϓ P|Mub=lضWmٓ&(cm17lW"-R)73Ef聇G O)a5Z3Ո֟O4NU$[@olK" 9Vɏ "67/\[@S9y`Ll 'ZK6vG|#,Ve~'*y-noL͚,MkdN<|۫3o|Vþng; ʹPF,iʶHr*[f'o?ԛ1r*iP(4~fͬFPbڣ{kx3˸ɐ"fe-@MmVY$q)$|%g|y83Ň ~Dw<'Uu]?;d$MI?m3Qԩ>=9/zv0Ee%[30Q5= &],pd MO(du7UIz⾯O! ;.Eȴ]gyy~/re|,{eU74)Aq -[rz= np; 2RE*y.L[~{gU`l>s'ݭ0cbć){d_I۰iq˰39q -[[>3\7 ]|6['"Jן(©Ȗb=m{~̃\؍U scEn/܃kؗ 16< mE`?֫ronv^o;s@7s٩Lhar:OGNwAv;3cvall89'uy. 6}۷{|Q.R,mw\-f1v}Fn r Y>UWKsvŴ[=ݺ}E{]zm~':3=U/òٶhL{ Kٓ"w$z]<[X\(t\#;my{\>.W&V.IfcRIfՓq˷۱ h6@|>{9-]iv)Ϗ9&I$juj*\:>Y}ӳ_]ٛmǑyFWL8nV̹г~$}N')Ϲ.a?.L9PɏuGӜeϾ̛3&5ĎŗuƋ,Xxjk]r0G{mu1(O3:Ⱥf&lUPI$UTqc}v1ܲ.ԹN ә3rq}b\EBx_,^.˸}r_o4LH۷=<~26UTnN]۱|>K{}S(P6 ^dZ wv6n#BScy^~(,{Ƚ 6Oռ<㿴~'nu6YTYjvU^,Q4|rdiJp ^WB>Gojn̙)CG"Ҍ诬kNj&rcEQ6rs6O4tx!uZѨ5f( p̡h kNe3|A6rN}u@I5×_ygVBb660 uY7ҍ9U݌mE6/RźvXEoAة9 xqS6,u1 P/_Tűی1 (ҟ ii-`C5~_4.6  m|9y49Vy02\y]ݵ9;z&%P/|=ʸGot\fz|~YF̏:e(W2]udiWFqbuU2S KO4NҎC4 lŸɈ!GK4zm\ޜX:PO+ ,Y~g8m6wd^(BLk}vZ=v죋6tOR+ ,Σgc[nC0 W3 ymwkf=n cftGy)vOI #ނ`ePs1xA!H!X28 ?eA*dgF{ .@45ПlĨ+KWbOPx ֌ 4k(Wc>jۍXDׂ|[ERNkgʯ-թ:Ox(1m؀>W+9J9SdcӅ9'0z4ͿV_MCe!MVW9\k]&~vʘ2 ]m|˾?r_.m. -F }Uw3'lNvq-sE122ySNvZLdBqS@IT$G-`{9Ľ`7<͙-cw5c9U']%.6@BZƴ?Uٟ@1 kb'r9v;|{buu-UF9qqM` B`Q`nss mvZ |_37|O=ж.| \=:Qsһ&L.Yϵ;erfyv˻ǂI3 ߝd/+V-` H$`X @%  :`H`H @ %s;pm:L.)|>سf{}{n em20̈s"O>DksN=:ͽZ?n2T˕"FPI,NƸm_. QN95Md%H"w|- kgֆS_d28 BMiE_M l!!K>`ەbɋk)\VN2! دj/[yǏ_j.igRhm3Ce.0eTQP9 zW9vN[6-ȀYZ۹ё+)^#9,] Vkީ#-iq ei.HTp{\dfK7o }Ly& V[@԰SSL`fNfA2( (7,/4=nÙ| 8!/21lXJ>{t ;P/*Z*YE/Km۬2nRI(j"\]>vN9;Wfov[&R}fQV[3[~V[[\ ͗\xP *ڔ4FkWW ʍͳɜɇnܮ>&#|ۗ[*6 nU/ƫӽ/Kk',3dw979vajR]P[S5#oE̶v9񎍡ZKCnj'kcFcSBҿZۛ6jqL@fȡ9nl\7'/FOp8(æD3]m5q۱2n"Av| fzpՓM>><(-f\&MjݐN&٨fkHf}ɄԾFuƶ7ɓ8tqq{_le;ʸ]w f f[vDɓm\ǟ{^݋'u"&VJ˓++ؗ<7ktnr$|ݛtnhd˃cIARVӧTiQ` +  X @@`Z@@:(H J(4`z6s*U]Wo/ۛoq1 t# \ dyvve;Ʃ(Ɋrb͉ 6ߑ*yg^m5Lmt5*nfy|i錷l`eLȪ\"|,AVy4zu!>2ڻe bAfCӧ.Bs|SO+F"tnÅ /+hϡ_$:ҠҺTxI>Gf< tsÕI)?_TUɸѧSUmG> ~M~)u_C6 yv!Rm_%fmDžy9@{$Νb+cɍ5Cӏ(_e} 0p_2>=mͽwq0 zkr7-~{l_  ~Ŷ3fĥ=V}7opwA;,6|NT!U3<^~/Cz~Mu#N&mleT@MzTƯk/`ݲ'K7ͻWUmzsYK2mKZ=1vMpvmY21Zɇ"g6[[#Yz9x?rcl(qft)k/*s?:#;x;kv=6+B+m'r*⡿.|sr?^S3|[d:N5y"lg-=N=or0-2 \o,ȍkϓ^L4k;v;-c\c,rzabԵ'=u߳(2 >\mܼ:k.7Nj{oͿ{f;Ud/J8uLqGgKj\e[g=>,0g:=;}F͙nr>K!/+RuZr'M~Q\qt&5k.uQY=18GH,  @H(H=ڦVdz̠P. QWo\7O|Ϙm͑8nLAQN3FyGI<,=q*mv͖ RY}WMj4*oɟ2ʫɇ+,+^k7:7b̭nWU@4n[q|;/H.Zd6kqSʶ}NY9b!Sh_ڽ:z: cτ.ryI\1EI5'Y}EL'mf\L! )eV/Lh09ĮQ"5`k_5-r(r3VީZ3~̉=F=+=(|坱fe;% G pbleVֆ,`mComiLXieUvwn7;=gETl8lfĴ\'Y'0y*2(F&)P}<:I,;Y)O#6Kbu_4XYBk@n đO}mg×opm7z|{G:dYέzmtrcp7,\'>Gr.U|Xyr7gś6.>\BW !,dfɚoc>n[. sd@CjsW:bG{kL{jvs8l8e[Fb 9r[}l,߸v{,] ;;'ζX܌حEρv}o>UmoJa8^ ߑ<8r}f]7ؾ^Wھ_>ayb k_ 9G.|0QnEXnyWvemdɁl @{'(@@@+X@$` )@$ :!(@H(H(H,%ҟpw kq].e>Nuj/M371_;_ݻQʹ1d⏗o/5#_ <`I;j1cɅC͏pVdĭe>i?s8Kt}U1Zu1丯M3Og^ӷ,ckn* >lo/tLWP[VꖥT Z;;Lna άnb@Բ2/۔Vc|9HҠD.2\199^nniW"# Notzd{mh%/ 㚭XvFWf*LRf+~.g "P g|oؼʖޖorĔHT'///ɰe`l'qt J)l\)[6o{{wكŏL@,Xrn^ULNcbØLzEyYy_tp}v]۬xQ2-e6zo-ɍk7õmlTKb\+Bw,[nW?Ý<׳ms]Glj2Cڜ_u1tfv^L9{>NaL.3d+>!ʌzz|ϑdF6|}UR^666enEYm>o}1b!ZN;ʞR%-]f%*$ J-`IE$ x>W)wn ]ܡ ˎUW|EڅoUg&r2v\edUU!ןgWQm} 9[ Pkeim7Ι*7`l)^1kfouϻ>fb5:Y+k[;[zom;k{-֢i=?df֖5rtcET4to[hٶTj_b]qǛʅYj+S?g(}79`qfA}ܜ6/M斅5cry-٪w Ǒ1.5UIºN|lxYB)9&POw+L-ll}7*b]uWUk?; [#,)iwlnO,q|9||+qcؓ *EiMN  3PC^?|K7.1tbֺ@ X DŽN$C`eLu +(wwI^Vaw3^Õ _z5W|2mm.-۾U 926l}sm<[Hp5 }r1,8 T\/ilߑ/Uw6ŸSfGErUO79˒TtPq_Z_e 14`HW<{Rq+*`~dsy:ϟW3gɻmN#cuEҶڶ}xxy/*io4>j%i@nWosZfmA#cs3sVպΟ];lc.O}OII+P?U^o ՗ua n{1Cdg5h6}vˋuk|F>%d#[?7{Ϻ2 muaǀ6e*͹g2;7M܉w4gW}nmn:wu3Weeo64Xꓟ^ޟVióM"m,.J9|q/Unf{2yw>l&apȻ}^WOjN .o&k{m6SlxiY[.Ȟ^y־ݮqvix"FTw{vx˄IQ@xVۈxlr0HR}z0mY`]7˹JY"5ymT3xV]S𐥕Ov=-lz}l~7W{ t{\ݯk!Ɍ("r_[Iy5ח7M2 j\)}o]sfpd 'e//3;lI}}ye"͉_5u^_Ovő}ݣ?rLX@k}6gletYo귪dJ{ %uvɐ2q;n듗Vf\;n/w-*PU\xC=ȩV6OLK&w cl 眡͗knIxJۀo\{MԾLƘa$q'U+ Ã;d 3 Lxђ.VW|J:7{6]s2^['WYv4̌Sٹdܝmeǵɍ;>x_&,vkn7"~Ǭvl˃"f\Y2\/5˹ǒ3e[[{͗,~&ĹprT\tu-WuI8js`˓ma3GGȪ.QȊQpq͠8tjܝCe]o7umQ%1,~nS>63HH2Dg` 14 }#)RUЃ@J @@@@@@@@@@@@@@@@@@@@@%nnHAC[%0]F®2fRjC@eDӳ[+s VLԚ>ݷk:aú+L ѝV˭Z.auJҼV039(H4QJ}uW𛂄%Kx ln'N*PyfC*45 9ee\@,&ɸ1TTӎa.fc3Z+cm_+y_3y^g-|ٛw.$]h]Lmž8>knVObE f T]߇8vvx]}|;= nZXAElrƼʳ_wlw-wle@Q,wb-C˓^Fy4Ǘ(@@l3 8vϟ8j f뎞nU)oMzߠ&rjÇzW~R5_6LXwnfbK{Mx\ȸ$u!{+*ݟs˵-*]E8?޺k0wL_-۫|mXĢ뒗ޞpOX/*A5W\5\pI'SGٛ&1bTWۦ(KԽV_5IepPAOI`ӭ|w|{v>dlΩ͋sqۜyWE||_7:FEih?6!5`"j]O}-< lKH5Vh 1J҂TLJV\ny{v"OԞѣ֪D.`(&P+(VA 4+ %h kj2%H$T0*k|$smnb+N9i˾9%H0ZqY}Í)(-A7b1TfR A A۴&nʸ(v掠!o}FJ18ݪnZGu2ĦEjUB-S4[%ځ.t͕( YJc#:};CNqmp-F֦_lkpȀ2sVokT+hfw6ۍqqo!9r3Ÿ{|QgO\Ϗ𦼱 7UU@65d vk^l_6?Y5om󜻂#@!hRb'Ks8F8ʄ>ow2iBQM)H`H0$ H6 @@@@@@J-`e+b`hGx͸Ÿcq9%qX(.mLҢow.{Q[u\9`Ŗזߛ2*y`Gbw;f3Lq@tmƁ?["w%0elJlb2W3FG.@,5MxWzfO;j \vĴg,3Z3 7/ջw/sZ]Tm|G[Ytٶ+uTi5SR㲞Vf׏*5_Bz_K6So"Qduv5nK1r|ӟk'^~-yG"<_yHh73c͕F5¬Mr s9Yߤ1>@6_~4K*ggqdl[V뗛1yYGwjݗ=q8z2vUf_a;u|2Qɖ־[rgұ ݼdQm}Fr闷lḟ+huEqn//lտ#ШKŇ?mlXzI.cΙ?L!-10䱓}On¸qbU%ra  N['/$?{ɿ< -!8MG''^rZ$0gɷuͅ2!>a$I % `}4c%TӚ?guߟu&$])ҧ2f6eb_~Ydqqo6U:Tk40?^>Fذ% n` fliرOS HE < v6C-pr(PMSc噽uu6%: ?&M R1c4^u@TrMiXMd\qell>S]cn2X1 P+=>LvzɉV80}cwԢm1j, km}3ceְ{^Ao4r7lrbjJVBk~DW"v+ˋ6m2al耒Hcyz.2eltaL8z~b?l<Ӊ-j(5yKֹ]):˨bVkp] +X0%ԓAI`F053 IDtR~}cԪzUS%n><'T`N ďI$JZʬXjS˓OmcܽmldêsܢF=KTu| @@@J J($ @$ @6 @@@@@@@@J-`v7eP,f+-3}|a8=!ǔPBL["P4mӵן!˕9G¿1jf  kߚ%prEjufM(4}P ,$^2\lzPڐ }<>REt4+xF rgl J[AJ^Yv9;N6M۹"ԝ.wSEe;q_Mlmgܜ͐iӻ7OVro"{wk2c MqF{\xuF0Lko7i-|zo_qkϽQ`"q{bO?Ot}Q]{2:8u;n.Uv֕Y䳒K;{ݍ.ҙ19SF\Ul\sWS1.p>So/nn6ʹmcaem˪?Ƹ}GENۯ[f jS6{{mbɳr +.=.tȭoRgɯ3{z=6+d'pŐtV/挳[nmvʹVp:4m#'= ,Q}й=pqKt^99eXױim;vq\8. Te3cg4n\| wm۶|B2}EZTKĵ]Y=3}|%xR(@'N2ۼajU:p_ow/9J҄T_. 8@+ǚD)|%2wP-Mh4A% iA(ZT{@?"+WQS nj ‘B8ИF]m|XPQ>N?]ugܜWL8tҵIǚׯ_T֙wKc6Tq2r`tkk1z|Sf:1cdBUԂ҄{ z{ecnqCae/O3´6Rx2RMjH;~%ŷ\8 )ڠV|VѸ]u9:LN^#m WXa5GD \ RE(k[- 4ۤTSwi^l%E\sW~iu\ۏ>7Ęɴcjq]CjvYlnԏThȚ@A QJ먁G P % P X@ $ 6:0$ @@@@@J %;tq[#/h7XX =GWwce|0ЌXR^[˿zH9oR[x>g .1EL8njmb2"Yw$װ͏.Pɑ FS20U< k,A+v3 (%jFF*9s[GY:6 j/-m_=kosMܷev|Ibê^Vf-r;klV`U]v5V^O.~l¹{۔]..Zdj׬Z6&P&a״96I(|27+L.\9uM=' g!j%V.om;%{bsVY>&d4ΞGgux>Q}¸n o;SÕ9FӧO;JPiQojU]/jϔmcـqc4UJ\[IVIr0 WlF]ǖMG.VcDҋ?qz'[W˴.=&*iO>KU2c*M+@jrnj jI$/_/ifl*+Zxx+Tq#(=Y-taϸȫ-MJמTyf}1ENفȍxaV-TWZ2]l{i9#6_ԻgB$:IG0|b  WѼZ[LI~U?obm#n0 O&ɛ6K9w{ur6V.Ē}0H (Tx콿}weFlm%("ڊcɉp=ʖbԺOYZ|{md?Wmwcdj(djƞf[5);kvnݼ[7l"Cktܺ˘)<5λ/'-*|鴂B5jF! aEOZFn}ɏ&LBdR3z';9W3 ߚhacA̿Ueѳ/p͛=F E|I3[F%z1B᧖W!6͎Ws\op Y^5}G ɸg@&Q32O=Miq^Nd.*A"TC趿q;6NUܓw[c@kL|yn[8~dŹʸUG\7:Fbj^/~$A#7'2ap[[&յUh3\2Iw$ԓM+@t$B2cŋ!L9T ]%VYJK7"VUMLK&sȠhl>C+}L“W?+u˝F&o(B.=_t:9PiіRSO7>&W]V 2&G-^_OٌkYvJ0a"[]ꜻd\vQVE^oWttMr fGR.*< v6O铑orÂߥGl-n3ly m$P3M }V˱gQ=VjHVZ돰ןfjj.\+K(r0csFl(5BP/V HFSZQ쌰]B5]5m={ko9782ΈmfU2yudeY;uY^Koks6X~;_U^k|ޝ;û{\؊ogJ[۬;\KyDܘrGY]x  Ggn.V7ӧ]GQE QcHP Qi15k PL!o ",X=7kxur &nڪfZ++cʜ=6M?eO{nǷfŷLl;fv-[#2t¾;bdS>N]*^"s=r4`AGꜣ:\vԞ2[JWӲ]?YT)}2]~^մ,xAsM2M9"8RZ>~շ&sO^<Ùϧ{ry{?۟[>u6cyK 6_T%">tS ك3bk @N7G|r'm-TlIW<M.i.<]œdH :Fjc`1#& Hw=B_3X5Z@R\gel&L[d 5⼫Œr}o-GK#ח^ӤԊhxtem2&`͍ 굖gP f5^<#v>2ԠK(:K+}IN"EkOiQleʯDŽ6\lF1U˗|YMƯqj*.#s4|Ϻt6],83w81.;A>hmoX5g'D$:Ayך[fM;wB Pts4_87[|M +PEu~$eV]Bwz;1Sa|`ם_\VxJ389re`Zphޟ`ݟ"W\z. t4(sqi~"eXc5"0q$5q~"A&ݱ*e_W/Iy܆?l%*4X8 Đ*7=h i.u60ե ^ߋc֭tdNjuwS\! j]kB)l5aBO7riׄ6rʩ@ׅ5":d4()54\85)aRi_|ѣ /jj%7)(j@cZ-5 S̼晳|O޽}v&l81tOvO/,k|I*XM*jxxʎZHkoL=ݶ'oVLY*yY-oK6b6>Mljf71Ɉ(H?6 @@@@@J%2Op^D.W_uQq۲'ݠ$eS+V ''3[j=*ř@t32mnߗLUޒ5@"VhlMkqK1]vm#Ziw},Gw͹훑djyO2PrXΙ1޳{~rnVaOS"Y\eZ5/vykC>GVت]Hi;3o6rٜ"{_77I~C`c#խ%BmQOs#>i/r>Mg-;að]f\e훑֫KzW<<@xPkO錷odl̯+K9$bI<M9n.TdʆZPyn{ŏvmx\,]P V~"쿴6[q .wrZM1uyne ={{.^¾j-YPLJVDnVnI}d>azO}LrsKbNe˧͇'~ls9A4bn2 j[}GM8Fz[7{k'Ru0>1vQc&m N3s#%,ckݓlY5]2 TZ|8|ӯnɜ8k:NAMfрG4]h΍9!f hk3coMR2) 5s7#Mf|o21f9I ,1oObp9TQYֺ+PCe D l&n#Q0c8CdgP֨⾮[7,|uٸV,N@-EvK'b+.V?cW5-_ x(Qk jo4Q+CÁ]4և\xp2>P =qFm75ʾ¦\v3 uXX0|\| s ́QNM[TQkq/lV&;["kyt3A6N6z\A_lͪdznBkZS_oY2P5]Dݿ+Ǘr1+FAib9 vǹe9 h.2uUE>Ugtnp$p[W4c@*eZQxy撍*sssRK±l7lFÏzٍǧҊlyf:V|wom1>u>fu2Ozcl{?yi=v]̣knQG\zی\̜z5m Ck? 91υ:hNR& X6 @@@J @@@@@@J2ۛe\ycHMr{`9TJixLUӽwj佁V]otid\֠7myZ໙osأZd`~eudQwʨ6P&5`0#<*yWVcyWT2#x73p ۏn(qvئ;.#j/6fnv??I-Ż;|"5e 4Ԉ˷|F׹ɛd*1Qu(ŎWޮUq8]׻>d{~}Ցh[s ձ[?')s2TªHЊUHT $ Eٳ6' M@7װ6OU2'R}z?W/tIі *5Mj9};,> #ȯͅn$eoW79vmx|::yGOi7crewEu>1[[sslxݱ:dqaLCcA|G![E!_DD×n@rdJSuyL[|7LD54⇓. QVW?Nu~reqlƘNl"ʪ֯KgdS,252kF{mWyeyPOr;7Jdgeg;3ZE$׎?5Qw!k-Fr9 v<,_>;UScqXLK%SK B̝;jЕ_U IϽn=Rp[ _?5YuҳA^;f*2>5a``ݸ gs2c,^d, 6ӑeh<&"=2mɣ<;ĨVЎa^>x7: K֞#`g  nf˷lu+̣AC< dP[)PAc(2gjd@O^c+JJ%$ (X2 HJ@ 쀀 )!j%g4 %VZ& .<(xH#y(Q3 ROGƦK|wNT HԉFeck*GhkJ@ٹܶj UP)yL(1hȪ7.j P PH S`]w@*@Tzn7F&VE,x*Mr,3o3#.Vg, ֶ$P9EM|ǛOT23EM4P&UZpۨvne`8S*d4 XM=?ᙝ;~۟{m+m$q52ew4ɏ#-A`:4̞lزU.q/ohTQ20@ue~l9c%z`Fjͭ7ђ}ßdʙrus*j|C9wiZxMZ7S(&Un{Ç6N-8) o#oB&Qն˅Q.>srfn_ī &V EG%Q8\VM OA`- @F6ɑMj寛yf|Kn -8x~It.Lq0[}<ɣr-7w>Z܀'k}l|+Q^^~nxGF/w;|;(#n1Ls^ yW[/Ys67EU ڢbLG(@H:&ɘnE+r6woLS*20tVх kމ,Z=6*Bu|[e(H `fxtq,J⭥UMG7,'Lȯ=ˁ ttWLNr-ީ,W*w<:L#SA*r["M{v75j{?P2dU^uї-%W v1(L)RSkyo.&9Kl;ݺ\/\t':3eFO7*ro>n ]p0OlFw9LENf4Ҿ@wܰϕ i& 7njoWIK/6d*]Uej@[7>f^T U"z+嘃 0:6̸ČW4g$ڐ)B5ދ.RWQyfxVe%qC':q0mÍ$& % FAMeL24eX; '[IqZ@@ H @pM$}, ()J@!ZɃ 6Ri ($ H!O?W DgoǻOr;Q׺a;G#6ddknHWpbʙ**ࢶ=YN{jW>ݱ.@s6=jxi~YF X05,Z9B&y  X,\P]+sSS#۬uٰ m@ÛS[P+rf.+ϺɜZ(*k@<Q8ov XNx5!g.3"@H(H?6yWfԚK @@@JCxU1Vh} ˏoMZmL'-[gP:HH7jX^F=ZΘ.UlsBs~nioK/݇n0morq\61`gݾn[9S'-ZL϶29ik)Hmt">.JVtmk-(ܧ"֕H0Pt43|6>z^4 s >?66` oRiţAKSީ$Qه3`Rb= Iqu˴~ =+C2˨gEɬawtU5`R-O;>G{nݑ}\91:+媲.f;XǺ}Ub\}U+`tW\-ǐu-6gjYZ5 :&Ml[]uDy~x\p/;lw۵8a;FEɈ5\KnpGv;b# w2|UfKw9sqB0P9(MIPu`og*Ǒ-3/fQ Z|ZܻL86ꀪWQ\[iv?B<ӶlLl kĪK<4ujh*bPcfYU @@@@ۃ(Jj\﹭Ӕ:Zdh:J.GPHl= jedlD7c VǪr廗NU bhG(n#UGH2 O۴ψ:':#턲zXOb(kff[rBju}|-^,z/_s嘲lیYh"V[n6GgH<̯8iAn d 2hYZ,>kig:9$[>hC:T#k;;v1mƥTbHm]yyyz陝W^4-Ɣyjtښx{mIԓ=b1̀mT&q"U2uG1;v]|͗z9RT lF[~uwhI4H;.EɕZШKlW_fq¹Wf}`LlUC cdo̭5.L'h† bkOjS|8T6P g6:"]]`eu [@k@@@HP&A0`HU9B  bM$XVP XIZB3[9"&Q`:9~N#Μk1PiP>mm?4{}gv,ʙqcl-w2K$WcQ^n5Pc V-|ŠNu荝58Jm45yx@PxF7&!N":ry꾦_1%\x5 sjLn\H ``}>Lˇ*5WM[3oꐶ[ V:@ /Zo1Q(=ThH'U|7'-jfɋ[d2S&<}D,*2rU<hcj_R ;b\x9YWsDF.ϟz (t5{1>d6ꊡ5^~gIo` $ B4PZ;c%fRGܖϚ]jq9YKK)<f>@qj|m/,uV.VpjUFÃ+J%\*ؔQu1fD?u͂ۉ<k^Yb9r )%9fskfۻcȦJ>]flѬMN t$in+T>Ҏ)9 @@@@@@@@@@@@@@J6 q $ BX6&1Ap `uxdvɛ#egkعfo#|%jMlV& H=7cbH8յnZˏy.ӧ_FTjWYTdTTRC(߱ؾ È+"Ici4`y{㳲Ayw<ƧS9 J;Irۆ\h&o"#=jS;r~>Eg,5k̯'$&eP ?Yֲۑꮘirm,OiNVxVYAF<>D=nF uԱQm彭~U߾>8FĥKqənOsyȚBPݨ@v#,6|Ilp,W$-؂PUI5ִ>b7ް_'=jHmEimdWFvv35+i-*D33kgWQF-Ğ?+oxVn [wdpptꦌMF vmbmLS/*p*~~_LX[Xsۨ1:Zj)w0u_/^Y>FFȡV㜂6 @@@@@@@@@@J(U7) {n܍66'+"VCtߖ7fKvsNe\[`Q0ozfycT~HمGcZRnfM?^X]N< C_,x*ӄrNa @@@@@@@@@@@@6;maɹ>-!ⰲd Vȿu雺.m % QG KV }eHi#ܛ!+Ӵ NVmWj,°|HZIɱii]F=EB/k/4w}jmC2*8~WM\m&/kF %m91#˷,_#>Zɜ>Lqgʚm[(9Y wy2\yHdQj[w5:2ˍR<UMR D=C[hY?%n'Z $ B`tmGMuoeRā^ 7Q[~ۏ6N<{B1K^fٲ5^iwnXqË>[Ǚ@Or3ڎ)İfWXBOVP9\ׯa\!B4snE@4h90${y!rSJOZeZ+KotpvN6J7vÍZRUo,D6 @@@@@J J @@@@@@@J  orZ1m<*xtu>\,qdWdn~5οήy.:MjI-)j2!mC)@m7$WC1\$P % F,ϋ=RҜ@!3e&\\aNm6l."3΁Azvݑ&%Ni̒Ɵ >pOUEWZCJFO\ xala+]x@ՙEExOg᜔lJ%:w2Mu@U܃G*5W/4f[M3ƌY_ WSPFNjQR**4:hm{iKd J@yO=ŌLPK=# aŠ) 9Oír\^6&6$c1B.=xy2(7܌Ji8 YB $ B@$ B %p5Dvc ւz*֢ˣHA F͓"3PMBn<%Pn[-2k9odN͕vaoPo#qI{c戦"@@@@߷cڰ 3n0fœ\DjBhlLj6veƸ ʕQ~En'׹7;'k\]**qwnf3_wx﷗7UljM[Ƿ_.Eaw//Mɮsﶷ}2\)|QtW{U͏){wLz1wݫim͙.K oyNg%/l_`v>qnݗ;bσ2U|1N[}\lPm\ҋ5;}L{lmeˋ*&{)q\幮${o&li.7Sʅխ {9I{ݲg홏`'t1)fd bS%16WM!(, @H @@@@@@@@J(07RIѽ546= ji1,u'AZk¦Q7(C!H4%|ex2h^:(V0SjP{i%:Y;wvоU`\+<]116U*U[/]cATZS(cw4%.2Zq5N1_2{< R4d2@"4U.[$!j$01m`b$VCa(9&63۬/m9_m $xK?ql+Β ʁxiOd ATyȩxy'qJJ$ @@@@@@@@@J3ŕ8Ɍe5Gaen1!_\Z{|Q9@q\͌ĹGR墖־Euީѫ{ܶS>]*ceOyyB_z4şqdRdIHbO8;L-cMiNF^jv<`MJ;Ǩ(5SޏGn1ŻD 9nz^{n7hW ҫ@ e 3[&bƤ$4Zs@֚ģ͗l*O#6MhU}7_}1ϑ&;2)[_ErVyq|d?6(@H(H @J(- d%&Lvw)R,7מX&;K f٬zolNνɀ)T(1ϐղf6,iOfyx6&w& d=2N>fmv%[.<+ 2]o,^^Rg .rBAzyf6pq{z,֏waN_NK']J>{ONVx_ y79{>\c*6!e(Y^7ϯVUh<ۆ궊,QNLFUZk2o>[6e!`1erIsm[.fyv+{ۥ..4} e_"c[xyww3nvngRi@ 9rc*t95̄ + Ss> >h*R[s3|O6 bdU xQd b`m)Z_ueaZ{$6eFī EG>VX\D:8Xt&GȠZ SˏߑV4\tM xJ3ÓCti-RA J;2 ` IJ• ]Cd@"F3j1@e -oѓ{Y-զǕ׈"{5m8MAM2-!;jY -x>&y-a2(@@@J=m6m뎗a`n vn\* aV-ZTskI˓%,'fe6ެ[ğ E gn`JǏjq;X]| ~[&poYl RӇSi&maj4H2USA_!`8 Q3Dd"ɕUqA6ռI7]  ,9fB&$ iN6 @J(H IP $ B@ %i+ 0$( ]jNMxr\a +nCo5yonǺL;pι Yo0F"VեiY>㧳wYTEz])+/3L^>϶>׻Bc GQ2:Ak"~~om_dV8PdvaNSNa_C3zV`CjVr[ffA# VlMxp yo~X8"kQ}꬧(X^ߒ+zKw]~KcLeegsU0.T>5fF؀,̓De bD@@H(ً)M*hxeiXr:JtpdJi4d(F(̜eoxP0 SJ~dơn5p=Aji(jH-5*+M=ө͑Z(U3b6"H SP|/gUvZACBGt*546:ξJS@|KFVEUR_il1bIJ!0@`+@{ -aVSBt2X}C`4 (22ᚧ8NJ(@@@@J3Ǒ 79PFQv9Q($*hi7<`&R]E(4^[O_:y;h:u =K꜠瀔 % @֐GKgd\ob Bµ4%UY|ݮp̸9HКli_Pb̿^,@0$(Q$ xׄy=3('5 +B_Z[:l,fd@tAuҠxM&mLH\ZA)Qia[cwa%J{1TTZWIڀP :! J(H(@@@@@@@@H(@H(@@@@@HL Ah`zk&v^i*#) %F͎Ym<]~a8nƌ|k{N|GrvWj=c^o暗`gc,$)$_ =1(&@yƟ aA"0+H;}bÕ2Z0kGmRiX2o(ox5tM`M&lȐH @ $ B@A#Q(ǸB5 O vNMIc@*GfLmBB8h8!Z>5e;~vVCioRh@y; 싶4h<%x|2[o7C>N$f%kwLG>.BwтOwv f};mvf l\ߑ:wr93uKjq'iuH1dak1h*@oQ6U !^J/y`pх-x̪eWt? X- JVP "Q8 I<$*unCij 0A1(#j[%<>3Ud $ BP%`>7WlY2^6,i6<í ,:g/Mhݮ534c J(4 IQnqs\q]m+Okېv{wˑU,זgsn93fCsIS\Hͮë説f-]T|'"n"STRt7(5gС*Aoɸq sZ*t%y;m#t LJ ҍ W\rW92ĒO 95j[tϲw ߨʸʪ*q 4GLhEVV95oG- ޷2LfS0+274&RdPKR\CP=cn%HҴ:wJ9k,הTȨt( }Y.@(H ?* F j`b`c Z, !J{(*6*K3 0u NfS#D`d%~s{Z(8wJ ( *+ c(H ۷Z%j {?lm[Roӱwڣ]ndչ@ʾg[嘼 Gvn]÷dc)SV^fkgXJc]E:%QtNL(mb媭+Rž?f2-%E흿rjN8B wnΖɇij< md -jx >rθqa|c4pNֳ6C+8SJ E%@$@(@@:!(H(H J(H HAi(R$ X>gcϽɓb\{Uċcr6V+[擼30m߮ˏ#6 5rpwpÍFkCSJSk{D՚92)X`c V,~nԳk5<=`(Ȭd BAreSmgh"@H(@@@@@@@@@@HYB^˹e\f7d7PC:<:UJ*PE~w7$IDW iC@`PeҚJ 4Q2)Z74 [(i.'ӟnqT Q(-Jh(= % kRC2y,PxЋXVoݸ~ى-;s:jZyʼݶw۱ x5~?Mz#ri<7.K*,{o|u鍨US[t* '-<4 f11WW ɚF"iA?Et ie@ % :!(@H J(H(@@@@@@@@@ Z@ `JT (Hxҭv` n$RTzycwy15At @$((@V̍kpАuKdAHH D yxʎ]'>\Rs@$ B@$ B@ % l# k J1:H1 A 0)4<%1a‘ 4b4t )HwmUC&*kyO/fYiX|L X`+&$` H`|Ί *VڷmM %GDV % P(+ e}n33"c(䋩ZPޘ"L+e$ m' k"U5fF(pٻ~GFpCw_]E1W@K*7*PxlJ |bVA#4ţ&SV!(H2#kF Zɨ7؝r!*C)A n+mfAٸs}ObJo}>7ݧ3mKN$zʼnI7۬9G!ؒ &^ 3`怔uBPڵ=, iQ~1B G.LLZ*Z3~22 Z! q@!\D5F&P5>`8KF(H(@@@@J, J?:!(@@@H(H m\NdQZ?U:횣 dD [,{.DAnV|!l)Gk@eS9?_>G{yN~=%иE7yk> Kv}EsK7,ϧ:gT I% +H i =, | 75 4&teRHV 5{el;Vs&'ɋ*;C=zj{Hc6aZ[Ƶ#SAoyym^_T`A6n:d` 6 L` @M?D>k}rlۜeHd.޶b]~-5d}iJN %H$(@@@@@Z駺$:! @@@J J @@J(@@@@@@@@@@@@@@@@, wq8N[hoKgm!͔1[W* *d =V'#2fv|31,Eh B@0$- NpE Qe=D(İnt\nj ٦5OdSɄmB0(cO EHd왳l߹Ǒq]CaOQWʳ<8T"d)H(@@@@@0w|2;|0ءiZgu͹LCeθEY 姄djY^_g~`ɉFA H) ɷACI[@QZi6.:PׄPFtN"iQKAb sdƒZ82ArZB@<%b6tV>UW8tC*U陰MyiR.UMJ'#6%luQΧ_K0 H kw;aO[ f,/WgPCiuEȡ6: @@J?6(@@@@@@@@@BBQӃ>p[OιN뷃8 Nk^u_ǖ\:2d@V`+ Nu Khh`Q@u"V&Y*uǕyW$8_%#k@}Q eYTV\SsrB<`\ MFS|#+~D74i}:3Rjs(P)6ZRUكl;MO]͓?Z?7|)P % B rю٩GE)؄ c@*}ң(5@ [e1 ۇ"c7e[O4 b#͈@`bteȤ Tփ5Q}r rPM9<Û-ڮ @Iv,jQ\xT>_*9bXHQӥms7Ŗp}jf^6+7Fӭ+ܖJ(H3VrLle }ѣ78[BQZSC跃|_ѓ2*'5tߠf8lǐ%k%}@5҄pǞFoMhˉV=007 E{km͑PkJkM||#FmK cG-DX%L H(A6 @@J X-`X!i:{ͿQ+bEEQ_my_4QºV05F2 .Z5 X0`ZH"5nH5J0Չ& H62YrQ RNZ~X='aljOw6 A_iхp>'#+-R'*oNA@MjGkĻMjIҴ'ۮg`w ! ]XJכ7n; & * oMYΏ/7od$!>Ǩ BQ`)@[HȬIzAoMPk-훔=m'/H78B 1 $ @1[M$``ÖQIF2(Ȣ4F p#Df75u♵\YX Td0 % Pgx%&jG @ $Q3jQvݷ+Kh S_l.Y5Ii X -L nf̘8ƌ3HPNBrT1ӈ?| %2҃۬jP@ےANޙZPnQ:bqӄ Pk]Oo"k@OZ11|`?fyBH2Ƈ dI?"р@"$6(@@H Xek\B{D׶#}cf+1U*nd#eILuK26Th)PO#\@@4 Rk@$ XАF6.E|0a=B k_A [S \\hM5%,8Ђ$A7+@ű |AKU [*:qVUu7=uUCov)ؒ2e @4 EIG O;<((MjA(@J, Wo;6: ѱZekz~<iN0`P`fM%F&Eb Mj*)Tb4XA Ё)aIFh_|"5m% 0&iBmLUo흳'r` 20P>Br$L @J @@@@J(@HֺJ>]e;v6rs-B\^eƪni߾˼ISpq32t͉zb>>kZ_/3I(ۻ܎q$O/;^üGdBn7-́ JׄcmH0 CP [Y [*Y`IKnOQne|j7lYoEKӌoӸ?wyf{o¹@+. Zq5`VΣJW_߆J9C:sӈFh@S |t4H?6 @@@@@@@@@@@@@@@@@@@J(@@@@@H`zW"76D,Bye_+X5J 9<ʈ"X5$R jPPP`)H'٤t HJ7љUTV|kXYZiQiЍwvT,4 xT-ԓJxج+SN$oRgU4u)@uxɃnMW)ɘf%O3r-bɟE%`MNm61w$qZzFks[Ffھn \B4nM/]WMHP$ FB2 ܾ7(e P4@JaR94!rhWe )[3*= r6rP$ B@ % =)[ ֔q B@ % FJMDAуdP)A)ţha*# ycG$q2U1VԨ[S+82\`DddU h+UXbGܝw9,ZB N9JwLu Ɂ J">o)s`m  p *F Ɛ(Bcm5d H @Ȑȹn&7xkIF@QKY436eMɃԩ%(R5c @@@@@@@@@@@@6 @@@@@J (@@@@@͏Kqϐ>ީ 9z'mG!ZaZ$T'@`HS9\o*•?uQ+XP(Rt% Q(Ο\T4? * E)MkAU@tG (ٛ akq%AA'Ry2 ͏3ycB -BMhmXE fK3* j?g3FGs}Wϔ1f>k7&pT J(H=6.pȹa[O2]u]gвX I@`S KTeM)( Fju"-k]cFȫM%n @@H @@@@@H(@Hwu}`3rc,.ܵVa_LY,Ss֧^nofrVOMh 'A 1}2u_m$эڸ)͐5ࢃ+Y4ig-A P`*L 5}3G֋Q.Yr536 ڢL.6ơ5jlhnmom_45(t %:&Dod  @XQP(+P&B6(@@H(@@ qHe^$Ѕ.H rs7. 5#Oxj9RH*Ymmie* (DyJy`` Cmf AN^ow09m4@ʐ.CnFM*KTj|dQFlV)(j"FQI(V2+jQ}iQi4:@Uȩ[FDP_^Bk_۱b\*FўgKkN=󋏝_v>hzx B@ %oQtA Q ( HrcUS\jRdISiU$]M\k@8p@QG xAN>2ny51b'0 % @ $ BP$ B@VtH$(d`-N A£Nn$ )iH @`Xe[ UZeщ>A$iA @@@`$(@H?6 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J Gqِmw.L>%meEA0e¨R羽W֓W88Fjh9X,dY˙ @ k )4`H7)Otbrm#SwLQч>0nv{,oq<\TstOݭ9^J @J2EzXvF4e̩`f#Z"ES`hx׿߾LŜgcF^Y$&W>5o6Ϸq6(q(QD&%3@@ݜՍN@Qу] Ga9(@H J2(@0cH|to*hiO4 [ÌrfFG*rV7uWB=7tl(g1 % I6 J e % P2%#5DJ=U9r.:U'iu%J:%utiC'sVhrIP{gE FA ej{+O\ ~G JH;%vB)AN>|):Tj xd@m!Y " ah `uwMc-ʊGRB.Vemy_T%_Vaht!mr-%"B eSV{bq@nÄԃNEV\Ә@@@@J @@@@@@@@@J-%"0O:ȍ3X4?z%a2b24ӄaēS9@@߶߲k"tF G#u%IVC*- @IU{g6Ue CY,ifxH(2ًFԚ:qb`*Am*kl`4r4:xΫL@@@@@J(ظ{ :0)nLFk62%:QjH1CA2(Փnfؘq*C )#vl {$FSV @:WLʹfBPUږMҞ: @@@._?:"@H6KRu YB27`>?|=MY:iBδ{_C{<:˾Q3b8\jUM < q`n1ΫZ"R,f^|d5-f+I´ ` %I{ 29kI`cI)]zxYu@SKxˁ1,hk"dh ]+ LJ9O&+%cnʅ<fwnU_KzIV7 eMiI?~k`h*Tqk6l UjI%Aӏح8v9wXBY|[9MniK@-;]Ds[ktZ9ɩlM4tFbV=ufn ʯ_R2QƂɅra @@@@@J E8@3qzuRt `=D `R%H A(@0AA!u J3vc͉+d4̼c?,xW @@@@J J)V (\1o8L{\{rӓ'MW_3[&L :0CkUv+p[:0)JzLUĬ[O/s,vw}vm`9?M[-k?Nw z!#S4m-}{9>=Ůchml!6%ˎ*c]LNni P P dBit֣ډnbMeJ`J@@@_t^0+"Z q0U5lvV\رXWĤ;$$'ӵf| ((cQ i(FJFLkL$͓[bI-e%g! um3X::#^G [3G.v1Z'0ٓnS~m+R+-[M]-v>*xyb͜Ϻtɕٍ_`'E PI:L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J46ևߥ U草PfM`^<`C@MN2p@o+5@5/H1&+LQ_t,Qh$=*ZEBiP$^~ϴWLm8*B % IBh E|eu<"q $6 W(1%|} a$N ( Z@eİ^5aص/6t%X{Љ`@m xk}_vrB1j*3M+4M `1К']<$ Ohe+q6n6iőKt6(4G[4y=QLJ("O:|]H1 dμ;@daVKO3 JMwi ɐ2SV,QCvq%\P@umUgj/2 #JޣXA Nx.wdUU#a:5[zʯ0e/{1s4ƫ6,E;ƀ]jS[_RK̘(@ۇ!VMJ=|jn#YkʠPV9q66*j)ih}V𬢉C+p\r1AJ@BN 2 aKSeƪ5 W1+2G4(@J(@@@J(4:MNnuX1<4:f!Ri(pxƅ`ft+ 4Ba] +Hd @@UPH4O0ebNo1nYBԐM9ƞUؿ +eͻۜ_#x \ H6c@YFy$ ZrVnz`h$6@-`uvͷ8G *B4*hfմCi)u. 8v&l,c'neUT_=7r*ӎˇVnQ4ZB1$VehSy*cmmW+"sMk*:8Bku<37쮭 ,,[p2EEϑ|uNO/cmV).b)r-LŲV]>\ )f5Rbj'/W|Ϩ}ى>Ÿ١W6\E39yoZ|v}qnĜۜ|AɶV#|[=6pA*[Qn.dGK_}~q;wnoph<_' vN"-f/;d_3`wZzvw6GmGʫ8!ڍN[[m?lI]1PQ]ӛWey&BPA FOk$ P $ P oC, 񝑘3BrҵL4H `A P3X2"Q!2= J֒ ^Aq@< `[h(.&5:PllvlƦ5`9nsd^ 5d$6 @@@@@@@@@@@@@@@@@Q(`wv*WJotk2.V8n@ZyIϔ`*hkkh`6GTdXS\+O<qWmLx^*RKr-i|LiĒ[[yfY7OzNަј7SW࢚ KzI7s|AY2@8^k_W`v81.'ӫ*jקKzxmO5]3v#OMDnGe(4-yC/ ܌kb%[ ہ5p#U|Y6؅2#]JnNN>,n9Fa2T)7+[2~L_J,y)m`)^jV7;lC)mjE6Ee|z-WT0_mB?ͬ s~LUj P % B@ % BJH5`znP}vQL$ҺxSEZiH2ZI:ҟ4tx{i(P S:H3PMA%Pi5%Pi VA Jq@> nG7S6.{~ɏf .'\yyk29ǾQߵ;ݿtlQ"Iur6(2mW( νb6V>Mf́!6o*pR{ YsԪZ-=moTbZEKxB@4@ZiX21DЃm'2`$ P2a8+\5([k_嚗e]Ak(OL zUTIapXAS:zfl1:6FBrl`i@?zӟOm9˙2͏%Q!&ߧu{'$Z2͉ݳdUwVs^nu,_fgXg&*MrăE qRms]y`I86ӷ"sL[&|Xј#*1۶W͓]L"H @J @@@@@@@@@@@@@@@@@@@@@@@@@@J K Qj)Jj)u}|D\@5`[`dJTR 9[VX1eV^VxtsC%2"<* `DȴjZ6dIAּ?lY4˔%4Ӊy/skմgg),H (6(` {,8-"c[}xNTX0cN |mM=fhc2|eFI;L `5~ٚ0^EՎ `/@WxS٧"ÌMMis5. j+8za-L(XTW_m5>Urej1)kn5.f-c⹰aPj \|Ì"/Feyr @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J((03Qm ]e=ݢα +-i@lfBSO ȊO טP A" 5={'> cɟlnjz8a/niIj<w}-r6F (J/ʋX @J(H H VݻpOw}Ӳ-*?49Y0cǜ[OROu$9f-t  @Q` X)f@ `IFk.Y=i k4 dܠ묂@֜4E1԰ԏ &gFX X #7µrrqJҜԻ @H @@@@@@@@@@@@@6RQ@` zhog ۭFy@MQ׽}6q;ΜZzڊaQnYG{=-%:Z=UTޙǬϖJ_yjlGM<;Uc5< ƴ}v^NB1c%ǔ~gf6mcr/FVf2J2^ Iq3MuO)w ,{˷vM{|X%OᙷBBjxp9 ` $ P % B t`55nQߞGJ]Q. ECY\-r=Asb\jiQZaɏ;0SmW&r_(%ko}Z P % B X`}vA]ܣ~!?2og+^pljNϫc^OaI(ђ(k nccQpa<8@j IQK]50}ڎ{ >ɟao5j"km&k.[% 4|jG˥W@45~ H0c쁈aB`Qq p?2h.^ux@̫B=:5kVY(  TZb @% @6 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J @@J @@@@@@J(@` ZJOl>kÏ۵ɓ.M^,tcwWyǯlɦ>Hsq#[=F#n˸v|;wy\9M|aoS}7>yr 1H|7 mF!) j8?7\[PY yVO*Z.v'R,};US7wju6aUdLmnU^O*96n֌mQzlr~eNW<o,4\IҚ燎4v TB~jIr^|7 ><4GсH @ $ B@$ B@$ BPD 6ݼF|A[M א=jro';MNY2D,J=ڟ1>'4b+6ryyLclpýۻ6Ym ӑy*wsQFncS @ %*4 :;Lx6ʘ Z2$t/R˛,^o AUN&zG2ѭ:LnЬ Kif'S01%`+X3-GHׄ荘w CQaEP|קL]K۷W6f+Kt#OOfPmQ73Vm)O'96sQZ>FKFJ,ƫ6M(†A-[ oKiXܮّLYr F\HSåVk2K?}v<|[bˍ׭g|xӛyz73:mr3?m}<>mR)~^Tgkln| {@2*?Ȩ)!DzGhLȐ- H$ @@@H(H V}w>a[p HŠ[a\~uozNb˅ž:숻^G9cCk0 oE]哷<|.MMV `&"+(0Odǿ۟LܕT9* &q(@@@@@@@@H @J @@@J(`dP8ܙRq K~ \hM=\fjɺ{#UW+-@$W\cF5 Jf:\)@xa6 ƞ'_MC~;;]WiʘYAGw*/6Fcߜ1 HV_t/%V eeˑ jD ~sI ƚ@X\ZV(˓khz6R晴` 5*M|UCs[_=qgnd5 p.P\}7N|y۝NgtD%{V@@:! J @@@@@J @@@J @J @@J J P&;{|P񾔨ޫB:î|ơUɠ)ʿvsό*&yqF1<.t̴ʶʣ 8R6⁆El*j u$um e!W' ]e"9z#k@ˑ*0Vۏ0#=cFi `J@@% Z@ P % P` J` H P % P% P % P`e@ @R  @@@@@@إi`mǻtNV_ei@rWSu֕d`ab1Տ3n8HKhriMEsxY5ZM3rKs=Ò۾Omr&AC0 n?qoAs[Eno,$$LȆQ um3éQ£n/q+A jiᬃL: @@@@J @@@@H(@@@@@@J(@@H(@@J(` }7 9SoR;WLۼn-TU^Q9>3=fqZAƵ?zn{cq|鸫(EFue,חoOo v*5 ISB5x(񭿗QVVnXVS^c]iGVmݺ6@QHE^UPfeK[-4bI7$jWў|.&-6dy1WQQ[>)<10 J@@@ @@@% H` ) )H @ @, R$ @@@@@@@@@@H(@@H , C@  @R Zڐʀ}MJ:w8S )2VkTPQ]2tRʨ퓁o7',k=]^6{I;hdEX@=#b:a]U“4si@@@@@@@@@@@oɵچard@ΕOWk)=Ծ_9ؾ"h" 4U֣!2`:@@@@@@@H(H(@@@@@@ fYG)vF$uW@)I; X7.FB•Ǒᆤ ۗjFdɎ `_J.MVڗ21wr>eeؓSQ>K\<)@h)}\Zdc8϶>5]Mz(^fQϻ}.lYVh $, H$ XH @ )H @R J@:R`  Hi@@@@@@@@@@@@@@@@H H @, @@@@@@@@@@@@@@% H9a)̾?Zh(}ѿzͷLS:)(!S3y]s8q |}tNmzϼg.T CEE6~%DV.`CR, @@$ v˷UYU]Xg3nr6bfEl`uoӿfdI.iB52I@$(@H(@@  J(@@@@@@@@@@@@, 2 NaĀ}A^_:(S)ĭ[M 4bX2̈ZS,&Sbӛ,OM K@X ,@᩠[]8B5U-jkC>0&53 @@(H H X HDD @@@@@$ H`H`H Q@@ @R` _tN2 i )@, VY_ J5&܋J@2o] {^p>DldV־5hB:@@R @,  @@@HnUc6<&2⮁HIJۻs%UTq4h52p%=cn2T}Nr&FZԨ,_og{dŅʦe |@Y(ׅZ,(+f8salNQЏxV0 2ӍOkqZ ` H( @@@J (`J@$ @ R$ @R`H @,`] H@$ ` ZP @@J(" ju0$ ;! J-`bd @V,H`)@$J@$ YBA`H, X&Q$$J2VFGCjx諷gyA | ?39.M2r EWOض"ٳ-^*Gi˦xsh%i@`$ @@@@@J.@ @@@@J `J@, H 0, @J @, XR H @@-% H  e@ X񁌁(HI @ $P(, D4e@R0$2 )H, `HP % +%(]CN3|}mI\M(}ct#lJޠSe~_f,o ,H21$ID(H,  D%@.6щSij9pt",@P) @@@@J @@@@, H @,R@ @e@+H )D, J`J@(IHHALH YB ) Q) RQ( H B;V@ I )H @R,i`dX @@@@ +!$ @ )I H ) HQ $$ @VQ YFk]qAA5;g$qhL5|d@$RQ )H@x) @/H@ JDZRA YB@I` % Dl1X` H`) HE H`5R 8i@H,H@k@@@@@(@$P- @=,4I(- )(RAJ1@J- 5)l H ` (`H `^0'M ^0' ZJ$ C@$B$ [( (X d)Qt)A%$(@  )2 (0$ H @ - bt:@W, X(5S()@!0$H @RP, H PX(` +X@@@@@@@@JX@H $ @@@@)@`8@@@, @R`)H JHe )H @ P"A YB- )X`IPI @V )` H @@he0!S0@V@  8@@AQ(`? Il RQ0-}D)H((iRPH&&@ XQ( (R< H @ *`H S(V,I-`+(iDRX2iB@)% )R$ Bd(2 )H@kX0ZJm$(@@R)(@@) J- H P- X @R J@R HRRV!-% c )(H, H @@@@@$ J`) Q@ )QmX cHk J$`)H%d gtM )H@QHQ M cx,i cRKHCCF0J'4$(@R@% ] YB!:i2 ) (0K5MdR +_H$ Z~%kYB PHjd @k%@(PB JH, % -0% Z@@ ( `*%$ CZxa@V-e $0 H X`X V4 H  @R0%<`HR@]%`)"Um`J@\wM X1+H @Rt2? Kc `[HR H q(&pi Ye )R@)2 X@-kX I" )H2FKp:^1[O|qVPx3;g@>QR)I,> @@6 ONTku(mݓ iI|%2 H @΀|(|d( Z@ ewF$3@H>2660&kQ< ɣ{%|RWY; L*@{$쁷nɣɮ;qyND-A/#K`w5FF;eMt'pdM #xl0(`=g#:ysbTЊ<7tMp۽1Cݪ±רͲJx tk5”_Ui:IY^*W,If015޴` B| d OQB(8J E`,n i deX@YB H dM8~B5Q >06&c횐oDm?7M SY/A8Lcۜ ?@ޜǭt:IF!44g9x&dՄ`d8@@@QA,8J271- 1$H, B`U#`F  < Ԛ6LE|hk5*6N *րFP;_=qg֫>,2b\VYSl*&=KƾSoEǂ~~1 {gf Ϡ4#Iu-iE?nиU͢IYۿd!FQ5Vy̘odgJۮke<¿fun򩤞J:@Ou'Ij1_~o3b8 (Pj:n9utPoU|$vKJ2 d&QȺSIUF& Z@`G0O("Mc(yf dH @ؘ/4)YdсR F_ȴ4ǭELyI5@g@H5>ǖfd])_OZqS&QZŃ6{UnuFg3Ky\Q DQd%1z3#0G k/i!#9/cuaQJ|\$0>dIm=7T{h6W >/Aj+rXk$ꮆÌ*xFBx 5[ؒޱ5#f|P2>ٮݸU. R|',V=CӬGQ>3;%#r22HrUPM2R˂+u85Γe`ršzc4~`ٶĹ&FJRokϵ&@&{uhVoZv@M}Mf r_rv]zn1ZևDzvy=ǥMdǢ_LXrxZ qvᤲ}FekUm&lǔd$fr>tG썧a~+6Ac}Y}i. U23 C{Pi/h;Ţsjf=+e`T dnԎ?OZ7 44FkjnAK(?I Z 0j˶0ΕQ`%WNÞ 2ƷQ9 RfEpYnMڊ3WŵcYJ9n_5ӌc&i"Aρ/<#֫`p1>!wQ1;ld΁LzbA 8YqPGh5 uu!eZ|iFȧKE&uVjr،_ #c;G'Z/M,q5Y6Rh)H%0<*Ϡ\jLFc/SyX3.'q}`.j+qރd_KҌ^*f}j(Xytԃ+[#M ٫F4TSo z] ǦɂOQ#/hjk蟎zQ*gY h\3}n#@kfay&,ɣ)Q>$u55[EYBMkZ Ƀ)BƓi'tm<4]f a2+& bvjx"'Q,+& ' ~0b|mI%j >6QAک[OEiu!|@0Fۣq%(Ƀ9BG& +_FOa!Lkaecޡ|xׄ FEn 0`vτCE)l ). (@` hLcD _fM$d'$ }"&A)Z}R@h`-0$>$ TP-@Şȥ`H  Q E|$*RBˈXcN0,F1.0BL(H`8BR0e(@ŀci<$ .C/N0^` pbq$:f0fN2AA { KG0K% A)>$ Z%:X L(R` L?l`1. h )Hh,0IF)Xb\EK X )X @@$ XV- IXccPȫa@@@@@@@@@@@@@@@@@>$ o N`mM#Z$TqP5a" M+@@@@@@@@@@06%izfL"QA4 H @@MfU P+e:f0dF @@ X,  X@q I~R>$ H."`ʒCQ P$Ȥ H!0!"׌ S1@¡B.#!1-\ `Z=.!Pc(, KD,`iID `'N0[`@X @V XjdP  X` H @@@@@@`+X`B+ X#.L~R$R>$ (AJ-@ 0$,Zi&"$  gTc"Z!*#F&5ZJ2D YdRAIzf\F`SIE +X V, R` bLJ0YE`H X  XĒ$Y >$ Hq-A%B@!YX== Od)Ol IA Z}, @P@iAR1X$:q`Q0B@%`p( ZR,`H6$ֲ*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W Td 2` X ) X` J@@@@@@@@@@@@@@@@@@@@@@@$ @@Ľ$&A*?>$ e,1~zb0QF @% D0,- -%,`8i!BxN0:q#8aB` H @@V %dV0- (`-0-\E 8J`+@@@@@@@@1rd ȩ>$ iP,)#[i%` X`+X5a@4:ԍ1.cDȥ`Hl%  @$`+X V.+ EH$>$ .S2@ `M8A:xFX{ c"-B., dRA!\Jk@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i -T! XT>$ `epSP{`B)" qo2(2 KD l@lT{`c"3DFI&EH)06A*,R O )B.ԍ/E`H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`+Yc  >$ `[eB R P XIӌ.0KL(4PF^`/1yȩ&ʋdLN0[`X [DH` X0`’ dR>$ `f&` `T0BHL azqd`K` 10dQ` +X_ 0B0J >$ l2 X 0,- X%@F ӌ `>d @RP@Z B@@lO3% ^hhh -VA>"Q H@H>` CH @@@V` )H @R+` >`  )H @@@@@@@@@@@@@@@@@@@@@@R )H @@@@@@@@@@@@@@@@@@@@@R )H @R H @R> )H @R )H @R )H @$ )H @R )H @R- )H )H @@@@@@@@@@R )H @R )H @R )H X +X )H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Rxplanet-1.3.0/xplanet/images/README0000644000175000017500000000275010411420230013676 00000000000000The file earth.jpg is from http://visibleearth.nasa.gov/cgi-bin/viewrecord?11612 The file night.jpg is a rescaled version of http://visibleearth.nasa.gov/cgi-bin/viewrecord?5826 These images are not copyrighted. From http://visibleearth.nasa.gov/help.html: Unless otherwise noted, all images and animations made available through Visible Earth are generally not copyrighted. You may use NASA imagery, video and audio material for educational or informational purposes, including photo collections, textbooks, public exhibits, and Internet web pages. This general permission does not include the NASA insignia logo (the blue "meatball" insignia). The file hubble.png was cropped and scaled from http://spaceflight.nasa.gov/gallery/images/shuttle/sts-103/lores/s103e5031.jpg The file iss.png was cropped and scaled from http://spaceflight.nasa.gov/gallery/images/shuttle/sts-104/lores/s104e5027.jpg The file shuttle.png was cropped and scaled from http://spaceflight.nasa.gov/gallery/images/shuttle/sts-105/lores/iss002e9729.jpg Guidelines regarding use of these images (pretty much the same as for the Visible Earth images) can be found on http://www.jsc.nasa.gov/policies.html. The file smile.png is converted from smile.gif, distributed with the tik Instant Messenger application (http://tik.sourceforge.net). The files sublunar.png and subsolar.png were contributed by Barthel aus Pennswald . The file sun.jpg is a 1024x512 file with uniform RGB values of (255,255,166). xplanet-1.3.0/xplanet/images/sublunar.png0000644000175000017500000000056310411344513015370 00000000000000PNG  IHDRrP6gAMA abKGD pHYs  d_tIME  4zIDATx0 EH4."pTf8QKPvAfYaKS%[t/眆TD4)% !p?*bfu]\-!"FƘ^m[-;1sPd¦ c-#PxV)z1Fsv+,Ky^EQp74MkRU9&8k4 97aMڶ3᱿[c#,7)wIENDB`xplanet-1.3.0/xplanet/images/shuttle.png0000644000175000017500000000501710411344513015224 00000000000000PNG  IHDR3$^bKGD pHYs  d_tIME 9aRR IDATxKl\;{ǎcy(@*ZU,*TR覫RuBH!!ıx<3؞$*)a\]s{b32:Oa\/ ⧏|ҘA)@DcDP @b*E__Y__ߣ<;z4,,m]h)xp$J!R){3@RJ(HKhDͅvjfF:J$Ҟn~Θߺk00 kųo7] (EALH%TQ#9"HP ($!HPyjB9z5W |_7 ~_yN{KsB"f=sMӣ0 f}$Q4Bwl7ݝMirhhݦ<+LgTc$dyΦA$$7MS33HꆕL+522sMDΣR;7m{wߙ3\V00OgS[{6  )gg o$b)tV&.${ jձ폻TN-[7bn[?*DGk rdh %(T&붱Fy];96~ĩ+|/͖kW(da貌Ͻ_ڭ\}CWo8…|>Ϲ$TB,-vl5<]o,P凜1B)Xf TʚͥJ?7Ovw ܷۊ"8t)(nkA@SR : (SRR.\F1Cs<1Rw?~<-'[\O(!Q9G? 4XjRH  DaxA Rq D\W"~NsU2BV J JJ%R@޼a;HAJ%J("TJJ>!A)A)I O=ojjs ~?f$Tnttu3C5IHD eef2؄㸍e(TBJEAJ-/Y>αg+UoQX釾3Mygk|̗ȥl6%,{ɶd6O0H&Jr嚲 spފ"ESR\AE"f=-^S\~h...w$Ԋ ADܲR}/w 2!lTDHɹH$3}Ͼ4JrXWf$%#$*Ξ;?tvęÂ8Δy蛺D:z#)=v^uW^}U y=e3,+f]]lNHl6gil/Kd 85IENDB`