[
  {
    "path": ".gitignore",
    "content": "# ignore files generated by beast\nbeast/__pycache__\nbeast/_beast.so\nbeast/beast.py\nbeast/beast_wrap.cxx\nbeast/beast_wrap.o\n\n# ignore test executables\ntests/gmon.out\ntests/test\n"
  },
  {
    "path": "Dockerfile",
    "content": "\nFROM ubuntu:20.04\n\n# deal with timezones (change to what suits your use case)\nENV TZ=America/New_York\n\nENV DEBIAN_FRONTEND=noninteractive\n\nWORKDIR home\n\n# need all of this to work (was missing some packages)\nRUN apt-get update \\\n&&  apt-get -y install software-properties-common \\\n&&  add-apt-repository ppa:deadsnakes/ppa \\\n&&  apt-get install -y python3-scipy libopencv-dev python3-opencv \\\n                     swig python3-systemd git astrometry.net \\\n                     python3-astropy python3-pkgconfig \\\n                     python3-dev libpython3.7-dev libpython3.8-dev \\\n                     build-essential python3.6 libpython3.6-dev \\\n                     python3-pandas \\\n                     graphviz \\\n                     bc \\\n                     netcat \\\n                     tzdata \\\n&& rm -rf /var/lib/apt/lists/* \n\nADD http://data.astrometry.net/4100/index-4112.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4113.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4114.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4115.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4116.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4117.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4118.fits /usr/share/astrometry/\nADD http://data.astrometry.net/4100/index-4119.fits /usr/share/astrometry/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 UB Nanosatellite Laboratory\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# openstartracker\nA fast, robust, open source startracker based on a new class of baysian startracker algorithms\n\nFeatures:\n\n* Fast lost in space identification\n* Image to image matching\n* Collect and store size, shape and color information of unknown objects\n* Tracks unknown objects between images\n* Programable python frontend / reusable C++ backend (BEAST-2) with no external dependencies \n* Uses astrometry.net for calibration (check if your camera is good enough by uploading your star images to nova.astrometry.net)\n* Supports python 2 and 3 (see bottom)\n\n### Basic setup:\n\n\n##### From a fresh ubuntu linux install\n```\nsudo apt-get install python3-scipy libopencv-dev python3-opencv swig python3-systemd\n```\n\nAdditional packages needed for calibration and unit testing:\n~~~~\nsudo apt-get install git astrometry.net python3-astropy\n\ncd /usr/share/astrometry\n\nDownload fits files corresponding to your camera fov size (see astrometry.net for details\nsudo wget http://data.astrometry.net/4100/index-4112.fits\nsudo wget http://data.astrometry.net/4100/index-4113.fits\nsudo wget http://data.astrometry.net/4100/index-4114.fits\nsudo wget http://data.astrometry.net/4100/index-4115.fits\nsudo wget http://data.astrometry.net/4100/index-4116.fits\nsudo wget http://data.astrometry.net/4100/index-4117.fits\nsudo wget http://data.astrometry.net/4100/index-4118.fits\nsudo wget http://data.astrometry.net/4100/index-4119.fits\n\ngit clone https://github.com/UBNanosatLab/openstartracker.git\n\ncd openstartracker/tests\n./unit_test.sh -crei science_cam_may8_0.05sec_gain40\n\n~~~~\n\n#### Using Docker\nThe included Dockerfile allows the build and test environment to be configured in a reproducible way with all the dependencies.\nAccording to their website,\n> Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly.\n\nIn practice, it's a nice way to ensure you always have the same dependencies installed, independent of the rest of your system.\n\n**Note:** the Docker environment here is best used for development purposed. When running openstartracker on a flight computer, it is most\nlikely better to run the program directly, without the Docker container. Docker is used here just to create a standard, reproducible dev and testing environment.\n\nTo use the Docker environment to run openstartracker,\n\n0. Install [Docker](https://docs.docker.com/get-docker/).\n1. Run `source setup.sh`. This will execute a `docker build ...` command to create the Docker environment from the Dockerfile, copy\nin all the code config files from this repo, \nand create a command alias called `dstart` that can be run to start the Docker environment and access the pre-built Docker environment.\n  - This may take awhile to run the first time as the Docker image is built, but will run much more quickly in subsequent builds\n2. Run `dstart` to start and enter the Docker environment.\n3. Proceed with the following instructions.\n\n**Important note:** Any code and file changes should be made **outside** the Docker environment -- consider it a 'run only' space.\nAny time you make a change to the code in this repo, you'll want to re-run the `source setup.sh` command so that your changes are\nincluded in the Docker build.\n\n### Run on example imagery:\nYou can use the included `science_cam_may8_0.05sec_gain40` images to test out the calibration process:\n\n```\n# if using docker, run `source setup.sh` and then `dstart` to enter the Docker shell\ncd tests/\n./unit_test.sh -crei science_cam_may8_0.05sec_gain40/\n```\n\nThis command will **c**alibrate your image sensor, **r** regenerate the test data, run an **E**SA test, and finally run the **i**mage test where images are fed to the calibrated star tracker program to produce an attitude fix.\n\nThe usage message for `unit_test.py` is here:\n```\n./unit_test.sh -h\nUsage: ./unit_test.sh [options] testdir [cmd]\n\n\t-c\tCalibrate based on images in testdir/samples/\n\t-r\tRegenerate ESA test\n\t-e\tRun ESA test\n\t-i\tRun image test\n```\n\n### To calibrate a new camera:\n1. Create directories for you camera's imagery:\n~~~~\ncd openstartracker/tests/\nmkdir yourcamera\nmkdir yourcamera/samples\nmkdir yourcamera/calibration_data\n~~~~\n2. Add 3-10 star images of different parts of the sky taken with your camera to `tests/yourcamera/samples`\n3. Edit `APERTURE` and `EXPOSURE_TIME` in `calibrate.py` (you want to take images with the lowest exposure time that consistently solves)\n4. (if using docker, run `dstart` to enter the Docker environment)\n5. Run \n  ```\n  cd tests/\n  ./unit_test.sh -crei yourcamera\n  ```\n  to calibrate and test\n\nThe ESA test should have a score of >70. If its worse than this, play around with exposure time (50ms is a good starting point)\n\n##### Reference frames used:\n\nFor RA,DEC,Ori, openstartracker uses the same convention as astrometry.net, where RA and DEC are in the same frame as the star positions specified in the hipparcos catalogue (updated to the current year). Orientation is degrees east of north (ie orientation 0 means that up and down aligns with north-south)\n\nNOTE: RA, DEC & Ori are provided for debugging purposes only. For spacecraft attitude determination, the star reference vectors should be used, either directly, or converted to a quaternion via one of the many algorithms that have been developed for this purpose (see: https://en.wikipedia.org/wiki/Wahba%27s_problem)\n"
  },
  {
    "path": "beast/Makefile",
    "content": "CC = g++\nPYTHONHEADERS=/usr/include/python3.10\n#PYTHONHEADERS=/usr/include/python2.7\n\nall: $(OBJ)\n\tswig -python -c++ beast.i\n\t$(CC) -g -std=c++11 -Ofast -fPIC -c beast_wrap.cxx -o beast_wrap.o -lstdc++ -I$(PYTHONHEADERS)\n\t$(CC) -g -shared -fPIC beast_wrap.o -o _beast.so\n\t\nclean:\n\trm beast.so beast.o\tbeast.py beast.pyc beast_wrap.cxx beast_wrap.o\n"
  },
  {
    "path": "beast/beast.h",
    "content": "#ifndef BEAST_H\n#define BEAST_H\n\n#include \"constellations.h\"\n#include <float.h>\n\nstruct  match_result {\n//TODO: private:\n\tconstellation_pair match;\n\t\n\t//eci to body (body=R*eci)\n\tfloat R11,R12,R13;\n\tfloat R21,R22,R23;\n\tfloat R31,R32,R33;\nprivate:\n\tstar_fov *img_mask;\n\tint *map; /* Usage: map[imgstar]=dbstar */\n\tsize_t map_size;\n\tconstellation* db_const;\n\tconstellation_db *db,*img;\npublic:\n\t\n\t/**\n\t* @brief TODO\n\t* @param db_\n\t* @param img_\n\t* @param img_mask_\n\t*/\n\tmatch_result(constellation_db *db_, constellation_db *img_, star_fov *img_mask_) {\n\t\tDBG_MATCH_RESULT_COUNT++;\n\t\tDBG_PRINT(\"DBG_MATCH_RESULT_COUNT++ %d\\n\",DBG_MATCH_RESULT_COUNT);\n\t\tdb=db_;\n\t\timg=img_;\n\t\timg_mask=img_mask_;\n\t\tmap_size=img->stars->size();\n\t\tmap=(int *)malloc(sizeof(map[0])*map_size);\n\t\tmatch.totalscore=-FLT_MAX;\n\t\t\n\t}\n\t~match_result() {\n\t\tDBG_MATCH_RESULT_COUNT--;\n\t\tDBG_PRINT(\"DBG_MATCH_RESULT_COUNT-- %d\\n\",DBG_MATCH_RESULT_COUNT);\n\t\tfree(map);\n\t}\n\tsize_t size() {return map_size;};\n\t/**\n\t* @brief TODO\n\t* @param db_const_\n\t* @param img_const_\n\t*/\n\tvoid init(constellation &db_const_, constellation &img_const_) {\n\t\tdb_const=&db_const_;\n\t\t\n\t\tmatch.img_s1=img_const_.s1;\n\t\tmatch.img_s2=img_const_.s2;\n\t\tmatch.db_s1=db_const_.s1;\n\t\tmatch.db_s2=db_const_.s2;\n\t}\n\t\n\t/**\n\t* @brief TODO\n\t* @param c\n\t*/\n\tvoid copy_over(match_result *c) {\n\t\tassert(c->db==db);\n\t\tassert(c->img==img);\n\t\tassert(c->img_mask==img_mask);\n\t\t\n\t\tc->match=match;\n\t\tc->db_const=db_const;\n\t\t\n\t\tc->R11=R11,c->R12=R12,c->R13=R13;\n\t\tc->R21=R21,c->R22=R22,c->R23=R23;\n\t\tc->R31=R31,c->R32=R32,c->R33=R33;\n\t\t\n\t\tmemcpy(c->map, map, sizeof(map[0])*map_size);\n\t}\n\t/**\n\t* @brief TODO\n\t* @param m\n\t* @return \n\t*/\n\tint related(constellation_pair &m) {\n\t\t\n\t\tif (match.totalscore==-FLT_MAX || m.totalscore==-FLT_MAX) return 0;\n\t\treturn (map[m.img_s1]==m.db_s1 && map[m.img_s2]==m.db_s2)?1:0;\n\t}\n\t/**\n\t* @brief TODO\n\t*/\n\tvoid search() {if (db->results->is_kdsorted()) db->results->kdsearch(R11,R21,R31,MAXFOV/2,THRESH_FACTOR*IMAGE_VARIANCE);}\n\t/**\n\t* @brief TODO\n\t*/\n\tvoid clear_search() {if (db->results->is_kdsorted()) db->results->clear_kdresults();}\n\t/**\n\t* @brief TODO\n\t*/\n\tvoid compute_score() {\n\t\t//TODO: figure out where 2*map_size came from\n\t\tmatch.totalscore=log(1.0/(IMG_X*IMG_Y))*(2*map_size);\n\t\tfloat* scores=(float *)malloc(sizeof(float)*map_size);\n\t\tfor (size_t i=0;i<map_size;i++) {\n\t\t\tmap[i]=-1;\n\t\t\tscores[i]=0.0;\n\t\t}\n\t\tfor(size_t i=0;i<db->results->r_size();i++) {\n\t\t\tstar *s=&(db->results->map[db->results->kdresults[i]]);\n\t\t\tint o=s->star_idx;\n\t\t\tfloat x=s->x*R11+s->y*R21+s->z*R31;\n\t\t\tfloat y=s->x*R12+s->y*R22+s->z*R32;\n\t\t\tfloat z=s->x*R13+s->y*R23+s->z*R33;\n\t\t\tfloat px=y/(x*PIXX_TANGENT);\n\t\t\tfloat py=z/(x*PIXY_TANGENT);\n\t\t\t\n\t\t\tint n=img_mask->get_id(px,py);\n\t\t\tif (n>=0) {\n\t\t\t\tfloat score = img_mask->get_score(n,px,py);\n\t\t\t\tif (score>scores[n]){/* only match the closest star */\n\t\t\t\t\tmap[n]=o;\n\t\t\t\t\tscores[n]=score;\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\n\t\tfor(size_t n=0;n<map_size;n++) {\n\t\t\tmatch.totalscore+=scores[n];\n\t\t}\n\t\tfree(scores);\n\t}\n\t/**\n\t* @return matching stars from db, in order of star_idx\n\t*/\n\tstar_db* from_match() {\n\t\tif (match.totalscore==-FLT_MAX) return NULL;\n\t\t\n\t\tstar_db* s = img->stars->copy();\n\t\ts->max_variance=db->stars->max_variance;\n\t\tfor(size_t n=0;n<map_size;n++) {\n\t\t\t//catalog matching\n\t\t\tif (map[n]!=-1) {\n\t\t\t\ts->get_star(img->stars->get_star(n)->star_idx)[0]=db->stars->get_star(map[n])[0];\n\t\t\t} else {\n\t\t\t\ts->get_star(img->stars->get_star(n)->star_idx)->id=-1;\n\t\t\t}\n\t\t}\n\t\treturn s;\n\t}\n\n\t/**\n\t* @brief weighted_triad results\n\t* see https://en.wikipedia.org/wiki/Triad_method \n\t* and http://nghiaho.com/?page_id=846\n\t* \n\t* when compiled, this section contains roughly 430 floating point operations\n\t* according to https://www.karlrupp.net/2016/02/gemm-and-stream-results-on-intel-edison\n\t* we can perform >250 MFLOPS with doubles, and >500 MFLOPS with floats\n\t*/\n\tvoid weighted_triad() {\n\t\tstar *db_s1=db->stars->get_star(match.db_s1);\n\t\tstar *db_s2=db->stars->get_star(match.db_s2);\n\t\tstar *img_s1=img->stars->get_star(match.img_s1);\n\t\tstar *img_s2=img->stars->get_star(match.img_s2);\n\t\t\n\t\t/* v=A*w */\n\t\tfloat wa1=db_s1->x,wa2=db_s1->y,wa3=db_s1->z;\n\t\tfloat wb1=db_s2->x,wb2=db_s2->y,wb3=db_s2->z;\n\t\tfloat va1=img_s1->x,va2=img_s1->y,va3=img_s1->z;\n\t\tfloat vb1=img_s2->x,vb2=img_s2->y,vb3=img_s2->z;\n\t\tfloat wc1=wa2*wb3 - wa3*wb2;\n\t\tfloat wc2=wa3*wb1 - wa1*wb3;\n\t\tfloat wc3=wa1*wb2 - wa2*wb1;\n\t\tfloat wcnorm=sqrt(wc1*wc1+wc2*wc2+wc3*wc3);\n\t\twc1/=wcnorm;\n\t\twc2/=wcnorm;\n\t\twc3/=wcnorm;\n\n\t\tfloat vc1=va2*vb3 - va3*vb2;\n\t\tfloat vc2=va3*vb1 - va1*vb3;\n\t\tfloat vc3=va1*vb2 - va2*vb1;\n\t\tfloat vcnorm=sqrt(vc1*vc1+vc2*vc2+vc3*vc3);\n\t\tvc1/=vcnorm;\n\t\tvc2/=vcnorm;\n\t\tvc3/=vcnorm;\n\t\t\n\t\tfloat vaXvc1=va2*vc3 - va3*vc2;\n\t\tfloat vaXvc2=va3*vc1 - va1*vc3;\n\t\tfloat vaXvc3=va1*vc2 - va2*vc1;\n\n\t\tfloat waXwc1=wa2*wc3 - wa3*wc2;\n\t\tfloat waXwc2=wa3*wc1 - wa1*wc3;\n\t\tfloat waXwc3=wa1*wc2 - wa2*wc1;\n\t\t\n\t\t/* some of these are unused */\n\t\t\n\t\tfloat A11=va1*wa1 + vaXvc1*waXwc1 + vc1*wc1;\n\t\t/* float A12=va1*wa2 + vaXvc1*waXwc2 + vc1*wc2; */\n\t\t/* float A13=va1*wa3 + vaXvc1*waXwc3 + vc1*wc3; */\n\t\tfloat A21=va2*wa1 + vaXvc2*waXwc1 + vc2*wc1;\n\t\t/* float A22=va2*wa2 + vaXvc2*waXwc2 + vc2*wc2; */\n\t\t/* float A23=va2*wa3 + vaXvc2*waXwc3 + vc2*wc3; */\n\t\tfloat A31=va3*wa1 + vaXvc3*waXwc1 + vc3*wc1;\n\t\tfloat A32=va3*wa2 + vaXvc3*waXwc2 + vc3*wc2;\n\t\tfloat A33=va3*wa3 + vaXvc3*waXwc3 + vc3*wc3;\n\t\t\n\t\twc1=-wc1;\n\t\twc2=-wc2;\n\t\twc3=-wc3;\n\t\t\n\t\tvc1=-vc1;\n\t\tvc2=-vc2;\n\t\tvc3=-vc3;\n\t\tfloat vbXvc1=vb2*vc3 - vb3*vc2;\n\t\tfloat vbXvc2=vb3*vc1 - vb1*vc3;\n\t\tfloat vbXvc3=vb1*vc2 - vb2*vc1;\n\t\t\n\t\tfloat wbXwc1=wb2*wc3 - wb3*wc2;\n\t\tfloat wbXwc2=wb3*wc1 - wb1*wc3;\n\t\tfloat wbXwc3=wb1*wc2 - wb2*wc1;\n\t\t\n\t\t/* some of these are unused */\n\t\tfloat B11=vb1*wb1 + vbXvc1*wbXwc1 + vc1*wc1;\n\t\t/* float B12=vb1*wb2 + vbXvc1*wbXwc2 + vc1*wc2; */\n\t\t/* float B13=vb1*wb3 + vbXvc1*wbXwc3 + vc1*wc3; */\n\t\tfloat B21=vb2*wb1 + vbXvc2*wbXwc1 + vc2*wc1;\n\t\t/* float B22=vb2*wb2 + vbXvc2*wbXwc2 + vc2*wc2; */\n\t\t/* float B23=vb2*wb3 + vbXvc2*wbXwc3 + vc2*wc3; */\n\t\tfloat B31=vb3*wb1 + vbXvc3*wbXwc1 + vc3*wc1;\n\t\tfloat B32=vb3*wb2 + vbXvc3*wbXwc2 + vc3*wc2;\n\t\tfloat B33=vb3*wb3 + vbXvc3*wbXwc3 + vc3*wc3;\n\t\t\n\t\t/* use weights based on magnitude */\n\t\t/* weighted triad */\n\t\tfloat weightA=1.0/(db_s1->sigma_sq+img_s1->sigma_sq);\n\t\tfloat weightB=1.0/(db_s2->sigma_sq+img_s2->sigma_sq);\n\t\t\n\t\tfloat sumAB=weightA+weightB;\n\t\tweightA/=sumAB;\n\t\tweightB/=sumAB;\n\t\t\n\t\tfloat cz,sz,mz;\n\t\tfloat cy,sy,my;\n\t\tfloat cx,sx,mx;\n\t\t\n\t\tcz=weightA*A11+weightB*B11;\n\t\tsz=weightA*A21+weightB*B21;\n\t\tmz=sqrt(cz*cz+sz*sz);\n\t\tcz=cz/mz;\n\t\tsz=sz/mz;\n\t\t\n\t\tcy=weightA*sqrt(A32*A32+A33*A33)+weightB*sqrt(B32*B32+B33*B33);\n\t\tsy=-weightA*A31-weightB*B31;\n\t\tmy=sqrt(cy*cy+sy*sy);\n\t\tcy=cy/my;\n\t\tsy=sy/my;\n\t\t\n\t\tcx=weightA*A33+weightB*B33;\n\t\tsx=weightA*A32+weightB*B32;\n\t\tmx=sqrt(cx*cx+sx*sx);\n\t\tcx=cx/mx;\n\t\tsx=sx/mx;\n\t\t\n\t\tR11=cy*cz;\n\t\tR21=cz*sx*sy - cx*sz;\n\t\tR31=sx*sz + cx*cz*sy;\n\t\t\n\t\tR12=cy*sz;\n\t\tR22=cx*cz + sx*sy*sz;\n\t\tR32=cx*sy*sz - cz*sx;\n\t\t\n\t\tR13=-sy;\n\t\tR23=cy*sx;\n\t\tR33=cx*cy;\n\t}\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\n\",s);\n\t\tDBG_PRINT(\"%f\\t%f\\t%f\\n\", R11,R12,R13);\n\t\tDBG_PRINT(\"%f\\t%f\\t%f\\n\", R21,R22,R23);\n\t\tDBG_PRINT(\"%f\\t%f\\t%f\\n\", R31,R32,R33);\n\t\t\n\t\tdb->DBG_(\"DB\");\n\t\timg->DBG_(\"IMG\");\n\t\tDBG_PRINT(\"map_size=%lu\\n\", map_size);\n\t\tfor (size_t i=0; i<map_size; i++) {\n\t\t\tDBG_PRINT(\"map[%lu]=%d\\n\",i,map[i]);\n\t\t}\n\t}\n\t/**\n\t* @brief TODO\n\t*/\n\tvoid print_ori() {\n\t\tfprintf(stderr,\"DEC=%f\\n\",fmod(360+asin(R31)* 180 / PI,360));\n\t\tfprintf(stderr,\"RA=%f\\n\",fmod(360+atan2(R21,R11)* 180 / PI,360));\n\t\tfprintf(stderr,\"ORIENTATION=%f\\n\",-atan2(R32,R33)* 180 / PI);\n\t}\n};\n\nstruct db_match {\nprivate:\n\tconstellation_pair *c_pairs;\n\tsize_t c_pairs_size;\n\tstar_fov *img_mask;\npublic:\n\tfloat p_match;\n\tmatch_result *winner;\n\t\n\t\t\n\t/**\n\t* @brief TODO\n\t* @param db\n\t* @param img\n\t*/\n\tdb_match(constellation_db *db, constellation_db *img) {\n\t\tDBG_DB_MATCH_COUNT++;\n\t\tDBG_PRINT(\"DBG_DB_MATCH_COUNT++ %d\\n\",DBG_DB_MATCH_COUNT);\n\t\twinner=NULL;\n\t\timg_mask=NULL;\n\t\tc_pairs=NULL;\n\t\tc_pairs_size=0;\n\t\tp_match=0.0;\n\t\tif (db->stars->size()<3||img->stars->size()<3) return;\n\t\timg_mask = new star_fov(img->stars,db->stars->max_variance);\n\t\t\n\t\t//find stars\n\t\tmatch_result *m=new match_result(db, img, img_mask);\n\t\twinner=new match_result(db, img, img_mask);\n\t\tfor (size_t n=0;n<img->map_size;n++) {\n\t\t\tconstellation lb=img->map[n];\n\t\t\tconstellation ub=img->map[n];\n\t\t\tlb.p-=POS_ERR_SIGMA*PIXSCALE*sqrt(img->stars->get_star(lb.s1)->sigma_sq+img->stars->get_star(lb.s2)->sigma_sq+2*db->stars->max_variance);\n\t\t\tub.p+=POS_ERR_SIGMA*PIXSCALE*sqrt(img->stars->get_star(ub.s1)->sigma_sq+img->stars->get_star(ub.s2)->sigma_sq+2*db->stars->max_variance);\n\t\t\tconstellation *lower=std::lower_bound (db->map, db->map+db->map_size, lb,constellation_lt_p);\t\n\t\t\tconstellation *upper=std::upper_bound (db->map, db->map+db->map_size, ub,constellation_lt_p);\n\t\t\t//rewind upper & do sanity checks\n\t\t\tif (db->map>=upper--) continue;\n\t\t\tif (db->map+db->map_size<=lower) continue;\n\t\t\tif (lower->idx<=upper->idx) {\n\t\t\t\tc_pairs=(struct constellation_pair*)realloc(c_pairs,sizeof(struct constellation_pair)*(c_pairs_size+(upper->idx-lower->idx+1)*2));\n\t\t\t}\n\t\t\tfor (int o=lower->idx;o<=upper->idx;o++) {\n\t\t\t\tm->init(db->map[o],img->map[n]);\n\t\t\t\tm->weighted_triad();\n\t\t\t\tm->search();\n\n\t\t\t\t#define ADD_SCORE\\\n\t\t\t\t\tm->compute_score();\\\n\t\t\t\t\tif (m->match.totalscore>winner->match.totalscore) {\\\n\t\t\t\t\t\tif (winner->match.totalscore!=-FLT_MAX) c_pairs[c_pairs_size++]=winner->match;\\\n\t\t\t\t\t\tm->copy_over(winner);\\\n\t\t\t\t\t} else c_pairs[c_pairs_size++]=m->match;\n\n\t\t\t\tADD_SCORE\n\t\t\t\t/* try both orderings of stars */\n\t\t\t\tm->match.flip();\n\t\t\t\tm->weighted_triad();\n\t\t\t\tADD_SCORE\n\t\t\t\tm->clear_search();\n\t\t\t}\n\t\t}\n\t\tdelete m;\n\t\t\n\t\t//calculate map\n\t\tif (winner->match.totalscore!=-FLT_MAX) { //Did we even match?\n\t\t\t/**\n\t\t\t * normalize the posterior to find the probability that the best match is the correct one\n\t\t\t * this relies on three assumptions:\n\t\t\t * 1. The sample point is approximately the maximum likelihood\n\t\t\t * 2. The probability distribution around the sample points are all the same\n\t\t\t * 3. the probability outside of the range od sampled points is approximately zero\n\t\t\t */\n\t\t\t//calculate p_match\n\t\t\tp_match=1.0;\n\t\t\tfor (size_t idx=0; idx<c_pairs_size;idx++) {\n\t\t\t\tif (!winner->related(c_pairs[idx])){\n\t\t\t\t\tp_match+=exp(c_pairs[idx].totalscore-winner->match.totalscore);\n\t\t\t\t}\n\t\t\t}\n\t\t\tp_match=1.0/p_match;\n\t\t}\n\t}\n\t\n\t~db_match() {\n\t\tDBG_DB_MATCH_COUNT--;\n\t\tDBG_PRINT(\"DBG_DB_MATCH_COUNT-- %d\\n\",DBG_DB_MATCH_COUNT);\n\t\tdelete winner;\n\t\tdelete img_mask;\n\t\tfree(c_pairs);\n\t}\n};\n#endif\n"
  },
  {
    "path": "beast/beast.i",
    "content": "%module beast\n%{\n#include \"config.h\"\n#include \"stars.h\"\n#include \"constellations.h\"\n#include \"beast.h\"\n%}\n//newobject gives python control of these objects\n%newobject star_db::copy;\n%newobject star_db::copy_n_brightest;\n%newobject star_db::search;\n%newobject star_db::operator-;\n%newobject star_db::operator&;\n%newobject star_query::from_kdmask;\n%newobject star_query::from_kdresults;\n%newobject match_result::from_match;\n%include \"config.h\"\n%include \"stars.h\"\n%include \"constellations.h\"\n%include \"beast.h\"\n"
  },
  {
    "path": "beast/config.h",
    "content": "#ifndef CONFIG_H\n#define CONFIG_H\n\n#include <stdio.h>\n#include <stdlib.h>//EXIT_FAILURE\n#include <string.h>\n#include <math.h>\n\n#define PI\t\t   3.14159265358979323846  /* pi */\n#define TWOPI\t\t6.28318530717958647693\n\nint DBG_ENABLE;\n#define DBG_PRINT(format,args...) if (DBG_ENABLE==1) fprintf(stderr,format, ## args);\n\n\nint DBG_STAR_DB_COUNT,DBG_CONSTELLATION_DB_COUNT,DBG_DB_MATCH_COUNT;\nint DBG_MATCH_RESULT_COUNT,DBG_STAR_FOV_COUNT,DBG_STAR_QUERY_COUNT;\n\n//TODO: config class (allows different configs for different cameras)\nint IMG_X,IMG_Y,MAX_FALSE_STARS,DB_REDUNDANCY,REQUIRED_STARS;\nfloat PIXSCALE,DOUBLE_STAR_PX;\nfloat BASE_FLUX,IMAGE_VARIANCE,THRESH_FACTOR,POS_VARIANCE,POS_ERR_SIGMA;\nfloat MAXFOV,MINFOV,MATCH_VALUE,PIXX_TANGENT,PIXY_TANGENT;\n\nint KDBUCKET_SIZE;\n\nint ENV_VARS_SIZE;\nchar** ENV_VARS; //keep track of these so that valgrind is happy\n\n/**\n* @brief Loads global variables from calibration data\n* @param filename calibration file generated by TODO:calibrate.sh? unit_test.sh\n*/\nvoid load_config(const char *filename) {\n\tDBG_STAR_DB_COUNT=DBG_CONSTELLATION_DB_COUNT=DBG_DB_MATCH_COUNT=0;\n\tDBG_MATCH_RESULT_COUNT=DBG_STAR_FOV_COUNT=DBG_STAR_QUERY_COUNT=0;\n\tDBG_ENABLE=0;\n\tENV_VARS_SIZE=0;\n\tENV_VARS=NULL;\n\t//move calibration.txt to constellation_db\n\t/* load config */\n\t\n\tFILE *stream = fopen(filename, \"r\");\n\tif (stream == NULL) exit(EXIT_FAILURE);\n\t//FILE *stream = fopen(filename, \"r\");\n\tssize_t read;\n\tchar *line = NULL;\n\tsize_t len = 0;\n\twhile ((read = getline(&line, &len, stream)) != -1) {\n\t\tENV_VARS=(char**)realloc(ENV_VARS,(ENV_VARS_SIZE+1)*sizeof(ENV_VARS[0]));\n\t\tENV_VARS[ENV_VARS_SIZE]=(char *)malloc(sizeof(char) * len);\n\t\tputenv(strcpy(ENV_VARS[ENV_VARS_SIZE++],line));\n\t}\n\tfree(line);\n\tfclose(stream);\n\n\tIMG_X=atoi(getenv(\"IMG_X\"));\n\tIMG_Y=atoi(getenv(\"IMG_Y\"));\n\tPIXSCALE=atof(getenv(\"PIXSCALE\"));\n\tPOS_ERR_SIGMA=atof(getenv(\"POS_ERR_SIGMA\"));\n\tPOS_VARIANCE=atof(getenv(\"POS_VARIANCE\"));/* sigma_r^2 */\n\tIMAGE_VARIANCE=atof(getenv(\"IMAGE_VARIANCE\"));/* lambda */\n\tTHRESH_FACTOR=atof(getenv(\"THRESH_FACTOR\"));/* lambda */\n\tDOUBLE_STAR_PX=atof(getenv(\"DOUBLE_STAR_PX\"));\n\tMAX_FALSE_STARS=atoi(getenv(\"MAX_FALSE_STARS\"));/* >10 is slow */\n\tDB_REDUNDANCY=atoi(getenv(\"DB_REDUNDANCY\"));\n\tREQUIRED_STARS=atoi(getenv(\"REQUIRED_STARS\"));\n\tBASE_FLUX=atof(getenv(\"BASE_FLUX\"));\n\t\n\tMAXFOV=PIXSCALE*sqrt(IMG_X*IMG_X+IMG_Y*IMG_Y);\n\tMINFOV=PIXSCALE*IMG_Y;\n\tMATCH_VALUE=4*log(1.0/(IMG_X*IMG_Y))+log(2*PI);/* base */\n\tPIXX_TANGENT=2*tan((IMG_X*PIXSCALE/3600)*PI/(180*2))/IMG_X;\n\tPIXY_TANGENT=2*tan((IMG_Y*PIXSCALE/3600)*PI/(180*2))/IMG_Y;\n\tKDBUCKET_SIZE=((IMG_X*PIXSCALE/3600)*(IMG_Y*PIXSCALE/3600)*3.5);\n}\n#endif\n"
  },
  {
    "path": "beast/constellations.h",
    "content": "#ifndef CONSTELLATIONS_H\n#define CONSTELLATIONS_H\n\n#include \"stars.h\"\n#include <set>\n\nstruct constellation {\n\tfloat p;\n\tsize_t s1;\n\tsize_t s2;\n\tint idx;\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\t\",s);\n\t\tDBG_PRINT(\"p=%f \",p);\n\t\tDBG_PRINT(\"s1=%lu \",s1);\n\t\tDBG_PRINT(\"s2=%lu \",s2);\n\t\tDBG_PRINT(\"idx=%d\\n\",idx);\n\t}\n};\n\nstruct  constellation_pair {\n\n//TODO: private:\n\tfloat totalscore;\n\tint db_s1,db_s2;\n\tint img_s1,img_s2;\n\npublic:\n/**\n* @brief TODO\n*/\n\tvoid flip() {\n\t\tint t=img_s1;\n\t\timg_s1=img_s2;\n\t\timg_s2=t;\n\t}\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\t\",s);\n\t\tDBG_PRINT(\"totalscore=%f \",totalscore);\n\t\tDBG_PRINT(\"db_s1=%d \",db_s1);\n\t\tDBG_PRINT(\"db_s2=%d \",db_s2);\n\t\tDBG_PRINT(\"img_s1=%d \",img_s1);\n\t\tDBG_PRINT(\"img_s2=%d\\n\",img_s2);\n\t}\n};\n\nstruct constellation_lt {\n\tbool operator() (const constellation &c1, const constellation &c2) {\n\t\tif (c1.p!=c2.p) return c1.p<c2.p;\n\t\telse if (c1.s1!=c2.s1) return c1.s1<c2.s1;\n\t\telse return c1.s2<c2.s2;\n\t}\n};\n\nbool constellation_lt_s1(const constellation &c1, const constellation &c2) {return c1.s1 < c2.s1;}\nbool constellation_lt_s2(const constellation &c1, const constellation &c2) {return c1.s2 < c2.s2;}\nbool constellation_lt_p(const constellation &c1, const constellation &c2) {return c1.p < c2.p;}\n\nstruct constellation_db {\n//TODO: private:\n\tstar_db* stars;\n\tstar_query* results;\n\tsize_t map_size;\n\tconstellation* map;\npublic:\n\t/**\n\t* @brief TODO\n\t*\n\t* @param s\n\t* @param stars_per_fov\n\t* @param from_image\n\t*/\n\tconstellation_db(star_db *s,const int stars_per_fov, const int from_image) {\n\t\tDBG_CONSTELLATION_DB_COUNT++;\n\t\tDBG_PRINT(\"DBG_CONSTELLATION_DB_COUNT++ %d\\n\",DBG_CONSTELLATION_DB_COUNT);\n\n\t\tif (from_image) {\n\t\t\tstars=s->copy();\n\t\t\tresults=new star_query(stars);\n\t\t\tresults->sort();\n\t\t\tmap=NULL;\n\t\t\tint ns=stars->size();/* number of stars to check */\n\t\t\tif (ns>stars_per_fov) ns=stars_per_fov;//MAX_FALSE_STARS+2\n\n\t\t\tmap_size=ns*(ns-1)/2;\n\t\t\tmap=(constellation*)malloc(map_size*sizeof(map[0]));\n\t\t\t\n\t\t\tint idx=0;\n\t\t\tfor (int j=1;j<ns;j++) for (int i=0;i<j;i++,idx++) {\n\t\t\t\tmap[idx].p=results->map[i].dist_arcsec(results->map[j]);\n\t\t\t\tmap[idx].s1=results->map[i].star_idx;\n\t\t\t\tmap[idx].s2=results->map[j].star_idx;\n\t\t\t}\n\t\t\tstd::sort(map, map+map_size,constellation_lt_p);\n\t\t\twhile (--idx>=0) map[idx].idx=idx;\n\t\t} else {\n\t\t\tstars=s->copy();\n\t\t\tresults=new star_query(stars);\n\t\t\tresults->kdmask_uniform_density(stars_per_fov);//2+DB_REDUNDANCY\n\t\t\tstd::set<constellation,constellation_lt> c_set;\n\t\t\tfor (size_t i=0;i<results->map_size;i++) if (results->get_kdmask(i)==0) {\n\t\t\t\tresults->kdsearch(results->map[i].x,results->map[i].y,results->map[i].z,MAXFOV,THRESH_FACTOR*IMAGE_VARIANCE);\n\t\t\t\tconstellation c;\n\t\t\t\tfor (size_t j=0;j<results->r_size();j++) if (i!=results->kdresults[j] && results->map[i].flux>=results->map[results->kdresults[j]].flux){\n\t\t\t\t\tc.p=results->map[i].dist_arcsec(results->map[results->kdresults[j]]);\n\t\t\t\t\tc.s1=results->map[i].star_idx;\n\t\t\t\t\tc.s2=results->map[results->kdresults[j]].star_idx;\n\t\t\t\t\tc_set.insert(c);\n\t\t\t\t}\n\t\t\t\tresults->clear_kdresults();\n\t\t\t}\n\t\t\tresults->reset_kdmask();\n\t\t\t//preallocate map\n\t\t\tmap_size=c_set.size();\n\t\t\tmap=(constellation*)malloc(map_size*sizeof(map[0]));\n\t\t\tstd::set<constellation>::iterator it = c_set.begin();\n\t\t\tfor (size_t idx=0; idx<map_size;idx++,it++) {\n\t\t\t\tmap[idx]=*it;\n\t\t\t\tmap[idx].idx=idx;\n\t\t\t}\n\t\t}\n\t}\n\t~constellation_db() {\n\t\tDBG_CONSTELLATION_DB_COUNT--;\n\t\tDBG_PRINT(\"DBG_CONSTELLATION_DB_COUNT-- %d\\n\",DBG_CONSTELLATION_DB_COUNT);\n\t\tfree(map);\n\t\tdelete results;\n\t\tdelete stars;\n\t}\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\n\",s);\n\t\tstars->DBG_(\"STARS\");\n\t\tresults->DBG_(\"RESULTS\");\n\t\tfor (size_t i=0; i<map_size; i++) {\n\t\t\tDBG_PRINT(\"%lu:\\t\",i);\n\t\t\tmap[i].DBG_(\"C\");\n\t\t}\n\t}\n};\n\n#endif\n"
  },
  {
    "path": "beast/go",
    "content": "make\n"
  },
  {
    "path": "beast/kdhash.h",
    "content": "#ifndef KDHASH_H\n#define KDHASH_H\n#include <stdint.h>\n\n/**\n * multidimensional hash function based on morton codes\n * \n * the magic numbers were generated by doc/gen_interleave.py\n *\n * If we ever need to implement decoding, useful info can be found here:\n * https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/\n * (basically just do everything backwards)\n * \n */\nstruct kdhash_2f {\n\t#define DIAM 0xffffffff\n\t#define R_IN (DIAM/2)\n\t#define R_OUT (R_IN+1)\n\t#define INTERLEAVE(X)\\\n\t\tif (X > DIAM) X=DIAM;\\\n\t\tif (X < 0) X=0;\\\n\t\tX = (X | X << 16) & 0xffff0000ffff;\\\n\t\tX = (X | X << 8) & 0xff00ff00ff00ff;\\\n\t\tX = (X | X << 4) & 0xf0f0f0f0f0f0f0f;\\\n\t\tX = (X | X << 2) & 0x3333333333333333;\\\n\t\tX = (X | X << 1) & 0x5555555555555555;\n\t\n\t/**\n\t* @brief hash function which interleaves values so that nearby coordinates will have nearby hashes\n\t* this approach also  also allows you to truncate the hash when less precision is needed\n\t*/\n\tstatic inline uint64_t hash(const float x0,const float x1){\n\t\tint64_t h0=R_OUT*(x0+1.0);\n\t\tint64_t h1=R_OUT*(x1+1.0);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\treturn h1<<1|h0;\n\t}\n\t\n\t/**\n\t* @brief returns returns the number of bits we need to truncate in order to search a specified range\n\t*/\n\tstatic inline uint8_t bin_size(const float r) {\n\t\tint64_t h = R_OUT*r;\n\t\tif (h > R_IN) h=R_IN;\n\t\tif (h < 0) h=0;\n\t\tuint8_t sz=0;\n\t\tfor (;h;h>>=1) sz+=1;\n\t\treturn sz;\n\t}\n\t/**\n\t* @brief returns a mask which can be used to clamp the hash to a specified precision\n\t* @param r mask a range of this size, rounded up to the nearest power of two\n\t*/\n\tstatic inline uint64_t mask(const float r) {\n\t\tuint64_t mask=-1;\n\t\treturn mask<<2*bin_size(r);\n\t}\n\t\n\t/**\n\t* @brief As before, but allows independent ranges for the different parameters \n\t*/\n\tstatic inline uint64_t mask(const float r0,const float r1){\n\t\tint64_t h0=R_OUT>>bin_size(r0);\n\t\tint64_t h1=R_OUT>>bin_size(r1);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\treturn h1<<1|h0;\n\t}\n\t#undef INTERLEAVE\n\t#undef R_OUT\n\t#undef R_IN\n\t#undef DIAM\n};\n\nstruct kdhash_3f {\n\t#define DIAM 0x1fffff\n\t#define R_IN (DIAM/2)\n\t#define R_OUT (R_IN+1)\n\t#define INTERLEAVE(X)\\\n\t\tif (X > DIAM) X=DIAM;\\\n\t\tif (X < 0) X=0;\\\n\t\tX = (X | X <<32) & 0x001f00000000ffff;\\\n\t\tX = (X | X <<16) & 0x001f0000ff0000ff;\\\n\t\tX = (X | X << 8) & 0x100f00f00f00f00f;\\\n\t\tX = (X | X << 4) & 0x10c30c30c30c30c3;\\\n\t\tX = (X | X << 2) & 0x1249249249249249;\n\t///See kdhash_2f::hash\n\tstatic inline uint64_t hash(const float x0,const float x1,const float x2){\n\t\tint64_t h0=R_OUT*(x0+1.0);\n\t\tint64_t h1=R_OUT*(x1+1.0);\n\t\tint64_t h2=R_OUT*(x2+1.0);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\tINTERLEAVE(h2)\n\t\treturn h2<<2|h1<<1|h0;\n\t}\n\t///See kdhash_2f::bin_size\n\tstatic inline uint8_t bin_size(const float radians) {\n\t\tint64_t h = R_OUT*radians;\n\t\tif (h > R_IN) h=R_IN;\n\t\tif (h < 0) h=0;\n\t\tuint8_t sz=0;\n\t\tfor (;h;h>>=1) sz+=1;\n\t\treturn sz;\n\t}\n\t///See kdhash_2f::mask\n\tstatic inline uint64_t mask(const float radians) {\n\t\tuint64_t mask=-1;\n\t\treturn mask<<3*bin_size(radians);\n\t}\n\t\n\t///See kdhash_2f::mask\n\tstatic inline uint64_t mask(const float r0,const float r1,const float r2){\n\t\tint64_t h0=R_OUT>>bin_size(r0);\n\t\tint64_t h1=R_OUT>>bin_size(r1);\n\t\tint64_t h2=R_OUT>>bin_size(r2);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\tINTERLEAVE(h2)\n\t\treturn h2<<2|h1<<1|h0;\n\t}\n\t#undef INTERLEAVE\n\t#undef R_OUT\n\t#undef R_IN\n\t#undef DIAM\n};\n\nstruct kdhash_4f {\n\t#define DIAM 0xfffff\n\t#define R_IN (DIAM/2)\n\t#define R_OUT (R_IN+1)\n\t#define INTERLEAVE(X)\\\n\t\tif (X > DIAM) X=DIAM;\\\n\t\tif (X < 0) X=0;\\\n\t\tX = (X | X << 32) & 0xf800000007ff;\\\n\t\tX = (X | X << 16) & 0xf80007c0003f;\\\n\t\tX = (X | X << 8) & 0xc0380700c03807;\\\n\t\tX = (X | X << 4) & 0x843084308430843;\\\n\t\tX = (X | X << 2) & 0x909090909090909;\\\n\t\tX = (X | X << 1) & 0x1111111111111111;\n\n\t///See kdhash_2f::hash\n\tstatic inline uint64_t hash(const float x0,const float x1,const float x2,const float x3){\n\t\tint64_t h0=R_OUT*(x0+1.0);\n\t\tint64_t h1=R_OUT*(x1+1.0);\n\t\tint64_t h2=R_OUT*(x2+1.0);\n\t\tint64_t h3=R_OUT*(x3+1.0);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\tINTERLEAVE(h2)\n\t\tINTERLEAVE(h3)\n\t\treturn h3<<3|h2<<2|h1<<1|h0;\n\t}\n\t///See kdhash_2f::bin_size\n\tstatic inline uint8_t bin_size(const float radians) {\n\t\tint64_t h = R_OUT*radians;\n\t\tif (h > R_IN) h=R_IN;\n\t\tif (h < 0) h=0;\n\t\tuint8_t sz=0;\n\t\tfor (;h;h>>=1) sz+=1;\n\t\treturn sz;\n\t}\n\t///See kdhash_2f::mask\n\tstatic inline uint64_t mask(const float radians) {\n\t\tuint64_t mask=-1;\n\t\treturn mask<<4*bin_size(radians);\n\t}\n\t///See kdhash_2f::mask\n\tstatic inline uint64_t mask(const float r0,const float r1,const float r2,const float r3){\n\t\tint64_t h0=R_OUT>>bin_size(r0);\n\t\tint64_t h1=R_OUT>>bin_size(r1);\n\t\tint64_t h2=R_OUT>>bin_size(r2);\n\t\tint64_t h3=R_OUT>>bin_size(r3);\n\t\tINTERLEAVE(h0)\n\t\tINTERLEAVE(h1)\n\t\tINTERLEAVE(h2)\n\t\tINTERLEAVE(h3)\n\t\treturn h0<<3|h1<<2|h2<<1|h3;\n\t}\n\t#undef INTERLEAVE\n\t#undef R_OUT\n\t#undef R_IN\n\t#undef DIAM\n};\n#endif\n"
  },
  {
    "path": "beast/stars.h",
    "content": "#ifndef STARS_H\n#define STARS_H\n\n#include \"config.h\"\n#include \"kdhash.h\"\n\n#include <assert.h> //assert()\n#include <limits.h> //INT_MAX\n//stl for days\n#include <array> //sort, nth_element\n#include <algorithm> //sort, nth_element\n#include <set>\n#include <unordered_set>\n#include <map>\n#include <vector>\n#include <unordered_map>\n#include <iterator>     // std::next\n\nstruct star {\n\tfloat x;\n\tfloat y;\n\tfloat z;\n\tfloat flux;\n\t/**user defined id (ie hipparcos id, -1)*/\n\tint id;\n\tfloat px;\n\tfloat py;\n\tint unreliable;\n\t/** how many stars were inserted before this one? */\n\tint star_idx;\n\tfloat sigma_sq;\n\tsize_t hash_val;\n\t/**\n\t* @brief add star from catalog \n\t*\n\t* @param x ECI  'coming out of image'\n\t* @param y ECI \n\t* @param z ECI z\n\t* @param flux Pixel brightness\n\t* @param id User defined id\n\t*/\n\tstar(){};\n\tstar(const float x_, const float y_, const float z_, const float flux_, const int id_) {\n\t\tx=x_;\n\t\ty=y_;\n\t\tz=z_;\n\t\tflux=flux_;\n\t\tid=id_;\n\t\t\n\t\tpx=y/(x*PIXX_TANGENT);\n\t\tpy=z/(x*PIXY_TANGENT);\n\n\t\tunreliable=0;\n\t\tstar_idx=-1;\n\t\tsigma_sq=POS_VARIANCE;\n\t\thash_val=kdhash_3f::hash(x,y,z);\n\t}\n\t\n\t/**\n\t* @brief add star from image\n\t*\n\t* @param px Pixel x minus camera center\n\t* @param py Pixel y minus camera center\n\t* @param flux Pixel brightness\n\t* @param id  User defined id\n\t*/\n\tstar(const float px_, const float py_, const float flux_, const int id_) {\n\t\tpx=px_;\n\t\tpy=py_;\n\t\tflux=flux_;\n\t\tid=id_;\n\n\t\tfloat j=(PIXX_TANGENT*px); /* j=(y/x) */\n\t\tfloat k=(PIXY_TANGENT*py); /* k=z/x */\n\t\tx=1./sqrt(j*j+k*k+1);\n\t\ty=j*x;\n\t\tz=k*x;\n\n\t\tunreliable=0;\n\t\tstar_idx=-1;\n\t\tsigma_sq=IMAGE_VARIANCE/flux;\n\t\thash_val=kdhash_3f::hash(x,y,z);\n\t}\n\n\t#define OP operator==\n\tbool OP(const star& s) const {return hash_val==s.hash_val;}\n\t#undef OP\n\t\n\t/**\n\t* @brief numerically stable method to calculate distance between stars\n\t* @param s Star\n\t* @return Angular seperation in arcsec\n\t*/\n\tfloat dist_arcsec(const star& s) const {\n\t\tfloat a=x*s.y - s.x*y;\n\t\tfloat b=x*s.z - s.x*z;\n\t\tfloat c=y*s.z - s.y*z;\n\t\treturn (3600*180.0/PI)*asin(sqrt(a*a+b*b+c*c));\n\t}\n\t/**\n\t* @brief Print debug info\n\t* @param s Label\n\t*/\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\t\",s);\n\t\tDBG_PRINT(\"x=%f \", x);\n\t\tDBG_PRINT(\"y=%f \", y);\n\t\tDBG_PRINT(\"z=%f \", z);\n\t\tDBG_PRINT(\"flux=%f \", flux);\n\t\tDBG_PRINT(\"star_idx=%d \", star_idx);\n\t\tDBG_PRINT(\"id=%d \", id);\n\t\tDBG_PRINT(\"unreliable=%d \", unreliable);\n\t\tDBG_PRINT(\"sigma_sq=%f \", sigma_sq);\n\t\tDBG_PRINT(\"px=%f \", px);\n\t\tDBG_PRINT(\"py=%f\\n\", py);\n\t}\n};\n\nbool star_gt_x(const star &s1, const star &s2) {return s1.x > s2.x;}\nbool star_gt_y(const star &s1, const star &s2) {return s1.y > s2.y;}\nbool star_gt_z(const star &s1, const star &s2) {return s1.z > s2.z;}\nbool star_gt_flux(const star &s1, const star &s2) {return s1.flux > s2.flux;}\nbool star_lt_x(const star &s1, const star &s2) {return s1.x < s2.x;}\nbool star_lt_y(const star &s1, const star &s2) {return s1.y < s2.y;}\nbool star_lt_z(const star &s1, const star &s2) {return s1.z < s2.z;}\nbool star_lt_flux(const star &s1, const star &s2) {return s1.flux < s2.flux;}\n\nstruct star_db {\nprivate:\n\tstd::unordered_map<uint64_t,star> hash_map;\n\tstd::set<uint64_t> hash_set;\n\tstd::vector<uint64_t> star_idx_vector;\n\tstd::multimap<float,uint64_t> flux_map;\n\tsize_t sz;\n\n\t/**\n\t * @brief Transcribe a portion of the db between first and last\n\t * \n\t * @param first an iterator to a map. key can be anything, but value must be a star hash \n\t * @param last copy up to but not including the element pointed to by this iterator\n\t */\n\ttemplate<class T> star_db* copy(T first,T last) {\n\t\tstar_db* s = new star_db;\n\t\tfor (;first!=last;first++) (*s)+=hash_map[*first];\n\t\treturn s;\n\t}\npublic:\n\t//TODO\n\tfloat max_variance;\n\tstar_db() {\n\t\tDBG_STAR_DB_COUNT++;\n\t\tDBG_PRINT(\"DBG_STAR_DB_COUNT++ %d\\n\",DBG_STAR_DB_COUNT);\n\t\tmax_variance=0.0;\n\t\tsz=0;\n\t}\n\t~star_db() {\n\t\tDBG_STAR_DB_COUNT--;\n\t\tDBG_PRINT(\"DBG_STAR_DB_COUNT-- %d\\n\",DBG_STAR_DB_COUNT);\n\t}\n\tsize_t size() {return sz;}\n\t///Philosophically inspired by python sets\n\t#define OP operator+=\n\tstar_db* OP(const star& s) { return *this+=&s;}\n\tstar_db* OP(const star* s) {\n\t\tif (count(s)==0) {\n\t\t\tif (max_variance<s->sigma_sq) max_variance=s->sigma_sq;\n\t\t\tstar temp=s[0];\n\t\t\ttemp.star_idx=size();\n\t\t\thash_map.emplace(temp.hash_val,temp);\n\t\t\thash_set.insert(temp.hash_val);\n\t\t\tflux_map.emplace(temp.flux,temp.hash_val);\n\t\t\tstar_idx_vector.push_back(temp.hash_val);\n\t\t\tsz++;\n\t\t}\n\t\treturn this;\n\t}\n\t#undef OP\n\t//TODO - faster to use insert?\n\tstar_db* OP(star_db* s) {\n\t\tfor (size_t i=0;i<s->size();i++) (*this)+=s->get_star(i);\n\t\treturn this;\n\t}\n\t#define OP operator-\n\tstar_db* OP(const star_db* s) {\n\t\tstar_db* r = new star_db;\n\t\tfor (auto it = star_idx_vector.cbegin(); it != star_idx_vector.cend(); ++it) {\n\t\t\tif (s->hash_map.count(*it)==0) *r+=hash_map.at(*it);\n\t\t}\n\t\treturn r;\n\t}\n\t#undef OP\n\t#define OP operator&\n\tstar_db* OP(const star_db* s) {\n\t\tstar_db* r = new star_db;\n\t\tfor (auto it = star_idx_vector.cbegin(); it != star_idx_vector.cend(); ++it) {\n\t\t\tif (s->hash_map.count(*it)>0) *r+=hash_map.at(*it);\n\t\t}\n\t\treturn r;\n\t}\n\t#undef OP\n\t/**\n\t * @brief returns stars in the order they were added\n\t * \n\t * @param idx the index of the star \n\t */\n\tstar* get_star_by_hash(const size_t hash) {return &(hash_map.at(hash));}\n\t/**\n\t * @brief returns stars in the order they were added\n\t * \n\t * @param idx the index of the star \n\t */\n\tstar* get_star(const int idx) {return size()>0?get_star_by_hash(star_idx_vector[idx]):NULL;}\n\t/**\n\t* @brief make a copy of the star db\n\t*/\n\tstar_db* copy() {return copy(star_idx_vector.cbegin(),star_idx_vector.cend());}\n\t/**\n\t* @brief make a copy of the n brightest elements in the star db\n\t*/\n\tstar_db* copy_n_brightest(const size_t n) {\n\t\t//return copy(flux_map.crbegin(),std::next(flux_map.crbegin(),std::min(n,size())));\n\t\tstar_db* s = new star_db;\n\t\tauto first=flux_map.crbegin();\n\t\tauto last=std::next(flux_map.crbegin(),std::min(n,size()));\n\t\tfor (;first!=last;first++) (*s)+=get_star_by_hash(first->second);\n\t\treturn s;\n\t}\n\t//std::array* n_brightest(T &hs,n) {\n\t//\t\n\t//}\n\t/**\n\t* @brief return stars in the bounding volume around the specified star\n\t* @param r minimum radius of the bounding volume (arcseconds).\n\t* \n\t*/\n\t//TODO: group together by hash_lb,ub, n_brightest_search (maybe return a list?) \n\ttemplate<class T> void search(T &hs, const float x,const float y,const float z, float r, const float min_flux) {\n\t\tr=r/3600.0;\n\t\tr=r*PI/180.0;\n\t\tr=2*fabs(sin(r/2.0));\n\t\tsize_t mask=kdhash_3f::mask(r);\n\t\tfor (int8_t dx=-1;dx<=1;dx++) for (int8_t dy=-1;dy<=1;dy++) for (int8_t dz=-1;dz<=1;dz++) {\n\t\t\tsize_t h=kdhash_3f::hash(x+dx*r,y+dy*r,z+dz*r);\n\t\t\tauto first = hash_set.lower_bound(h&mask);\n\t\t\tauto last = hash_set.upper_bound(h|(~mask));\n\t\t\tfor (;first!=last;first++) {\n\t\t\t\tstar *s=get_star_by_hash(*first);\n\t\t\t\tfloat dist_x=s->x-x;\n\t\t\t\tfloat dist_y=s->y-y;\n\t\t\t\tfloat dist_z=s->z-z;\n\t\t\t\tif (dist_x*dist_x+dist_y*dist_y+dist_z*dist_z<=r*r) {\n\t\t\t\t\tif (min_flux <= s->flux) hs.insert(*first);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t* @brief Load stars from hip_main.dat\n\t*\n\t* @param catalog path to hip_main.dat\n\t* @param year Update star positions to the specified year\n\t*/\n\tvoid load_catalog(const char* catalog, const float year) {\n\t\tFILE *stream = fopen(catalog, \"r\");\n\t\tif (stream == NULL) exit(EXIT_FAILURE);\n\t\tmax_variance=POS_VARIANCE;\n\t\t\n\t\tssize_t read;\n\t\tchar *line = NULL;\n\t\tsize_t len = 0;\n\t\t\n\t\tchar* hip_record[78];\n\t\twhile ((read = getline(&line, &len, stream)) != -1){\n\t\t\t\tfloat yeardiff=year-1991.25;\n\t\t\t\thip_record[0]=strtok(line,\"|\");\n\t\t\t\tfor (size_t j=1;j<sizeof(hip_record)/sizeof(hip_record[0]);j++) hip_record[j] = strtok(NULL,\"|\");\n\t\t\t\n\t\t\t\tfloat MAG=atof(hip_record[5]);\n\t\t\t\tfloat DEC=yeardiff*atof(hip_record[13])/3600000.0 + atof(hip_record[9]);\n\t\t\t\tfloat cosdec=cos(PI*DEC/180.0);\n\t\t\t\tfloat RA=yeardiff*atof(hip_record[12])/(cosdec*3600000.0) + atof(hip_record[8]);\n\n\t\t\t\tstar s = star(cos(PI*RA/180.0)*cosdec,sin(PI*RA/180.0)*cosdec,sin(PI*DEC/180.0),BASE_FLUX*powf(10.0,-MAG/2.5),atoi(hip_record[1]));\n\t\t\t\ts.unreliable=((atoi(hip_record[29])==0||atoi(hip_record[29])==1)&&atoi(hip_record[6])!=3)?0:1;\n\t\t\t\t(*this)+=s;\n\t\t}\n\t\tfree(line);\n\t\tfclose(stream);\n\t\t\n\t}\n\n\tsize_t count(const star* s) {return hash_map.count(s->hash_val);}\n\tsize_t count(star_db* s) {\n\t\tsize_t n=0;\n\t\tfor (size_t i=0;i<s->size();i++) n+=count(s->get_star(i));\n\t\treturn n;\n\t}\n\t\n\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\n\",s);\n\t\tDBG_PRINT(\"star_db at %lu contains %lu elements\\n\",(size_t)this,size());\n\t\tDBG_PRINT(\"max_variance=%f\\n\",max_variance);\n\t\tfor (size_t i=0; i<size(); i++) {\n\t\t\tDBG_PRINT(\"%lu:\\t\",i);\n\t\t\tget_star(i)->DBG_(\"star\");\n\t\t}\n\t}\n};\n\nstruct star_fov {\nprivate:\n\tint *mask;\n\tstar_db *stars;\n\tint *collision;\n\tint collision_size;\n\tfloat db_max_variance;\n\tfloat *s_px;\n\tfloat *s_py;\n\t/**\n\t* @brief Get the id of the best match to the specified coordinates \n\t* Used to resolve collisions where the coordinates falls into the region of overlap between two stars\n\t* Adds a bit of complexity in exchange for being able to break ties at\n\t* the subpixel level, which can sometimes make a difference \n\t* \n\t* @param id - the id from the image map\n\t* Any id <-1 is interpreted as an index in the collision buffer (starts at -2)\n\t*\n\t* @param px Pixel x minus camera center\n\t* @param py Pixel y minus camera center\n\t*\n\t* @return The id of whichever star is the best match to the coordinates in question \n\t*/\n\tint resolve_id(int id,const float px,const float py) {\n\t\tif (id>=-1) return id;\n\t\t//Any id <-1 is interpreted as an index in the collision buffer (starts at -2)\n\t\tid=-id;\n\t\tint id1=resolve_id(collision[id-2],px,py);\n\t\tint id2=resolve_id(collision[id-1],px,py);\n\t\treturn (get_score(id1,px,py)>get_score(id2,px,py))?id1:id2;\n\t}\npublic:\n\t\n\t/**\n\t* @brief TODO\n\t*\n\t* @param id\n\t* @param px\n\t* @param py\n\t*\n\t* @return \n\t*/\n\tfloat get_score(const int id,const float px,const float py) {\n\t\tfloat sigma_sq,maxdist_sq;\n\t\tsigma_sq=stars->max_variance+db_max_variance;\n\t\tmaxdist_sq=-sigma_sq*(log(sigma_sq)+MATCH_VALUE);\n\t\t\n\t\tfloat dx=px-s_px[id];\n\t\tfloat dy=py-s_py[id];\n\t\tif (dx<-0.5) dx+=1.0;/* use whichever corner of the pixel gives the best score */\n\t\tif (dy<-0.5) dy+=1.0;\n\t\treturn (maxdist_sq-(dx*dx+dy*dy))/(2*sigma_sq);\n\t}\n\t\t\t\n\t/**\n\t* @brief TODO\n\t*\n\t* @param id\n\t* @param px\n\t* @param py\n\t* @param sigma_sq\n\t* @param maxdist_sq\n\t*\n\t* @return \n\t*/\n\tfloat get_score(const int id,const float px,const float py,const float sigma_sq,const float maxdist_sq) {\n\t\tfloat dx=px-s_px[id];\n\t\tfloat dy=py-s_py[id];\n\t\tif (dx<-0.5) dx+=1.0;/* use whichever corner of the pixel gives the best score */\n\t\tif (dy<-0.5) dy+=1.0;\n\t\treturn (maxdist_sq-(dx*dx+dy*dy))/(2*sigma_sq);\n\t}\n\t\n\tint get_id(float px, float py) {\n\t\tint nx=(int)(px+IMG_X/2.0f);\n\t\tif (nx==-1) nx++;\n\t\telse if (nx==IMG_X) nx--;\n\t\n\t\tint ny=(int)(py+IMG_Y/2.0f);\n\t\tif (ny==-1) ny++;\n\t\telse if (ny==IMG_Y) ny--;\n\t\tint id=-1;\n\t\tif (nx>=0&&nx<IMG_X&&ny>=0&&ny<IMG_Y) id=mask[nx+ny*IMG_X];\n\t\treturn resolve_id(id,px,py);\n\t}\n\t/**\n\t* @brief TODO\n\t* @param s\n\t* @param db_max_variance_\n\t*/\n\tstar_fov(star_db* s, const float db_max_variance_) {\n\t\tDBG_STAR_FOV_COUNT++;\n\t\tDBG_PRINT(\"DBG_STAR_FOV_COUNT++ %d\\n\",DBG_STAR_FOV_COUNT);\n\t\tdb_max_variance=db_max_variance_;\n\t\tstars=s;\n\t\tcollision=NULL;\n\t\tcollision_size=0;\n\t\ts_px=(float*)malloc(stars->size()*sizeof(s_px[0]));\n\t\ts_py=(float*)malloc(stars->size()*sizeof(s_py[0]));\n\t\tmask=(int*)malloc(IMG_X*IMG_Y*sizeof(mask[0]));\n\t\tmemset(mask, -1, IMG_X*IMG_Y*sizeof(mask[0]));\n\t\t/* generate image mask */\n\t\tfor (size_t id=0;id<stars->size();id++){\n\t\t\t/* assume the dimmest possible star since we dont know the brightness of the other image */\n\t\t\tfloat sigma_sq,maxdist_sq;\n\t\t\tsigma_sq=stars->max_variance+db_max_variance;\n\t\t\tmaxdist_sq=-sigma_sq*(log(sigma_sq)+MATCH_VALUE);\n\t\t\tfloat maxdist=sqrt(maxdist_sq);\n\t\t\ts_px[id]=stars->get_star(id)->px;\n\t\t\ts_py[id]=stars->get_star(id)->py;\n\t\t\t\n\t\t\tint xmin=s_px[id]-maxdist-1;\n\t\t\tint xmax=s_px[id]+maxdist+1;\n\t\t\tint ymin=s_py[id]-maxdist-1;\n\t\t\tint ymax=s_py[id]+maxdist+1;\n\t\t\t\n\t\t\tif(xmax>IMG_X/2) xmax=IMG_X/2;\n\t\t\tif(xmin<-IMG_X/2)xmin=-IMG_X/2;\n\t\t\tif(ymax>IMG_Y/2) ymax=IMG_Y/2;\n\t\t\tif(ymin<-IMG_Y/2)ymin=-IMG_Y/2;\n\t\t\tfor(int i=xmin;i<xmax;i++) for (int j=ymin;j<ymax;j++) {\n\n\t\t\t\tfloat score=get_score(id, i,j, sigma_sq, maxdist_sq);\n\t\t\t\t\n\t\t\t\tint x=i+IMG_X/2;\n\t\t\t\tint y=j+IMG_Y/2;\n\t\t\t\n\t\t\t\tif (score>0) {\n\t\t\t\t\t/* has this pixel already been assigned to a different star? */\n\t\t\t\t\tint id2=mask[x+y*IMG_X];\n\t\t\t\t\tif (id2!=-1){\n\t\t\t\t\t\tcollision_size+=2;\n\t\t\t\t\t\tmask[x+y*IMG_X]=-collision_size;\n\t\t\t\t\t\tcollision=(int*)realloc(collision,collision_size*sizeof(collision[0]));\n\t\t\t\t\t\tcollision[collision_size-2]=id;\n\t\t\t\t\t\tcollision[collision_size-1]=id2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmask[x+y*IMG_X]=id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t~star_fov() {\n\t\tDBG_STAR_FOV_COUNT--;\n\t\tDBG_PRINT(\"DBG_STAR_FOV_COUNT-- %d\\n\",DBG_STAR_FOV_COUNT);\n\t\tfree(s_px);\n\t\tfree(s_py);\n\t\tfree(mask);\n\t\tfree(collision);\n\t}\n};\n\nstruct star_query {\n\tstar *map;\n\tsize_t map_size;\n\tsize_t *kdresults;\nprivate:\n\tuint8_t kdsorted;\n\t\n\tsize_t kdresults_size;\n\tint8_t *kdmask;\n\tsize_t kdresults_maxsize;\n\tstar_db *stars;\n\t\t \n\t /** You may be looking at the most compact kd-tree in existence\n\t *  It does not use pointers or indexes or leaf nodes or any extra memory\n\t *  Instead the list is kdsorted in place using std::nth_element()\n\t *  which is standard c++ implementation of quickselect.\n\t * \n\t *  References:\n\t *  Numerical Recipies (ISBN: 9780521884075)\n\t *  https://en.wikipedia.org/wiki/Quickselect\n\t *  https://stackoverflow.com/questions/17021379/balancing-kd-tree-which-approach-is-more-efficient\n\t */\n\t\n\t#define KDSORT_NEXT(A,B)\\\n\t\tint mid=(min+max)/2;\\\n\t\tif (min+1<max) {\\\n\t\t\tstd::nth_element(map+min,map+mid,map+max,A);\\\n\t\t\tif (mid-min>KDBUCKET_SIZE) B(min,mid);\\\n\t\t\telse std::sort(map+min, map+mid,star_gt_flux);\\\n\t\t\tif (max-(mid+1)>KDBUCKET_SIZE) B(mid+1,max);\\\n\t\t\telse std::sort(map+(mid+1), map+max,star_gt_flux);\\\n\t\t}\n\tvoid kdsort_x(const int min, const int max) {KDSORT_NEXT(star_lt_x,kdsort_y)}\n\tvoid kdsort_y(const int min, const int max) {KDSORT_NEXT(star_lt_y,kdsort_z)}\n\tvoid kdsort_z(const int min, const int max) {KDSORT_NEXT(star_lt_z,kdsort_x)}\n\t#undef KDSORT_NEXT\npublic:\n\t/**\n\t* @brief  TODO\n\t* @param s\n\t*/\n\tstar_query(star_db *s) {\n\t\tDBG_STAR_QUERY_COUNT++;\n\t\tDBG_PRINT(\"DBG_STAR_QUERY_COUNT++ %d\\n\",DBG_STAR_QUERY_COUNT);\n\t\tstars=s;\n\t\tmap_size=stars->size();\n\t\tkdsorted=0;\n\t\tkdresults_size=map_size;\n\t\tkdresults_maxsize=INT_MAX;\n\n\t\tkdmask=(int8_t*)malloc((map_size+1)*sizeof(kdmask[0]));\n\t\tkdresults=(size_t*)malloc((map_size+1)*sizeof(kdresults[0]));\n\t\tmap=(star*)malloc(map_size*sizeof(map[0]));\n\t\tfor (size_t i=0;i<map_size;i++){\n\t\t\tmap[i]=stars->get_star(i)[0];\n\t\t\tkdresults[i]=i;\n\t\t}\n\t\treset_kdmask();\n\t}\n\t~star_query() {\n\t\tDBG_STAR_QUERY_COUNT--;\n\t\tDBG_PRINT(\"DBG_STAR_QUERY_COUNT-- %d\\n\",DBG_STAR_QUERY_COUNT);\n\t\tfree(map);\n\t\tfree(kdresults);\n\t\tfree(kdmask);\n\t}\n\tuint8_t is_kdsorted() {return kdsorted;}\n\t/**\n\t* @brief kdsort the list in question.\n\t*/\n\tvoid kdsort() {\n\t\tif (kdsorted==0) {\n\t\t\tkdsort_x(0,map_size);\n\t\t\tkdsorted=1;\n\t\t}\n\t}\n\tvoid sort() {\n\t\tstd::sort(map, map+map_size,star_gt_flux);\n\t\tkdsorted=0;\n\t}\n\tsize_t r_size() {return kdresults_size;}\n\tint8_t get_kdmask(size_t i) {return kdmask[i];}\n\t/**\n\t* @brief Clears kdmask, but does not reset kdresults. Slow.\n\t*/\n\tvoid reset_kdmask() {\n\t\tmemset(kdmask,0,sizeof(kdmask[0])*stars->size());\n\t}\n\t\n\t/**\n\t* @brief Rewind kdresults, and set the corresponding kdmask to zero\n\t*/\n\tvoid clear_kdresults() {\n\t\twhile (kdresults_size>0) {\n\t\t\tkdresults_size--;\n\t\t\tkdmask[kdresults[kdresults_size]]=0;\n\t\t}\n\t}\n\n\t/**\n\t* @brief TODO\n\t*\n\t* @param idx\n\t* @param x\n\t* @param y\n\t* @param z\n\t* @param r\n\t* @param min_flux\n\t*/\n\tvoid kdcheck(const int idx, float x, float y, float z, const float r, const float min_flux){\n\t\tx-=map[idx].x;\n\t\ty-=map[idx].y;\n\t\tz-=map[idx].z;\n\t\tif (x-r <= 0 && 0 <= x+r &&\n\t\t\ty-r <= 0 && 0 <= y+r &&\n\t\t\tz-r <= 0 && 0 <= z+r &&\n\t\t\tmin_flux <= map[idx].flux &&\n\t\t\tkdmask[idx] == 0 &&\n\t\t\tx*x+y*y+z*z<=r*r) {\n\t\t\tkdmask[idx]=1;\n\t\t\t/* Insertion sort into list from brightest to dimmest.\n\t\t\t * \n\t\t\t * Note: Different sorting algorithms can result in different\n\t\t\t * stars being selected in the case where there are two candidates of\n\t\t\t * equal brightness for the last star. This has no effect on match quality\n\t\t\t */\n\t\t\t \n\t\t\tint n=kdresults_size++;\n\t\t\t\n\t\t\tfloat sm_flux=map[idx].flux;\n\t\t\tfor (;n>0&&sm_flux>map[kdresults[n-1]].flux;n--) kdresults[n]=kdresults[n-1];\n\t\t\tkdresults[n]=idx;\n\t\t\t//if we go over the maximum, bump the dimmest star from the results\n\t\t\tif (kdresults_size>kdresults_maxsize) {\n\t\t\t\tkdresults_size=kdresults_maxsize;\n\t\t\t\tkdmask[kdresults[kdresults_size]]=0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t* @brief\t\tsearch map for points within r pixels of x,y,z \n\t* @details\t\tput all results found into kdresults (sorted by brightness), mask via kdmask\n\t* @param x\t\tcos(deg2rad*RA)*cos(deg2rad*DEC)\n\t* @param y\t\tsin(deg2rad*RA)*cos(deg2rad*DEC)\n\t* @param z\t\tsin(deg2rad*DEC)\n\t* @param r\t\tsearch distance (pixels)\n\t* @param min_flux\tminimum pixel brightness\n\t* @param min\t\tstart of bounding box\n\t* @param max\t\tend of bounding box\n\t* @param dim\t\tstart dimension\n\t*/\n\tvoid kdsearch(const float x, const float y, const float z, const float r, const float min_flux, const int min, const int max, const int dim) {\n\t\tkdsort();\n\t\tfloat r_deg=r/3600.0;\n\t\tfloat r_rad=r_deg*PI/180.0;\n\t\tif (dim==0) kdsearch_x(x, y, z, 2*fabs(sin(r_rad/2.0)), min_flux,min,max);\n\t\telse if (dim==1) kdsearch_y(x, y, z, 2*fabs(sin(r_rad/2.0)), min_flux,min,max);\n\t\telse if (dim==2) kdsearch_z(x, y, z, 2*fabs(sin(r_rad/2.0)), min_flux,min,max);\n\t}\n\tvoid kdsearch(float x, float y, float z, float r, float min_flux) {\n\t\tkdsearch(x, y, z, r, min_flux,0,stars->size(),0);\n\t}\n\t//use seperate functions for each diminsion so that the compiler can unroll the recursion\n\t#define KDSEARCH_NEXT(A,B,C,D)\\\n\t\tint mid=(min+max)/2;\\\n\t\tif (min<mid &&A <= map[mid].B) {\\\n\t\t\tif (mid-min>KDBUCKET_SIZE) D(x,y,z,r,min_flux,min,mid);\\\n\t\t\telse for (int i=min;i<mid&&min_flux<=map[i].flux;i++)kdcheck(i,x,y,z,r,min_flux);\\\n\t\t}\\\n\t\tif (mid<max) kdcheck(mid,x,y,z,r,min_flux);\\\n\t\tif (kdresults_size==kdresults_maxsize) min_flux=map[kdresults[kdresults_size-1]].flux;\\\n\t\tif (mid+1<max &&map[mid].B <= C) {\\\n\t\t\tif (max-(mid+1)>KDBUCKET_SIZE) D(x,y,z,r,min_flux,mid+1,max);\\\n\t\t\telse for (int i=mid+1;i<max&&min_flux<=map[i].flux;i++)kdcheck(i,x,y,z,r,min_flux);\\\n\t\t}\n\tvoid kdsearch_x(const float x, const float y, const float z, const float r, float min_flux, const int min, const int max) {KDSEARCH_NEXT(x-r,x,x+r,kdsearch_y)}\n\tvoid kdsearch_y(const float x, const float y, const float z, const float r, float min_flux, const int min, const int max) {KDSEARCH_NEXT(y-r,y,y+r,kdsearch_z)}\n\tvoid kdsearch_z(const float x, const float y, const float z, const float r, float min_flux, const int min, const int max) {KDSEARCH_NEXT(z-r,z,z+r,kdsearch_x)}\n\t#undef KDSEARCH_NEXT\n\n\t/**\n\t* @brief set mask for stars that are too bright,too close, highly variable, or unreliable\n\t*/\n\tvoid kdmask_filter_catalog() {\n\t\tfor (size_t i=0;i<stars->size();i++) {\n\t\t\tint8_t lastmask=kdmask[i];\n\t\t\tkdsearch(map[i].x,map[i].y,map[i].z,DOUBLE_STAR_PX*PIXSCALE,THRESH_FACTOR*IMAGE_VARIANCE);\n\t\t\t//TODO: this seems to remove more stars than it should\n\t\t\t//if (kdresults_size>1||lastmask || map[i].flux<THRESH_FACTOR*IMAGE_VARIANCE||map[i].unreliable>0) {\n\t\t\tif (kdresults_size>1||lastmask || map[i].flux<THRESH_FACTOR*IMAGE_VARIANCE) {\n\t\t\t\tkdmask[i]=1;\n\t\t\t\tkdresults_size=0;\n\t\t\t} else {\n\t\t\t\tclear_kdresults();\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* @brief Masks the dimmest stars in each area to produce a map with uniform density \n\t* @param min_stars_per_fov Don't mask anything which could result in less than this many stars per field of view\n\t*/\n\tvoid kdmask_uniform_density(const int min_stars_per_fov) {\n\t\tstd::unordered_set<int> uniform_set;\n\t\tint kdresults_maxsize_old=kdresults_maxsize;\n\t\tkdresults_maxsize=min_stars_per_fov;\n\t\tfor (size_t i=0;i<stars->size();i++) if (kdmask[i]==0) {\n\t\t\tkdsearch(map[i].x,map[i].y,map[i].z,MINFOV/2,THRESH_FACTOR*IMAGE_VARIANCE);\n\t\t\tfor (size_t j=0;j<kdresults_size;j++) uniform_set.insert(kdresults[j]);\n\t\t\tclear_kdresults();\n\t\t}\n\t\tfor (size_t i=0;i<stars->size();i++) kdmask[i]=1;\n\t\tstd::unordered_set<int>::iterator it = uniform_set.begin();\n\t\tfor (size_t i=0; i<uniform_set.size();i++,it++) kdmask[*it]=0;\n\t\tkdresults_maxsize=kdresults_maxsize_old;\n\t}\n\t/**\n\t* @brief Filter stardb based on mask\n\t* @return A new stardb containing only the stars which are not masked\n\t*/\n\tstar_db* from_kdmask() {\n\t\tstar_db* rd=new star_db;\n\t\trd->max_variance=stars->max_variance;\n\t\tfor (size_t i=0;i<stars->size();i++){\n\t\t\tif (kdmask[i]==0) *rd+=map[i];\n\t\t}\n\t\treturn rd;\n\t}\n\t/**\n\t* @brief TODO\n\t* @return \n\t*/\n\tstar_db* from_kdresults() {\n\t\tstar_db* rd=new star_db;\n\t\trd->max_variance=stars->max_variance;\n\t\tfor (size_t i=0;i<kdresults_size;i++){\n\t\t\t*rd+=map[kdresults[i]];\n\t\t}\n\t\treturn rd;\n\t}\n\t\n\tvoid DBG_(const char *s) {\n\t\tDBG_PRINT(\"%s\\n\",s);\n\t\tDBG_PRINT(\"kdsorted=%d\\n\",kdsorted);\n\t\tDBG_PRINT(\"kdmask at %lu\\n\",(size_t)kdmask);\n\t\tDBG_PRINT(\"kdresults at %lu\\n\",(size_t)kdresults);\n\t\tDBG_PRINT(\"kdresults_size=%lu\\n\",kdresults_size);\n\t\tDBG_PRINT(\"kdresults_maxsize=%lu\\n\",kdresults_maxsize);\n\t\tif (kdresults_size>0){\n\t\t\tint i=0;\n\t\t\tDBG_PRINT(\"kdmask[%d]=%d\\n\",i,kdmask[i]);\n\t\t\tDBG_PRINT(\"kdresults[%d]=%lu\\n\",i,kdresults[i]);\n\t\t\tmap[kdresults[i]].DBG_(\"STARS\");\n\t\t\tDBG_PRINT(\".\\n.\\n\");\n\t\t\ti=kdresults_size-1;\n\t\t\tDBG_PRINT(\"kdmask[%d]=%d\\n\",i,kdmask[i]);\n\t\t\tDBG_PRINT(\"kdresults[%d]=%lu\\n\",i,kdresults[i]);\n\t\t\tmap[kdresults[i]].DBG_(\"STARS\");\n\t\t}\n\t}\n};\n#endif\n"
  },
  {
    "path": "build_production.sh",
    "content": "#!/bin/sh\n[ \"$1\" == \"\" ] && exit\ncd beast\n./go&&\ncd ..&&\nmkdir startracker-production&&\ncp -r beast/ startracker-production/&&\ncp tests/$1/calibration.txt startracker-production&&\ncp tests/$1/median_image.png startracker-production&&\ncp hip_main.dat startracker-production&&\ncp startracker.py startracker-production/&&\ntouch startracker-production.tgz&&\nrm startracker-production.tgz &&\nrsync -av startracker-production/ root@192.168.100.213:~/startracker-production/ &&\nrm -rf startracker-production\n\n"
  },
  {
    "path": "doc/gen_interleave.py",
    "content": "from __future__ import print_function\nimport random\n\n#This script is based on \n#https://stackoverflow.com/questions/1024754/how-to-compute-a-3d-morton-number-interleave-the-bits-of-3-ints\n\ndef prettyBinString(x,d=32,steps=4,sep=\".\",emptyChar=\"0\"):\n    b = bin(x)[2:]\n    zeros = d - len(b)\n\n\n    if zeros <= 0: \n        zeros = 0\n        k = steps - (len(b) % steps)\n    else:\n        k = steps - (d % steps)\n\n    s = \"\"\n    #print(\"zeros\" , zeros)\n    #print(\"k\" , k)\n    for i in list(range(zeros)): \n        #print(\"k:\",k)\n        if(k%steps==0 and i!= 0):\n            s+=sep\n        s += emptyChar\n        k+=1\n\n    for i in list(range(len(b))):\n        if( (k%steps==0 and i!=0 and zeros == 0) or  (k%steps==0 and zeros != 0) ):\n            s+=sep\n        s += b[i]\n        k+=1\n    return s    \n\ndef binStr(x): return prettyBinString(x,32,4,\" \",\"0\")\n\n\ndef computeBitMaskPatternAndCode(numberOfBits, numberOfEmptyBits):\n    bitDistances=[ i*numberOfEmptyBits for i in list(range(numberOfBits)) ]\n    print(\"Bit Distances: \" + str(bitDistances))\n    bitDistancesB = [bin(dist)[2:] for dist in  bitDistances]\n    print(\"Bit Distances (binary): \" + str(bitDistancesB))\n    moveBits=[]\n    \n    maxLength = len(max(bitDistancesB, key=len))\n    abort = False\n    for i in list(range(maxLength)):\n        moveBits.append([])\n        for idx,bits in enumerate(bitDistancesB):\n            if not len(bits) - 1 < i:\n                if(bits[len(bits)-i-1] == \"1\"):\n                    moveBits[i].append(idx)\n\n    for i in list(range(len(moveBits))):\n        print(\"Shifting bits by \" + str(2**i) + \"\\t for bits idx: \" + str(moveBits[i]))\n\n    bitPositions = list(range(numberOfBits));\n    print(\"BitPositions: \" + str(bitPositions))\n    maskOld = (1 << numberOfBits) -1\n\n    codeString = \"x &= \" + hex(maskOld) + \"\\n\"\n    for idx in list(range(len(moveBits)-1, -1, -1)):\n        if len(moveBits[idx]):\n           shifted = 0\n           for bitIdxToMove in moveBits[idx]:\n                shifted |= 1<<bitPositions[bitIdxToMove];\n                bitPositions[bitIdxToMove] += 2**idx; # keep track where the actual bit stands! might get moved several times\n           # Get the non shifted part!     \n           nonshifted = ~shifted & maskOld\n\n           print(\"Shifted bef.:\\t\" + binStr(shifted) + \" hex: \" + hex(shifted))\n           shifted = shifted << 2**idx\n           print(\"Shifted:\\t\" + binStr(shifted)+ \" hex: \" + hex(shifted))\n\n           print(\"NonShifted:\\t\" + binStr(nonshifted) + \" hex: \" + hex(nonshifted))\n           maskNew =  shifted | nonshifted\n           print(\"Bitmask is now:\\t\" + binStr(maskNew) + \" hex: \" + hex(maskNew) +\"\\n\")\n           #print(\"Code: \" + \"x = x | x << \" +str(2**idx)+ \" & \" +hex(maskNew))\n\n           codeString += \"x = (x | x << \" +str(2**idx)+ \") & \" +hex(maskNew) + \"\\n\"\n           maskOld = maskNew\n    return codeString\n\n\nkdhash_size=4\nnumberOfBits = int(64/kdhash_size);\nnumberOfEmptyBits = kdhash_size-1;\ncodeString = computeBitMaskPatternAndCode(numberOfBits,numberOfEmptyBits);\nprint(codeString)\n\ndef partitionBy2(x):\n    exec(codeString)\n    return x\n\ndef checkPartition(x):\n    print(\"Check partition for: \\t\" + binStr(x))\n    part = partitionBy2(x);\n    print(\"Partition is : \\t\\t\" + binStr(part))\n    #make the pattern manualy\n    partC = long(0);\n    for bitIdx in range(numberOfBits):\n        partC  = partC | (x & (1<<bitIdx)) << numberOfEmptyBits*bitIdx\n    print(\"Partition check is :\\t\" + binStr(partC))\n    if(partC == part):\n        return True\n    else:\n        return False\n\ncheckError = False        \nfor i in list(range(20)):\n    x = random.getrandbits(numberOfBits);\n    if(checkPartition(x) == False):\n        checkError = True\n        break\nif not checkError:\n    print(\"CHECK PARTITION SUCCESSFUL!!!!!!!!!!!!!!!!...\")\nelse:\n    print(\"checkPartition has ERROR!!!!\")\n"
  },
  {
    "path": "doc/ost_comm_test.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <arpa/inet.h>\n\n#define BUFFER_SIZE 1024\n#define MAX_STARS 50\n\n/* Coordinates of a star in both camera and ECI frames, and its weight */\ntypedef struct {\n    double cam_x;\n    double cam_y;\n    double cam_z;\n    double eci_x;\n    double eci_y;\n    double eci_z;\n    double weight;\n} star_t;\n\n/* sendImageCommand:\n *   This function establishes a TCP connection to a server, sends an image command,\n *   and receives a response from the server.\n *\n * Input arguments:\n *  - server_ip: IP address of the server.\n *  - server_port: Port number of the server.\n *  - command: Image command to send to the server.\n *  - output_buffer: Starer to the output buffer where the response will be stored.\n *  - max_output_size: Maximum size of the output buffer to prevent buffer overflow.\n *\n * Output arguments:\n *  - output_buffer: The response from the server will be stored in this buffer.\n *\n * Return value:\n *  - If the function succeeds, it returns the number of bytes received and stored in the output buffer.\n *  - If an error occurs, it returns -1.\n */\nint sendImageCommand(const char* server_ip, int server_port, const char* command, char* output_buffer, int max_output_size) {\n    int sockfd;\n    struct sockaddr_in server_addr;\n\n    // Create socket\n    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {\n        perror(\"Socket creation failed\");\n        return -1;\n    }\n\n    // Fill server information\n    server_addr.sin_family = AF_INET;\n    server_addr.sin_port = htons(server_port);\n    server_addr.sin_addr.s_addr = inet_addr(server_ip);\n\n    // Connect to the server\n    if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) != 0) {\n        perror(\"Connection to server failed\");\n        close(sockfd);\n        return -1;\n    }\n\n    // Send the image command to the server\n    if (send(sockfd, command, strlen(command), 0) == -1) {\n        perror(\"Send failed\");\n        close(sockfd);\n        return -1;\n    }\n\n    // Receive response from the server\n    int bytes_received = recv(sockfd, output_buffer, max_output_size - 1, 0);\n    if (bytes_received == -1) {\n        perror(\"Receive failed\");\n        close(sockfd);\n        return -1;\n    }\n    output_buffer[bytes_received] = '\\0'; // Null-terminate the received data\n\n    // Close the socket\n    close(sockfd);\n\n    // Return the number of bytes received\n    return bytes_received;\n}\n\n/* parse_ost_string:\n *   Parses a openstartracker string into an array of star structures.\n *\n * Input arguments:\n *  - ost_str: The openstartracker string to parse.\n *      Example (2 stars): \"1.0,2.0,3.0,4.0,5.0,6.0,7.0 2.0,3.0,4.0,5.0,6.0,7.0,8.0\"\n *  - max_num_stars: The maximum number of stars to parse.\n *      If the openstartracker string contains more stars than max_num_stars, only the first max_num_stars will be parsed.\n * \n * Output arguments:\n *  - stars: The parsed stars will be stored in this array.\n *      The array must be pre-allocated by the caller.\n *      The array must have at least max_num_stars elements.\n *      If the openstartracker string contains fewer stars than max_num_stars, the remaining elements will be left unchanged.\n *\n * Return value:\n *  - The number of stars successfully parsed from the openstartracker string.\n */\nint parse_ost_string(const char *ost_str, int max_num_stars, star_t *stars) {\n    char *ptr = (char *)ost_str;\n    int i = 0;\n    for (; i < max_num_stars; i++) { \n        // Parse the openstartracker string into a star structure\n        int n = sscanf(ptr, \"%lf,%lf,%lf,%lf,%lf,%lf,%lf\", &stars[i].cam_x, &stars[i].cam_y, &stars[i].cam_z, &stars[i].eci_x, &stars[i].eci_y, &stars[i].eci_z, &stars[i].weight);\n        if (n != 7) {\n            break;\n        }\n        // Move the pointer to the next star\n        ptr = strchr(ptr, ' ');\n        if (ptr == NULL) {\n            break;\n        }\n        // Skip the space character\n        ptr++;\n    }\n    return i;\n}\n\nstar_t stars[MAX_STARS];\nint main() {\n    const char *server_ip = \"127.0.0.1\";  // IP address of the server\n    int server_port = 8010;               // Port number the server is listening on\n    int max_num_stars = MAX_STARS;       // Maximum number of stars to parse\n\n    // Send the image command to the server\n    char output_buffer[BUFFER_SIZE];\n    int bytes_received = sendImageCommand(server_ip, server_port, \"rgb.solve_image('science_cam_may8_0.05sec_gain40/samples/img0.png')\", output_buffer, BUFFER_SIZE);\n    if (bytes_received == -1) {\n        return 1;\n    }\n\n    // Parse the openstartracker string into an array of star structures\n    int num_stars = parse_ost_string(output_buffer, max_num_stars, stars);\n    if (num_stars == 0) {\n        printf(\"No stars found\\n\");\n        return 1;\n    }\n\n    // Print the stars\n    for (int i = 0; i < num_stars; i++) {\n        printf(\"Star %d: cam=(%f, %f, %f), eci=(%f, %f, %f), weight=%f\\n\", i, stars[i].cam_x, stars[i].cam_y, stars[i].cam_z, stars[i].eci_x, stars[i].eci_y, stars[i].eci_z, stars[i].weight);\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "doc/viz_q.m",
    "content": "%Extract the X, Y and Z coordinates\n%M=vertcat(sqrt(.5)*[1 0 0;-1 0 0;0 1 0;0 -1 0;0 0 1;0 0 -1],sqrt(1/3)*[1 1 0;1 -1 0;-1 1 0;-1 -1 0;1 0 1;1 0 -1;-1 0 1;-1 0 -1;0 1 1;0 1 -1;0 -1 1;0 -1 -1],[.5 .5 .5;.5 .5 -.5;.5 -.5 .5;.5 -.5 -.5;-.5 .5 .5;-.5 .5 -.5;-.5 -.5 .5;-.5 -.5 -.5]);\nsz=100;\n[x,y,z]=sphere(sz);\nM=[x(:),y(:),z(:)];\nM=normr(horzcat(M,max(abs(M),[],2)));\n%trisurf(delaunay(M(:,1:3)),M(:,1),M(:,2),M(:,3))\n%surf(reshape(x(:),[sz+1,sz+1]),reshape(y(:),[sz+1,sz+1]),reshape(z(:),[sz+1,sz+1]))\nsurf(reshape(M(:,1),[sz+1,sz+1]),reshape(M(:,2),[sz+1,sz+1]),reshape(M(:,3),[sz+1,sz+1]))\npbaspect([1 1 1])\n"
  },
  {
    "path": "setup.sh",
    "content": "#!/bin/bash\n\n# requires docker to be installed\n\n# build the Dockerfile to include the current director and have internet access\ndocker build --network=host -t startracker1 .\n\n# directory of this setup.sh script\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" >/dev/null 2>&1 && pwd )\"\n\n# Make an alias to start the docker environment\n#   in interactive mode\n#   in the proper directory\nalias dstart='docker run -it -v '$DIR'/:/home startracker1'\n"
  },
  {
    "path": "starsToStruc.py",
    "content": "import ctypes\nimport socket \n\nfrom io import StringIO, BytesIO\n\nclass stars_to_struct():\n    fields = [(\"stars\", ctypes.c_int),\n              (\"declination\", ctypes.c_float),\n              (\"right_ascension\", ctypes.c_float),\n              (\"body_x\", ctypes.c_float*\"stars\"),\n              (\"body_y\", ctypes.c_float*\"stars\"),\n              (\"body_z\", ctypes.c_float*\"stars\"),\n              (\"ref_x\", ctypes.c_float*\"stars\"),\n              (\"ref_y\", ctypes.c_float*\"stars\"),\n              (\"ref_z\", ctypes.c_float*\"stars\"),\n              (\"uncertainty\", ctypes.c_float*\"stars\")]\n    \n    def _init_(self):\n        super(stars_to_struct, self)._init_()\n        self.stars = 0\n        self.declination = 0.0\n        self.right_ascension = 0.0\n        self.body_x = [0.0]*self.stars\n        self.body_y = [0.0]*self.stars\n        self.body_z = [0.0]*self.stars\n        self.ref_x = [0.0]*self.stars\n        self.ref_y = [0.0]*self.stars\n        self.ref_z = [0.0]*self.stars\n        self.uncertainty = [0.0]*self.stars\n    \n    def load_image(self, stars, declination, right_ascension, body_x, body_y, body_z, ref_x, ref_y, ref_z, uncertainty): \n        self.stars = stars\n        self.declination = declination\n        self.right_ascension = right_ascension\n        self.body_x = body_x\n        self.body_y = body_y\n        self.body_z = body_z\n        self.ref_x = ref_x\n        self.ref_y = ref_y\n        self.ref_z = ref_z\n        self.uncertainty = uncertainty\n"
  },
  {
    "path": "startracker.py",
    "content": "from __future__ import print_function\nfrom time import time\nimport sys, traceback\nimport socket,select, os, gc\nimport cv2\nimport numpy as np\nimport numpy.linalg as LA\nfrom io\timport StringIO,BytesIO\nimport fcntl\nimport beast\nfrom systemd import daemon\n\nP_MATCH_THRESH=0.99\nSIMULATE=0\nif 'WATCHDOG_USEC' not in os.environ:\n\tos.environ['WATCHDOG_USEC']=\"30000000\"\n\ndef trace(frame, event, arg):\n\tprint(\"%s, %s:%d\" % (event, frame.f_code.co_filename, frame.f_lineno), file=sys.stderr)\n\treturn trace\n\n#sys.settrace(trace)\n\nCONFIGFILE=sys.argv[1]\nYEAR=float(sys.argv[2])\n\n#set up server before we do anything else\nserver=socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nserver.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\ntry: \n\tserver.bind(('127.0.0.1', 8010))\nexcept:\n\tprint(\"server socket already open: try terminal command: sudo kill $(sudo lsof -t -i:8010)\")\n\texit()\n\nserver.listen(5)\nserver.setblocking(0)\n\nprint (\"Loading config\" )\nprint (CONFIGFILE)\nbeast.load_config(CONFIGFILE)\nprint (\"Loading hip_main.dat\" )\nS_DB=beast.star_db()\nS_DB.load_catalog(\"hip_main.dat\",YEAR)\nprint (\"Filtering stars\" )\nSQ_RESULTS=beast.star_query(S_DB)\nSQ_RESULTS.kdmask_filter_catalog()\nSQ_RESULTS.kdmask_uniform_density(beast.cvar.REQUIRED_STARS)\nS_FILTERED=SQ_RESULTS.from_kdmask()\nprint (\"Generating DB\" )\nC_DB=beast.constellation_db(S_FILTERED,2+beast.cvar.DB_REDUNDANCY,0)\nprint (\"Ready\")\ndef a2q(A):\n\tq4=0.5*np.sqrt(1+np.trace(A));\n\t\n\tq1=1/(4*q4)*(A[1,2]-A[2,1]);\n\tq2=1/(4*q4)*(A[2,0]-A[0,2]);\n\tq3=1/(4*q4)*(A[0,1]-A[1,0]);\n\t\n\treturn np.array([q1,q2,q3,q4])\n\ndef q2a(q):\n\tq=q/LA.norm(q)\n\treturn np.array([[q[0]**2-q[1]**2-q[2]**2+q[3]**2,2*(q[0]*q[1]+q[2]*q[3]),2*(q[0]*q[2]-q[1]*q[3])],[2*(q[0]*q[1]-q[2]*q[3]),-q[0]**2+q[1]**2-q[2]**2+q[3]**2,2*(q[1]*q[2]+q[0]*q[3])],[2*(q[0]*q[2]+q[1]*q[3]),2*(q[1]*q[2]-q[0]*q[3]),-q[0]**2-q[1]**2+q[2]**2+q[3]**2]])\n\n#A=prev_body2ECI\n#B=curr_body2ECI\n#t1=prev_updatetime\n#t2=curr_updatetime\n#t3=present_time\ndef extrapolate_matrix(A,B,t1,t2,t3):\n\t# Calculate error angles between A and B via small angle approximation\n\t# of MRPs.\n\tR=np.dot(B,np.transpose(A))\n\tdq=a2q(R)\n\tdp=np.array([dq[0],dq[1],dq[2]])/(1 + dq[3])\n\tanglesAB=4*dp\n\n\t# Extrapolate to new error angles between B and C.\n\tanglesBC=anglesAB/(t2-t1)*(t3-t2)\n\n\t# Convert to a quaternion via small angle approximation, then get C.\n\t#C=np.dot(q2a(np.array([0.5*anglesBC[0],0.5*anglesBC[1],0.5*anglesBC[2],1])),B)\n\tC=q2a(np.array([0.5*anglesBC[0],0.5*anglesBC[1],0.5*anglesBC[2],1]))\n\n\treturn (C,(1000000.0)*anglesAB/(t2-t1))\n\n#Note: SWIG's policy is to garbage collect objects created with\n#constructors, but not objects created by returning from a function\n\ndef wahba(A, B, weight=[]):\n\t\"\"\"\n\tTakes in two matrices of points and finds the attitude matrix needed to\n\ttransform one onto the other\n\n\tInput:\n\t\tA: nx3 matrix - x,y,z in body frame\n\t\tB: nx3 matrix - x,y,z in eci\n\t\tNote: the \"n\" dimension of both matrices must match\n\tOutput:\n\t\tattitude_matrix: returned as a numpy matrix\n\t\"\"\"\n\tassert len(A) == len(B)\n\tif (len(weight) == 0):\n\t\tweight=np.array([1]*len(A))\n\t# dot is matrix multiplication for array\n\tH =\tnp.dot(np.transpose(A)*weight,B)\n\n\t#calculate attitude matrix\n\t#from http://malcolmdshuster.com/FC_MarkleyMortari_Girdwood_1999_AAS.pdf\n\tU, S, Vt = LA.svd(H)\n\tflip=LA.det(U)*LA.det(Vt)\n\n\t#S=np.diag([1,1,flip]); U=np.dot(U,S)\n\tU[:,2]*=flip\n\n\tbody2ECI = np.dot(U,Vt)\n\treturn body2ECI\n\ndef print_ori(body2ECI):\n\t#DEC=np.degrees(np.arcsin(body2ECI[2,0]))\n\t##rotation about the z axis (-180 to +180)\n\t#RA=np.degrees(np.arctan2(body2ECI[1,0],body2ECI[0,0]))\n\t##rotation about the camera axis (-180 to +180)\n\t#ORIENTATION=np.degrees(-np.arctan2(body2ECI[1,2],body2ECI[2,2]))\n\tDEC=np.degrees(np.arcsin(body2ECI[0,2]))\n\tRA=np.degrees(np.arctan2(body2ECI[0,1],body2ECI[0,0]))\n\tORIENTATION=np.degrees(-np.arctan2(body2ECI[1,2],body2ECI[2,2]))\n\tif ORIENTATION>180:\n\t\tORIENTATION=ORIENTATION-360\n\n\t#rotation about the y axis (-90 to +90)\n\tprint (\"DEC=\"+str(DEC), file=sys.stderr)\n\t#rotation about the z axis (-180 to +180)\n\tprint (\"RA=\"+str(RA), file=sys.stderr)\n\t#rotation about the camera axis (-180 to +180)\n\tprint (\"ORIENTATION=\"+str(ORIENTATION), file=sys.stderr)\n\nclass star_image:\n\tdef __init__(self, imagefile,median_image):\n\t\tb_conf=[time(),beast.cvar.PIXSCALE,beast.cvar.BASE_FLUX]\n\t\tself.img_stars = beast.star_db()\n\t\tself.img_data = []\n\t\tself.match=None\n\t\tself.db_stars=None\n\t\tself.match_from_lm=None\n\t\tself.db_stars_from_lm=None\n\t\t\n\t\t#Placeholders so that these don't get garbage collected by SWIG\n\t\tself.fov_db=None\n\t\tself.const_from_lm=None\n\t\t\n\t\t#TODO: improve memory efficiency\n\t\tif \"://\" in imagefile:\n\t\t\timport urllib\n\t\t\timg=cv2.imdecode(np.asarray(bytearray(urllib.urlopen(imagefile).read()), dtype=\"uint8\"), cv2.IMREAD_COLOR)\n\t\telse:\n\t\t\timg=cv2.imread(imagefile)\n\t\tif img is None:\n\t\t\tprint (\"Invalid image, using blank dummy image\", file=sys.stderr)\n\t\t\timg=median_image\n\t\t\t\n\t\timg=np.clip(img.astype(np.int16)-median_image,a_min=0,a_max=255).astype(np.uint8)\n\t\timg_grey = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)\n\t\t\n\t\t#removes areas of the image that don't meet our brightness threshold\n\t\tret,thresh = cv2.threshold(img_grey,beast.cvar.THRESH_FACTOR*beast.cvar.IMAGE_VARIANCE,255,cv2.THRESH_BINARY)\n\t\tcontours,heirachy = cv2.findContours(thresh,1,2);\n\n\t\tfor c in contours:\n\t\t\tM = cv2.moments(c)\n\t\t\tif M['m00']>0:\n\t\t\t\t#this is how the x and y position are defined by cv2\n\t\t\t\tcx = M['m10']/M['m00']\n\t\t\t\tcy = M['m01']/M['m00']\n\t\t\t\t#see https://alyssaq.github.io/2015/computing-the-axes-or-orientation-of-a-blob/\n\t\t\t\t#for how to convert these into eigenvectors/values\n\t\t\t\tu20 = M[\"m20\"]/M[\"m00\"] - cx**2\n\t\t\t\tu02 = M[\"m02\"]/M[\"m00\"] - cy**2\n\t\t\t\tu11 = M[\"m11\"]/M[\"m00\"] - cx*cy\n\t\t\t\t#the center pixel is used as the approximation of the brightest pixel\n\t\t\t\tself.img_stars+=beast.star(cx-beast.cvar.IMG_X/2.0,(cy-beast.cvar.IMG_Y/2.0),float(cv2.getRectSubPix(img_grey,(1,1),(cx,cy))[0,0]),-1)\n\t\t\t\tself.img_data.append(b_conf+[cx,cy,u20,u02,u11]+cv2.getRectSubPix(img,(1,1),(cx,cy))[0,0].tolist())\n\t\t\n\t\n\tdef match_near(self,x,y,z,r):\n\t\tSQ_RESULTS.kdsearch(x,y,z,r,beast.cvar.THRESH_FACTOR*beast.cvar.IMAGE_VARIANCE)\n\t\t#estimate density for constellation generation\n\t\tC_DB.results.kdsearch(x,y,z,r,beast.cvar.THRESH_FACTOR*beast.cvar.IMAGE_VARIANCE)\n\t\tfov_stars=SQ_RESULTS.from_kdresults()#REE\n\t\tself.fov_db = beast.constellation_db(fov_stars,C_DB.results.r_size(),1)\n\t\tC_DB.results.clear_kdresults()\n\t\tSQ_RESULTS.clear_kdresults()\n\t\t\n\t\timg_const=beast.constellation_db(self.img_stars,beast.cvar.MAX_FALSE_STARS+2,1)\n\t\tnear = beast.db_match(self.fov_db,img_const)\n\t\tif near.p_match>P_MATCH_THRESH:\n\t\t\tself.match = near\n\t\t\tself.db_stars = near.winner.from_match()\n\t\t\n\tdef match_lis(self):\n\t\t#for the first pass, we only want to use the brightest MAX_FALSE_STARS+REQUIRED_STARS\n\t\timg_stars_n_brightest = self.img_stars.copy_n_brightest(beast.cvar.MAX_FALSE_STARS+beast.cvar.REQUIRED_STARS)\n\t\timg_const_n_brightest = beast.constellation_db(img_stars_n_brightest,beast.cvar.MAX_FALSE_STARS+2,1)\n\t\tlis=beast.db_match(C_DB,img_const_n_brightest)\n\t\t#TODO: uncomment once p_match is fixed\n\t\t#if lis.p_match>P_MATCH_THRESH:\n\t\tif lis.p_match>P_MATCH_THRESH and lis.winner.size()>=beast.cvar.REQUIRED_STARS:\n\t\t\tx=lis.winner.R11\n\t\t\ty=lis.winner.R21\n\t\t\tz=lis.winner.R31\n\t\t\tself.match_near(x,y,z,beast.cvar.MAXFOV/2)\n\t\t\t#self.match = lis\n\t\t\t#self.db_stars = lis.winner.from_match()\n\t\t\t\n\tdef match_rel(self,last_match):\n\t\t#make copy of stars from lastmatch\n\t\timg_stars_from_lm=last_match.img_stars.copy()\n\t\tw=last_match.match.winner\n\t\t#convert the stars to ECI\n\t\tfor i in range(img_stars_from_lm.size()):\n\t\t\ts=img_stars_from_lm.get_star(i)\n\t\t\tx=s.x*w.R11+s.y*w.R12+s.z*w.R13\n\t\t\ty=s.x*w.R21+s.y*w.R22+s.z*w.R23\n\t\t\tz=s.x*w.R31+s.y*w.R32+s.z*w.R33\n\t\t\ts.x=x\n\t\t\ts.y=y\n\t\t\ts.z=z\n\t\t#create constellation from last match\n\t\tself.const_from_lm=beast.constellation_db(img_stars_from_lm,beast.cvar.MAX_FALSE_STARS+2,1)\n\t\t#match between last and current\n\t\timg_const=beast.constellation_db(self.img_stars,beast.cvar.MAX_FALSE_STARS+2,1)\n\t\trel=beast.db_match(self.const_from_lm,img_const)\n\t\tif rel.p_match>P_MATCH_THRESH:\n\t\t\tself.match_from_lm = rel\n\t\t\tself.db_stars_from_lm = rel.winner.from_match()\n\t\t\t\t\n\tdef print_match(self,bodyCorrection=None,angrate_string=\"\"):\n\t\tif bodyCorrection is None:\n\t\t\tbodyCorrection=np.eye(3)\n\t\tif self.match is not None:\n\t\t\tself.match.winner.print_ori()\n\t\tdb=self.db_stars\n\t\tim=self.img_stars\n\t\tif db is None:\n\t\t\tif self.db_stars_from_lm is None:\n\t\t\t\t#neither relative nor absolute matching could be used\n\t\t\t\tprint(\"\")\n\t\t\t\treturn\n\t\t\telse:\n\t\t\t\tdb=self.db_stars_from_lm\n\t\tassert(db.size()==im.size())\n\t\tstar_out=[]\n\t\tfor i in range(db.size()):\n\t\t\ts_im=im.get_star(i)\n\t\t\ts_db=db.get_star(i)\n\t\t\tif (s_db.id>=0):\n\t\t\t\tweight=1.0/(s_db.sigma_sq+s_im.sigma_sq)\n\t\t\t\ttemp=np.dot(bodyCorrection, np.array([[s_im.x],[s_im.y],[s_im.z]]))\n\t\t\t\tstar_out.append(str(temp[0,0])+','+str(temp[1,0])+','+str(temp[2,0])+','+str(s_db.x)+','+str(s_db.y)+','+str(s_db.z)+','+str(weight))\n\t\tprint (\"stars\",len(star_out), file=sys.stderr)\n\t\tprint (\"ang_rate: \"+angrate_string, file=sys.stderr)\n\t\tprint (\" \".join(star_out)+\" \"+angrate_string)\n\nNONSTARS={}\nNONSTAR_NEXT_ID=0\nNONSTAR_DATAFILENAME=\"/dev/null\"\n#NONSTAR_DATAFILENAME=\"data\"+str(time())+\".txt\"\nNONSTAR_DATAFILE=open(NONSTAR_DATAFILENAME,\"w\")\nclass nonstar:\n\tdef __init__(self,current_image,i,source):\n\t\tglobal NONSTARS,NONSTAR_NEXT_ID,NONSTAR_DATAFILENAME,NONSTAR_DATAFILE\n\t\tself.id=NONSTAR_NEXT_ID\n\t\tNONSTARS[self.id]=self\n\t\tcurrent_image.img_stars.get_star(i).id=self.id\n\t\tNONSTAR_NEXT_ID+=1\n\t\tself.data=[]\n\t\tself.add_data(current_image,i,source)\n\t\t\n\tdef add_data(self,current_image,i,source):\n\t\ts_im=current_image.img_stars.get_star(i)\n\t\ts_db_x=0.0\n\t\ts_db_y=0.0\n\t\ts_db_z=0.0\n\t\tw=None\n\t\tif (current_image.match != None and current_image.match.p_match>P_MATCH_THRESH):\n\t\t\tw=current_image.match.winner\n\t\telif (current_image.match != None and current_image.match.p_match>P_MATCH_THRESH):\n\t\t\tw=current_image.match_from_lm.winner\n\t\tif w != None:\n\t\t\t#convert the stars to ECI\n\t\t\ts_db_x=s_im.x*w.R11+s_im.y*w.R12+s_im.z*w.R13\n\t\t\ts_db_y=s_im.x*w.R21+s_im.y*w.R22+s_im.z*w.R23\n\t\t\ts_db_z=s_im.x*w.R31+s_im.y*w.R32+s_im.z*w.R33\n\t\tself.data.append([source,s_im.x,s_im.y,s_im.z,s_db_x,s_db_y,s_db_z]+current_image.img_data[i])\n\tdef write_data(self,fd):\n\t\tif sys.version_info[0]>2:\n\t\t\tos.write(fd,bytes(str(self.id)+\" \" +str(len(self.data))+\"\\n\",encoding='UTF-8'))\n\t\telse:\n\t\t\tos.write(fd,str(self.id)+\" \" +str(len(self.data))+\"\\n\")\n\t\tfor i in self.data:\n\t\t\ts=[str(j) for j in i]\n\t\tif sys.version_info[0]>2:\n\t\t\tos.write(fd,bytes(\" \".join(s)+\"\\n\",encoding='UTF-8'))\n\t\telse:\n\t\t\tos.write(fd,\" \".join(s)+\"\\n\")\n\tdef __del__(self):\n\t\tself.write_data(NONSTAR_DATAFILE.fileno())\n\ndef flush_nonstars():\n\tglobal NONSTARS,NONSTAR_NEXT_ID,NONSTAR_DATAFILENAME,NONSTAR_DATAFILE\n\tNONSTARS={}\n\tNONSTAR_NEXT_ID=0\n\tgc.collect()\n\tNONSTAR_DATAFILE.close()\n\tNONSTAR_DATAFILENAME=\"data\"+str(time())+\".txt\"\n\tNONSTAR_DATAFILE=open(NONSTAR_DATAFILENAME,\"w\")\n\t\ndef update_nonstars(current_image,source):\n\tglobal NONSTARS,NONSTAR_NEXT_ID\n\tnonstars_next={}\n\tim=current_image.img_stars\n\tdb=current_image.db_stars\n\tdb_lm=current_image.db_stars_from_lm\n\tif (db!=None):\n\t\tassert(db.size()==im.size())\n\tif (db_lm!=None):\n\t\tassert(db_lm.size()==im.size())\n\t\tfor i in range(im.size()):\n\t\t\tim.get_star(i).id=db_lm.get_star(i).id\n\tfor i in range(im.size()):\n\t\ts_im=im.get_star(i)\n\t\t#is this a star? if so remove from nonstars\n\t\tif (db != None and db.get_star(i).id>=0):\n\t\t\tif (s_im.id in NONSTARS):\n\t\t\t\tdel NONSTARS[s_im.id]\n\t\t\ts_im.id=-1\n\t\t#if it's already there, add the latest mesurement\n\t\telif (s_im.id in NONSTARS):\n\t\t\tNONSTARS[s_im.id].add_data(current_image,i,source)\n\t\t\tnonstars_next[s_im.id]=NONSTARS[s_im.id]\n\t\t#otherwise add a new nonstar\n\t\telse:\n\t\t\tns=nonstar(current_image,i,source)\n\t\t\tnonstars_next[ns.id]=ns\n\tNONSTARS=nonstars_next\n\t\n\t#wrap around to prevent integer overflow\n\tif (NONSTAR_NEXT_ID>2**30):\n\t\tflush_nonstars()\n\ndef winner_attitude(w):\n\t#w=self.last_match.match.winner\n\teci2body=np.array([[1,0,0],[0,1,0],[0,0,1]],dtype=float)\n\teci2body[0,0]=w.R11\n\teci2body[0,1]=w.R12\n\teci2body[0,2]=w.R13\n\teci2body[1,0]=w.R21\n\teci2body[1,1]=w.R22\n\teci2body[1,2]=w.R23\n\teci2body[2,0]=w.R31\n\teci2body[2,1]=w.R32\n\teci2body[2,2]=w.R33\n\treturn np.transpose(eci2body)\n\nclass star_camera:\n\tdef __init__(self, median_file,source=\"RGB\"):\n\t\tself.source=source\n\t\tself.current_image=None\n\t\tself.last_match=None\n\t\tself.median_image=cv2.imread(median_file)\n\t\n\tdef solve_image(self,imagefile,lis=1,quiet=0):\n\t\tstarttime=time()\n\t\tif (SIMULATE==1 and quiet==0):\n\t\t\ts = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t\t\ts.connect((\"jeb\",7011))\n\t\t\tdata = s.recv(2048)\n\t\t\ts.close()\n\t\tprint(\"Time1: \"+str(time() - starttime), file=sys.stderr)\n\t\tself.current_image=star_image(imagefile,self.median_image)\n\t\tprint(\"Time2: \"+str(time() - starttime), file=sys.stderr)\n\t\tif (lis==1):\n\t\t\tself.current_image.match_lis()\n\t\tprint(\"Time3: \"+str(time() - starttime), file=sys.stderr)\n\t\tif self.last_match is not None:\n\t\t\tself.current_image.match_rel(self.last_match)\n\t\tif (quiet==0):\n\t\t\tif (SIMULATE==1): \n\t\t\t\tprint (data.rstrip(\"\\n\").rstrip(\"\\r\"))\n\t\t\telse:\n\t\t\t\tself.current_image.print_match()\n\t\t\tprint(\"Time4: \"+str(time() - starttime), file=sys.stderr)\n\t\t\t\n\t\tupdate_nonstars(self.current_image,self.source)\n\t\tprint(\"Time5: \"+str(time() - starttime), file=sys.stderr)\n\t\tif self.current_image.match is not None:\n\t\t\tself.last_match=self.current_image\n\t\telse:\n\t\t\tself.last_match=None\n\t\tprint(\"Time6: \"+str(time() - starttime), file=sys.stderr)\n\t\t\n\tdef extrapolate_image(self,imagefile1,imagefile2,time1,time2):\n\t\t#self.solve_image(imagefile2,lis=1,quiet=0)\n\t\tself.solve_image(imagefile1,lis=1,quiet=1)\n\t\tprint(1, file=sys.stderr)\n\t\tif (self.last_match is None):\n\t\t\tprint(2, file=sys.stderr)\n\t\t\tprint (\"\")\n\t\t\treturn\n\t\ta1=winner_attitude(self.last_match.match.winner)\n\t\tself.solve_image(imagefile2,lis=1,quiet=1)\n\t\tprint(3, file=sys.stderr)\n\t\tif (self.last_match is None):\n\t\t\tprint(4, file=sys.stderr)\n\t\t\tprint (\"\")\n\t\t\treturn\n\t\ta2=winner_attitude(self.last_match.match.winner)\n\t\tprint(a1,a2,LA.svd(a1)[1],LA.svd(a1)[1], file=sys.stderr)\n\t\ta,angrate=extrapolate_matrix(a1,a2,time1,time2,time()*1e6)\n\t\tprint(a,LA.svd(a)[1], file=sys.stderr)\n\t\t\n\t\tself.last_match.print_match(a,\",\".join([str(i) for i in angrate.tolist()]))\n\t\t\n#dummy for now\n#TODO: add science data from IR cam\nclass science_camera:\n\tdef __init__(self, median_file,source=\"IR\"):\n\t\tself.source=source\n\t\tself.current_image=None\n\t\tself.last_match=None\n\t\tself.median_image=cv2.imread(median_file)\n\tdef solve_image(self,imagefile):\n\t\tif sys.version_info[0]>2:\n\t\t\tos.write(1,bytes(os.path.abspath(NONSTAR_DATAFILENAME),encoding='UTF-8'))\n\t\telse:\n\t\t\tos.write(1,os.path.abspath(NONSTAR_DATAFILENAME))\n\nrgb=star_camera(sys.argv[3])\nir=science_camera(sys.argv[3])\n\nCONNECTIONS = {}\nclass connection:\n\t\"\"\"Tracks activity on a file descriptor and allows TCP read/writes\"\"\"\n\tdef __init__(self, conn, epoll):\n\t\t\"\"\"\n\t\tCreate connection to track file descriptor activity\n\t\t@note: Adds C{fd . self} to C{CONNECTIONS}\n\t\t@param conn: Any file object with the fileno() method\n\t\t@param epoll: File descriptor edge polling object\n\t\t\"\"\"\n\t\tself.conn=conn\n\t\tself.fd = self.conn.fileno()\n\t\tepoll.register(self.fd, select.EPOLLIN)\n\t\tself.epoll = epoll\n\t\tCONNECTIONS[self.fd] = self\n\n\tdef read(self):\n\t\t\"\"\"\n\t\tComplete non-blocking read on file descriptor\n\t\tof an arbitrary amount of data\n\t\t@return: Entire read string\n\t\t@rtype: C{string}\n\t\t\"\"\"\n\t\t# need nonblocking for read\n\t\tfl = fcntl.fcntl(self.fd, fcntl.F_GETFL)\n\t\tfcntl.fcntl(self.fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)\n\t\tdata = b''\n\t\ttry:\n\t\t\twhile True:\n\t\t\t\tlastlen=len(data)\n\t\t\t\tdata += os.read(self.fd, 1024)\n\t\t\t\tif len(data)==lastlen:\n\t\t\t\t\tbreak\n\t\texcept OSError as e:\n\t\t\t# error 11 means we have no more data to read\n\t\t\tif e.errno == 11:\n\t\t\t\tpass\n\t\t\telif e.errno == 104:\n\t\t\t\tprint(\"WARNING: ABNORMAL DISCONNECT\", file=sys.stderr)\n\t\t\telse:\n\t\t\t\traise\n\t\treturn data\n\n\tdef write(self, data):\n\t\t\"\"\"\n\t\tBlocking read on file descriptor\n\t\t@param data: ASCII data to write\n\t\t@type data: C{string}\n\t\t\"\"\"\n\t\tif len(data) == 0: return\n\t\tif self.fd==0: #stdin\n\t\t\tif sys.version_info[0]>2:\n\t\t\t\tos.write(1, bytes(data,encoding='UTF-8'))\n\t\t\telse:\n\t\t\t\tos.write(1, data)\n\t\t\treturn\n\t\t# need blocking IO for writing\n\t\tfl = fcntl.fcntl(self.fd, fcntl.F_GETFL)\n\t\tfcntl.fcntl(self.fd, fcntl.F_SETFL, fl & ~os.O_NONBLOCK)\n\t\tif sys.version_info[0]>2:\n\t\t\tos.write(self.fd, bytes(data,encoding='UTF-8'))\n\t\telse:\n\t\t\tos.write(self.fd, data)\n\n\tdef close(self):\n\t\t\"\"\"Close connection with file descriptor\"\"\"\n\t\tself.epoll.unregister(self.fd)\n\t\tself.conn.close()\n\t\tif CONNECTIONS[self.fd]:\n\t\t\tdel CONNECTIONS[self.fd]\n\nepoll = select.epoll()\nepoll.register(server.fileno(), select.EPOLLIN)\n\ntry:\n\tconnection(sys.stdin,epoll)\nexcept IOError:\n\tpass\n\ndaemon.notify(\"WATCHDOG=1\")\nlastPing = time()\nwhile True:\n\t#systemd watchdog\n\tevents = epoll.poll(float(os.environ['WATCHDOG_USEC'])/2.0e6 - (time() - lastPing))\n\tif len(events) == 0 or time() >= (lastPing + float(os.environ['WATCHDOG_USEC'])/2.0e6):\n\t\tdaemon.notify(\"WATCHDOG=1\")\n\t\tlastPing = time()\n\t#events = epoll.poll()\n\tfor fd, event_type in events:\n\t\t# Activity on the master socket means a new connection.\n\t\tif fd == server.fileno():\n\t\t\tconn, addr = server.accept()\n\t\t\tconnection(conn, epoll)\n\t\telif fd in CONNECTIONS:\n\t\t\tw = CONNECTIONS[fd]\n\t\t\tdata = w.read()\n\t\t\tprint(data.decode(encoding='UTF-8'), file=sys.stderr)\n\t\t\tif len(data) > 0:\n\t\t\t\tif sys.version_info[0]>2:\n\t\t\t\t\tstdout_redir = StringIO()\n\t\t\t\telse:\n\t\t\t\t\tstdout_redir = BytesIO()\n\t\t\t\tstdout_old = sys.stdout\n\t\t\t\tsys.stdout = stdout_redir\n\t\t\t\ttry:\n\t\t\t\t\texec(data)\n\t\t\t\texcept SystemExit:\n\t\t\t\t\tw.close()\n\t\t\t\t\traise\n\t\t\t\texcept:\n\t\t\t\t\ttraceback.print_exc(file=sys.stdout)\n\t\t\t\tsys.stdout = stdout_old\n\t\t\t\tdata_out = stdout_redir.getvalue()\n\t\t\t\tprint(data_out, file=sys.stderr)\n\t\t\t\tw.write(data_out)\n\t\t\telse:\n\t\t\t\tw.close()\n\n"
  },
  {
    "path": "tests/Makefile",
    "content": "CC = g++\n\nall: $(OBJ)\n\t$(CC) -std=c++11 -Wall -Ofast -g -pg test.c -o test -lm\n\n"
  },
  {
    "path": "tests/calibrate.py",
    "content": "from __future__ import print_function\nfrom os import listdir,system,environ\nfrom os.path import isfile, join\nimport cv2\nimport numpy as np\nimport math\nfrom scipy.stats import poisson\nimport sys\nfrom astropy.io import fits\nfrom astropy import wcs\nfrom scipy import spatial\n\n## Environment variables:\ntry: EXPOSURE_TIME = float(environ['EXPOSURE_TIME'])\nexcept KeyError: EXPOSURE_TIME = 0.05 # s\ntry: APERTURE = float(environ['APERTURE'])\nexcept KeyError: APERTURE = 60.7 # mm\ntry: DOUBLE_STAR_PX = float(environ['DOUBLE_STAR_PX'])\nexcept KeyError: DOUBLE_STAR_PX = 3.5 #pixels of seperation needed to distinguish stars from each other\ntry: POS_ERR_SIGMA = float(environ['POS_ERR_SIGMA'])\nexcept KeyError: POS_ERR_SIGMA = 2 #Check all constellations which fall inside these bounds\n### Note: Increasing this can actualy reduce the probability of finding a match\n### as the true match has to stand out against a larger crowd \n\n\n### NOTE: all of the following options multiply runtime by (N+2)^2\ntry: MAX_FALSE_STARS = int(environ['MAX_FALSE_STARS'])\nexcept KeyError: MAX_FALSE_STARS = 2 #maximum number of objects that can be brighter than the two brightest stars \ntry: DB_REDUNDANCY = int(environ['DB_REDUNDANCY'])\nexcept KeyError: DB_REDUNDANCY = 1 #of the brightest DB_REDUNDANCY+2 stars, we need at least 2\ntry: REQUIRED_STARS = int(environ['REQUIRED_STARS'])\nexcept KeyError: REQUIRED_STARS = 5 #How many stars should we try to match?\n### For ultrawide fov this may be set to 3 for faster matching\n### For ultranarrow fov, it may be necessary to set this to 5 (Also send me an email and we'll talk)\n### TODO: figure out how big \"ultrawide\" and \"ultranarrow\" are\n\ndef angles2xyz(ra,dec):\n\tx=np.cos(np.radians(ra))*np.cos(np.radians(dec))\n\ty=np.sin(np.radians(ra))*np.cos(np.radians(dec))\n\tz=np.sin(np.radians(dec))\n\treturn list((x,y,z))\n\n#load our star catalog, converting from id,ra,dec to x,y,z,id\ndef getstardb(year=1991.25,filename=\"hip_main.dat\"):\n\tyeardiff=year-1991.25\n\tstardb={}\n\tstarfile = open(filename)\n\tfor line in starfile.readlines():\n\t\tfields=line.split('|')\n\t\ttry:\n\t\t\tHIP_ID=int(fields[1]);\n\t\t\tMAG=float(fields[5]);\n\t\t\tDEC=yeardiff*float(fields[13])/3600000.0 + float(fields[9]);\n\t\t\tcosdec=np.cos(np.pi*DEC/180.0);\n\t\t\tRA=yeardiff*float(fields[12])/(cosdec*3600000.0) + float(fields[8]);\n\t\t\tX=np.cos(np.pi*RA/180.0)*cosdec;\n\t\t\tY=np.sin(np.pi*RA/180.0)*cosdec;\n\t\t\tZ=np.sin(np.pi*DEC/180.0);\n\t\texcept ValueError:\n\t\t\tcontinue\n\t\ttry:\n\t\t\tf6=int(fields[6])\n\t\texcept ValueError:\n\t\t\tf6=0\n\t\tif (int(fields[29])==0 or int(fields[29])==1) and f6!=3:\n\t\t\tUNRELIABLE=0\n\t\telse:\n\t\t\tUNRELIABLE=1\n\t\tstardb[HIP_ID]=[HIP_ID,MAG,DEC,RA,X,Y,Z,UNRELIABLE]\n\treturn stardb\n\n\ndef basename(filename):\n\tif \".\" in filename:\n\t\tfilename=\".\".join(filename.split(\".\")[0:-1])\n\treturn filename\n\n#only do this part if we were run as a python script\nif __name__ == '__main__':\n\tsamplepath=sys.argv[1]+\"/samples\"\n\timage_names = [ f for f in listdir(samplepath) if isfile(join(samplepath,f)) ]\n\tnum_images=len(image_names)\n\t#NOTE: if you get NoneType error, delete non-png files\n\timages = np.asarray([cv2.imread( join(samplepath,image_names[n]) ).astype(float) for n in range(0, num_images)])\n\tmedian_image=np.median(images,axis=0)\n\tcv2.imwrite(sys.argv[1]+\"/median_image.png\",median_image)\n\tsystem(\"md5sum \"+samplepath+\"/* >\"+sys.argv[1]+\"/checksum.txt\")\n\tif system(\"diff -q \"+sys.argv[1]+\"/checksum.txt \"+sys.argv[1]+\"/calibration_data/checksum.txt\")!=0:\n\t\tprint (\"Clearing old calibration data:\")\n\t\tsystem(\"rm -rfv \"+sys.argv[1]+\"/calibration_data/* \")\n\t\n\tsystem(\"mv \"+sys.argv[1]+\"/checksum.txt \"+sys.argv[1]+\"/calibration_data/checksum.txt\")\n\t\t\n\tstardb=getstardb()\n\t\n\tastrometry_results={}\n\t#filter the background image for astrometry - more important for starfield generator\n\tfor n in range(0, num_images):\n\t\timages[n]-=median_image\n\t\timage_name=sys.argv[1]+\"/calibration_data/\"+basename(image_names[n])+\".png\"\n\t\timg=np.clip(images[n],a_min=0,a_max=255).astype(np.uint8)\n\t\tcv2.imwrite(image_name,img)\n\t\tsolve_cmd=\"solve-field --skip-solved --cpulimit 60 \"+image_name\n\t\t#solve_cmd=\"solve-field --skip-solved --cpulimit 60 -v \"+image_name #verbose\n\t\tprint (solve_cmd)\n\t\tsystem(solve_cmd)\n\t\tif isfile(basename(image_name)+'.wcs'):\n\t\t\tprint ('wcsinfo '+basename(image_name)+'.wcs  | tr [:lower:] [:upper:] | tr \" \" \"=\" | grep \"=[0-9.-]*$\" > '+basename(image_name)+'.solved')\n\t\t\tsystem('wcsinfo '+basename(image_name)+'.wcs  | tr [:lower:] [:upper:] | tr \" \" \"=\" | grep \"=[0-9.-]*$\" > '+basename(image_name)+'.solved')\n\t\t\thdulist=fits.open(basename(image_name)+\".corr\")\n\t\t\tastrometry_results[image_names[n]]=np.array([[i['flux'],i['field_x'],i['field_y'],i['index_x'],i['index_y']]+angles2xyz(i['index_ra'],i['index_dec']) for i in hdulist[1].data])\n\t\t\n\t\n\t#Use only values below the median for variance calculation.\n\t#This is equivalent to calculating variance after having filtered out\n\t#stars and background light\n\tTHRESH_FACTOR=5\n\tIMAGE_VARIANCE=np.ma.average(images**2,weights=images<0)\n\t\n\tbestimage=\"\"\n\tmaxstars=0\n\t#for stars over 5*IMAGE_VARIANCE, find the corresponding star in the db\n\tsd = np.array(list(stardb.values()), dtype = object)\t#<SB> had to explicitly convert to list for python3\n\t\n\tstar_kd = spatial.cKDTree(sd[:,4:7])\n\tfor i in astrometry_results:\n\t\tastrometry_results[i]=astrometry_results[i][astrometry_results[i][:,0]>IMAGE_VARIANCE*THRESH_FACTOR]\n\t\tastrometry_results[i]=np.hstack((sd[star_kd.query(astrometry_results[i][:,5:8])[1]],astrometry_results[i]))\n\t\tif len(astrometry_results[i])>maxstars:\n\t\t\tbestimage=i\n\t\t\tmaxstars=len(astrometry_results[i])\n\tastrometry_results_all=np.vstack(list(astrometry_results.values()))\n\t# Expicitly convert to a float array to prevent numpy error\n\tastrometry_results_all = astrometry_results_all.astype('float')\n\t\n\t#find the dimmest star\n\tdimmest_match = astrometry_results_all[np.argmax(astrometry_results_all[:,1]),:]\n\n\tBASE_FLUX=dimmest_match[8]/pow(10.0,-dimmest_match[1]/2.5)\n\tprint (\"BASE_FLUX: \",BASE_FLUX) \n\t\n\tdb_img_dist=np.linalg.norm(astrometry_results_all[:,9:11]-astrometry_results_all[:,11:13],axis=1)\n\tdb_img_dist=db_img_dist-IMAGE_VARIANCE/(astrometry_results_all[:,8])\n\t\n\tPOS_VARIANCE=np.mean(db_img_dist)\n\t\n\t#<SB> execfile went away in python3\n\t#https://stackoverflow.com/questions/6357361/alternative-to-execfile-in-python-3\n\tfilename = sys.argv[1]+\"/calibration_data/\"+basename(bestimage)+\".solved\"\n\texec(compile(open(filename, \"rb\").read(), filename, 'exec'))\n\t\n\tf_calib=open(sys.argv[1]+\"/calibration.txt\", 'w')\n\tf_calib.write(\"IMG_X=\"+str(IMAGEW)+\"\\n\")\n\tf_calib.write(\"IMG_Y=\"+str(IMAGEH)+\"\\n\")\n\tf_calib.write(\"PIXSCALE=\"+str(PIXSCALE)+\"\\n\")\n\tf_calib.write(\"DB_REDUNDANCY=\"+str(DB_REDUNDANCY)+\"\\n\")\n\tf_calib.write(\"DOUBLE_STAR_PX=\"+str(DOUBLE_STAR_PX)+\"\\n\")\n\tf_calib.write(\"REQUIRED_STARS=\"+str(REQUIRED_STARS)+\"\\n\")\n\tf_calib.write(\"MAX_FALSE_STARS=\"+str(MAX_FALSE_STARS)+\"\\n\")\n\tf_calib.write(\"BASE_FLUX=\"+str(BASE_FLUX)+\"\\n\")\n\tf_calib.write(\"THRESH_FACTOR=\"+str(THRESH_FACTOR)+\"\\n\")\n\tf_calib.write(\"IMAGE_VARIANCE=\"+str(IMAGE_VARIANCE)+\"\\n\")\n\tf_calib.write(\"POS_ERR_SIGMA=\"+str(POS_ERR_SIGMA)+\"\\n\")\n\tf_calib.write(\"POS_VARIANCE=\"+str(POS_VARIANCE)+\"\\n\")\n\tf_calib.write(\"APERTURE=\"+str(APERTURE)+\"\\n\")\n\tf_calib.write(\"EXPOSURE_TIME=\"+str(EXPOSURE_TIME)+\"\\n\")\n\tf_calib.close()\n\t\n\tprint (\"Calibration finished\")\n\tprint (\"calibration.txt and median_image.png are in \"+sys.argv[1]+\"\\n\")\n\tsystem(\"cat \"+sys.argv[1]+\"/calibration.txt\")\n"
  },
  {
    "path": "tests/science_cam_may8_0.05sec_gain40/calibration.txt",
    "content": "IMG_X=1392\nIMG_Y=1040\nPIXSCALE=15.7768356032\nDB_REDUNDANCY=1\nDOUBLE_STAR_PX=3.5\nREQUIRED_STARS=5\nMAX_FALSE_STARS=2\nBASE_FLUX=254758.120205\nTHRESH_FACTOR=5\nIMAGE_VARIANCE=2.12414468046\nPOS_ERR_SIGMA=2\nPOS_VARIANCE=0.666903299486\nAPERTURE=60.7\nEXPOSURE_TIME=0.05\n"
  },
  {
    "path": "tests/science_cam_may8_0.05sec_gain40/calibration_data/.gitignore",
    "content": "# ignore all the calibration outputs in this directory, but don't ignore this .gitignore file\n*\n!.gitignore\n"
  },
  {
    "path": "tests/science_cam_may8_0.05sec_gain40/input.csv",
    "content": "1332.66135414,1005.65868251,9.27684107053,668.988734129,830.457341566,9.76312036221,1086.81114937,464.955892187,7.77428272825,252.52804707,586.92908643,8.96669902205,810.549694541,909.672468917,6.67570087357,1222.77253018,588.922220972,9.09333834234,47.8054763038,215.68989355,9.68856752687,155.37293176,102.037964161,9.93286761468,1211.85862788,631.498265359,8.42413992351,1158.19421457,16.883473647,9.03784428344,550.527074851,351.967375445,7.04454402364,1035.70951011,179.052375687,7.80281486578,745.421840851,723.192195778,9.64978076066,893.575154082,493.966146616,10.2691241853,341.183745219,134.211038454,6.8262450064,663.47598836,993.625426313,8.88604694037,878.931937752,59.0887557823,8.12825542144,530.899387009,68.3497597776,8.69925204243,48.6301861272,750.818020798,7.17102229746,538.77769969,843.165215628,8.07385539306,1126.80197661,96.6815209717,7.23839628871,1195.0039573,766.553198746,7.83002695359,778.442991882,734.239442645,8.98892455436,389.854681168,813.250786801,10.3819620783,1199.18962075,445.460883651,8.49054356324,1244.33324977,843.263615312,7.74220053988,1133.03379914,312.108485129,7.460106584,428.860210364,49.1137933311,8.66706978222,442.610329145,706.495818936,6.68162303057,553.288210904,1031.29588468,9.87530276662,745.018908822,227.616401557,7.85192332412,706.064549624,124.445431798,8.99762316643,907.35834934,161.573987156,7.55659177796,1292.24658496,567.709089909,9.17607559759,708.811923457,434.435344299,8.23507548301,55.6824121956,32.1080370985,9.30940180884,1367.26130863,798.527335616,8.60603196482,8.52994280141,892.559738307,9.00410617275,936.706605963,309.36602258,8.45638566575,919.732674913,118.59412702,8.09732282652,993.125128963,701.543990499,8.74720398814,1142.41539859,357.888915335,7.40120262257,380.318257941,610.652920347,7.65963419734,1214.63298937,124.799484879,9.89266690486,894.814636584,958.227777159,10.8916802947,981.540497619,424.321568881,7.86877067496,1088.07474413,924.876826698,8.8945156091,293.058423834,505.163872888,7.21827209799,653.743191279,325.206887944,8.08294207819,1169.83563685,293.762541805,7.97295714855,351.360974628,385.404218102,6.26380735588,1383.46986196,47.6180909771,8.81337708816,353.476290031,884.74272247,6.50625132605,1188.4572659,241.499550703,7.3433412911,349.171686796,1.78688525006,10.7863770211,697.75369712,468.903583642,10.0073128336,969.106478415,435.247992142,8.25199979098,445.282887464,997.604679554,9.52032407196,579.741471062,537.566133275,9.33044815785,289.890174343,185.965372827,8.42171109675,34.3416764664,607.321210309,8.1663780163,839.778639893,449.639379723,6.93819352732,894.517304047,490.783485168,7.63970126336,674.088357472,7.21357647729,7.9113477377,271.245537763,901.728787463,7.13004025655,130.122980674,538.981134709,7.41641308146,174.795081003,788.044874365,7.88548103111,519.64363743,626.800745885,8.78715385698,443.989655145,1033.80565811,7.35381529356,195.290766237,248.52452148,8.40085734041,1331.03316444,363.58614873,7.21789962467,1365.10303272,855.313927946,6.53462122133,193.482075012,1028.52089922,8.88493282993,531.926375169,131.656314787,9.90691242008,304.876302472,552.086823904,8.42745685035,664.128687263,107.7798142,8.50176239177,693.957041092,831.70783991,8.91916380322,1274.7570241,1032.08049656,8.82080400554,1003.66946637,746.246100436,8.60818660145,233.186497325,602.615915382,7.99336494193,624.714860064,650.464351469,8.92562889079,109.998625488,308.140080994,7.48643300472,71.2039075457,258.994652725,10.0484150283,526.667680804,279.191507679,9.57594469155,901.747099641,572.744624963,8.4175551312,835.04885274,837.436077076,8.01422621988,4.15643690466,273.16175585,8.11250596628,191.800809728,332.896753484,8.28901225384,1053.39040359,732.559469306,9.79655811435,183.705755281,754.160515257,8.03360767957,1242.77487761,975.301822611,6.9085260576,313.59644267,674.072634771,7.75830397039,552.397778382,485.832875076,9.44546945441\n944.69742609,72.8980624104,7.39656102292,262.303232843,614.845511191,8.4788528588,21.4038946892,262.489453583,6.5663163383,7.25423398866,24.6277721103,9.21068910086,963.844181491,181.75000974,8.55608972161,399.835769215,452.856157083,8.17919160447,422.996464844,561.40856483,7.16151654833,1265.47626687,176.390152153,8.1502239686,172.751544984,456.771289528,7.60967962467,928.336312796,248.042606949,5.90627340893,334.960110822,775.65934916,7.90969285114,71.747194989,106.618080266,7.86405732352,738.506702891,657.432299132,8.08316055767,680.148330544,779.890353534,6.06728448844,1257.20727154,625.416686358,7.26017268027,364.746484888,803.231061485,10.2208641996,445.262244817,499.240820148,8.13533723207,703.237221803,954.861612723,8.83432766743,1324.64848395,801.074312784,7.38839502415,1312.41157759,853.791276665,7.64448309998,773.918573911,710.17249481,7.13424781959,844.112269164,84.0919228077,7.25433438754,823.172648943,269.211439929,7.5015409017,739.377744113,514.199518749,6.95195660116,640.881301089,731.496519739,9.2722867377,226.134036557,788.123390348,8.03200271261,742.826627301,793.604506117,8.85416366108,640.790319142,609.371349401,7.50758437035,1218.79104134,951.683689975,10.2782907076,716.941858104,867.207203557,8.08707454032,940.754393342,522.115420386,8.13183436949,1070.21319305,924.708726057,8.29051238504,278.618000929,664.730676869,7.53554709936,1325.77322284,472.742446356,7.0080280503,589.307238478,736.504751912,7.77363339726,1287.68941796,396.596248276,5.9724914022,1222.19815709,506.847336409,9.84804377965,466.820990642,545.69717745,8.495863722,747.27484709,399.472981303,8.1830626062,574.375531253,338.70011729,7.64134241042,514.030967258,852.873455858,7.62463256413,893.304976652,740.41272758,10.3514977296,845.88916067,83.7088364964,8.32424475947,341.75554737,249.04928767,7.23187527039,261.467229982,337.826807625,7.89050704003,95.3682811109,734.963396365,8.45028399267,80.8278568687,584.727241903,7.30628979317,821.39171365,393.559676837,7.21994081832,1092.2365702,915.294157047,7.02995343335,606.951229596,894.593105826,7.52922364713,1147.66759145,36.6829470231,6.88293108562,1074.35834258,373.363189599,9.90025087967,1222.9050915,121.888287545,7.99481461426,440.738065203,305.556316223,7.9453723581,997.714704505,858.949936474,10.0827406557,1102.35057936,239.236127154,6.66987951459,953.090218857,589.259186495,7.40988139347,838.577466339,144.257491248,8.66054093976,852.498159605,949.724648122,8.21364926138,550.761314738,525.099169264,7.53811305131,751.678214493,9.72837911186,9.68338593765,119.25959842,401.920179587,7.63772388059\n826.716286273,367.530930975,7.60377918486,864.254278142,221.125818586,8.2457913237,1177.38692222,595.557802068,9.13118110706,1085.76751818,159.991345211,7.25451977909,176.177028513,4.8565141692,9.22371873376,1359.42196389,253.902372813,7.6755204702,1256.61578823,142.166218951,9.5737999465,34.8582427072,313.564907664,8.66478318416,1029.98328305,985.948235975,9.5818056248,346.820989598,881.302620984,10.1881564225,1027.56527566,1015.30938536,9.60676539534,569.599591169,107.186361903,7.67776236833,835.405542996,843.419530315,9.96028676248,358.026777331,726.008517338,8.52127138275,1052.27563779,737.955618718,7.25638401399,864.332549464,604.462753901,8.4238503186,753.492439995,1035.20788787,8.61244868047,443.892120754,770.561951799,7.7276132328,1265.99037801,635.48223652,9.73808397487,16.0783890149,391.157417279,9.2642527889,1368.6382598,282.49794426,7.38079215595,871.426025994,1015.66692096,7.40255546799,520.774214338,649.248040797,9.08200490328,422.636768768,395.089530519,7.58797121993,401.011674109,246.873090792,8.15508596205,362.213703441,293.837862503,7.78911799784,680.759551517,245.399023089,8.26958935329,644.513838838,744.568734693,8.63342827545,194.423792513,458.961623555,7.7385918515,1144.15285892,607.474393391,7.6565249563,872.860423514,987.52893227,8.30755708937,1002.98230593,501.535038866,10.8474435611,292.51429368,346.981908902,8.26536161867,425.946391897,189.496008028,7.63091260616,1315.31431202,991.02675687,6.13469072602,253.132532004,630.391479439,9.39116830026,1156.17821054,23.7428016344,8.54975438969,812.243586794,867.936745321,7.33065432892,259.816440104,703.574880524,7.44504493235,45.0360906736,886.181969253,9.60402453195,497.628626358,921.651626379,7.73346596986,1139.50661357,278.092062638,8.42590818655,1034.12604719,200.239340426,9.06861620865,984.696314266,811.921875556,8.85689459865,332.49240722,659.417125388,7.57871369304,1007.82073875,320.912711302,8.12810643506,241.923116674,307.942743568,8.05763027364,517.221015869,758.462791742,8.81635677349,908.50513121,245.398544238,6.73228139084,1349.46956182,709.277962964,7.63753499237,683.070865854,292.425921147,9.4174095858,336.81699533,940.155351924,8.07182653068,3.18941400469,1016.56753738,9.22040504999,443.57339695,929.6287291,6.49774570849,79.4907004629,628.735268004,9.46387764598,1087.7456228,678.25040754,7.77526086362,138.680228193,710.796148769,8.89437177401,1013.96500158,127.358164267,9.67591341473,130.911809515,1008.2802983,8.21526276948,1387.95889579,974.379351391,8.49137360184,481.625870755,488.929415294,7.78181394868,569.36498261,327.367320656,8.91900772546,126.800112441,75.0718877016,8.59244484125\n813.658686761,729.14133393,9.94566148587,1242.63793428,997.302949751,6.31366906653,685.924821727,432.793053496,5.77732211124,1012.47756339,624.104404367,8.12902467157,60.967360326,995.326140428,8.45201623167,900.76975485,80.1111766192,6.02498357711,958.676162123,331.262041339,9.36072831852,62.2086049522,525.427190637,6.46176177166,466.214912001,507.677276335,7.52095666257,1375.88424847,786.784086515,8.64854162505,1228.63025762,107.960277646,8.32277573314,1297.0184489,318.935041495,8.58448348296,1299.85048095,125.731204908,8.10156883143,959.79793717,539.697030625,10.0980632152,105.389849949,193.398819803,10.0807536778,727.18212595,914.170558025,10.7731113123,403.215334728,362.789887571,6.89960547309,957.562321849,145.189259896,8.54607538914,1125.98992065,405.48542146,6.66724602979,1009.44483412,1004.09509482,8.55054360291,1244.69525835,1001.65351519,8.60867320642,1363.59846348,170.878818739,8.01888248098,861.202912656,156.224869481,8.51434820118,637.975716831,187.271093617,9.71022729856,633.623553984,334.715736075,8.69912993589,460.782609978,859.715292186,9.00665500959,977.872357096,930.506188954,7.84923188939,1179.07122615,515.401994898,9.11744521587,396.342447645,303.523201647,5.77341598425,15.7347487678,536.620579905,8.21223879668,352.040715898,682.01443097,8.42713586189,348.603235492,644.896472633,8.77108392359,19.1653404879,572.386714361,9.3053122286,1060.99218017,25.5025782855,8.92847565541,928.188878027,794.759013439,6.31884395252,434.99531426,717.168095681,8.61240971128,433.877783545,136.583197718,9.41584752241,543.153757274,451.166795296,7.88828577599,759.912609446,206.326910249,10.1340247716,120.931947964,4.66275493197,5.69349057092,601.084180316,944.524384923,8.44010352928,463.30657165,820.320187391,5.93102875801,1374.6210286,879.06820269,9.63457399954,554.527545501,19.8619090438,8.69334908142,475.001241153,229.58089259,9.81579871582,211.647002107,66.0863445128,6.78595740108,473.925519274,595.535594534,7.20946660604,1238.16527832,131.951891229,8.21153063869,172.176770683,870.503509905,8.00030159407,401.195315692,895.118281702,10.2296120951,265.422046459,673.26544456,10.6598068195,326.851307189,484.354144389,8.68511662332,168.164526036,780.974841445,9.19991522554,400.114157423,71.092837351,10.6197884691,794.591051718,241.802896801,8.06039987612,356.639878535,950.097676233,8.65124579849,318.158183917,378.789610743,6.51730689705,1074.3205899,1025.12139158,5.01336819131,940.692737592,274.099707387,8.23609995532,1135.27117508,338.46713641,8.56013499977,637.774069959,192.24510297,6.74292323503,138.429529916,28.1875923552,9.50822411804,1299.81159729,359.563025467,8.94327569495,134.961536785,385.803280379,7.75040654045,76.7220174548,113.241994311,5.31849695101,716.262328476,824.142557026,8.56884583697,363.007636539,323.59328497,10.9388619219,1104.78328032,635.298303525,7.8499991416,491.693087339,364.682050725,7.73792722041,447.61441242,902.098169585,9.58414170339,217.014400127,923.237935979,7.06271220972,1226.66085936,76.4069215074,7.54528629512,136.88947394,985.87028426,8.0919158643,761.321206735,594.998986671,8.56910537322,598.689630197,575.238268401,9.19858217802,1225.03580524,701.899314237,9.30541109982,350.244971344,499.897786277,7.10236281966,99.8969476758,319.379598258,9.9022009401,280.193707134,147.715264862,8.71743152191,960.945441751,363.549467737,8.04682541627,159.635967301,686.441243004,10.0378184058,824.973319497,979.271973787,8.57407597343,104.498309523,750.947559769,7.48946525097,292.024072595,165.439696679,6.43234812203,773.771520801,464.678132886,10.3718615873,959.99206658,195.244363466,8.83064374985,854.330839678,907.246746322,6.66346209747,560.900044562,630.494757628,8.64256302693,736.673456369,785.460726274,7.94609773802\n1275.3296058,912.056140621,8.89910424965,948.724059429,75.8638890211,9.15558138358,1168.63773366,1038.0045075,7.41107856018,624.095569192,309.506437786,10.4060632935,384.554807744,713.181820828,8.00538949862,706.468463206,352.205124827,8.12875347407,223.429477955,530.767580935,6.81751322403,259.28158623,520.683842242,7.73310695473,1161.92145624,144.45491898,8.28319262127,431.64074015,412.946439073,4.79092459903,13.3367995107,702.972244264,7.31914852372,1167.42654583,358.712143032,7.89860904731,1220.90661058,382.501903718,8.94218637911,1075.26518711,250.020465008,7.84271073596,808.825094795,288.398259447,6.24070687634,1079.06079051,621.953831634,8.92701110395,433.791014474,264.900887885,7.53477957316,301.311599401,35.5435978534,8.48803624538,447.379062779,744.852395383,8.22032191934,724.712501434,799.946451797,6.84010849285,705.911223975,201.682313349,7.70955669404,591.224018804,559.700127474,9.58530706625,1212.01016138,616.92104329,6.50848656841,571.579417563,845.800040246,7.5399160286,453.437139507,150.68309084,10.4182442732,836.355865658,576.302469092,7.87982020817,41.7720327727,365.59248259,9.16133387872,455.309206975,539.495789232,8.34887544675,1308.81505096,986.439973379,7.62191716941,798.76076536,29.3688340258,8.5748156492,1085.62163847,570.401459742,8.12719434774,883.812491746,646.599898808,9.38488396524,773.393260051,966.262461542,9.48183914155,987.516564218,926.257018143,8.47323999546,1315.40596973,797.052112482,9.51698622522,807.397152625,787.819779192,8.43787505011,260.104508145,377.475557556,8.57129588606,78.3821637292,706.158982105,7.49567613146,1152.35635522,131.76351111,6.57978420431,667.678205802,858.17180205,7.70281410851,988.035936454,791.95183761,9.45802845702,581.747150149,888.643047427,6.64139958617,1148.97387968,763.751346675,6.56713985429,772.425864142,485.80809472,5.72743891502,173.021915122,631.149381865,9.60336550402,172.078415341,908.228939051,7.99787972175,584.792689584,954.897214935,7.68966728973,145.475599046,165.558634047,8.5919815574,1278.90924242,986.080667764,7.20062185644,726.374680403,613.867276877,7.51929063628,428.365566047,996.131365278,9.19427685684,298.14746345,839.600528667,7.77076117721,124.913119261,1030.9831187,8.3227742661,719.805219675,318.137429015,6.81760182903,1384.15482108,154.054722276,9.90534558676,35.7310218282,431.87267324,9.49580084875,1195.83947936,908.006076775,7.99047278582,590.080791923,547.550182147,7.96057707769,812.709649134,612.020459543,7.16135308064,1367.86076936,455.099438509,8.87915611999,1160.33748407,811.141823368,8.10675594377,1096.29238246,143.510513065,6.90907762922,832.201951953,280.574253389,9.13368503943,1176.74164597,324.304045763,7.63835701067,1036.909017,957.368866645,9.47296869383,1186.76779297,330.082456487,6.572572994\n933.5526378,875.159034967,9.88971816473,1359.90177538,497.667644937,8.31195059001,1039.76845582,637.212978189,7.80842124006,568.151775826,727.003055047,9.524105247,379.69627872,407.914171335,5.47363350528,1269.78426982,243.966630685,8.52028642516,582.695663461,867.047426591,9.11852751628,458.803182446,865.489646196,7.19311367725,248.664350348,938.998907273,9.57194926649,1223.65981675,679.528247642,8.11120830049,1155.73117024,925.02770921,9.28336476989,281.960759851,843.291910956,6.61323522504,265.032932618,536.539797072,8.49867177474,471.766485038,863.264014348,7.70735787707,1043.2585068,58.950067925,8.04007329388,704.702849598,622.493231569,7.28947123634,877.798192163,438.040486892,8.28767182693,1235.62259729,32.1442646263,8.28039623559,565.433476963,285.620204956,10.8717685828,925.170243595,55.2404054142,7.03597962929,240.128965807,338.600641358,7.9782014455,57.3376827438,960.877446489,7.00879252305,1319.90793767,649.654326584,9.32463128642,770.375086753,591.616146085,6.83212758231,1296.56447182,384.510223256,7.45135479153,520.481105347,739.393184129,9.13030181628,188.473217196,563.548382896,9.56763472064,1193.47912298,406.331822406,6.98324868146,252.691298153,106.732438976,7.73240854984,521.24642174,200.844595507,6.43378068149,309.98584669,324.6271491,7.48461400846,734.966291579,893.615008751,7.37644688234,382.351423815,450.894506344,7.93877506773,425.653308801,399.423990753,8.46811993438,35.7574793789,476.498287275,7.74906682986,1270.83156906,505.115813558,6.66360314864,747.044682791,806.778676051,9.40085203182,131.991649245,522.454668407,8.06514038067,516.905192987,978.238058744,7.8774756398,352.368909127,57.9511650672,6.2128402197,1013.36378462,420.046940742,8.83267444417,429.387217327,677.487364408,8.37105022142,415.959430951,712.427793247,9.48067160368,551.842532651,586.94606319,8.48416677393,669.419568832,166.555044871,5.92489037873,862.480500401,602.032398039,7.8031933235,719.734570767,131.890945912,8.35389375435,100.770816316,956.348043888,9.18141688199,574.326841143,443.483890535,9.24659241216,1076.38252108,535.770500551,7.2883310106,973.586247448,673.802139464,10.5174327541,1292.60311216,373.861617617,8.37822212561,710.242886153,920.879211261,8.98226149962,1015.65948667,994.992400097,7.79662462447,928.899332332,364.62357216,9.3734729391,312.621808275,137.715577144,9.6672538795,0.173833365419,744.642700963,8.85485548789,1171.94737182,761.695139621,8.15924928844,1255.86223636,830.344413541,8.00466054162,914.936487851,7.51874491781,9.2734890023,430.024357224,12.8100265202,8.14505304144,494.34678809,224.713952045,7.56661396637,135.865244288,193.711971095,10.5129003902,822.119660366,200.871263139,8.2321799692,215.085287885,10.224336474,9.562969106\n1320.80257916,277.438249122,6.6679628741,577.979994056,609.637385122,6.76072337459,569.949626415,594.11249109,9.43755006562,1169.66282455,72.2749523134,9.39534938317,702.346135992,859.380031475,7.91946980691,666.151568575,583.633372229,6.85039365029,272.357606143,671.907976831,6.52396030209,193.500368678,550.770880444,7.38855874359,596.475102908,816.722331237,4.92026325901,4.04559697522,454.995525795,7.20290582664,865.561598796,190.983699402,9.86283522446,42.0323037143,747.281213324,8.10649028988,816.746920635,720.916212651,8.04143490518,981.973857703,393.264294498,7.91764777232,822.34836063,795.771719207,6.7446130621,492.780746967,454.73019693,6.60042156693,688.94716227,492.648488312,7.20994717023,957.155743899,751.735131099,8.33855556608,19.9722455097,463.734027465,8.66335575358,834.705761647,438.108847642,6.53377853653,991.800759026,374.411416973,8.40748756942,1031.62980077,320.383275006,7.28434531598,254.715302963,539.983542928,6.31835547126,952.219953438,18.3761158419,10.4068454256,443.102730192,267.409120205,7.71405656787,1278.31991502,1029.86606024,8.04371897127,625.388801322,455.91560729,8.80987801731,714.310664552,680.341486993,6.07798451803,1375.52121521,305.834598991,6.53892213663,780.280068737,514.396662006,5.73885317796,468.291637285,32.5193707793,9.58856541937,436.302789255,889.233550962,8.7665827146,991.879256781,44.8638733036,6.08573879984,746.811448163,491.426145503,4.9334275452,81.2547927977,52.4476974844,8.06375960066,207.897671455,304.497410701,8.60901601623,446.615861258,1012.80278921,4.34848916241,206.314531752,577.463624991,8.65991061045,752.884910161,508.357011185,5.94072604271,1145.44090929,820.136517836,7.22697191322,300.015704008,213.272907221,7.82548184494,312.945587969,374.195450814,8.35060784849,738.824233187,803.683253014,6.13787204246,1189.59429696,804.257607492,5.61880917396,32.6522236354,869.315899211,8.31357613392,1127.22953815,755.137153769,7.20409556621,675.239215613,553.398814737,5.43285112437,855.417151266,900.629286269,9.58745999064,145.622969218,997.757072457,7.45206515285,199.566054405,469.647723384,9.30063060249,1151.12934915,578.756244183,5.65841776372,694.018625788,253.093534954,8.28241540428,763.466086218,760.03316674,6.17545593663,1174.80179363,845.574587726,6.07556344873,512.411758943,561.561095612,6.90727767875,1276.59724088,852.428416086,8.89406673017,1187.77379799,523.781939891,7.61432901635,768.630285387,831.775153713,6.21335338665,138.938393881,579.753570466,7.2574313892,758.942583886,734.589244975,6.34566257744,120.324589662,493.057119892,4.90030357673,465.179909623,155.877011165,6.88776155394,1127.29302794,980.619819697,7.01174041503,1350.47729764,330.985749887,6.29861383445,933.308038907,771.160008676,8.1561894583,99.1627106774,381.561312401,7.21611869091,1370.33423686,930.069848528,7.42040655475,1226.22715993,158.928634469,8.26222531841,579.405818076,339.690535003,8.25486086647,743.60805089,762.701666604,3.76094522746,442.000579611,670.189734962,7.20371801121,273.821286172,141.441747221,9.11661340703,655.230209736,420.287680456,6.57553168668,392.37896616,336.231850808,6.59691961022,1067.73438483,172.775279996,6.78514832515,1041.52043296,653.260235155,7.15621993538,101.530685809,123.688397978,9.05573147213,1364.61265565,405.267499367,8.13559702434,744.89147086,811.496215834,8.06960812669,575.467599095,652.108646402,7.8446894382,83.5551839334,869.599975397,3.65318585045,440.620536644,114.435686759,6.58000236601,461.675274492,870.285557833,7.21022977142,359.252037829,770.532018497,9.01714916294,471.829957994,764.388099291,6.98028764306,1303.75737542,624.620757539,8.19370392537,522.035078357,505.258863829,7.60176894159,122.545936156,694.958995708,6.45071747849,1265.51595912,462.562195657,7.76452446791,1061.57912855,415.537476787,9.23441064757,337.112465549,628.510121978,8.8748562679,900.130961118,561.249909434,5.79931886622,821.562161939,748.325776783,8.1978738593,480.595840478,488.267568595,8.16827845434,644.116164473,897.901911848,6.8906493529,1314.66997163,672.824984803,7.63068375028,339.02407338,534.249436445,8.59983133656,421.947170093,746.541942448,6.5023612449,909.954247497,74.7985170447,7.66188691179,1157.87465312,552.226491462,9.45588184575,581.974963614,11.2335841156,7.95477541438,97.0502187826,739.18232563,6.35213633233,46.7186775199,261.095102007,8.20344423952,200.05914002,882.494914185,9.26317920961,1249.47301476,373.118936221,5.23655837027,847.757929791,438.357467768,8.51320813982,366.33440933,263.304965578,6.67211198368,763.305858387,14.7550498257,5.41566772893,1332.0747857,397.511193364,8.45096724438,944.155970019,575.024182524,9.2866669039,16.5628701069,911.919210462,7.19393163397,666.491248811,349.907836386,8.07342555165,1303.44526533,973.022389754,7.81034226409\n337.520433749,437.851621994,9.83964867648,621.502544435,705.538158465,9.48186488053,384.867066223,395.485178188,9.72842474371,1295.73530064,345.270586613,7.23578588701,42.9066466939,921.527057352,7.54135073558,107.173337458,294.068205476,6.85993266723,1384.28739071,855.400951953,9.44991646875,1302.29810419,736.419160836,6.88677657343,192.099334495,893.378376622,8.79541335444,1108.78424058,197.267466636,7.54181703747,1134.11007044,852.149918854,8.05482054745,1018.37673387,466.322450882,9.66077959018,661.935885726,41.6526513609,8.53376970798,422.811435253,905.430575652,6.83293531723,555.991064088,753.165909714,8.6238868432,915.362391228,599.600875656,7.47892758696,545.927546481,351.085334562,8.8849767567,207.73699863,509.355624323,6.53529451951,936.632247074,252.586498447,8.19064907379,1146.29948411,416.842670741,7.81999474626,530.049755463,973.751396563,8.52482152076,193.773308203,81.0327232261,9.07567945391,887.515162174,44.0416802164,8.14706181708,1342.14163803,279.320433365,8.1761511754,1035.03330234,741.460726665,8.82862153823,1257.43098254,943.390303377,7.30485007268,1062.86173644,729.27553443,6.76675235197,393.837111288,293.666539352,10.7439340561,722.622353061,163.404387514,8.2418488966,1080.05591826,219.570660048,8.18787158846,1039.56579242,860.782830164,7.58729414067,929.65610071,360.836865467,7.88071587368,228.206552351,488.065064008,10.3924713531,693.255381265,848.825627594,8.6165185976,1046.21005498,737.764901735,8.79348607316,1165.77954147,437.441322304,8.49327135143,791.134798546,413.202685778,8.65821590591,1128.49683702,45.8586979092,9.41988126737,296.908921022,755.268635556,8.6259817415,1253.53267129,533.233494988,7.43930438125,758.513079299,989.544179488,8.20127246317,377.916182354,754.328704335,10.8370054583,899.606537144,451.577447079,6.1726259957,30.5639301414,209.348784153,8.28548032332,16.6757934885,753.641515699,5.18287202823,1149.09037615,222.03752973,8.60641072443,567.233727745,580.371080774,8.12195968848,112.51102373,677.660030986,9.58319491654,819.829442548,593.974813079,10.2380735577,465.894640098,575.080049772,10.1682302726,350.17566157,113.367392301,8.49297276145,681.568150488,559.650435788,9.32741384021,476.921911627,194.053771216,5.60188429561\n244.950929379,336.920354011,8.89832139007,484.614867814,127.108531639,7.59924746173,788.590535762,99.9835500601,7.62226157082,701.823153999,51.3420025687,7.89349257787,1230.32110464,913.385486651,8.70452406391,374.24899277,555.662843356,8.18206836602,73.6590738708,996.134485679,7.10645963969,1354.7817824,438.695671692,8.35700440686,745.971480979,972.396552095,8.62609979473,711.117331004,714.743723886,7.50359784483,567.313433938,574.961936119,7.76040029656,355.704648929,160.331192117,8.96285465325,480.943976611,355.992719051,8.74318930041,590.108257869,148.756276052,8.53719892708,1185.15577212,705.152389043,8.40524004486,556.05732334,95.3071381372,8.96799401165,120.1682283,923.471055763,8.47689890672,555.402202478,895.057772315,8.76768045593,267.382062362,489.706944287,8.45460430081,231.847129371,67.0692772142,7.38461753832,191.090772513,696.084863432,8.72359800583,527.947793296,891.87508475,7.96884169452,776.790972873,579.656241424,7.08158592179,701.838361361,785.012962657,7.56863677517,699.668442676,256.464093153,9.15446690316,875.405019548,380.589747509,8.54870890247,964.823918545,193.856099663,9.33873688382,201.359895219,86.1574446975,7.26572197364,1053.66061166,241.065348416,8.94756913775,459.499532289,898.332389564,8.45577047545,1024.66319916,971.283980934,8.79763515249,624.173613718,560.298273036,9.31243846415,977.117800047,519.189658701,6.68192034036,20.1013998034,496.5041652,9.02916669242,1388.26469912,902.74195469,8.27987540112,606.739925792,155.704983141,8.99177737014,709.185169432,978.429817213,9.38853557908,753.593416934,118.756523167,9.0070845001,1246.97537012,430.743530077,6.88953535708,332.899053256,1005.19549909,7.33799207444,959.479056077,191.900444938,9.51507825219,1048.36723609,76.1869322481,7.59606965045,1269.56583344,61.364491629,6.9610880268,381.505620929,360.537163249,8.56726904534,78.9827685988,5.22218184273,7.91591243967,72.9079714995,49.7571920147,8.85216153222,1039.23590954,681.038278338,9.34181065252,862.521225926,494.433329886,7.62747508316,113.337836932,529.786099089,9.19565644545,266.08037246,987.725531389,8.15168251477,1110.64393755,296.464375944,7.51673102124,1180.7829334,63.9769111726,7.80658115806,86.5501375852,850.96546078,5.90666457704,602.792375114,156.619351099,6.82613167115,1083.94745316,80.6043120834,8.0540797954,1108.82265181,566.270113055,7.59106456745,1070.0338719,275.367457642,8.34202129399,402.207334398,584.066104987,9.36422163106,669.528594324,890.492127604,7.76982458228,103.822070063,185.821658692,8.74519267571,1266.08742638,180.668335078,8.90762321004,986.291231606,414.239504576,7.43564817906,1085.03822137,836.228283164,9.5656029794,707.699552994,958.303505341,7.93372943344,540.164787924,963.796127985,7.04397723844,1316.40862523,758.1079285,8.41719803545,406.121074977,686.663638405,7.73885358056,800.333616077,380.429597257,8.1912437031,173.701543546,1019.24717575,8.49832526663\n1216.52232952,261.213208838,4.27768830506,180.963267168,441.365236413,6.32445717593,358.648372027,725.119805865,7.26909229298,384.078659617,433.546349474,8.76524593567,1201.02610701,678.738151926,7.96702328796,1213.34984739,887.572595062,9.34777658397,628.408354696,741.885037105,7.83332420844,989.10323887,690.985834798,7.18244444232,858.101969151,544.748305328,7.33966836302,615.411824131,1011.0326809,9.12040308062,355.706065535,948.539758164,7.8112639155,698.200401033,891.467164475,8.85126791784,1096.47646762,734.155289635,6.66820618572,976.87633639,926.079868993,9.16900407843,332.155250533,331.293184364,8.83320930205,1254.95893232,749.58864258,9.1619184253,1151.42026993,307.999152435,8.86168732943,281.09967485,545.199511188,10.2548893098,146.097418266,526.674675193,9.0542342341,994.507877723,416.38279361,8.90941100068,1093.84735505,656.79770848,9.17824446199,102.870011365,793.591094664,6.88420500529,90.6201988886,39.0278533858,6.88678980709,455.107733866,793.343366431,8.22539522886,48.4863359301,183.085521987,9.25659275745,1167.57751219,509.056987265,9.32591336581,1093.02862299,32.0193708545,4.51042389097,973.008214152,120.668053641,6.95988112306,927.251582716,80.35618965,9.61408607421,86.5110148298,978.485197867,8.89156413774,554.509844374,23.5646241609,7.79193414385,833.107431016,539.381537258,7.52354444729,1133.2314022,995.237286678,5.80415300207,1342.51188935,325.021240022,9.35477842206,201.820096771,783.150900953,7.85577876916,581.292223979,272.285979295,8.65519094069,245.402627249,713.013761872,8.03777051526,1298.8331703,455.367140858,6.70851625996,413.603185415,270.235947463,10.6738595529,522.728622456,25.5355453733,8.82838780642,178.646584809,740.74314996,8.75510137367,1206.89990469,225.555912889,8.91322005903,768.759242868,946.536359713,6.44863251372,683.164811491,444.171504848,7.33017188455,1234.79799691,164.098465062,7.01169777799,460.722299656,617.525426016,8.9421892358,308.181384953,64.5915239527,8.54039259102,1122.8717735,121.531373813,6.75929314299,916.727938005,372.600113902,8.6864380288,495.551571265,298.853815315,7.28811027084,1356.86687043,737.989527535,7.02361853963,466.939794817,662.500722683,6.8995247021,662.542887874,627.551711627,6.87299379029,814.276480613,325.614104074,7.52449571205,118.926327016,501.690416395,10.6025886078,833.250802631,281.733486467,8.1235724583,1336.38627179,457.434410287,8.47859423405,583.936104327,271.087904562,9.16672669603,1388.69625214,960.507088846,7.53664254113,701.539203478,576.730776682,6.05097846282,639.083816723,577.267472983,6.52973904839,925.376123123,924.780234882,10.4473775019,84.2888831029,995.806060787,9.68886149072,468.041997478,938.549624509,7.73312340036,1377.56713076,704.867264148,5.262830075,38.4364357388,743.374778153,7.46437042669\n740.623239792,77.902426078,9.39639192871,791.416598129,400.276552318,9.23973762249,1129.44170992,79.4621784686,7.21373892411,1321.10860876,717.980276972,8.87276486911,834.364847002,734.173747894,7.58375787858,254.691393889,780.984141378,8.78641438791,212.93300103,602.297181032,6.31156802205,748.476084321,218.333612294,7.30334809892,346.41141652,56.3632749298,8.35319993818,655.892200853,628.117268289,9.12703661879,531.911387928,540.910989431,10.1896360422,544.382997362,248.367528464,7.38712042394,421.336442631,571.501381985,4.90168106218,330.281389243,720.826428122,6.99645096403,1338.95956417,573.14663273,7.116247958,689.624143532,308.914383934,8.14256344025,870.243312795,992.913201175,9.37891236303,270.848842456,499.134512677,8.91671713703,852.202801476,1015.23841855,9.05641313162,20.2990681886,861.073063146,9.23692736248,421.473333732,763.985846106,7.80658299759,1318.45493586,690.691819728,8.45044061627,920.22384358,44.6201379959,5.91765007602,1311.92786578,122.544925518,7.75848929364,1354.1665071,144.02215201,7.48788396123,942.12542987,51.6945964961,8.9880410516,1272.00409966,107.147360422,7.42384812596,197.906043375,360.574588424,8.08705422857,899.436329573,32.9191746009,9.33833448754,208.734859502,84.1612719221,7.06651111327,704.11766841,50.9881861027,7.87052592145,1042.56107336,990.487647274,8.35429359519,433.268476874,378.170383584,9.10588223302,665.137385286,1027.06000974,8.26340004616,614.421077345,243.897001729,10.1689183531,477.69754143,910.713628125,8.78920836212,1014.23420819,781.823524438,7.92023063813,539.561492498,794.236150051,6.48294767392,302.911763287,95.9669486762,9.48300731568,1365.2779801,211.787068727,8.72910125505,1038.87656536,625.516825163,8.79129566203,401.689430819,160.297426901,8.28115347297,610.325031858,832.101162268,8.41894267579,1204.23729667,647.294561024,10.3231992732,1163.70462603,180.368334958,10.4119915982,788.419253681,1006.60700545,9.17300403762,1124.62608639,324.587296985,7.89931352129,36.4013707319,586.280465769,6.8151114658,889.276828821,848.643806995,10.3832065852,1323.44588518,409.444955108,8.01471050379,1121.1559139,122.684976633,10.6682802616,1260.43578466,887.506811934,8.44362987815,1296.16219651,397.562927073,8.85888754726,860.265322186,637.097264155,8.03574858764,1330.93543492,866.286532275,9.39833230391,1365.13290967,471.089873608,9.65548150433,582.301565698,802.082387653,8.9133670735,183.521857253,22.1366778448,6.77252643899,120.65290682,785.018696519,10.7743513913,705.057407607,272.226472847,5.66791498528,469.833686643,359.77442005,8.73989804462,1150.07694605,179.859491919,8.43541856068,971.98155612,120.655473327,8.28338113775,1267.50685264,119.002308411,8.70129784996,765.053494653,773.327432112,8.53170301331,1379.41327486,10.9364868842,8.42375597096,348.897049105,358.325119373,7.73614798941,466.314518498,953.603751701,8.64353747191,135.773352908,530.706057838,9.38095223099,434.914351547,942.171646884,9.96703301009,260.887411009,569.745963536,8.72147878643,136.693144325,624.01459133,8.08635542179,57.0182981563,816.336056767,8.66153824096,1112.93286181,903.335850035,7.9799187429,284.040380807,936.574443552,9.06975859588,514.14809693,43.8756748429,6.81487935776,855.207680608,190.490596764,9.64543828781,934.505078186,505.712536403,8.65689322517,462.093086811,848.769352222,6.96946664545,124.56435472,215.550599994,7.5425195543,1026.30135502,909.449459979,9.47475512038,1086.90583875,757.392668492,6.98811084368,350.731604007,687.61906373,10.1631170945,764.039673776,466.752279493,9.70834060309,942.219950979,643.352390917,8.85879536652,1309.75649919,1018.59440115,9.05993145275,746.365225195,251.471359739,6.49718204176,276.418143537,670.702639125,8.40934866069,518.936211923,160.24465813,7.14011212694,986.798791244,451.136277144,7.86276517783,722.628205705,277.368062089,7.20879298421,1231.5877746,968.246047316,7.14324119306,190.302546023,136.182119616,9.2770490141,1100.08389621,480.115641082,8.26748700336,965.150715243,854.341142986,7.42590716499,1333.620841,395.714767967,10.2550282227\n866.545073265,214.710695044,6.76008875836,595.690756992,427.829446663,8.75598658723,338.315934873,778.710194437,7.77087494869,800.593617645,1039.8393269,8.10068878961,843.511313101,247.964969456,7.38231246873,347.288273532,154.196032283,7.73232367375,605.811301872,854.092660147,9.67211427818,1334.01845201,448.207331794,7.44393238486,1138.75322602,378.729993691,5.37718996341,130.078912554,2.18930639016,8.19703371336,0.0397243729987,695.941333496,9.24570294542,720.940646968,903.235617789,8.21008103088,1065.61597106,180.380300301,10.4490142969,793.317350341,704.859518061,7.86661267518,140.203837908,1009.77436919,5.78903115469,485.600939269,423.210893469,6.28020723188,954.823378857,997.592715738,7.84332239663,851.282580903,934.669046534,7.7696556755,265.397802905,564.711684222,9.29731771278,761.549748213,519.914603663,5.2171676993,51.5135188886,575.303377701,7.82943250543,993.685768626,41.800345892,7.36944399651,77.4173905626,3.27080267227,8.59514350977,1194.32784771,908.278540379,9.31105092581,463.833074693,954.736250186,8.65462565748,1312.91368807,552.373842475,7.71554592168,1266.5790075,659.933559228,9.95084853678,166.964552567,1016.16163664,10.3925208964,336.807208426,92.7568144901,9.53699112503,237.43983509,846.10529123,8.00559900166,506.696776831,251.537883767,8.18379504829,803.14511183,649.151525552,8.677168077,140.230730309,1010.00236118,6.43142788425,1275.25259599,926.395640549,8.00779393278,465.610631374,375.098159601,7.35071766622,139.220740672,997.653652901,8.50724005238,1205.15555206,1037.87910913,8.84518358751,60.604390775,792.254113842,8.16926462659,1035.44019231,550.490855108,9.17238455788,294.793112363,374.644453271,7.26633593404,998.093174337,574.134847725,9.46080305045,521.132024894,503.21667584,6.00032896531,711.852015416,280.782853167,4.85400543839,96.1096844808,335.881334811,8.15799556033,472.209137512,246.107477811,7.87750635921,1061.15443348,668.213272193,10.0859733071,940.431180706,647.966224194,7.98699264664,226.930619705,394.798146802,6.69185133208,35.2616882075,326.950926822,9.78596304472,113.777918558,418.397650072,9.30669078818,1214.08953939,236.564517053,9.01920256038,170.867986297,778.850297314,6.38550092613,1011.17198821,131.241409278,7.86160563747,271.282935657,402.35831299,7.29773545943,984.86999675,243.383548773,10.4396792237,91.7490433271,643.8486277,8.41247433007,622.480662611,645.303920141,7.8594146212,259.399434571,154.472792269,8.58537193701,207.629621735,230.537046568,8.29719337998,1070.76923099,981.775722162,8.46344567153,789.285493057,493.065747148,8.71419862717,1028.4656292,832.02079401,8.0480338695,93.2746469883,937.813499873,6.19866115246,676.490275855,913.178631824,8.78647755074,771.474404642,759.408818574,6.01927791819,801.906000623,68.6476599,9.17349543211,2.27807693746,176.984173135,8.93291179835,366.132745108,306.962922954,9.15197644141,192.153929949,550.200891036,8.71460662001,1126.968955,296.458737073,6.94150901849,364.832159813,508.684491696,7.656883712,949.405381893,75.186738855,8.20446089783,1261.17975201,736.749470927,10.1715271235,84.6458782227,131.772904452,8.79297066396,1301.12354889,392.303844334,7.43663190773,735.166501416,923.517415431,8.04412738386,893.237678821,332.219327765,8.7493957605,1284.46502994,153.077299136,7.03357348025,14.3642612771,925.692576881,8.99970732116,723.569236875,921.002469472,7.38310346521,674.929554526,16.5320080765,8.56374854385,1282.20349786,464.045576614,8.99725394321,1351.79195704,51.0201331639,7.57304444482,414.103631946,319.2585581,7.58565543349,716.418306201,192.238311092,10.3360239169,558.89959073,431.376229779,7.37439684451,1360.21195611,833.66817707,8.71474858784,470.741251422,735.08854505,9.6957298523,28.0439980223,144.188833132,9.47582773688,1151.83643464,158.679655801,6.02390236503,1113.09376386,318.808205431,7.54568391319,264.009746431,746.766598487,5.3454158573\n746.50315424,379.24351713,7.07789155059,842.689549283,488.384262527,7.50875177391,535.317982834,51.9464798322,8.84272944933,502.32739652,1012.71585141,10.3438405377,259.721696998,168.121047046,7.86826421101,574.030252382,469.26346255,6.22782072522,52.5058946251,501.420334003,9.02214069517,965.686210024,427.32469016,10.02822493,1000.6898261,632.28490513,7.45389575198,380.202937206,511.259076324,6.43137037132,661.627801191,200.920236532,7.94377145347,827.792738862,674.280984373,8.22529657175,1384.17564478,448.323968943,3.70720435077,749.876386462,614.621382661,6.28475018145,536.533570626,54.6358374713,9.08578120678,181.940807839,294.987086481,6.93411051904,1024.03693746,178.67611399,7.40399686523,679.2458267,395.975540093,9.24356877277,1343.31506984,418.707593147,8.85717046338,827.839147817,316.964066136,9.91623709138,506.658785483,690.574864792,9.55370646389,178.352850727,629.464094367,8.57730566097,666.014769266,104.928250361,6.89948256293,396.314286349,822.514234548,8.45971694779,369.597180872,507.818016463,7.82092730645,798.190290427,940.643330643,8.11255000481,1082.22108955,159.595324553,7.1897754386,660.422656125,820.550412593,9.31688995423,695.991544745,734.114066363,8.11570705616,678.542019228,396.358243052,8.81496686604,335.942949778,32.5385382434,10.2554364525,1357.10353827,1.83231420545,8.64799756441,1143.90448342,874.264214491,9.35628083333,523.736019816,688.897834455,7.64736720969,484.62819114,343.541068655,6.23702127949,629.015063606,128.279455853,7.20374641357,1015.59308147,1026.07315329,8.44660627011,433.908034747,464.969029191,6.31170740511,847.292425354,375.969967244,8.45451660532,573.800594572,746.007211662,8.36408186669,1195.113525,1021.16061764,8.89096808999,1068.29976485,153.407037179,8.3972500613,140.360928386,803.623254042,7.46692135836,386.133280379,774.166414801,6.03506986602,8.40259167374,653.094946002,9.76918285977,63.216283176,78.0037118936,6.65382558299,99.8362327413,321.575001425,5.02727367125,1191.29075822,809.931072227,5.74410099796,1373.24013251,747.311406053,8.31492875875,301.549933444,136.078710193,7.5673321598,469.93185692,455.88721372,8.88545887676,71.8341898247,102.579360758,7.56389276633,481.801213184,858.431489924,7.82213526864,428.866696551,242.141503483,6.71074056016,597.684813497,283.471884153,8.43400920457,1080.32672837,526.916147073,7.82774177374,1184.94248397,425.402678844,7.7480439631,910.201476241,77.0844248472,7.26241597034,216.941331177,1036.22112786,9.4999145914,271.445959915,1001.36760451,8.01662667622,388.897764586,243.427550938,7.31150597489,1341.75012062,417.698866237,7.75775885083,832.95807523,867.260829658,8.46385874314,450.609220961,135.8635622,8.14081548957,23.5524394119,116.023880044,8.63982245328,387.074261812,1020.79079711,10.6745356023,1136.87582598,1032.8932026,9.26622073817,1238.24956762,708.961732186,8.30886485847,1364.91196689,1030.05008661,9.14502965289,169.397308399,267.059271803,9.12188361844,1082.33376043,319.055206303,8.13706816,305.514135158,106.882976337,8.62802780323,1260.3619094,433.821211298,4.68739307908,569.793894758,949.617116179,7.19235443324,1190.82224153,171.529614938,7.85483931248,165.286580403,676.582971407,7.42587474992,916.286744038,73.238251621,7.37929079322,17.6826352764,291.158815331,9.21761135268,1339.40764483,421.617760549,8.92548978277,75.4061279934,734.260109311,9.77169839297,416.046080922,697.527139323,6.00274722491,271.758291539,407.670044845,7.92649512938,394.646267263,820.565698327,10.3597038563,924.545551918,892.590575998,6.64434149048\n631.990698685,907.350830348,6.28811212596,833.002667275,891.87967987,8.76900996893,1372.06164239,317.229582824,8.1762817247,1002.87488425,790.269699072,9.2676421271,422.332932017,255.013179259,8.9587742693,896.514691285,584.698151662,7.69864011971,1385.68573501,159.339297721,7.21711559987,1365.87610021,710.51416899,4.78409925272,303.174277167,478.781837249,9.1786553384,753.458439747,948.37212618,8.44358428166,452.005986147,961.510329754,7.56602798526,723.365844128,250.403547397,7.70541719292,240.864404759,588.881074249,8.00368347693,1040.25187085,1037.68857106,7.94348796441,1083.20484298,902.840932593,7.15922572967,611.694615534,435.619810465,5.17919324283,1366.59064418,32.7343620726,7.30691198449,807.64471296,47.9308868914,8.4955205237,1041.46113616,194.876508002,8.73363038206,638.369183994,52.8866084711,8.20512782979,14.4283175021,288.053855898,8.61816467132,761.975870379,415.54786521,7.11814459046,736.628489712,682.934995261,8.02283062454,689.371330583,908.398580686,7.22904754614,131.383743955,264.713318862,5.94590654717,480.926349094,515.729413969,7.81623449555,1191.85601218,707.679164159,5.26980567803,1211.64296984,542.982708656,7.89384891336,295.306445633,731.52812763,8.02281540655,933.906849585,751.80930573,8.59392600984,147.674763131,899.24709891,8.03629459145,1123.70544583,840.814556423,9.02501473514,3.29650778805,597.768949723,6.11040242354,1050.66412038,536.039231739,7.09379328827,241.48241979,683.631615654,6.79756059185,179.417987277,1023.14766907,9.40321944864,1219.55840787,318.553462459,9.30580830101,109.200058431,219.350228795,7.39730241929,523.59298071,95.9468020135,6.81065059436,1297.66176343,806.314685197,6.98809471099,1088.83438806,876.614775234,5.50058820858,675.815564622,244.280659457,8.71709152776,694.111430301,928.087253176,6.98329089214,380.812687199,197.546187349,9.05707632006,423.558762554,153.159786686,8.38286524671,879.352733368,45.4759095567,9.06635183517,207.065104275,66.0279620436,7.33594381929,510.448722814,493.696325512,7.26678124965,780.554878535,384.705410348,8.33004031698,903.49925431,309.45420222,8.24660629758,1190.62204959,795.085035653,8.90264251411,39.8808377764,667.480180563,6.29916693941,565.930374209,192.877969196,7.81492706321,1245.12059904,779.477402042,9.52321048746,818.321143688,667.033200335,8.22429024672,375.44754797,962.34746631,9.74297850617,396.486891586,607.55404645,8.46108804382,1085.28946945,360.00480628,9.76810989693,523.6507952,97.564710013,5.50842629456,512.566085828,238.015106237,8.55914275344,879.118683045,1001.04494797,8.44950084138,615.516490138,279.917815735,8.57586261782,731.154245711,906.600858715,8.00483652342,292.461240147,380.008982335,7.6761298988,1004.03509057,744.695943975,8.99060988194,1032.98746861,409.286897412,8.44720791925,898.8110433,178.013163304,9.25846249308,101.699549243,389.257772185,7.63449244671,950.81065219,510.960620903,7.55143982466,1341.89655925,204.524382075,6.64326314228,592.148402062,685.30665286,10.2986372106,1346.67247365,482.242716188,9.6966972304,782.714572858,547.827213258,8.9326172261,773.500538107,14.3797922862,8.42422951908,76.2202715637,502.822165934,9.78234152384,1154.98840511,977.722834065,9.02579492174,805.244143339,531.19956257,8.20145082478,1262.0865491,1021.42716698,9.49611477977,483.762373666,766.323984545,8.30350673806,1061.57345127,48.2873475789,8.5414470189,757.815700523,139.24598986,8.63267869246,248.691962881,704.238135892,9.15482964513,201.046000149,982.005313066,7.86089237931,1015.97939781,137.633534739,9.45972760441,1380.67196281,720.946506438,7.84296059206,32.261502573,980.28630328,8.69499391995\n977.876222371,127.19742023,7.98318119556,1372.57315468,136.752419225,9.84072660533,1147.28825588,567.487855441,5.45379704418,124.29685609,61.7765164259,9.36045410443,311.016031187,744.239270387,7.93424898341,471.278595595,129.01251493,7.96781086066,749.215004779,318.055258292,6.70377538721,449.062572825,666.234383581,6.53203722093,820.874558413,817.314304662,8.94466049578,318.623588432,953.150210834,7.75951443,964.94498754,317.37623537,7.48065476811,98.1912626151,627.889844499,7.14129769358,1319.2396802,921.385093686,8.04694677809,254.685572251,999.007133455,9.15189556341,213.507583491,108.531089386,9.15640905304,918.074990413,568.3092459,7.95234027625,1245.38517752,410.289469463,9.87919450749,1378.22579138,440.673873788,8.79418245001,30.3656854673,479.574797304,7.67300828388,280.644426688,8.39478305574,10.684426889,818.618160971,818.057295299,8.2169249524,1140.04267833,454.210627829,7.34684400339,665.64155335,695.663736459,8.55390739667,873.201764832,415.985119173,5.8398047395,858.823328334,966.826110968,9.70255530901,441.639336899,25.5498944651,8.87788801017,441.904786989,25.824926847,8.06613745391,1189.3921797,587.248683944,9.46286354272,1369.81494559,105.326362877,9.03973909851,757.825057417,879.990315307,7.30954452488,452.842484039,812.987499704,9.82004076522,599.76696931,338.30077435,8.4919149148,934.995143757,608.91600284,8.1259602719,460.320533136,363.201235705,8.5805651316,659.971889089,94.1835226754,8.42709996786,5.51836268972,329.397710164,8.76068073459,33.8700018974,486.75405235,9.63400282776,286.757505609,595.584712705,6.32736951969,1149.74031428,268.725250948,8.04005768108,128.239347747,36.7747107944,8.38531039842,95.4566178262,215.084365608,9.42891179522,420.471317303,930.530080243,8.81259612804,1119.43845036,963.798448242,8.68649356477,865.833527529,388.31680549,9.35694271211,1109.12519715,266.356026425,7.62018938551,1233.90302748,59.6219624286,7.33580083901,347.46367685,269.631340117,9.26439098648,101.350014826,827.362371204,7.55357305163,666.882255851,695.28294515,10.7312482668,27.4901337246,182.919865495,8.19014810406,1206.26337483,15.0663363236,7.47821884669,620.117939797,181.152131392,8.29410214647,1386.48278945,843.265439577,10.0581935734,482.942740536,363.658640242,6.72054880672,264.118835733,667.789815749,5.63578107416,307.239324217,539.743243706,8.16442039346,318.575518771,952.668631243,5.89850551362,911.512846906,45.3410340318,9.48056125067,1291.67168257,766.671177673,8.90524944961,1025.63234818,878.503532111,8.31929784714,952.578445504,1037.23343029,8.5322086761,1243.43335282,177.750896367,8.09559174284,671.065114153,576.936301358,10.0001779415,662.272034801,378.357878138,8.8780877885,990.567034288,563.14302715,8.60149971282,144.251335261,369.09601305,8.9279206546,246.750900338,813.150385158,8.09858190219,404.720429654,581.274668208,10.5134849957,849.464007054,157.076199929,7.70657159952,888.460554231,260.227277736,9.16267475596\n1156.51788073,969.569883421,9.58926612464,334.713514291,704.407712863,7.84276653683,1032.70197,960.172639463,7.35502899516,456.16971808,602.816484836,7.79582984369,1196.53658834,55.4221317765,7.29360055821,534.826638476,606.717694292,6.86634532797,483.043191854,194.043009749,8.83446053452,856.552122004,658.647188406,9.11117305455,655.082001362,1005.25052613,7.78561087591,928.450441213,741.942564881,10.273231781,1123.66946952,816.87703323,9.46980758015,939.167641267,720.305283071,8.60492713588,23.4784043787,618.184948173,6.02998471079,1200.28004936,953.826957637,7.64979619633,74.564629811,428.045707812,8.49679483811,382.78915601,807.628411698,7.03696542546,607.799381488,543.528890807,7.45381899579,193.12256293,1038.56188583,9.05332642192,230.856148389,1000.83546209,6.99643845638,1281.75764073,269.43536854,7.97428186615,592.794776995,144.230162316,6.35365989165,1298.81920253,29.2043089036,7.46680261673,46.2971140603,1015.8928253,8.68953479011,186.838206621,600.269993624,8.67390970876,1385.52964525,778.585227629,7.82909355129,1359.02954221,491.158593483,7.00964562474,1063.69964505,109.564632809,6.65852996089,1217.14699969,41.9346508888,8.49933462051,748.139253161,839.922125175,7.71520152858,839.41603567,494.423343031,9.4534322993,934.612883395,521.604060735,7.65892026305,314.051902879,124.856265336,5.35431809484,1170.66121115,437.331686362,7.0127579162,877.334611982,32.8536819742,6.94667430242,440.059174869,247.483230299,9.21175002026,1369.45338286,593.458549688,9.90586220405,512.039424229,413.563574811,5.8990370897,1059.45579608,437.026399422,9.19401557175,804.760262901,689.971229335,7.97918444631,367.569771235,0.852241323395,7.32914776408,7.86887105806,144.322113904,7.24829291133,1268.89970928,746.720764266,8.81373682994,334.320533078,87.5502722288,7.69556469623,351.242089082,73.4729063212,8.22930332332,1066.98430992,500.430502044,7.96151191442,1162.78283361,577.240401583,8.49354293169,66.7063282039,20.0336864665,10.0738882271,645.339500937,489.867748958,8.02538853129,470.843544924,847.684174361,9.12575160559,209.033065126,223.949240373,8.76103360142,641.197039071,649.145119186,10.8092558696,1228.21986603,271.041055474,9.90158545085,288.590855311,367.456199283,5.94524620567,644.801515868,128.797625544,6.66096138391,1228.29796082,397.063029739,7.3856999917,1233.02278352,934.537859493,6.23699817173,1375.19983302,759.471697711,6.80402763967,162.698648781,235.258659737,9.05763919979,680.28990423,264.992558368,5.44161611349,1136.1109946,599.272134732,7.49795694151,611.721210446,358.68687134,7.89493591654,333.800052459,969.15643419,6.20556059172,189.691960283,613.532953914,6.90135519423,479.096759944,339.414872754,6.93508923401,221.785051679,800.886257589,8.05101459272,756.00526097,19.3507949272,7.45096553063,185.403180471,589.013428414,7.13390459368,1115.05643816,122.549514989,7.19454572049,901.54150184,656.320435597,7.43332735671,1021.03244984,790.458689835,6.22499104737,202.613381092,326.576371345,8.94838158065,42.8415091659,1016.50717693,7.16231185318,433.284397059,44.652220785,6.56204822293,97.4243443694,651.157011529,8.90251938634,981.061767305,890.953673009,6.95003938522\n95.9918148929,618.870106105,7.35746862154,185.720439684,371.366942651,8.70468402609,803.973080264,332.451957106,6.53867012571,803.723937801,274.843832339,8.02052244517,414.735990033,530.030354146,8.75805717053,719.742048223,481.442164627,7.83399929625,684.882935958,592.917552091,7.44171036634,1171.72708945,360.600430212,10.060639463,1112.25051138,683.114676322,6.53006430289,820.298207096,716.49772838,9.63431038115,93.3778494989,59.458798063,8.72446672129,80.6603758695,986.295335696,8.41877425925,242.415281472,33.7719669325,4.13487079939,1222.70508173,296.022798481,8.02848573504,1179.56933881,682.909399291,7.83387136308,1216.10763782,730.693431198,7.6999931286,506.26134069,656.252910042,9.21921271215,1096.71980657,18.0435351474,8.92899085674,52.1876731908,160.85512911,8.09250497649,888.546064412,42.5406849874,8.72841461951,5.08389172605,550.326566677,8.15960030116,1235.82604977,684.118659888,8.21414264571,1260.50319044,527.819589213,9.22686897594,430.220768095,56.6577930935,7.22245730784,980.229841056,330.383347658,7.35220010887,58.175553679,781.687990263,9.08763207176,882.659662053,446.890350601,7.95467077261,58.0943467201,976.718075411,4.88956278551,1217.78139577,247.497755801,8.985170082,1005.63971933,990.085823485,8.64753911546,80.7550033199,527.416542422,10.7163537522,447.786005412,199.508774329,7.57605603843,205.531788405,176.631230045,9.40788202417,373.380267587,216.498208429,8.94095586316,866.567203345,324.123206711,7.23854926516,414.750002598,528.420107603,9.37386660276,439.654884981,746.194061044,8.05391846474,812.004980144,423.254979114,8.34166337243,655.360283792,37.7085183246,10.1952861229,921.211818733,404.673794036,6.38152896319,973.280972382,663.677388445,7.7362035766,1024.27110482,8.68117892772,8.84347348733,828.893075096,185.760851697,7.88687767281,969.021409319,190.118764338,8.38037409318,1380.63552124,432.177866137,8.20076512993,1191.14433783,1004.45635629,8.3775158143,591.526472436,969.130862481,9.07569288609,1144.45925225,927.190705612,9.42238590684,330.674736678,255.839254865,8.45606623311,831.879426116,899.678166782,9.23908680258,342.575912791,957.042826278,9.89342070463,164.049259132,327.148639337,7.79581191578,14.73862248,756.484621168,8.88161659603,1325.7675344,418.890561477,7.42013741711,1130.67280114,310.774368081,5.99671537508,575.462835928,683.047268264,9.07697213661,1260.18367853,83.8710843714,7.83351986211,380.696175236,511.865410222,6.89396885423\n1223.49083811,615.033572624,9.29072109538,847.524606059,301.086987333,7.8431958357,706.877070777,398.090455619,8.11318928364,1125.79845165,846.887790142,8.81228809163,182.771655805,1015.23785154,8.53168360485,903.716395543,134.089146225,8.22781325904,842.044465857,94.4728246559,4.74255143925,849.00294721,551.786160716,8.55658587434,284.177118795,938.493815986,8.68666873954,188.938959081,171.286510142,8.53892333468,225.38435105,17.083410294,9.13936754799,859.736686458,737.69225098,7.8032182022,56.4719404403,822.836306831,8.671051412,966.927821616,578.807885464,8.60979196422,772.92160803,303.937068881,9.07227809105,6.93677626131,299.85777835,5.38203906012,496.063924448,630.854475209,10.1182896701,335.413269639,506.942734521,9.70637634209,1342.81829183,883.679127601,8.97790305876,400.326329094,421.389013664,9.6461690708,258.759125339,39.2361863326,9.26071538974,1182.98163058,965.270763949,8.85025024009,28.5945076903,603.804312474,9.78640120254,1375.50034224,572.8725572,9.27853424871,753.879621809,869.737334054,5.44090852074,265.303912923,653.69627951,7.9863589857,451.582203991,315.505881777,7.65021185121,1260.51733778,983.870139924,9.11084865528,1347.6067676,694.766122692,8.95977869831,1097.60168323,590.740822316,8.23612275783,578.318847036,531.823806425,8.31634519216,724.861710631,408.537876937,7.78868790792,981.812377302,82.4941515745,7.93859965435,89.5055538396,1029.53511771,6.37942374467,482.373671037,102.219070738,8.19136939464,347.705158412,795.591065044,8.48751531475,551.671660766,102.569359804,7.64442043593,1198.39979373,149.636705275,6.89466779435,619.270298638,952.970769605,10.0823374798,889.392733124,872.631191959,9.5649634842,439.747137222,71.0955325875,9.0645902093,871.450581616,379.469262986,9.56741660855,538.316729592,236.403838394,10.7774272638,294.264784596,962.177520773,7.49035265456,1223.63887701,314.013279348,9.80052442244,495.264305618,481.692373891,9.32311422501,946.243361555,35.3793125152,8.36257604268,46.1841917793,125.955907601,7.17252967924,155.436351705,265.408612896,8.42065019101,1172.74433362,762.871760153,8.04759060103,693.692795529,140.554896831,9.46326783991,1042.67186971,512.568640418,8.45932669237,53.9957310497,960.009084766,8.08755018057,1093.04160173,262.257814269,10.1527817089,20.3727165293,698.1589962,8.18493619265,1187.41537737,473.51786657,9.15353836551,173.473866916,746.736253373,9.08112377966,1334.6773627,1021.5672755,9.02860314017\n785.029350355,47.4105197445,10.7267864239,110.833100431,715.176773134,8.59370535366,1256.21937989,1035.50819194,9.61657012443,457.185984196,383.732611851,9.31268665197,606.033886457,933.79122817,8.96981410202,1154.34242751,601.96579626,6.30220063129,331.328244087,129.824368574,7.74430730929,390.820243685,92.1821617365,8.57363178809,419.488609674,607.928249902,8.49473486403,275.523882857,656.683799983,10.2211160886,679.711036494,94.7373802039,8.13390364054,847.062275678,387.686043203,8.65204415503,608.866848354,740.35982143,8.14516588833,226.752499735,1009.34960144,8.45452468054,379.542065922,840.950474319,8.53167857255,496.674670963,705.697136775,7.86358443269,1252.10851958,494.434929645,8.24951753363,103.989374287,135.652625442,10.4360104992,585.696481738,167.830586733,6.95865752734,1237.00734921,855.308435735,5.61986997627,1024.01643609,937.604785669,9.8680403693,415.567281004,795.387463272,8.41906205554,123.244284372,634.084310476,7.28165884976,1139.22673638,771.229016342,7.7778051216,1142.71677461,866.628516803,8.17340855194,864.455534796,584.504088201,7.32061670262,1258.97848581,866.069505388,7.01546580038,941.691259477,305.300314744,7.16318900349,297.871851846,293.505863304,10.4059157408,1177.07339538,781.603206044,9.81637028552,1077.21080356,887.033169232,6.58531832137,958.086213623,434.976518839,6.78782391678,396.089936154,389.803120961,6.62099568889,955.796587055,970.173964814,8.10199568397,312.699741428,91.5886914894,5.49793250948,618.811743258,546.767815814,9.01868006322,710.065971397,977.104128292,7.84163041031,775.083844951,438.047948555,7.69398930741,624.522270384,226.492435722,8.51198743531,344.583497959,890.797459567,7.78389526371,820.503358749,722.539053335,8.21637533857,1204.95664431,336.463000538,9.12830340445,505.645069239,495.088847839,8.87908321055,700.81695292,423.147074161,7.81057072083,450.748026642,805.624345266,8.3538877259,1154.46559738,757.946998979,7.88964729723,795.963413135,724.40061306,9.62919927788,124.907874895,371.093821408,7.24263096638,1230.60295851,658.24820712,8.21124466124,1286.3077243,496.128962799,8.14396447447,595.135854616,86.4614436105,8.54438010351,249.627229824,276.838783047,7.78631256531,911.578252512,196.604388875,5.40567610232,1171.77308491,83.3005140661,7.48763215969,1182.67447767,194.803757986,9.70351425106,1122.91168309,973.693609052,7.02896783674,554.246543374,725.510853783,9.14313069749\n715.795660951,291.129260632,7.00704910226,728.142926929,544.595313704,8.6110845706,138.769985374,920.788288229,7.45774848031,1101.8795966,43.6508386171,7.40726429203,1075.1838909,610.600259051,7.61141933455,1228.29689386,719.636354902,9.43323768445,237.4977195,192.553883593,7.99473379455,487.188173307,92.6189315471,7.37975006922,1306.14077244,499.249429173,7.38552416837,371.089745503,622.306936592,7.31520819854,875.281413524,320.619748836,7.51267716252,504.329399913,530.47136138,9.91735234483,557.29263439,740.140564018,7.29802846844,893.708503252,886.465840923,8.47082356856,845.957230545,694.945143014,9.15961651773,173.078030414,537.58456286,7.71944490218,191.707103137,463.918020923,9.12057679906,1275.52904601,531.759493426,10.3305011143,161.368202734,116.866162847,6.0435902351,1128.5023403,990.013409748,7.09352542166,704.810172833,0.0673765872036,6.93115071721,525.879936834,912.58171287,10.4248561905,575.527060526,155.118245643,7.88759668082,755.96749198,752.826825272,8.0569909936,1224.14925301,834.381426474,7.27691072074,762.058923495,668.671899483,8.34617625193,293.191027629,443.860798922,8.02657118302,1202.17927047,284.521838819,9.61778239506,727.022717399,529.460723059,7.5014143927,1348.54878977,847.604925506,9.87211229397,1385.93604069,445.916035463,3.30437409308,739.375264632,0.431690369915,8.4166040924,1085.49528517,306.119516129,7.63066763392,1036.52975799,442.929245024,7.02215416898,409.162442841,760.340751955,7.47841770904,80.0639596741,877.098942309,8.14514277691,734.807660451,349.40088489,7.69426718684,667.76351979,1010.1602525,7.65074941776,52.9123494503,123.989510058,7.83494961463,1334.47263125,246.639495691,8.30201871639,778.293507152,1025.27620618,7.61728580556,220.275062221,953.930076457,7.70902733738,308.104123262,343.716067822,8.76127390394,777.368027874,819.901215274,7.43833297666,881.416039636,318.038350547,7.77681426223,553.720019042,266.258147269,10.7199559831,1372.45210953,943.354597089,9.58425072956,68.7051402895,691.510319542,6.52812549069,1228.03131208,261.773667109,7.15966765646,474.700946939,273.88784789,8.12485974944,600.742695766,729.391774473,8.54809812482,233.370320113,607.749837736,5.53049467233,1379.32358917,104.073292362,8.11384735444,515.514646426,635.99915598,7.58665461493,269.96885271,233.963640046,9.42054701848,643.593969821,866.400073284,7.5870964617,700.029500589,93.580775823,6.33962071462,1039.0906682,442.160380479,6.64132640524,1054.78728997,89.8960627907,9.39168361567,336.93291149,347.229626601,8.76266274419,601.866398265,355.914263029,7.5747421246\n961.581901828,115.576041957,8.51684311831,178.751948068,559.627336916,8.06827575891,756.929414308,249.925948253,9.83783369796,5.94922962654,286.202018819,10.3233952462,1351.43504693,945.545966646,8.11112797506,1376.44620091,841.976975101,7.30559383171,952.430849169,439.387463277,9.18234598337,481.079957423,158.903350373,8.47343701282,376.418212661,85.7228127729,7.40633473034,1259.90249648,16.118766451,8.62107309162,530.929272123,728.32300011,9.8865412849,1374.80120125,725.6001137,6.81737235274,1032.56584188,923.337717329,7.60948170534,553.273678039,220.354102055,9.40213870567,634.755263164,887.566764448,8.28884461912,827.179253719,79.5260232371,6.66648876275,649.854825624,954.835878673,7.61630979625,999.025780901,407.608272941,7.40601882455,284.479423583,126.432124928,7.60985544813,605.664409412,354.166019908,9.36452412121,554.359263518,639.801977636,8.64020793756,741.483557093,191.366821359,8.65560417629,1005.98911101,519.264910979,7.91567894599,42.3048881721,344.331033434,7.76223569419,331.864266137,554.192905663,7.93511725972,1052.01013246,227.680361902,7.11806401783,988.940950856,707.011964169,8.75957062946,836.080426482,963.905026301,7.24692858635,165.635770635,399.928819134,9.1785234991,898.117268121,779.562295798,5.93401805143,1309.59561417,574.960602111,9.41658083153,400.646844843,825.13779251,10.2640910275,1253.18169748,980.985824714,8.26724245984,831.855232595,229.173932446,8.53260904788,696.231968188,155.361703291,9.6409607519,1256.43721989,918.81704668,6.29742785931,746.530171872,1007.42776108,6.77582193382,677.508510116,15.2181011698,10.8650223154,554.614335266,917.36995117,4.91068947829,169.944994434,162.71284623,9.44110749432,45.5546365679,527.267517642,8.04912678131,265.118111815,1001.20820352,9.26738435357,1356.17338577,678.044432855,8.94180858051,166.136817953,551.849649133,7.06645028443,130.56558869,26.9652330782,8.81097364486,1237.92775496,133.945064165,10.8351339176,37.1631118052,891.078794846,10.0377993596,346.180606495,375.849120847,8.40560799537,386.878835515,857.891630836,7.83205428209,198.003683557,665.680816952,8.3516454344,520.529683627,20.5934301904,7.46490900082,1239.88647972,515.233571985,8.68294004638,1287.25318574,709.845070566,4.4315825967,846.63011952,327.889152035,6.99902451955,975.426144676,532.943713012,9.42975617287,773.922053363,667.488265633,7.66223001219,321.634049646,130.608266723,8.98951051655,311.885822474,852.433244229,4.01398429235,4.97101187676,436.423940202,8.83727983774,73.245972032,820.087521014,8.59657638683,730.742772036,906.526812364,8.11754336953,236.765522934,960.840101238,8.99711065914,1144.32729864,279.564295375,8.68093176864,363.377734947,331.318755276,9.31218092357,163.937277591,57.7606874242,8.10018509349,424.196367926,506.932834315,7.40275290603,934.633518073,765.883232775,8.06399435236,1315.86032184,715.031365887,6.8545230064,1142.63654661,616.8171795,8.21232532723,415.483772755,560.862086824,9.8668460803,1071.56988633,556.623014589,6.68254602081,142.053905668,1025.21858576,6.40005850861,469.342624657,718.42414461,8.38686224458,904.501071799,245.917720663,8.00633535331,1330.90242972,316.706472721,7.78480814691,505.362634233,998.582252047,10.1058956672,152.280301244,821.717800431,7.90436523689,224.179038757,277.150810908,6.06216849901\n802.525830209,325.089867582,6.74199860538,1305.37742945,279.585988231,8.45138514957,658.508791641,280.88076349,8.11073039805,275.930265052,951.449997028,8.55913299232,1251.06349536,525.154826556,7.74712644179,529.58559302,839.255538907,9.26957540029,685.643617723,52.0663816284,10.7660269839,168.914200954,670.471907566,9.12280664642,878.009350492,481.522148831,8.1229326681,471.095501406,633.262098041,7.84099183392,1040.04268122,319.796081039,7.99110315348,1383.83430551,495.554624919,9.27202953975,1033.79799782,490.999877237,4.2170032895,551.222952679,499.282523918,8.62122485201,790.392964951,676.584245621,9.25657874447,788.29680061,175.364272486,8.19722267559,907.905027705,749.857892015,8.93646688671,170.810961681,581.688258282,8.0827514512,1178.35430653,156.120161836,8.30069637098,1174.99410675,828.219914204,5.98455976003,945.437468423,548.188078899,7.42121922478,989.858443178,187.010719902,8.27198229863,949.709056056,974.416786644,7.24894853282,668.561680905,364.047210615,10.883714339,924.57469933,691.144562204,9.06454496206,995.071153909,520.386616624,7.20014891704,1092.36610366,630.429010306,7.9374085002,707.009047113,968.665220027,8.1128060922,29.2267261367,91.2240395316,8.29126578185,823.204037163,981.880455515,7.55455856461,215.231020372,37.1878011009,8.5512201544,1337.06058535,127.214374257,9.98054994458,533.775910803,953.694155844,8.37597496762,571.20108158,583.951788022,7.10157689364,1372.03261809,807.013933388,8.09603385538,1043.57128698,675.533058096,7.46446010812,375.555330323,824.64111288,8.34279051936,1263.89589068,612.760133986,6.87335937079,851.286658634,379.380122679,7.22919159363,117.190176506,872.402221424,10.6526785929,1078.18526937,260.271343673,7.04015957778,725.537350958,717.502627081,10.2540055459,581.789314074,999.037142928,7.50798738366,188.792350984,834.996916522,8.90737499392,1057.71852783,843.908640474,6.69989825926,119.637047291,85.8797700771,8.43295810205,384.966789952,100.723686937,7.33603069667,409.36407703,441.639721047,8.12603512348,335.20402397,665.743488533,8.94601235678,1216.65119912,4.69248586448,8.6569894403,1034.25189745,208.079593573,7.88977214705,905.987323877,826.458093926,9.83053208605,1113.88775712,392.939314619,9.49407088281,810.654913675,448.174089995,8.95614637291,194.267679208,237.563915427,9.30061607056,149.238250642,676.77798828,10.2346193732,1236.78699631,850.656457125,8.84013384246,1098.15418315,551.742812153,7.9827881356\n531.831588641,689.883450667,8.46774391112,180.010250168,335.41022227,6.68352865898,537.733106669,990.801551902,9.51456756239,238.944507912,415.111206539,8.87305742997,55.6249662536,185.525545304,9.69779508019,1135.79743893,386.495446267,2.34085633022,369.272182059,980.818621691,7.66373696265,8.75837324153,60.5081000173,9.36797727753,467.593210629,287.473793689,7.85019334034,1078.31075022,124.980542704,9.13413282573,1205.72354449,853.613090609,8.11731657374,1051.25215292,568.815088005,8.47115219654,206.950548224,607.836517502,7.26648205495,637.230839411,12.6786057206,8.5137413832,148.446090364,917.040583476,9.0550253454,4.63716317217,999.929965126,8.82616000937,812.120425547,148.871113718,8.97891482286,1176.25792511,989.765544767,8.8211269079,646.28999863,225.07740405,8.81156204354,32.2115796828,767.367969289,10.05007762,755.129618569,916.921838511,10.6248556227,338.421641281,49.8156070032,8.73794484035,978.001495629,482.388550126,8.78622687628,1222.9357953,296.992298739,8.80623264093,455.227455383,892.592796483,8.69481241553,610.849617661,472.136591312,9.5260035836,949.407949056,60.7627468251,8.58677190142,320.781110876,686.865452372,8.12463135391,860.411264855,720.684935188,5.90078561799,526.569854125,194.432869545,10.7639877865,756.346500106,415.559554406,10.3182089994,141.845704897,790.708199895,7.72413905389,1121.96724153,962.381458412,8.38009312379,742.086205108,221.286052114,7.40022456886,995.717856234,637.364034059,8.6190687026,1354.54571423,712.911031511,8.30306345181,1223.24273044,267.408575347,4.59718554416,198.851774989,832.223488023,9.27209547473,47.184632543,869.066758053,8.40412442233,611.472068522,1036.26467658,6.56977874013,149.519092678,304.681751236,4.45231588709,52.5039445426,770.088421382,9.39808762384,9.87005989233,695.493518394,9.92059510181,687.403082705,13.1399445964,10.3429467938,283.606020326,894.17681421,8.40086761541,1073.49242675,481.456773986,7.96806347955,700.376260525,685.701287011,8.43699581134,716.665644173,858.23754353,7.515882193,451.301193779,985.648247787,8.7691712374,1291.36845628,928.591543757,9.20202467122,298.465842264,546.475955715,7.54639513997,1315.87972496,149.769698263,8.05643383034,380.481057292,362.18219322,7.88025662916,1282.63387736,850.77352251,7.67301730955,1351.7750822,477.277607233,8.69263417128,1080.34441256,864.143345079,10.6508024579\n785.695900798,454.135021879,9.85262554165,47.0761274861,987.320941247,8.48519128811,355.651886206,639.156095514,9.44039973482,365.213485375,351.680359787,7.75279222146,191.533564854,284.27429306,9.52195729968,149.377846628,949.995218728,8.8273644491,72.8506443029,158.449611251,10.085419759,462.399653614,337.230490791,8.22356966962,196.369490573,251.662638716,10.2326569505,1023.92524121,582.001931118,7.61740631675,1259.63733448,644.147400881,6.67464241457,631.779352921,272.389972101,4.96669374131,269.927658667,667.687291282,9.42296599103,952.391411079,509.237577313,8.8913510431,211.265926685,219.674899305,5.58681010548,457.511780142,1011.71428173,9.64538614871,991.150939543,542.739279657,8.24881951396,929.831178648,2.19090926358,8.69972702028,443.537109495,912.706545273,7.78231704319,1234.54246943,262.02485105,9.43218161348,435.881613829,788.221630816,8.03904681568,1274.30983615,180.502006633,5.93177117483,1369.28886611,33.184884584,10.4367685671,595.955735796,798.016853695,10.9359049801,439.676214553,235.49343323,8.57664632859,257.687038103,687.390360091,9.17324655606,1274.83419275,849.703868929,7.28031030965,942.431124642,117.070347096,8.79586862837,345.554515606,441.510306298,8.36801718347,1153.14762181,801.915044165,8.61418076967,1347.387084,875.492819866,10.729902182,1159.93797441,364.56246771,8.33233512937,124.172132538,61.2851317118,7.37051841628,707.443975515,272.738005508,8.60211704592,1182.47445569,540.890444515,10.0691804286,702.430975082,208.511058285,7.07949097092,690.522047382,276.585579363,10.3404799446,371.802368665,130.838427708,7.90793696104,514.179701608,652.351868546,6.91785434137,976.692988099,711.248476531,10.0335660117,678.483510971,436.569799563,6.49002245442,1348.30676347,360.659295736,9.80030616205,21.7931166847,715.731278887,8.03685737651,571.88972608,317.170790536,8.62483851485,1184.01700232,94.3678606621,4.63408919082,1017.85279874,321.046105539,8.04389446604,756.884441527,49.0164091985,7.93043179898,234.801332287,622.690072383,9.66730210506,793.485281416,53.1645471142,8.6847279597,1346.29735106,966.472502186,8.87452227204,1227.93174219,435.142198381,8.86119445263,4.68141507772,517.209089657,8.28308538487,930.488728953,466.728423307,9.65280876918,1110.58466574,340.674724453,7.93419655138,80.7328948627,340.087474712,7.75404227701,1355.99129301,927.105999366,8.2248094823,406.473322468,320.923615052,8.22879390799,1014.05373837,777.81007343,8.05025635304,784.355490429,800.543939194,9.60206283089,627.876135523,940.673734413,7.61431338384,770.35008859,211.809836824,7.07018271432,281.140377101,41.0160149515,9.41199837619,1285.90123987,515.812559904,8.03030352443\n1079.82557182,463.537349553,9.82284856296,1016.16857329,1021.3989652,8.48062515371,701.900762708,66.5642537781,8.64019069974,668.859352624,377.086238081,7.05697238184,251.856717834,387.423427946,9.42621694998,992.986663084,937.53847387,6.79940560511,351.71367997,301.040455364,6.66995905698,679.109532792,112.70221127,6.70175274968,293.28141936,187.820075709,9.79437379608,773.78885643,146.686292196,9.79483801476,70.5183069152,636.150914774,8.42141550409,697.227679879,521.548051201,8.31765125922,525.556458684,322.617135282,7.92299923029,303.49683352,856.730185752,7.22104277413,832.904269944,964.688764343,9.68037325548,368.050691444,684.825586248,7.87017470328,469.141278966,275.675537393,8.2505901908,930.659284362,333.761394019,7.77018039027,253.669053563,431.436704416,5.75816468643,112.596664175,566.344647319,9.77241477889,586.778336831,645.174762927,7.2676954863,1065.88798796,63.4873019644,10.2069675218,194.745371202,813.922662754,8.39275455543,592.971355651,72.3979674846,8.41176677401,42.5264153708,228.164158043,6.83447768446,68.438650156,569.281564472,6.44504419719,820.630787359,730.244160741,8.71038043748,655.489086705,855.459965436,8.99090275921,235.355244716,825.074679446,8.40829680987,101.862279558,291.784623865,7.8700536679,1119.5108289,455.764429105,9.1470870938,363.272701037,638.222483636,7.40909293608,1176.925547,873.301680911,7.23947528646,1261.23209472,201.210067679,7.36386823416,1165.48764944,610.619379016,7.87918794586,972.2945462,999.860025073,8.33346759242,727.795151757,800.772308423,8.14856743343,1026.30504464,113.743909807,7.74241512406,532.394298698,559.315627254,6.12516268072,758.843615351,396.351055241,8.55922168789,1124.09245088,1023.12175094,6.98361919632,1080.48563221,41.7840766987,8.48296145099,23.6350923387,292.575264404,7.92082344507,318.80131937,181.432974228,7.75001305943,181.471590889,244.914032534,7.77038129815,812.056704827,681.523001154,7.66627201828,521.070107152,979.492754289,8.47055325252,687.021376231,613.252299095,6.54771355643,287.577348246,622.345561862,8.80426131565,1080.79187065,683.978954892,8.00305957743,329.250628507,75.9441820809,6.76523800076,713.644327837,978.681233128,9.17213341251,1097.31401758,266.986827179,8.8430364885,604.006691435,532.367808763,9.86589708046,286.757231154,633.990262179,8.66038213225,791.587170837,276.90192307,8.5845293242,618.146450496,65.4644242204,9.32495434492,370.978113336,883.204915703,10.2105078188,1193.08522727,744.908169209,9.95263771046,562.238589484,10.270825096,7.35461709375,923.958691916,874.310413303,5.44966710821,1068.54856437,889.959357408,7.76437070057,1158.37244831,180.540130403,8.12144722322,720.914642882,86.5408652719,8.19879826389,1239.78126506,461.197362727,8.12420123309,217.128232319,774.416840721,6.23062792698,318.979012519,593.846628454,8.08227550821\n446.869091119,84.0550791634,7.75938200538,1319.32232103,70.1382474378,7.93666572514,32.8634910476,72.4659851223,8.54089540335,987.468449775,0.129446566159,6.55060112995,418.253705875,622.126596993,8.83733471807,1048.69153696,614.154043281,8.70387623941,1180.34153906,500.144704152,7.47511347462,718.019607894,278.760165794,7.83128629536,46.257864659,936.645432381,7.31269367737,3.52837778755,1026.1952635,8.07649047109,368.097771623,10.6244850531,8.43414174532,10.6421962675,238.575433153,8.29375605542,1151.77871045,70.7957395004,8.32123166101,218.533983549,771.386473599,6.72107889044,1301.84762565,390.498507818,7.92465927485,259.262092033,529.110163971,6.48945374499,1040.84410256,219.163293998,6.4959852376,226.953329039,678.663891656,7.68614945876,416.206216817,337.209092371,6.11493119202,738.266578007,366.716468697,6.4326813251,46.2154802478,439.077105293,8.24338773955,186.937327862,1031.1842187,7.27393180097,75.034314203,25.4623757325,8.22904124948,364.160662447,262.287575691,8.22572421961,587.660952256,882.251584972,8.68548183005,1168.91012403,544.937622601,7.48120254158,171.584809083,330.605028799,8.35814178276,316.136035128,1014.77459583,6.06583129475,822.865573387,579.881173146,9.47185631021,573.741038785,398.728396683,8.44569029859,73.742988795,607.613291507,8.26951815161,732.765177595,35.509245093,9.34370755418,149.306848071,274.48616336,9.54722228321,85.3654290621,454.419430643,7.83270662405,1303.42448169,261.509676315,7.05002742798,766.196242897,693.368153643,9.68635814457,250.481854479,838.639171205,8.74474672892,272.670526933,987.326574453,6.15087584829,834.359496844,950.051169221,8.92921925888,495.222646946,259.993283302,8.83368196595,742.652660493,894.224055936,6.682284187,1217.60950548,727.321337258,5.39842432115,189.658847508,202.812177824,8.11313782541,122.940665514,469.351345467,7.03951817624,515.599121519,999.099093186,6.27355707237,1035.15888706,1001.26914755,9.70507731067,1387.25666486,636.502194251,7.30658378139,571.224567809,722.408100479,6.68553059151,932.308436309,231.13013594,6.9755816537,1265.95225536,937.465645896,8.50901246361,421.831480353,868.323806817,8.1014764561,1281.42749334,544.07784043,8.53250710274,611.995522009,678.044308761,7.86061074368,308.060929466,918.324713722,7.55721755745,605.688716513,695.830694112,10.3363017597,848.290205485,158.444700751,5.55191670425,715.591096212,407.215096574,7.76542310709,863.737190493,801.054024888,6.78391197797,369.758219833,195.942372298,8.96451782693,221.432773577,1035.86208403,7.16101430513,64.8455121306,703.293471888,8.01883835351,420.383636646,547.995557691,9.29558538377,814.658015524,919.153773932,6.03891179356,647.623362325,206.264854034,6.63321007545,898.431263855,733.351002006,9.41061608902,476.167600312,577.19745524,7.01049267512,352.171971185,399.473634984,7.6744014262\n654.605898903,421.193953067,9.36598816486,977.971036953,1013.86367522,6.82725821254,114.889892858,302.722319999,10.1484644076,400.944024167,255.378570483,10.3309872057,976.973498683,812.329864335,8.26015640513,418.158955263,936.437707084,8.48165209578,1305.3703329,1005.01691638,6.50631326895,718.707793617,346.346613102,8.62194338401,1338.33661484,6.22243510924,7.9907091621,837.338454491,145.233757618,9.88556474712,286.901475744,414.848853446,8.21090473531,158.682252466,547.689776975,7.44133950383,668.394471424,22.0743545729,9.1047026665,366.781841144,181.789865075,7.00397867716,328.010387059,499.355835645,6.64646950392,1128.76717418,14.7870082767,8.24538979072,1022.53868122,126.177801014,7.59009976428,89.4135849209,482.753823668,8.18066366727,192.334896543,53.4067840336,8.99730705871,1293.51561436,925.819885267,7.64462298876,1180.22001388,33.3504888725,7.72548052972,921.335094164,165.394163008,8.43869460497,692.233319243,394.353479633,8.61828782264,208.964299475,573.939320828,6.82313530092,177.429087519,1030.36847426,7.92016267851,1198.41731196,870.915417199,7.46543370141,886.26213994,690.263892487,9.41098996035,661.262809004,454.436743407,6.74507216066,321.895324411,162.19301834,8.68996443589,389.180420867,796.053421463,7.22182390402,560.06875714,102.69402207,7.99954369083,363.506542274,984.374232707,8.59713552757,347.463239567,553.344585308,7.45594860946,749.781330682,386.034040607,8.44628716039,61.1642296386,168.614438947,9.31712351047,581.842668076,571.01753248,7.59051692775,209.673480364,1007.52865868,8.91251722879,1197.42968104,554.641641785,7.40968578839,1142.3220765,262.22181067,7.5448986904,1116.51904091,275.794244636,9.04369286356,892.706270297,536.9512487,9.04235468139,521.274392494,146.351208301,7.81092415407,589.592287917,253.65347057,8.6882966279,230.347198316,513.187896124,7.82965595862,304.469495798,714.477857667,9.16685908305,1107.84081013,193.879888553,8.17151216395,1331.19513658,812.699755471,10.9338028227,1239.4647433,361.375875065,10.4090123829,19.247589988,230.168697873,7.10987574939,983.687836896,529.629273737,8.59264852568,71.5675127442,100.665834705,8.10272122429,1379.88751187,218.180969975,8.54110372078,1134.68603578,1023.67684172,9.39965167696,1.05419324849,721.814243098,8.39754450989,156.810351017,360.694300822,8.3914166839,595.101699907,267.167697494,5.85193326171,338.721736499,269.779708408,6.06249662392,146.08883902,1026.23193891,9.99635628771,1364.8036419,173.999799241,7.77109200159,815.445943297,164.119023701,9.07201350483,729.853328487,802.271325776,9.28376658213,1042.37464691,337.430934442,9.19889220494,971.686157719,875.944623603,6.9961237652,1144.61711661,450.917368809,8.19299341917,1390.11358172,688.4268479,9.3625475083\n1339.79703838,353.988918959,8.74790142506,855.81830056,874.232002079,6.47793875266,528.730397811,463.721719431,7.75809457048,997.137349128,959.650760945,8.61966078885,530.562096186,296.027219571,6.66746869158,107.861022705,400.923113732,9.80306446568,966.29209622,626.797779996,7.12466535946,1348.18847693,203.075328677,9.46089809119,361.459286766,76.6822017659,8.36543957407,1175.61687579,1037.35188139,9.43338868979,599.50694768,812.23880472,5.91330450213,1191.79039935,795.330400518,8.44619674368,1348.62151629,104.486797464,8.80208053295,931.804295994,44.9436857583,7.22055355947,393.795194826,963.767712479,7.88576679694,1315.09561442,1035.6214647,8.58193167427,623.186975168,285.527142451,9.45973502194,947.84495123,853.930400471,9.07020217123,635.400894267,848.121278175,7.38167522048,737.217102956,830.937238307,8.28158472742,754.351683401,469.920015248,5.57110975003,545.03440099,873.414901394,8.34611889867,713.208955006,678.958188826,8.31597933606,427.191111949,253.488145379,8.26322763567,433.503140298,1031.72827121,9.29967469922,238.107965687,243.077446907,7.50882952407,1037.88844068,99.8244475064,7.81944412964,1379.80773729,784.461423591,9.07827826275,1199.95408854,107.169012333,8.10084976272,708.826564997,648.91204304,7.87108216156,517.580248823,167.376656151,7.54190991699,381.701181004,68.1125263724,9.48940438415,795.871739515,208.543113888,7.19930152259,510.696239813,92.046553541,6.84842754384,588.679217567,149.475543181,7.30045542939,780.408840542,37.666513667,6.87338018018,820.483492772,416.619848509,6.84509896878,170.763491611,921.167368473,7.53758751282,120.211274727,133.185122843,6.73640190271,167.481444226,522.432950859,8.43957827422,966.737348977,514.152749554,7.21815907329,781.313653947,636.218729666,6.94275795675,654.322437148,553.938048327,9.29334041801,159.885005647,780.633704629,8.77237070566,1212.05809127,681.359764051,7.56635523983,319.584983029,691.94131111,6.9464512831,24.968126756,238.733432984,8.42699365814,1303.39614074,13.1059757659,8.91542134117,1381.72910322,630.495438688,8.35685279663,1148.20003675,663.693039109,9.51839683737,141.8618852,160.744880749,9.02053243431,397.858296136,322.187627056,7.50307079636,880.774958752,520.83097092,6.91877392427,589.885970827,147.136705418,9.99580454435\n267.348681443,488.565829846,7.03708568758,1124.70247128,669.248076248,7.38604342211,852.280701075,580.375467426,9.83674619511,807.225257155,199.390843623,8.34839217504,617.273205801,549.253974795,7.92391580091,571.50544235,711.606862727,8.36968692185,1301.35777444,381.067423881,7.76659720596,239.521269153,1039.12953128,7.51133105791,1016.30799497,923.222995294,5.43255341515,176.700668683,826.250181724,7.32726500671,389.390939489,217.93411733,7.33439436657,277.410799037,351.576519572,8.55533143341,277.455078104,45.0426484102,7.19948839867,1235.19567133,1005.92060195,10.1321939535,1052.04229635,718.750566543,8.12244100199,801.508099998,898.573815349,7.87916233557,533.920928373,723.523773457,7.07509363693,729.07999621,343.733743126,7.26616179977,6.76035478635,203.333475357,8.43831262473,1139.32121359,787.580364644,9.50597025202,795.952082142,14.9605630484,6.49896644315,1163.98485196,402.204678131,8.18647206176,102.965182246,544.359515405,7.43308295865,713.802213454,407.332480236,7.82939522969,410.73877994,506.881923288,7.67176287832,625.452809709,933.196275778,8.53019505111,1243.24250207,850.062577468,9.95213935561,423.029714634,627.752547586,6.43822662914,1143.73083229,728.565165477,7.49198612199,204.719658258,286.798081581,6.22720774847,531.631359578,580.080309226,10.6159289735,352.931857264,917.825121443,8.03801984567,244.321047289,278.461442784,10.7863659579,350.016342951,749.929111556,8.08957452772,395.588740368,863.616544703,7.06532732669,522.423119621,59.5991034038,7.13325605294,1265.8783778,376.334540703,9.22011416273,828.33311407,187.98667193,7.23438600801,124.869954266,639.442875661,9.91033697995,872.65837111,354.313136317,8.53033490416,1222.51343312,433.418589176,8.68271374723,357.812480985,412.589610436,7.79033590086,834.436993941,872.336775927,7.80714607022,911.09029946,581.643403892,8.57342980001,74.8931609321,787.285473675,9.33925305121,983.143159618,895.326175193,6.81646700731,200.388580361,577.482162658,7.64036517774,880.911726558,956.801993366,7.36303000943,658.410175346,669.505018745,8.142534641,1010.89409846,492.0504807,8.86981995184,54.7839060144,475.733166232,7.33077512522,667.9948592,859.907945439,7.42745798237,1089.90209771,634.504806251,7.86898737378\n541.107877315,185.684321366,9.16748872164,266.901982289,923.333570067,7.99717641677,1318.01472514,1037.96474592,8.26327517582,1201.4962568,785.961418663,6.24430289423,241.842652222,382.962275688,8.03961610751,802.244700253,984.726559244,5.62008960177,940.019578074,633.796873834,5.4526738624,187.28485959,976.340730178,6.90361316274,940.581164494,968.520382705,7.5709823706,114.786130929,613.059616598,7.04148679602,727.022805016,164.589951616,9.59979941191,884.569193222,459.66001683,10.1351062728,781.244436083,574.887354712,9.85132619512,1135.29962566,798.985975449,8.39579497881,1128.54733779,919.721787525,7.00727550157,1138.08018062,928.730581476,8.7626643388,1244.87078986,8.49780360702,6.24228895667,345.974242869,973.335760819,8.98495631626,1167.32180214,758.285659306,7.92924082317,75.4427153902,1009.74639141,8.73544509924,1024.97672411,123.904198538,8.12923815145,1133.25285552,805.463188816,8.79697776491,50.802690753,419.132438631,9.50799600594,639.024949513,465.950673802,10.4521899036,1149.91060741,491.893965165,10.3426881403,1277.17050749,11.1675741133,9.01039116672,530.72595181,232.40653176,8.02594138215,299.196338175,37.7290156138,8.40150965325,625.823273661,1006.31989123,9.92459574924,939.284183606,994.875540008,7.78208201245,280.869620965,837.207249858,8.14152164684,1064.21008968,598.539393476,6.84399142871,386.984507307,462.620250749,9.30840080722,259.174616915,234.251693571,8.97365355616,188.713367665,764.319255553,10.6227978176,171.360142445,942.680051036,9.54428682261,399.567412135,812.01559595,9.10818328032,1331.86913569,767.072546309,7.0993062347,85.7677929685,869.730376833,9.87707267767,17.0167053357,81.0098978735,8.14656204477,684.980748035,452.723172917,6.48815897842,932.894114233,754.585235983,8.00413967206,788.677165684,98.0238873971,7.94591969339,292.827296918,438.183811512,9.09471557386,529.320993898,183.332914137,8.84365515493,840.32815065,232.976262116,7.23460637526,675.390999556,456.705515495,7.93725971714,228.301872864,732.361547949,7.99133483746,1191.26183403,190.723053621,8.07254402828,548.196933914,739.88283659,10.7412451075,802.440146352,969.910816751,9.30475574228,1320.8971769,236.791582783,6.49024679127,44.7666044908,838.22674819,9.93445293472,105.412531762,350.399445048,7.52028223993,597.685259388,823.462558725,8.4593641068,995.309538197,46.8261573706,9.50885897229,463.923991344,935.535380162,9.33443400329,574.522771207,792.300301813,4.01863677221,992.796815202,89.007072913,8.42866899489,1243.73924873,10.6332539754,6.88865468157,1030.31008117,695.201755453,9.11751469642,373.03057477,246.304239664,8.51215619849,463.880324385,86.7852387181,7.67122175556,487.210858227,656.060443871,8.65492745167,927.210675751,128.16315345,8.94189156233,663.014778419,816.926241248,9.58901946168,1104.65166579,361.459067199,8.11120721207,174.740478516,1034.91883799,5.77601066929,354.399518534,494.676825514,10.862880524,162.632004425,242.269456935,6.5110741345,700.865408866,303.38981379,8.72578992668,568.555644721,99.7603275873,9.28846474076,464.19001212,807.09868419,8.23968226019,1032.96471191,346.969484406,6.15490981893,1297.2753902,890.369098032,9.14809098107,642.415451867,800.455883676,8.26785287924,507.575637772,173.690376749,7.89642834838,787.092133882,752.170389912,7.19160272898,310.376829594,674.573287928,9.35836093259,1302.09772762,628.529851937,7.67874746314,1188.36963817,594.352877401,6.68920802258,854.345215568,249.66087816,10.9129425945,601.729592459,547.533458665,9.04059675246\n1115.41055532,20.5157938331,8.67688929801,704.843131034,477.214873415,8.13653052726,1054.94603625,660.547401948,9.46281045896,1172.67013243,424.25124691,6.35599917478,1220.86412557,531.468647052,9.52563173717,471.081744122,482.302949134,9.11941809769,643.000526926,751.98235862,7.88003230451,418.823942211,56.3703481377,8.81833819096,768.850958726,152.736605937,9.50385584466,567.67340065,894.337112315,9.85542154035,1385.59030942,399.379820907,9.00460906608,1120.36803844,288.353448731,9.89934879937,74.5429002591,268.195718319,8.24613070315,859.644818685,157.046655661,6.84358416884,216.505975103,82.0419835232,8.28674243254,224.848450192,603.950781699,6.3596403202,512.822530939,565.617378861,10.0030816385,550.31474434,81.6022972292,8.89984125097,699.907517192,1009.04506374,8.29126462278,193.543540551,770.74433512,8.94869831177,765.226230617,664.31716771,9.56067358885,303.20891563,759.975623282,8.7805329307,1253.36631029,549.6861627,7.51601824657,1072.44668507,752.65604045,8.1703790158,623.873371555,226.975133201,9.6115602177,1364.80356963,1033.52334348,7.57427103896,1192.59461571,316.327418629,9.13678227214,666.933983963,183.243693315,6.02985850022,1012.76493408,295.591725569,8.20271171124,755.033410717,921.734978411,9.5423210254,253.389557496,293.034110499,8.26866251914,726.386782034,944.872438669,6.9216216418,1269.89878811,1033.09470618,7.8322938467,17.3057785392,1022.29681217,9.34515266407,1365.46717927,873.855678338,7.20162057217,1042.391163,514.807635574,8.79881277111,1040.53932776,837.580833763,9.75560228495,514.656206895,582.330149943,10.0725102166,309.190462469,421.607302748,8.9609816566,993.103713291,635.204218846,10.4096377475,358.93044936,1037.49413372,8.59143444798,152.128240564,989.748078336,5.19838116413,749.014416399,313.976709106,8.58327384825,494.482849323,764.845288148,8.76314753312,214.968198789,937.293802496,10.3973655781,90.8862180371,567.80738537,8.5732105103,1055.82301638,660.400914436,7.63458791733,981.098795128,253.83025625,9.37517945693,952.887381086,846.186270971,9.45370977586,1341.30187342,83.3894797636,6.43153608553,91.3319334338,871.991080654,8.76932697291,1234.72618255,914.353807405,7.79526018548,1378.12157765,755.531203335,7.93489778777,1287.95607611,503.980237839,6.89351522465,546.723609881,363.310476266,9.37708201502,1118.28407858,44.264702082,8.53793253295,115.272783684,326.811280868,7.16213816148,257.918796625,953.41863461,8.98814909364,774.404035526,232.92513233,4.2086996533,632.091771206,26.7224299057,9.15889689838,7.71790515503,632.198188677,6.71615867612,662.952579899,94.0317642762,7.2521082322,1272.4636475,299.856111052,8.12116055009,830.684076524,570.957373786,7.66675318604\n786.690746756,624.539517042,8.43951075618,1018.47884437,741.625707901,5.8964634416,1058.99746343,837.498525291,10.2855445646,788.223961891,270.79685758,8.35096193937,241.514181973,303.422968274,8.36563251093,642.744592326,37.1006513479,7.75454014025,1301.47468058,820.434746814,8.04940196035,364.131606795,86.5811591921,7.52100351835,592.610770643,358.601961532,10.6663325752,870.449267863,284.994593867,8.33683411252,742.895677022,20.0349154286,8.43175185885,200.109768386,741.973183722,9.53055358654,41.182468785,4.71117163026,8.68235075405,614.850049743,703.471638929,5.49341595433,1364.55343337,516.693945442,9.62526325199,668.422878248,291.314072194,9.37665922964,961.38848279,394.771878394,9.56165905151,402.501960396,868.408892357,8.01894383901,1005.39949332,481.172901776,8.59670030003,467.941796331,20.6934861282,7.20412717748,1114.42307264,931.62062927,8.23214336421,845.522464314,247.490525977,8.38291760081,240.361724474,305.007510764,7.90698882273,952.875555008,686.983367592,8.16654698394,1107.08144313,673.271037928,9.25434461639,921.544625086,799.368169647,8.81714561616,354.872477112,27.6910458278,7.98904534984,1292.51108493,1035.21035111,8.33421278517,1344.56215199,387.78742302,9.57586619393,482.479780053,201.483345751,7.32756036277,599.574418866,823.227343022,7.28587932479,569.466892102,468.730549644,8.42185661862,951.038350867,1.0578698652,9.09862236424,1356.54995094,1011.21383497,9.36609622286,485.478109686,748.702997876,9.2404088302,231.873362266,280.636215308,8.23847169022,77.0551393979,540.823270409,4.69800048301,333.814264835,875.534298649,5.51058717426,188.646316553,868.093770928,7.75892642185,916.633351552,901.645398339,6.79501256897,414.376009592,438.764490647,8.91421450408,727.052570629,242.754038521,9.68672252107,1029.23073287,635.536365849,9.89310593589,338.835901791,736.796918362,7.93674999057,1321.67271085,179.869788285,8.29509455124,323.453393704,590.066688296,9.95028810977,929.313507487,93.5314511271,8.97973356968,64.4992836156,801.429460206,8.96890608054,946.324422154,155.805981328,7.94092151922,707.700662208,52.0367800645,7.87737491064,458.476087706,833.542218486,8.63860768609,1087.46484838,212.101604209,7.81483355678,1.64743564697,207.189008925,9.2636780665,756.20095051,865.213526573,8.74681545158,1250.08477769,2.19195324346,8.124068584,793.600750512,446.859161641,8.5791733339,984.388168503,385.531234627,8.73549582736,983.178746845,1009.87493713,10.9111446999,507.088009504,488.577335434,7.41091347112\n78.0404909923,13.8841748774,8.79719818261,44.0098955473,887.941519107,8.06049041754,427.594808158,742.154190703,8.12459226925,307.201657736,424.140618047,9.03817567509,296.569152385,1011.20610869,7.32463889505,617.968317245,711.336309193,8.21152284113,911.792999317,170.089662051,8.85685178981,1104.61740991,594.365447155,7.90371365842,272.978917071,558.144607893,10.7740481162,470.330201032,1002.65834238,7.8530012548,1265.61852616,104.140252382,10.2601763645,806.748871324,1021.96087732,8.15970123732,1114.34398509,384.664858439,8.83101913473,1035.91534016,759.718746087,6.47006836306,1293.35217332,592.119322655,9.98904082873,980.676133559,565.187689163,10.3257599123,802.181266887,118.435481208,9.01220032197,901.046358774,29.0653961007,8.94176309396,43.9924708593,251.916171481,7.21517135912,172.026422277,779.726385194,8.57824381446,678.187148083,560.734356832,7.88014681874,1088.39673109,897.891629683,9.97092982752,260.724544927,38.6473781469,7.83988444341,425.33042032,497.032005355,7.67319477852,558.117082001,917.252243961,8.09377025573,298.327488,61.2641625222,8.61884611361,515.57819651,1021.86113658,7.59458526379,593.567694769,170.555590373,6.12298824456,13.2504526816,616.665783801,9.36863201234,990.335783509,695.188906104,8.68406377603,1095.27225079,705.890172415,7.32327501343,155.778645685,306.786226233,7.49394944065,535.933837502,683.359777194,8.2354223144,1174.73494729,924.860902521,6.20998366988,123.602387721,687.542018681,7.89696568093,750.8178568,377.820342305,9.26043639906,1370.21392004,633.61481094,9.35121190924,374.577615878,185.736441204,8.26146480502,223.416880021,385.215777159,6.99599491048,1305.82273627,234.133286619,7.83204694192,378.296002073,607.622834131,6.29182271139,169.016367782,740.489717132,8.57868728189,453.789076775,0.698688811569,6.81149037053,11.258247047,779.302336099,7.83737823797,637.280072266,425.820713266,9.26746053388,246.537334357,523.087920471,7.56512820964,935.288911737,131.343155109,7.61928477891,684.076987267,45.1694870851,8.96022063697,1242.47329163,94.637427772,8.81909979946,1328.17643572,258.641079596,7.8646675975\n192.207036236,789.107601712,9.22297555573,1148.82945298,886.926958315,8.89746115986,893.25453577,55.1272483992,8.25502890897,911.801568036,610.405599451,9.01904290468,1328.67196688,1004.16543682,9.77938245217,255.217443704,733.663625307,8.67973015183,1088.3987219,859.325502312,6.39534075881,340.282871022,929.88740572,7.69472468898,712.233434447,66.7554511249,7.97290953254,59.1060713662,777.794104045,9.98104718634,399.227445853,69.0544983477,6.44839180772,929.95665689,595.648200975,9.7959951475,1248.96933534,519.081821825,8.05599166442,575.533436714,237.11333806,9.58747754512,409.156809741,908.60898501,10.0923340404,1273.88318783,373.965530044,8.82482245981,303.152759867,268.539238116,8.60062866996,237.939529878,428.150561248,7.95005140371,1055.11705761,754.763596758,9.15262132977,540.412792781,51.9313039535,9.83559952703,425.74161414,714.71047896,7.83884559054,132.426333385,374.882748329,6.82157727917,893.936678399,625.475686118,10.0040396178,689.740304332,366.084775272,9.06309545547,441.503801397,387.049565028,8.48746051656,24.2748608551,572.539722276,10.4313242743,972.607396125,613.667124558,4.6444061771,938.405349038,344.107352806,8.30582802228,1304.17355143,120.651528525,8.99015560983,267.94437832,525.676233806,8.24201686364,912.688140611,521.500188759,8.56674540042,689.908339108,645.640424162,7.12528063426,54.2803065917,244.533653902,7.25554679789,1034.65116409,80.1616442805,8.57978111576,543.376166032,805.13146011,9.17513802161,1322.95637348,304.409767175,8.29999547734,254.861200972,239.02246516,6.48749402021,888.689207195,996.460132786,9.9560305949,141.877214862,879.545356466,10.5325650445,651.037237528,919.204314941,9.77750003437,933.254119361,894.822910598,9.4078315638,656.397857452,68.2470926953,6.79912710114,425.048777945,717.174060516,10.8472731299,1147.78129927,277.898963968,9.07214981626,1371.07854816,232.532532673,8.89901186859,554.807535701,147.929253001,8.7818252806,1297.76494697,737.369386332,9.04826805635,966.047823459,153.902826845,8.10805938216,967.031069266,138.073659434,8.93209412457,1279.98693814,461.726694931,8.53209592315,851.598773911,178.73623245,7.31779968747,572.048235427,603.974893063,9.22630472699,595.324756959,52.0570473151,9.45009635038,427.191126876,154.074500069,8.26097199183,510.2864085,663.709661904,8.55613281622,1243.75434085,628.491470091,8.71447030792,451.437346854,166.56103087,7.78941940142,682.023936369,960.246186295,8.1517423889,1321.87412476,933.071902715,8.87757858949,1254.7020048,734.58993023,8.23470755473,148.101802058,329.732095441,7.84047763167,1079.23879654,722.395334482,8.08467808116,401.308438474,613.264353267,8.34000272864,1034.45922077,714.027612138,7.9627974872,155.228795714,534.358504605,7.53804647631,665.211280633,1033.44810271,7.75952286076,362.02719291,226.453113746,8.15251176153,342.364084961,875.378739043,8.0863998175,1338.2622923,238.466269971,10.3070882341,737.267333065,154.094018844,10.3587241949,574.159630716,648.636123678,8.07565756574,825.215158896,1037.46909521,8.84365275281,280.543045133,367.015446029,10.1505124176,966.460664686,183.069703848,10.4308012957,50.5391553312,258.522877665,8.89093876751,882.310807856,786.387709901,7.95200919064\n1152.89710898,421.863332105,10.7559878179,1341.83226319,397.153148501,7.30473530785,748.962806752,600.395539818,7.54719637372,802.336945228,197.330326869,10.7304995591,807.949824955,515.732090337,10.6445521997,874.654282873,307.89762628,5.9897464476,474.678234385,283.578515888,9.21298852489,195.020564105,439.33432604,9.7788486315,699.784019959,682.209006535,8.99570953995,999.549651981,906.068474789,6.6510402605,1250.25983997,733.945255392,9.38788081425,540.330691095,756.072664751,7.42036611796,733.962624446,1000.02756979,9.22548464756,675.175440795,664.897941024,8.92493839678,1292.22990337,452.235295332,10.5212205881,949.664426508,677.198794523,7.61098495328,358.842237066,906.002958137,10.1619891505,1047.86753653,209.43807623,8.62809380018,809.392135892,264.83772577,8.59326184879,471.714264656,1038.5061164,8.81024246102,1330.29070148,428.667313039,6.9076745246,32.2723014535,226.270663772,8.58783243664,521.077593082,179.686629821,6.20931635973,891.618430397,19.1145951554,10.001102481,1237.1522931,835.663030757,10.1236781233,565.904550224,802.126596374,8.29897113258,1319.09611532,410.759183085,9.00183124184,924.240923069,711.078841066,9.85103783096,354.141747835,758.311506752,9.93562902845,472.792438171,501.095988758,8.44607776786,228.402555131,681.992736595,9.72808508357,1255.4989168,892.440539771,4.90416364148,597.105201004,191.813830941,7.78370974424,366.581078853,183.396428656,9.42587865208,160.33092382,198.208474973,7.47660139938,440.341252395,298.075478366,8.3759841808,196.551008388,302.788832433,7.56194589653,1099.41405826,342.926620497,10.3639821625,607.384348061,486.561340819,6.88156584095,930.819305901,199.912879951,8.97754032241,1076.1155868,941.116844272,6.18298600382,117.984833746,807.918925154,9.21927472847,727.3900313,523.120565158,8.44575425668,892.264144044,441.800596594,6.3044927712,851.484338454,1026.3174739,7.3432517486,111.960951863,1021.99643126,7.32825941139,1152.54453021,634.258996703,6.82177402281,1165.20688391,235.391749106,6.48173628464,39.4924153619,835.365374551,7.86874828838,563.997034032,627.857984046,8.19275391086,1361.8387417,827.289692581,10.911235906,253.190068769,834.71626146,8.0222874769,528.603423116,409.605344954,10.3935762484,495.997845856,1020.64912843,7.66790661305,816.247987979,300.665771907,4.49460761249,190.23115297,559.276279511,9.37150156591,1310.56316251,937.189976336,9.62602555866,1188.28270893,524.614763786,7.55099538497,1186.49955251,511.383802996,9.25367646986,659.034216987,759.679980944,7.59458879766,945.006022754,36.6150176273,3.3847995284,718.988351231,251.269698748,5.390554617,1332.45546381,428.504318588,4.00934560948,1018.6308913,697.612001093,8.43332835252,679.521383805,821.640452997,7.74193812204,712.714615336,1031.41442684,10.3376911955,764.679590554,573.75580542,8.62459431604,1185.2165486,4.76025529764,7.35639720873,159.880444958,700.459414565,8.44066337659,672.064296021,767.869565796,9.90905816034,863.769438661,73.6154814573,8.6794495729,321.311757093,331.214675931,7.96039170467,852.605766223,990.1102227,7.53881422184,1071.03615248,693.707788455,8.21354811032,1233.80137885,249.681316266,7.96593650501,275.339974943,529.103731224,8.19684462953,414.895291827,508.88348181,7.41871109576,521.077755711,222.540182453,8.7404497888,953.71289637,586.345848725,8.99272484658,968.149443758,845.037860305,9.68134216075,384.882787198,185.340708545,8.15627849187,1257.53843917,1011.63698835,9.54317359015,700.400064389,472.738072077,7.26366142451,1065.41433597,641.085296307,7.80769396476,899.053461287,74.5669936193,7.06991752326,1121.59851821,804.383773219,6.56952785338,445.121670988,893.298555538,10.1879500778,564.654069103,1017.62344787,10.158574816,1041.21920937,130.506715715,8.56068929637,360.56563264,94.3692104801,7.92359654451,1015.39548936,455.02352348,6.45627144061,365.965962755,184.168369483,10.0290483547,407.205816589,714.950710449,8.47877483387,653.949403798,58.4127619268,8.42636462545,411.492300146,660.241288988,7.28966061213,189.186355387,563.543692755,7.37463699,1267.04430066,702.747064134,9.11875254492,1248.64300034,289.996296907,6.78422679185,17.7739279938,544.499330254,7.06614323277,375.234319632,135.170108359,7.14765365086,577.973947699,75.0567927895,8.43461387083,549.199686886,316.019181243,7.46901240887,87.4260356146,812.104696324,6.9843582638,1103.80204725,277.413541667,9.59430545622,176.564988693,1019.20356494,7.93135853492,787.349449104,651.850140034,6.45365507356,575.592667694,189.480766098,7.61409950736\n1023.10672355,748.830277406,8.8944882758,149.853894791,877.43044557,8.40751805616,936.198297007,584.858045016,7.07875233873,1353.84319178,791.749544818,8.75010001171,450.356828891,45.1652605712,8.86159197697,152.07573431,740.73560039,7.49480653576,521.00838454,310.852088928,6.86522152127,1271.90415962,510.462435715,8.11440569136,292.08650909,492.507004836,6.99330146368,167.066545295,524.330926576,8.27135306424,156.525924491,860.797074705,8.50958118,1249.82499619,917.706083986,6.61198991881,1058.96761192,216.179562496,7.84478766361,940.29110649,120.624368922,7.57628571198,421.162076314,356.304025423,7.59923052349,512.561422847,70.2857906477,7.93886801973,40.8358473726,76.3996684626,6.71699023637,961.27176084,260.569477879,7.95505404434,212.491826233,278.73829411,8.39208038098,801.779570445,951.693504007,7.62612163473,200.426865279,657.017683644,9.57704612209,177.710118847,513.001931004,7.74771568041,362.82492115,722.589602163,9.18755583461,605.214737772,738.079045718,8.57421216916,11.3863914095,171.778351095,7.07493421348,706.883187246,858.596352948,8.00050813726,461.482546827,655.971193134,7.70262841229,517.335705392,685.980969155,5.98992661729,1270.0380135,295.345366556,7.95958012968,626.068673701,161.346525755,7.45473695353,318.166896826,648.336124521,9.26866327613,198.615676171,655.534215249,7.43286257996,508.187348396,1037.52672178,9.94017788822,1329.19060614,53.446323185,7.9057258543,345.862290082,932.782681161,8.4605611214,889.917768083,477.385136063,7.31597124951,501.539310353,631.335294816,6.62249903891,3.39512134056,712.117069779,8.65383139996,1305.32862163,15.4203873767,7.53640865464,635.169378627,841.289473035,6.0014955083,1104.99502051,975.612118591,9.31381570201,1333.93482803,261.814587565,8.09820514559,1270.92461047,979.542052854,5.58839984417,1187.82229853,106.592411322,6.98333461316,288.554323639,367.899776434,7.83492260217,1129.85886229,436.748082537,8.73372346527,191.302586741,698.489242405,8.53197759452,827.947741202,149.027255193,8.31183306303,87.8700975607,551.602130795,7.98805874665,494.470952206,222.818459,8.16318953231,782.199037791,159.359121546,7.83047983827,768.076548964,423.010730636,7.03593120914,1126.31280682,739.465797672,8.2679537953,799.129779405,669.102510122,8.12707031399,926.367092261,845.306356403,4.69598918754,22.5837475161,247.79204708,9.4611086336,1114.82464388,468.091112461,9.98402878932,311.969014654,518.572336971,9.80911075672,799.543027413,566.69006543,6.49383180777\n662.951272375,792.069384064,8.41485159404,264.865525348,141.673843783,6.62408637885,1314.66820587,889.779186918,7.07333043921,76.8289853502,644.276368982,6.12372174407,759.456580719,313.74602552,5.8938536673,373.923190673,944.385623221,5.83250795942,891.95460536,489.416773487,8.6979281776,795.086139952,583.497895107,8.31987246082,998.321121418,463.925524019,5.39273778439,1337.14991365,698.153203511,6.43025479606,725.952780005,225.345325551,7.27675950854,1012.63410424,398.841532738,8.21225296833,399.432326202,688.600123389,7.3171405839,536.371556543,675.67884231,8.07221192713,434.502334974,674.185729779,7.1262719178,1230.95626831,237.511499271,7.39127412615,720.637699729,306.328900649,5.76701292627,534.156725577,126.372683918,7.46457429708,564.407266972,531.627359949,8.32568824791,188.055975819,946.518940329,6.90129975659,160.051240743,27.0365171202,8.19902220738,199.618713119,654.366852526,7.91434706062,745.048027267,905.379199119,7.45421497827,432.798738546,823.895215153,9.03368230411,140.441741552,717.108060032,7.45249163103,407.095842378,929.546103371,7.58415541337,124.993299833,995.222146365,6.80580106741,1103.96057323,790.783750681,7.41344697634,1254.69561532,938.493866341,8.8205703947,352.484371503,423.653842711,9.63852831478,1349.50184889,129.277483717,6.47728331584,328.316963866,169.895524091,8.11500076404,60.3899916094,937.221396854,7.64490436988,1209.8281988,536.627769668,8.04778429158,1249.87934704,142.457906501,7.92657235463,228.34255615,115.154323696,9.14298866371,1168.90846093,812.975074286,7.63255072618,1029.36088395,926.135491728,8.13491858453,600.211608912,630.631530758,7.09569287076,984.934132128,968.014558694,8.88033764415,1063.73420009,520.214041091,9.39943630393,1019.62286889,131.52187992,10.8735716255,840.924745254,508.448966809,9.05642407385,894.796109331,707.117264774,8.55211052794,579.58370779,602.281403808,7.80007430986,337.208563524,1028.43155606,10.3586701219,712.741771863,616.664291516,7.15296417733,657.714621365,104.203943878,10.0158021548,957.850569513,270.590999638,7.90568989913,330.567186468,767.953263315,8.77428992458,865.797813579,365.543322434,6.99548346357,309.786921979,496.499428275,6.75938609298,18.5576055199,729.820244221,8.30328582053,1200.9554822,933.186603953,8.4269442228,138.501411831,383.423921856,7.44703434852,158.867972703,559.024627311,8.34750228454,455.907281072,315.99594609,9.85085232394,475.724885889,303.262305404,9.05785614985,170.44467051,853.44858351,7.9859873747,1053.34878775,393.638477974,9.53438417399,316.177598345,249.087684059,8.24192334485,1087.84684229,204.876019212,7.72712378185,1116.0079712,534.135493417,7.90926743323,1319.331964,617.988490697,9.14323262817,1241.79255694,820.756955892,8.5810735725,728.157574198,339.280634297,8.96187680939,863.170274036,761.144133763,7.89498104089,28.760098869,628.476542068,7.47654579095,520.698071694,756.018994588,8.79363903258,645.156634925,654.072950643,10.8012098938,1013.02560951,240.555429788,7.72270501158,1324.67416849,424.502205362,8.19246650201,1139.65478312,36.7949463095,7.75312864511,942.059120961,126.414211185,8.47214389706,694.324702609,349.851369081,8.25247603685,648.374649587,678.304844229,8.886987993\n962.704546208,955.645216929,9.93714501626,1172.78911335,891.224398726,6.70124234776,1220.15665701,557.654210502,8.51160666737,44.2570990182,248.728220503,9.14172155957,319.338929542,402.996927503,6.80130076054,767.974828397,382.860771783,8.52451732109,398.795983003,951.125920501,8.60221439524,374.267610976,152.460355555,8.20274470821,1369.63696959,288.136888742,8.67600674795,612.40508166,253.965333027,9.26192717183,493.142139845,1009.51082761,6.84638416592,608.468249987,783.214036372,7.91219234533,318.077980161,249.548512293,9.04328509278,94.564693633,546.446983112,6.30257930265,1148.0669414,580.277248927,7.19938438362,454.413964028,205.950672444,6.88346327653,44.2529691614,597.481466439,7.26502144157,320.445527262,918.148531205,9.33838706002,1163.51328396,712.477389129,7.54850275866,84.1387980075,751.106821327,9.30855183936,480.096242923,999.800390625,8.33663900285,574.183682158,519.24609615,8.45079572169,1256.26735339,517.8142211,5.99860555864,730.143015207,46.2743163191,7.24329417375,955.316608077,786.456367039,6.9558172455,271.900883358,474.951235809,8.61876463355,876.871766579,504.20756776,8.74212158978,872.487144801,51.8897510266,6.93073454204,419.475456362,480.588808517,7.35892551474,508.135421556,620.359993349,8.37308550339,1013.74696781,429.290199119,8.42647385714,478.433869132,75.3793037895,9.91892486773,1006.40647602,822.688414839,8.80118719933,1149.86685858,990.151770785,7.52651828941,809.267302314,1035.12368769,6.52392372382,327.680751565,766.429242424,8.33575687425,1135.96302096,259.782786444,7.82796635258,680.962286764,614.458601431,8.72197053117,539.74489242,1025.13212191,8.11099449376,220.995745932,660.081107374,7.51288392211,739.923275608,529.122940263,7.59434908742,990.037559693,780.935349747,7.75255275838,693.76742227,822.5621659,7.83124006419,515.925209301,777.864230398,8.18577481047,10.0012333525,870.252236641,8.71329843365,793.024959477,707.043178261,7.91473680779,250.862317372,940.867244452,7.03949153396,316.752197654,281.519316142,6.95053040733,369.369839773,362.871735584,7.49611808754,407.503772397,336.032465871,7.51702019913,1346.00922189,810.404615146,8.63123492192,735.317817809,353.974109312,7.97942404958,246.276214243,452.922024425,7.09704720508,823.080884685,63.7703383436,7.49891260785,987.736887627,764.226312278,6.93873403761,1327.55558639,254.312726447,8.0761468453,1273.25893905,169.441134761,7.42157660408,396.592367126,162.176099593,8.42728927439,862.73808286,73.9978038907,9.27031846851\n1033.60340175,497.179759752,8.44863807309,1256.83312358,731.891777866,8.38643044747,937.598103604,617.352175927,7.76631070843,1089.62333654,1011.42588904,6.89070644324,479.539268882,135.33020049,8.80356268392,677.332642405,103.798610737,8.37721778729,715.66464557,654.882572998,10.6558117995,1233.68874345,294.703076864,9.18723024409,246.638990698,278.32719337,7.24216434355,1093.1639867,781.119241087,10.5213691657,1314.91044664,859.673073996,9.34531123966,145.790616656,929.209068626,6.86981267176,903.666117496,915.064297739,7.12819749042,5.91509745272,130.710126702,6.93830997267,293.335644554,279.907900844,8.59386519241,1064.66522247,532.469268648,8.24523251582,1290.92081924,128.848386778,7.53718302896,780.538275013,512.744376037,8.59360833083,874.403947326,93.6993023326,6.94899778063,412.499376655,967.848500598,6.11835590975,959.623467441,820.588620432,7.21011411301,718.335200169,411.000846753,8.76892197271,1000.12410817,6.20089756556,7.7980096867,1381.75240228,487.356878279,5.56764965689,520.177720981,539.124521872,6.8812940009,1265.2900142,270.036414861,9.18449892576,125.547294511,574.002415877,7.70537362347,372.095769886,1039.96557835,7.03719977314,1145.85428378,22.8957221102,10.474375713,1379.717413,487.712907168,6.89558601313,306.565235296,976.407513833,7.78075823359,319.833173184,153.980109876,7.92039164973,888.235469656,871.027653476,9.25370633066,117.105367231,475.928203312,5.32982846724,97.7714647787,753.407308323,8.94019148554,854.133246119,189.25621723,5.95221562257,1070.95680958,269.612801822,8.86438953555,440.382364584,856.547301786,8.4701087146,761.643688393,1028.27411313,7.26066998349,752.288869833,144.626089931,6.97986885146,873.923876522,191.758354114,6.8686019893,930.284890951,821.640832776,8.19729537403,804.313624526,635.565448168,6.36678208152,116.602684547,472.775308756,7.35801522639,9.67228785304,730.83283635,8.82327799721,841.797487641,962.25276788,8.36485211401,563.555223308,21.1968081034,8.90441541504,350.610881053,660.839543489,7.67514710375,139.368100841,789.7507119,9.18140574389,60.4969933796,45.9279772701,3.98283568824,528.814623951,635.459530441,8.91421881365,1245.88747676,569.945447327,7.73272205152,257.07894147,474.739812968,5.25751484078,882.641004694,349.09402433,9.10549787533,549.197170694,37.8103866995,7.81268659361,930.27169898,1038.53863862,8.38943895967\n439.950846271,29.2661773169,7.92624935003,882.876558029,501.5028725,7.84103600516,1107.66584665,606.20203804,5.24969759988,419.885952443,288.524637202,8.73331690607,955.282394532,561.437808139,8.3070655334,256.640305857,357.913811918,7.18340490459,260.232032106,734.618267063,8.60645692737,998.377518336,140.887798041,8.3142813625,954.198059493,296.83855673,6.05553944924,819.479912084,686.087108022,4.96592260849,569.371881282,909.757222412,8.82961920951,884.274346785,171.871379785,7.11720247492,479.74964465,308.844847962,7.15874792168,30.3320756767,124.897522991,7.88972287587,375.267637778,537.435534477,6.09805603799,1158.18586214,515.111638812,7.52399153686,617.179001751,838.950117834,9.97848411454,342.10291619,843.329521068,8.07092803843,749.302939446,232.644413481,9.74748774158,499.027861759,530.338965047,8.59365314634,287.317057906,1023.47873964,9.18132779914,533.152494389,4.96656961442,8.98760555188,727.489057818,23.6850351859,5.52376079453,818.556100306,809.363534315,9.24471056304,795.509269154,639.936885846,9.8415183673,691.665655734,25.6597947631,9.62445917393,1029.06186377,789.115418416,8.67936090419,70.4452695382,602.598512451,7.44974697413,1315.2494794,909.621128218,10.0814094564,1160.48848539,832.402198338,9.03917052755,54.9497216247,883.861432538,10.713208061,552.036904651,394.732661493,8.8822439692,104.085299429,376.810548919,10.9028279462,533.02939622,4.24151792832,8.03683951413,169.673336592,246.156146395,9.37543619466,652.412680286,643.510335871,10.9005362166,590.562241887,195.615908718,10.306453656,644.203259446,680.891364689,9.81560956212,308.381762805,672.792570884,7.78171447944,232.186606789,801.547277587,7.05501306439,427.024452456,236.40150066,7.52680854216,281.216615544,77.6233499094,3.90208789375,587.033229706,452.832871023,9.68061627255,523.130312392,721.275268011,7.80300879875,850.314724103,60.9163937116,9.89223686241,359.899598531,683.759072801,6.95186952252,927.329844139,737.247039357,8.47996132363,826.897379933,688.876202265,8.15052347957,1297.29223189,800.995939826,6.67154281641,796.532706499,425.626489216,8.00497646528,704.065032065,213.647642055,7.56695508335,574.839407638,555.223190225,7.44660438862,1060.80078827,890.203148696,4.056359052,1043.16192646,157.604074453,8.18149682481,994.241184636,673.46909738,10.0900434524,171.656731025,913.183307368,6.8154214414,93.1834476679,928.577970587,8.03437694145,487.961389049,956.058648774,9.29194756571,435.66521475,769.485566227,8.73515863112,539.321751968,84.6357792944,6.65967763763,1300.52402273,472.618537102,6.48357029279,439.098106279,139.528824733,9.32920933957,1387.46771851,222.227562534,8.10239731669,950.117483064,260.813211678,7.51824199837,1250.58057296,941.45216303,9.13901427572,854.637271448,244.516243331,7.7948574639,1361.89364689,690.129405059,8.63944077299,1365.0530744,697.825886706,10.2845236402,339.982330976,890.259154435,9.40035808415\n952.284083608,208.530028793,7.86829267118,51.2261474095,428.006087774,7.5362280404,554.556207756,1013.83845611,7.24605418391,705.686188469,756.799105889,7.77756514713,134.989439584,262.720200139,8.82832433148,564.492059234,236.192194426,7.97581831635,90.1133854707,727.268940684,7.98400430379,678.124208706,152.147456406,7.2729978216,1268.97810509,446.078286979,7.62646712768,1362.23162881,871.196089397,8.1049873183,1356.27661448,921.570588101,7.87946738182,1317.46552591,407.573628937,8.2371315286,1270.28447914,665.38026488,5.61073048377,1086.13015482,126.231627742,8.78014291443,654.94705991,796.312764543,6.39325482434,511.191393438,467.997931501,7.17321209614,545.442424624,559.99943546,7.08740786649,592.012425178,48.4198071766,8.25278021157,1391.30384337,273.850749677,8.54721697875,834.881105247,354.897769558,9.49817475974,364.76198164,744.017877665,9.33764295071,436.117360621,851.206662082,6.61273706782,245.647961054,638.501430589,6.81481883122,1149.1513791,695.926016511,9.52918844986,486.24262376,464.078320502,9.4096440299,147.957126299,409.763542971,7.94747466747,646.152207488,455.940699165,7.37764559929,546.807146348,279.062099407,9.54376756218,1288.3111629,709.764039528,8.09975151453,225.204144522,915.158480964,7.97689010123,272.076107413,222.923500515,9.01421547712,230.69104576,877.805641908,8.83016980606,428.895139059,100.309828232,6.52987227725,1026.42120071,889.353544119,8.66295620412,333.226081435,370.909124748,7.0598562584,19.0759008249,439.592650181,8.10665976626,999.210969556,1017.31879574,8.99972743732,639.39090552,411.482608683,8.24619928536,119.475102609,1.69881807023,7.48308265226,1053.73726301,710.797607979,8.79413125577,399.741235259,1014.75772682,10.50819096,1185.28655277,500.203487797,9.37482824251,1038.42453646,564.891427656,10.7400071888,1048.50987384,363.978940426,9.38680124071,113.028597208,572.220310812,7.75908705016,732.184992481,182.346796809,9.16509369612,803.345955992,505.687139837,6.96959932184,412.46760084,177.917587343,9.06271402891,854.930252062,812.100315739,10.7406032638,1295.02995795,563.572616988,8.84753011146,969.607049857,310.343884232,9.15135667683,816.752798122,951.453969883,8.87079771449,889.840937067,791.170159284,9.3570355974,253.571274144,310.373845561,7.04240640797\n629.918265236,533.810052036,8.78090899054,737.5687744,116.322033505,7.60213988325,785.420174601,87.3558948305,7.39327795974,251.90510781,886.827350588,8.345804096,1051.70415672,492.151312411,8.07190046299,1226.50023036,582.855753824,7.01678531278,932.063049121,788.512294984,7.93225269949,151.42084361,676.242577816,6.96822365675,598.5451879,205.802038149,7.31905621409,819.858434538,390.031863501,8.19858453761,8.04894084594,1012.83740588,7.39402967527,853.507226474,238.865745465,7.74292585888,169.491567211,371.892919216,7.8838706749,947.668525639,540.094542256,8.42029508601,151.63073071,335.835472366,5.90073458201,640.719060056,644.081393311,7.72850051535,802.358165315,115.689861764,10.535893751,779.141521695,953.188957661,9.54697378238,336.339138222,165.44768991,9.4317112378,233.441249857,961.62883799,9.4460455007,307.38710903,689.929891277,8.83370097042,531.049360133,359.490033113,7.67276338681,813.504743855,1031.28423316,10.4310970003,716.170176044,409.669747663,9.29041007342,1333.2790167,862.65948114,9.76776121974,644.25037705,79.9557316508,5.55281953299,736.448865128,118.420317262,8.37529132014,1343.08062834,623.04197325,10.5499694421,312.500982535,402.210416575,7.42161038433,438.885124342,56.5220366626,5.57833165727,1373.45071102,518.15194075,8.46067760198,1288.83171297,449.833529967,6.93968293434,1360.84823176,441.017265748,7.67131169373,1211.56814061,97.3739578174,8.52389062556,45.7349138871,640.664018156,8.24703453399,791.138123388,288.262747029,7.39276921491,539.078271504,892.641393104,8.55856011333,93.3020719062,234.415688151,10.5657338611,280.365993776,878.733491299,8.80445708634,299.350952704,925.801121392,8.61535852976,526.677353503,183.883408897,9.61275536102,243.430730531,493.595665211,5.66008305357,456.453959169,349.956209643,8.63620131595,88.0535101832,579.627825431,6.46480646107,43.9828139436,638.424062691,8.57377813869,1391.02327153,587.282821065,8.36473525706,975.002909755,402.185200063,9.71647851837,33.4436974586,990.524839856,9.24548399688,763.941085177,323.854879616,10.6787612522,253.609916339,538.742154856,7.69783715075,1161.33101325,840.032932474,7.71945619947,352.742255063,271.343098416,6.8694300821,607.58285719,945.776858428,8.19444112674,659.514674749,774.223638465,9.84015715861,322.856563386,288.989956858,6.24914820467,140.077819889,312.296745059,9.14666525287,389.314190809,658.785894262,9.87024219413,330.002114226,907.979933899,8.67041800848,228.547073533,102.416267736,8.45228986845,25.7771855519,989.074023414,8.90277940101,498.24732847,31.5908121173,9.56942186605,31.1091758709,966.94071486,9.2811227133,777.545673014,966.280185073,8.61080400269,1288.87469343,322.662975145,8.67917913456,1104.86089366,854.06172698,10.2504526621,905.028621364,1026.05203169,9.48934960644,883.173639792,245.435823415,9.23407539665,1000.85654022,956.565291678,8.96121657267,26.2961805927,801.87674329,7.54031703448,1118.22276215,157.254433864,8.77980260542,1011.30431878,398.747678566,9.1242869015,510.21527002,479.751451457,9.97747464169\n671.325586944,476.93767719,7.15062863013,1248.14611373,138.386530673,6.72873201865,344.302808253,541.670492598,7.49288064117,1164.72152976,629.587319294,7.72042770144,296.303773976,194.102023669,8.89363614555,364.806905301,864.310041676,5.83308694207,58.8779101284,592.226601236,7.56567908249,670.99471115,249.814775577,8.78369587967,639.015699949,437.215937658,7.58143573216,624.582023534,760.033716965,7.76353330169,1125.89031593,962.016749381,9.12004343961,254.019120626,373.680626822,7.42265181375,213.562912823,237.381637335,7.74556743556,1213.06504254,906.352445003,7.77506122907,21.563879021,386.563499627,8.91450676236,1078.61699329,397.195720744,7.6026751159,996.301905975,360.393503519,6.68603125297,1014.41168196,329.631144386,6.9818101225,824.174192832,660.12037057,8.54785145831,1288.22369099,140.051026416,9.23559773371,1276.26550802,151.588359092,6.96399943639,492.962185128,71.6797283879,8.03903717981,1350.6066539,416.713977366,8.3276497786,374.383808446,631.480578992,8.27008373945,252.458017743,650.514431971,6.87807709963,254.773535715,162.504757929,9.90694625094,820.924437254,38.4659256131,6.75718260665,1228.34469057,896.871934309,7.89758831078,158.657847362,336.80223034,7.57832398643,58.4624012819,100.450722234,8.81877309386,1381.04264753,918.260149955,9.11168636426,1007.00055962,453.327938477,7.52609755227,413.562515719,810.195931961,8.59628375936,473.958259002,842.555132898,8.20665984433,684.089303908,500.396874264,7.09942454919,465.155462002,1014.7162854,8.53669630431,222.213092468,250.965329614,8.9110605916,919.200961736,967.893187528,7.81305579848,1049.64757042,275.430382828,6.84586303862,1011.63649922,425.149237516,8.52873020533,336.259566439,109.075162178,8.34367553225,488.711158349,371.134055832,7.62712108634,511.916544135,966.756701114,7.54452527174,1007.50912196,204.349068827,7.14907373781,252.609347313,904.477867749,7.74318231688,1389.04937982,10.3688271956,7.24615289571,70.9060367338,687.450406195,6.94216380646,1263.03526382,557.533005558,7.97251514717,1311.48139455,858.315650383,7.75258003928,1253.23811314,887.762135377,7.93330847999\n236.465848968,364.240302513,8.34484471796,1131.48103633,658.074658145,6.27105142771,376.554657858,983.388533969,9.07082503393,112.681093365,342.906362042,8.57890569318,113.417467974,636.476145717,8.18143462887,1283.68984984,1027.1244043,8.41764575369,1286.60549224,991.889762401,8.6267030496,1363.77104869,104.003777237,10.0395026176,432.771225695,472.446824473,7.95746284436,666.99857189,16.6848955732,7.86434659381,505.052270267,966.697534338,10.3647892266,754.868285324,851.784088183,10.3746754462,189.433339384,331.826692706,5.48613473093,1173.30920778,917.860924886,9.40541941622,629.377118768,109.840887492,9.55575371403,245.473580077,277.299214095,7.12799558602,1290.54983493,535.26213038,8.19880077524,477.667964883,246.337011493,7.95541522248,781.433892799,865.663980895,9.82373403492,8.97327627426,504.123268756,9.22016408806,487.830156299,271.191188238,4.08586261206,887.297085857,372.555090083,5.8328924881,197.019810127,251.301519996,10.1299535903,561.984109854,991.666722174,10.1117743323,1249.12405585,936.701852026,7.99089368629,323.398283647,828.812228049,8.46903485193,47.0664009907,962.643919247,6.97891508573,1154.10678777,489.000648459,7.43236823714,767.420914783,365.544086767,9.31371334247,683.202890234,41.4737343903,9.55499045772,54.3471161638,995.907470273,8.6706661069,224.648162057,980.651558382,8.45807757046,727.994735164,300.267985238,7.62565882135,975.843707473,493.457046591,8.84517523621,1012.71659875,517.229793836,8.28013552405,178.806376197,844.490767784,7.85745255778,605.919123231,588.177601428,8.72205831121,283.654944723,531.606783725,10.6707598768,782.900011747,631.771628005,9.46500419951,239.472880159,448.015686338,9.20787768479,1114.24655714,545.312642895,7.54709601272,620.472078155,736.158866704,8.45421446524,998.833548528,198.203488031,10.7113045629,1140.29668809,515.827191044,9.63471139819,1257.58478407,190.32536421,8.9029133302,662.5275109,899.642629195,9.51484430426,1252.35752485,922.305285053,9.79802196398,893.835464512,601.442814237,6.05798145222,406.468599698,674.934682143,8.19551816022,1072.04085912,875.411067808,6.5321009529,1334.88613131,470.070704766,6.98367453361,549.73630826,833.83629349,7.08216125883,943.681401527,285.944461151,7.83357534698,868.426501521,272.048597892,8.59083712235,840.025847737,541.217535083,10.2621895368,386.941387553,231.828235452,9.25741790309,176.381486837,814.735776374,9.33062597967,210.205148207,930.847929086,8.81160275351,535.602577375,760.008395657,8.33856348406,629.279944651,333.792098855,8.51225260278,1046.83577794,391.756534344,10.0085332874,1259.40939816,156.763891469,9.20747864722,650.81294253,577.374285744,9.00521851195,70.7774848034,587.543175885,8.33153986301,993.832936869,960.454959505,9.30621158575,28.5974712354,45.6855989237,8.22137004862,468.67933728,496.932416709,7.55189021864,105.51468318,652.880252137,10.6876510825,48.7838578492,964.186596016,6.09622796395,1253.87824531,747.890560302,10.2541135017,428.281846977,322.454185837,8.05939106209,1223.40881733,438.270224135,7.83805543578,599.52946089,286.847920569,9.88290221419,47.2701623986,585.724363254,7.91284305589,674.30649399,450.557433266,7.89306337455\n620.451747828,979.545630427,6.24718230347,990.525503495,667.663198998,9.83356566737,584.511303141,414.762101706,8.96987153184,854.560172581,44.8809659726,10.7507317577,312.332331817,83.8631850475,9.26326335775,368.386334401,952.804789072,8.21458001833,1142.0776178,776.730106728,8.47585269325,229.018808247,666.792370621,8.26605042907,594.783241679,97.2955731884,8.36438630218,200.754806174,663.868309618,8.56634254781,271.767828892,444.003413465,8.07056620861,1179.4391815,461.493459294,9.31904141077,530.105506407,380.028737229,9.04693948633,962.417339852,517.569108135,8.4091834976,479.666902694,402.102443433,6.17203298249,704.667976459,724.548899688,9.03966046135,901.093451532,562.920026786,7.43708503711,389.447345459,373.103482884,8.90241830809,644.281483071,938.246339521,7.68754054367,405.889866736,586.756650594,9.02604760647,342.600686716,533.320441293,9.1097096299,500.735365034,694.339536491,9.24290929976,790.373076003,442.807652043,7.54862712141,78.2146500641,301.285940214,7.97424368355,310.439221777,800.827105913,7.96835581494,1278.50122518,617.96519676,7.98738557037,85.551696789,498.484537384,7.77439225994,1342.47479136,696.121324572,7.0849703495,77.7011361004,1007.28972328,7.25327347399,3.00467241847,277.665751493,8.81456804378,45.613008859,798.363178199,8.27259237778,23.2593595185,838.405374699,10.8766590507,975.169075255,899.713117762,7.70642896585,946.316270196,942.019194413,7.77655304184,910.249460048,565.89742697,4.72726967013,1043.09263744,572.787042699,3.62497063243,1217.02130384,1005.52425587,6.0078155253,648.716024702,141.917337932,8.15281653028,943.427133508,199.277672155,8.85350432537,123.902165027,295.700242593,8.36924220212,1303.2668779,761.233923462,6.33774178912,709.428234379,890.338412018,7.54477879218,371.703693345,165.901577139,10.8095120341,465.760885318,943.503285122,8.50128336574,1219.65471806,132.897027032,8.5216987618,740.193188579,39.3388505144,10.7614326838,705.409809,423.59262191,8.56144183885,748.504722883,1037.29477627,7.09384664332,1061.71620994,264.643804414,9.35142505175,45.4024997321,464.265812791,7.93657126296,477.930558444,159.763204899,7.47375466185,1146.57353093,366.146483892,10.1004727378,528.70614368,868.443863855,8.53252420767,132.235570075,449.00084482,10.6609934906,368.923812018,605.533506972,7.48057763817,334.509127006,1039.35888499,6.6035779233,453.758335652,228.702352205,8.29177411689,462.203529393,98.5304501222,7.33567675171,1165.78928784,495.334214636,8.00410457806,961.444617843,288.297219503,9.00062385714,1020.05477738,902.4541698,8.55130272195,1368.16188458,171.846726758,9.07783440475,1379.74421163,189.489123727,9.57454492722,656.244137935,547.907038482,8.54569326273,35.2883495279,802.075167567,9.94642847849\n775.80808174,46.8589780191,8.56461232413,128.169800908,693.109625502,6.54945133028,447.030450568,421.638142485,8.79973380538,13.6976833349,957.931480535,6.46217904488,94.8453481692,566.733113965,8.30286846187,113.909647767,454.661979934,8.30818058855,462.731671573,810.966882205,8.9930443441,383.517659157,174.990881184,6.5328035255,616.314198409,87.9697850936,8.0730816535,98.11025183,684.906208773,5.13771021112,1220.4581754,149.408159145,6.82939464687,323.822851403,959.564425607,7.96471459275,769.32114256,45.7499785834,7.49617971138,189.016523391,348.523703345,7.46875128558,1174.32466968,707.565273,7.80272972044,1312.65328459,647.845893169,7.7374869046,734.464509986,1004.69710837,7.43389371284,700.156221728,234.646001659,7.11254238872,1032.73473531,26.3833357205,8.68895006147,633.769800918,798.656315603,7.89707389618,48.1534240537,42.079702358,8.24419346604,413.104442629,988.320604609,8.91396406598,692.838765556,530.02406266,6.58587925499,522.926862505,711.605543305,8.770820772,96.2662792689,783.319062753,8.22885664772,86.7605851903,272.490218605,9.3905821005,636.272980407,221.924911405,7.39563264619,675.314566307,697.730164378,8.9307373599,188.636470449,348.197526052,6.94690514468,114.749163424,274.423229033,10.215718098,1303.427122,722.448112375,4.85977232666,879.43553347,809.733542084,9.36014625419,890.387591414,844.393245629,8.64848413717,1085.43089707,1030.42932794,7.58576333951,714.779697904,384.673649745,8.60874912089,538.478592471,437.302669369,8.732468978,972.294494409,64.0874632494,8.36546318339,436.605054298,849.52981699,8.21784732374,904.875227237,541.051433246,8.4562032705,1028.13107008,538.348962686,8.44309776236,116.829766393,996.880358553,9.74257764651,830.674566876,860.536486516,9.13271626896,735.671317795,40.9620889067,7.35810320025,1286.8905097,910.867633941,8.09214736354,306.279565712,513.12767166,8.43869623395,45.5450445933,644.378840584,8.67882142155,168.003349679,531.534511577,5.08305937116,757.319230819,396.966376435,8.81298782148,881.017735357,610.423619862,7.68851557308,1362.18888622,716.99542864,7.22264372393,913.262672873,198.438598401,7.43587367064,1200.46295878,750.685682768,8.48335279421\n985.542224991,902.07609003,8.3249572822,169.01367356,217.496205376,4.72197954884,957.057165557,864.239524104,8.83421522117,87.5147081912,909.046902589,8.64530129451,491.290175137,540.315641157,8.20315501914,382.837142371,82.9505007464,8.43417383093,481.533200666,995.523368915,9.75107111131,1217.94333723,702.239832297,8.68629231034,1148.71426866,91.0877684232,5.80140169655,348.34870552,970.04147858,8.03202520199,413.401288623,445.089367998,5.15730387585,752.435282831,189.458152519,6.80809292234,215.855053913,50.5461719221,6.65656822783,1174.00707891,416.252335594,7.60975035129,103.287946137,958.733362616,9.62987600663,1328.33756189,463.598156437,10.9466055009,1202.38833966,906.887234374,5.46546038934,917.79939396,902.921283089,7.91125739776,1280.38437109,961.471575232,5.44066595879,277.985925753,404.269880384,8.99562027953,315.823524818,732.25036246,10.7261246967,127.51798705,438.024125725,7.2448966591,423.278036904,127.749467451,10.8177799723,184.18150398,238.391091348,9.79310272826,651.459879898,278.506883477,7.08529366838,136.433016985,155.88959466,8.59352303249,565.048324972,770.417587428,5.49412877575,624.002876539,384.461627536,7.4635954638,202.37040891,415.933978669,8.26547111837,519.55103868,141.434241951,7.44625858738,170.859902868,929.182314727,8.28554042095,625.545001612,663.919786438,8.27618548161,333.656688884,388.903246989,9.76446480583,918.769960198,181.355497019,7.71304201838,1161.85044394,913.321220415,6.27909369863,1073.40409295,663.979467971,9.17797108598,1053.98928956,629.594226188,7.36863116029,876.920368252,276.371880648,6.03768714359,47.3646285115,728.898871925,9.93411864405,661.085076398,890.046266059,5.51360352254,431.907854193,536.178464069,9.89123811509,750.113228127,693.444397919,7.65847642313,1039.62736179,211.354235103,8.55482438072,1227.45633897,908.483184882,7.65569511222,859.669627149,86.3569149382,8.15724947304,1379.46520065,703.800529547,8.43339082306,1123.02468747,36.7528886803,10.2525538072,814.8375238,493.504483671,10.4422023462,107.89566212,870.70772321,7.67954888837,1068.97129614,792.81210707,8.98214877672,342.726117476,479.065753201,7.62983630967,1132.88535621,150.464246726,8.47617581556,1023.05735361,759.036924977,9.31490148479,739.966046521,320.704941969,8.05535826406,1276.65371751,14.502490324,8.22464613917,1064.35444955,223.563072331,7.23246316892,701.18591402,424.584260395,6.97096037813\n246.508744408,222.76792885,7.81624778866,906.8829782,987.81687386,10.0148866089,1366.29826808,902.391914374,6.45642582347,653.495172531,326.611563233,9.86463534937,723.777922522,1002.55090909,8.18309273267,456.139244912,630.402830645,7.4329471637,544.450704423,333.20542048,6.3643468259,650.07819406,305.423493763,7.66425850956,98.8972948224,368.508591549,5.02294704344,314.186659115,509.590795553,8.57542992833,852.4246479,862.142040132,9.38084270589,742.376954124,248.665631949,8.38646863664,1298.40567518,703.382583923,8.39863763432,1096.0180923,977.636859258,7.19879194767,572.603632055,986.019782582,8.97773146872,297.340003716,701.653468475,8.2560282018,1166.25229412,1035.61806231,7.75918321147,114.689608407,330.461348016,8.35688711868,983.362085755,171.107771985,5.94369552126,412.499777803,531.76268763,8.55185422851,791.076101899,108.435424143,8.55211290264,1245.28204962,143.436611262,5.84556360692,658.483481819,541.641124814,8.69590711869,583.727471544,387.150290076,7.8500922991,591.349112033,871.228645221,8.31074104892,830.538699956,768.256280059,8.51730453772,137.484666853,607.748969598,8.25372376202,407.443772676,11.9080597525,9.6615426278,186.701585459,133.90114488,7.53646195474,1051.84027326,221.647564886,6.9932667194,995.389508822,834.230245412,8.65617751443,790.848849511,864.0404551,7.67177501053,1329.99326383,967.961849219,8.41545850954,812.153361174,620.389344478,6.56288447287,675.663044939,851.005693796,7.84155156416,1231.1823949,807.632381989,7.68413695205,411.325049733,62.3142677848,8.36723151484,868.287385551,802.209518215,10.0075187314,251.230323203,918.531119508,8.21793004521,203.435153119,362.297015078,10.8344949017,136.906588556,499.535657224,7.72819578922,323.86758307,676.077983987,7.92915544561,1377.15744233,207.131030201,9.61345241052,1013.32883823,693.422284741,8.0906232995,286.21152734,1038.89204539,7.06126446922,942.348283132,677.63207288,8.5469641051,416.834983398,229.847949737,7.75938593125,546.043208697,609.958325011,9.35039828924,738.684849351,807.260983357,6.42239232103,123.685329491,451.378492365,9.03367914465,1246.86202393,852.803948575,6.04520311901,167.537099712,150.394412681,8.3804944849,141.112061105,954.294750855,9.03005787881,766.197554645,1031.83028579,7.25129372947,937.593521527,289.788171018,8.96831787589,464.189452269,111.92928678,6.61439593638,721.961809914,914.013397585,7.53970793933,93.4756408446,187.442701374,8.35873880879,365.657910843,329.710149248,6.02805173118,249.748425183,1018.07939926,7.47423033249,1102.16209306,510.580375891,9.12044288002,475.793782239,195.984107411,7.41340807869,1185.68369744,119.373790719,8.84520785802,1302.15813996,684.335820753,9.26829650881,1231.66926147,312.666462046,10.2404101417,651.923294357,129.101599054,7.40803161103,1252.59030989,568.132812321,7.97211453424,1053.42970637,222.518228,7.57190426697,459.260351733,987.760516641,7.62741318025,167.3057294,217.727891387,6.64992895885,408.507881919,107.873214477,7.64602448715,739.260706375,659.828405493,7.37837491782,501.627717749,231.29605685,8.43622834317,836.19522475,736.179989814,6.78120014029,836.639352014,736.892259962,6.78040802764,407.163132388,736.488947431,7.18533295613,1108.27468572,927.941038841,8.93350859408,1096.21926132,693.397809531,5.15502463472,1272.03860572,103.647829193,10.559182173,100.167946876,653.308545062,7.18037594345,994.308828735,962.840758826,6.83049683103,988.713181221,720.763274668,8.03966079609,1217.17209556,82.3098850248,8.89603095684,266.279245074,390.625461427,6.16575889823\n1038.63887789,43.5682666038,7.148184474,714.342638781,212.984769268,8.12432063919,851.135489932,864.616612825,8.24816756728,1231.68193258,663.038723344,9.61266461945,537.692440739,703.667627467,8.30408505515,333.524301496,601.412881851,8.46197215643,178.981772639,628.219750788,5.15009675577,1059.81645124,1002.26882714,10.6731770891,542.225388959,293.331179274,8.95671610671,619.495607104,35.1209221728,9.447057206,332.852451466,787.254475273,8.87545320365,1109.30434045,139.766633248,7.46202362212,1005.53577353,55.6427089523,10.4982907112,265.217260547,329.418243711,7.4859434962,133.909386309,764.67889763,8.79327184489,593.3565146,623.280739756,7.33444499483,458.978220803,592.354538727,7.77521120647,44.6756387125,275.284250742,9.63645918323,147.919226951,622.734734873,9.43113782221,535.512055956,80.6063145148,9.07998300104,977.868653052,810.337218932,10.0726383608,638.662457812,502.309682928,8.74780630009,441.073352207,196.282513754,7.23586856696,191.10135871,299.629716089,9.94326144719,320.306996834,14.3152861699,8.43475774913,157.121774031,867.065646292,10.2590733431,1368.79779675,459.371048641,8.52292973245,882.89259075,620.606981731,8.29523265773,467.30368684,601.406075727,10.0978825124,452.855082551,923.120377227,8.97323102958,1373.79731068,741.256700945,8.10474038383,187.523023683,958.865961963,8.69479982195,1221.96088348,491.839714062,5.93943424127,87.7368443389,732.649760488,6.12604986642,428.516848941,740.481570339,8.74710892924,566.229041125,610.189924002,7.04389690786,74.6001539499,464.659638402,9.34093011224,755.283510684,841.337044349,7.72014671964,416.374786303,921.44971808,7.03979004558,476.9414914,259.78551133,8.28544378132,433.707011622,361.154237718,9.26883199574,1274.79656746,82.6940348661,6.61581881208,477.530006709,49.5023480904,7.26921766058,1163.10308966,924.79731859,7.60795836594,926.096634837,261.863229178,9.30116505496,1227.13703827,20.9771154826,6.94867205804,784.008819404,188.702655788,8.10880289519,891.080456607,159.844972606,8.4184773919,88.1862075876,407.962834569,10.0444624447,660.172251115,355.071401086,9.2214947218,658.856428819,117.163024946,10.128372874\n1081.58166892,1017.88523836,8.47524383795,819.042124087,642.87384925,7.7159917622,470.227257741,143.836840626,7.28047947613,565.405435003,546.850895032,7.42434591651,325.177769495,393.387442079,7.61818309115,972.663848099,184.839106716,8.80445066204,1076.5992289,749.044218263,8.05685517688,666.186897094,454.344719683,9.81818931004,545.479170866,688.408659365,6.57333972609,1077.73751241,217.775672928,8.91866301183,1334.21275529,342.791484248,6.75082848192,1123.0130816,853.51788548,6.15958180214,324.293698275,878.534473738,8.18626582887,733.063678999,923.074559396,9.25196646068,536.983046797,503.263352776,7.7497246504,1208.04278957,134.164668941,8.19919662187,656.537925624,418.37584408,7.39337376983,313.575343589,982.197111188,7.27252677848,554.295011284,936.573018525,7.21060967076,536.617046159,304.894313035,10.6136561465,265.992461602,93.0888609218,3.99383835825,933.650432255,439.938654616,9.33968659363,890.224933906,937.407076194,9.72627545036,921.432467314,833.201055474,5.61820148132,118.32809429,668.185362377,10.4209434707,353.207155808,151.194757181,8.55577437517,484.304014225,566.786345379,7.94749246664,134.85887506,667.767388298,8.00344174615,563.217357962,580.787046095,7.72723790833,431.300991966,788.480426962,8.75504451778,801.812157053,965.329909116,8.78983271974,1029.04213116,543.224848338,8.21641939921,1335.39610756,193.325316866,8.57015516037,540.739800479,672.260235373,6.30334447341,799.601514141,348.48921037,7.12031453618,171.209275458,911.397029529,10.1501963655,1002.19084565,763.370409055,9.07874831063,1227.84927537,949.025727679,8.30505036218,1236.7015252,689.533044864,8.71916657719,365.191687529,401.412561031,8.85381199983,1214.11998538,864.147119619,7.5274373514,968.366714001,1026.38060152,9.60344401062,883.60610345,595.870736328,7.96489158699,1376.92451374,748.845256351,7.68653363546,128.948579602,290.946818877,6.40194280954,559.13334126,788.724269141,8.43591907841,1073.38841045,830.024634669,8.32861367194,1047.01654005,942.021235288,6.63699016004,1084.86851341,73.3912041195,7.57647611485,1166.86604423,417.909794843,7.33832584409,934.18789028,629.513328047,7.93932032278,567.973551011,934.005120442,7.60719017723,1208.15285504,172.624299092,8.59654860287,160.926475584,429.075266921,8.72127636286,457.023850951,779.952027541,7.97501003213,631.792796453,105.897290325,10.9146002115\n882.667288246,516.26525478,8.53812894704,612.72568515,325.19440372,8.07790983853,1342.22113954,768.507627472,9.86023181986,54.9635224854,969.072522825,8.28235633464,110.230086114,405.428594695,10.0777603073,814.960457873,485.646910051,8.82951986218,1131.17475236,934.193335675,10.0141208325,640.336006431,889.958981309,8.43096220651,202.706631135,1019.24033074,8.62872263129,291.476014441,421.883860413,7.67225609507,1285.19364039,415.86658827,7.40932079746,274.010879463,413.578852288,6.65897455367,477.951882795,212.78965915,8.75185002407,526.022570997,429.692133476,9.7570919385,488.735181318,455.683888792,5.93618491642,567.043659623,729.360447817,8.52131549348,266.608411725,968.603320426,7.34136354747,174.361618649,243.955979573,9.73577122997,815.266474363,62.4965383887,9.63415707278,1332.36572634,282.589170655,9.99766124829,456.305848846,459.350711913,8.18818436657,725.285873842,998.158718298,8.98252578123,1340.95669739,769.961512813,10.7049151417,275.119883062,682.316427044,9.06396695382,203.224712626,775.698911854,7.52916787391,708.225866951,139.432903686,8.76746769207,1381.8229028,410.320229314,9.48976762219,1163.35175101,283.55139185,8.49469332492,583.857796648,558.383632298,9.01665915684,1285.94029477,946.872523916,8.2157651984,441.687010012,142.673162056,9.04616457084,1170.13185608,229.616824808,8.36573526768,1317.41103225,457.725858222,8.32962393342,1139.05566428,670.933390437,10.7248756353,1139.64143928,497.89098025,7.96477500084,1299.53192015,128.647656333,8.233174232,1030.18224835,312.583764578,8.10532635292,476.735912984,212.977550463,8.99173458342,927.357425837,740.862729103,8.64563586798,819.070194518,368.749296608,10.5111651763,1131.3485084,824.808130764,7.67176839891,907.555856014,890.141284906,8.39658869413,123.716297043,919.301075565,8.97214100792,1281.92693481,71.8010484859,8.35655053257,996.791114909,155.789216095,7.53580465027,1195.07315458,289.645747151,9.25410369256,1132.95782404,582.93375225,7.70018364546,85.8412192639,37.9135617632,8.87943332944,331.443324596,566.236022308,8.16439459996,1374.87131449,536.305462001,9.73988478433\n1043.61207713,228.252466849,8.28412453891,432.614725445,783.430166484,7.08979669374,234.674082714,573.360615893,9.40357175635,107.476444651,453.719579519,6.4264111729,1009.75703936,982.97799709,9.68565851535,370.27025769,68.4545116501,8.39468351236,41.0798336432,1030.79676018,8.13738461999,44.4600344873,442.399472156,6.02942067183,984.957241849,682.38888497,8.37540378115,889.033126687,914.966751871,8.41714417561,1327.02611862,973.211224576,9.75525990665,1345.50432978,399.780950195,9.1335879712,826.163495584,223.698240512,8.00803796385,114.920502669,997.073375226,8.29802055266,477.811810015,72.2088052724,7.58061995295,238.302520994,49.8492662632,7.70893134287,1147.75051809,645.798321263,9.29576032393,1365.87542904,813.203273688,8.54655102865,448.214060397,627.577607361,6.69786550422,1091.26099782,551.507115724,8.74471893827,721.0041158,1018.32247473,8.49355529947,532.754961272,901.184022263,8.72331265938,379.172830035,226.381219119,8.43866515344,313.45668256,1015.19138877,9.09332084331,903.97794763,248.679439605,7.31798185686,27.5232775718,180.630719657,8.33958317645,1308.05888103,68.7703843209,6.33660695578,355.753941974,21.7096673465,8.64154528159,730.933145439,387.462670662,6.28028440531,844.940065027,568.575555709,7.96402519886,858.691731338,74.3692299099,10.5013308592,577.433589043,571.481830615,8.46520700711,517.442336877,45.3761020367,6.4334196782,1207.04067714,161.14051469,9.40825495949,1234.07440949,295.189296049,6.10624544833,1221.28614871,388.769079861,8.44813298145,47.6089317093,787.942394386,6.55660797153,1235.47055479,295.085177665,6.75355628222,294.866875908,918.672806191,7.99690175029,1076.69370362,876.501179504,7.99824840876,116.223587357,287.741017452,9.36924666143,1323.27538242,299.077287422,7.46774541543,421.183712835,411.800926302,10.3555910522,1277.31984793,663.423386425,9.66350941742,1282.80722343,559.845418826,10.0392535806,951.1378227,411.002738795,9.41450669533,565.883647874,856.580400047,8.00323760506,91.9831436489,9.09996748142,8.00059452382,217.869922968,621.024708001,9.33817749349\n1312.96507219,867.920725377,7.34806102785,1125.0180558,737.633643145,6.93457077693,894.548438884,735.329674663,9.34377017175,1321.74147808,406.333788349,8.41232158138,822.158202062,866.700523886,8.52209989435,249.663428109,705.772704758,8.21848576749,114.524814922,349.533882163,9.04163046436,310.123245074,565.861744888,6.82452571544,815.401325529,997.767620948,7.26126300624,464.061669959,383.209870999,7.55955493122,192.250507925,138.144191719,7.30043489767,1352.64950795,937.14625371,7.0731761976,733.402924286,1013.70993452,8.41024720675,1205.15752315,865.778839181,4.704400727,1131.225589,249.875457735,6.00504382938,183.697529749,937.743287667,8.16558986131,19.8835380227,803.603486722,8.8268686822,317.877012827,76.2666225104,10.8722327517,408.169125783,424.353739031,9.6400068446,740.205492979,469.566890211,8.44184161021,840.967267662,674.176519613,10.0573532725,1038.69848185,349.911361547,7.84160098898,724.271480496,384.232147225,8.99899614982,103.707665613,741.341160292,7.51494443116,1292.52530563,606.45193888,7.73071293894,89.6279424154,360.034514272,8.30097763354,1230.74675282,173.573172549,8.32854099253,1159.42927983,499.557784218,7.92616512682,980.748656258,557.355293577,6.04947830213,1094.52453068,492.687523212,6.99586939636,634.342084565,85.9199613807,6.66058095212,1247.10010596,436.426973198,8.16560580693,1062.10199567,953.173404047,7.99954307205,611.093579609,337.146436247,6.38928117447,262.89044762,953.770360485,9.21519075621,90.4964214066,359.399414164,10.1891234742,526.293161256,767.607737092,6.94569747221,1178.52627856,594.425964371,6.35968299117,332.762598217,461.523898349,6.26090572986,528.438760692,205.217728748,9.05131108399,582.443008178,633.441613885,8.6297192754,20.7622197647,802.725011368,10.0634776094,512.554400991,872.307021376,8.57850300999,794.523034518,671.12125923,7.86188182801,723.324245054,108.945287752,6.4475649366,198.973424776,943.658768989,6.55544215056,506.492770849,978.152970334,6.70761655881,297.801171661,435.147032434,7.36740026252,1172.67315037,731.070816059,7.34023732172,996.672816833,167.851097381,6.93789435266,465.661152803,1027.58286845,6.99290831363,1058.79927541,712.030251185,9.15440901706,262.347518025,805.307161645,7.51788413229,979.070566294,5.44911236015,8.58923159455,481.64001822,674.811547845,9.58828825952,645.937120078,953.396030553,7.26649373456,940.598160696,1009.76356098,7.20813785543,1000.5278159,165.837295368,7.59250012051,873.651439401,352.39297664,9.53422906276,759.77804251,823.126398834,9.45524764925,375.660233112,95.3778282199,8.5575886131,789.849328284,923.92869907,9.92304963053,472.711706179,758.505429427,6.6593173489,367.517732214,210.165115415,9.62236912057,38.7192678352,640.231285684,7.00302697561,1123.62231368,41.0949675962,9.59919004035,1038.9725506,954.14760812,8.97902868814,235.856061692,73.7443410325,7.09783417407,963.464819137,601.550230068,9.7089657687,55.1041594857,1010.9432313,8.70815980348,153.800042488,598.687633574,7.99322936632,545.818252078,804.426863647,7.0831299174,1065.82086792,195.260157704,9.39703537329,382.059413064,1031.73834626,9.03020648222\n442.560943306,466.723938095,7.47053044952,396.721509672,495.407335501,6.88572733195,1230.71750829,46.6571741032,7.47283267849,1097.05471392,477.675369555,8.0743745396,1108.86027889,915.260884005,7.49046277084,444.754789953,222.927169328,9.92058380134,131.976128481,759.050446811,7.98142878313,1135.08186629,849.593764797,8.7841007885,1367.31774046,876.660432105,8.8827763129,1031.92211448,1016.53709329,9.16756900436,224.01342683,957.685353198,7.41160833619,322.411020184,59.0358956736,8.62347966163,620.862480371,643.561431187,7.61317918023,534.154530665,872.504451277,8.26269471065,1132.73801821,240.910382872,7.87143359475,1377.09063178,549.721980267,6.52454263392,739.038750499,318.099154625,8.0956790864,56.3885245486,752.160317469,8.54264260824,1136.67757278,703.22509496,7.64865661852,1272.49559444,470.578731899,9.73580752129,16.1491207689,335.778241564,7.49849953718,461.542394598,535.555037292,10.2326893942,1141.94833926,661.555610665,9.78170998384,241.843311317,991.257101743,8.95614948057,353.349110126,773.418468637,8.06974227283,1244.42571668,473.195028111,9.28914846622,1370.2405411,205.196974056,7.96874240496,260.940521569,114.467772266,9.20659828182,762.845328211,149.614122907,8.23860596335,473.727984667,861.866742307,10.582861826,308.19848653,673.192950508,7.38895748961,1297.60449156,319.795094747,9.37037415043,298.348416914,538.95505161,6.51288083721,883.261716951,637.78526043,5.90985840235,398.830040273,926.882500263,8.71435571025,946.224668034,658.320062505,8.03424490932,34.6159462312,535.733433871,8.25080644436,931.029489011,243.346995246,9.20790879077,315.683174303,333.768944646,10.1190508685,820.725381837,773.88208555,7.81698825075,942.852279559,505.688338495,8.01152882054,844.194357782,171.777355871,8.69925940877,721.427481626,961.102352504,5.58425368786,400.163603113,819.292711651,7.69615254492,471.367302439,361.321731839,9.4104394601,1193.59238154,432.530944246,8.08004843803,887.838701197,131.767251972,8.76620914605,1178.72409272,828.03747612,8.02025491597,1276.95246576,836.853221223,9.60513212789,170.820635006,665.9825725,8.46654853879,1086.70703753,1008.64458345,7.39970318018,1178.26699452,180.102866959,9.18402369754,619.675749869,368.706628966,8.44084251354,598.351000145,413.637356815,7.62863487111,1121.34379036,388.385861422,7.14832427613,811.419439906,466.997331882,9.5294331405,1013.51630295,866.042356673,7.60006925313,230.807523735,895.491259427,7.75086362053,867.172600359,744.991310138,9.15387962414,142.320953503,9.20785638981,6.3790577849,605.408468322,120.956313425,7.65355060227,867.069281882,848.578947318,6.25956532346,946.157602517,841.650416119,7.87438555342,53.1953352281,682.075863073,8.91841433066,792.074106226,763.105584322,9.62173833337,526.994767883,723.555340671,9.40229219126,56.9808237724,493.814100115,9.52366217045,1155.60960432,652.427036038,7.31523364305,1193.68877989,655.58282986,8.55635351021,829.502918284,603.213445036,5.66120310861\n547.998673503,815.252260787,8.98963656212,152.745137885,552.596825062,10.1418689973,65.43804127,86.2293648754,5.83304538608,365.426918431,91.9016787994,8.65275091829,509.403345854,855.631303351,8.21843818672,187.318597454,890.92054011,10.2794886708,266.350446359,190.250828137,9.77548560785,644.005874018,156.540694322,8.93241371454,1013.02062122,96.031040248,7.68422238068,770.762785363,902.063571182,8.4329435318,231.082724255,291.637009514,8.34269553438,1028.32486377,347.968884158,8.91324975545,1273.78885097,228.4020932,6.28902749472,621.899032688,845.084191441,8.04745176225,1198.93475284,686.821433533,7.86086200985,856.249968987,141.008612251,7.90542569991,1068.85918503,698.889308339,7.89370943728,417.887677744,111.882730126,9.96306477539,737.846714811,945.201721122,8.60662964427,759.903252449,552.584920655,7.26762411938,1221.88141625,405.14989151,6.58619625266,1065.6487186,205.063951593,7.8885774033,894.469392118,684.449282283,8.08879641701,241.181910602,914.552819726,9.20857660079,1042.70199692,1027.49567629,8.55231516762,556.528464611,583.654817689,9.8120175975,200.747771777,668.880730085,9.42765003203,564.735454439,932.90881673,7.83464563068,799.942658491,738.833852073,7.0251351427,173.694991984,71.9476144464,10.2379132453,1094.34688576,567.440022862,9.29780483779,1204.87979231,268.934872444,7.77879165004,1028.41096879,108.43743052,7.65918622997,328.581188629,271.828500771,7.9445964944,888.840408506,5.27858258158,9.53110451807,958.242026268,606.673956306,7.85830127178,511.902954294,390.134147723,8.70231098323,1196.79838487,1018.15881716,6.91399343847,1263.70327547,671.649874527,8.31585182326,189.337663824,41.0765363193,8.03165141478,901.641357599,615.594959287,9.98700138087,997.59776297,864.194530829,8.52239878251,1054.35168696,430.244426946,9.56580563598,1071.94192425,399.86932158,9.05663309278,1113.11519891,215.600606699,7.39401744661,170.738223673,700.231222552,7.42168802799,302.539081338,72.100366669,6.04119408675,568.722077579,39.3336234282,5.73708643933,416.712221594,897.207265013,9.70468479567,561.064486628,264.410480203,8.87615746505,505.375231329,245.951853448,7.97660596289,218.458976037,463.775353815,8.80303195469,18.7429624485,556.157909568,6.17160085364,852.775331454,864.244976921,9.86695147024,208.357060207,826.653028655,8.58047692053,1083.8953784,477.595144247,8.55703992812,926.584887873,462.220537646,7.06013419226,575.5047304,284.955635702,8.18651554926,477.098735119,633.926867967,6.73768087526,175.749516211,451.741804949,7.18655994455,832.282192357,103.228945952,5.66825628179,667.584893002,487.625149145,9.12621597957\n419.1925831,829.504417212,8.82638264243,734.15920823,525.073777277,7.5318862331,1255.08905861,502.499548165,5.19623554483,1072.87739238,433.299647918,9.91025970765,1336.62142318,549.862511111,9.18311916811,395.123612803,219.032901546,8.02502733453,784.389382072,900.07903197,8.13186133416,401.777725703,834.505242334,10.2588285763,1377.42918761,579.538906121,8.31602412088,282.180372,416.584799133,9.55169308942,1112.73086561,425.660539371,8.49095929883,161.513822913,135.77286875,9.23351291047,167.562376179,983.781702477,8.02537307242,736.316319745,1012.07793149,7.01830283374,23.0129648664,912.247091863,8.96429311405,727.250390735,464.433847381,9.30441693785,604.39603653,471.013833876,9.82673856045,771.076521979,664.367143616,6.56423676937,15.5544203049,520.533444937,7.16753919331,619.055872357,946.269378382,10.7971959629,431.114273224,98.5542399848,9.41835595047,623.818855384,28.03621583,7.2192390023,1291.93642481,30.9634558474,6.3096352111,262.535708575,868.696083447,7.32489486773,921.086701237,337.631834134,7.33099471581,811.178060745,733.950013273,9.12628905569,225.283595934,996.693763181,6.52154810614,1147.95625425,933.514749305,7.45596448212,984.068782834,901.163555436,8.73551613223,728.95836407,776.605223521,8.93740094134,439.517324137,457.270617697,6.38628978008,336.900237554,956.093395092,8.40747365275,1357.68303615,203.435125408,7.99966391709,463.553116046,141.666083506,8.07467269541,774.202127028,62.0845582439,9.78537500763,560.717752395,368.141100776,7.87270681158,1257.87143814,905.442725019,9.12418080452,65.8687610616,193.754424073,8.72941300771,201.073294205,40.5273290657,8.09459878425,563.651384862,273.431779945,7.59685266293,210.649949605,268.23881922,8.83236849767,56.0775541305,576.341557257,8.49824781564,811.326516618,643.50772329,6.72662551685,1014.96304191,156.793279288,8.7722617791,507.441958639,303.439128236,8.3795275772,888.250791666,542.051359673,8.97878314334,789.150934252,340.635553897,9.54385783561,377.258808923,165.495265635,7.31198908541,524.462651617,736.940305161,6.70376699163,204.932635479,639.142343427,9.34698751513,372.311650853,76.0911079087,7.6914397427,958.243838876,91.390576923,6.15817623374,1011.87883158,645.792915573,10.3592950829,113.34909452,789.728922687,8.38879404957,686.604356077,751.233620367,8.97145654889,1364.47193675,116.936435269,8.6506579801,988.759074489,627.704466286,8.3173867919,1248.15584535,197.493310174,10.1817970859,200.514534385,474.199224647,7.52864514271,421.124282442,830.282991773,7.32523293156,1001.66645997,193.408680259,8.73374731529,440.347072029,520.899023014,8.41925066613\n314.314470764,482.49148941,10.84682181,102.250330267,654.404418732,7.03030641843,130.951080865,1030.55157373,8.06244727591,1200.42287774,573.623459987,6.57069962138,1319.58638891,485.032577667,7.76879139959,1330.2538939,779.866105791,6.46372232157,293.649349255,369.212411568,7.4700543704,1003.75275714,634.623395359,9.02835942467,1077.13665905,733.915880339,8.32840020574,620.426858436,295.691865603,8.10188088176,1294.43856363,846.190442064,7.71282278998,1092.76910253,264.596670353,5.01104005827,1301.14773728,871.602983162,5.31083301108,816.278499894,746.317887149,9.05748819234,297.84170528,252.74888169,8.77046683241,828.33162741,443.299430923,10.1610657824,187.073764116,568.188685565,5.53637336325,3.20977053906,694.040641832,7.92675329736,157.884949976,989.626221737,10.2753888048,322.490865675,981.548794213,8.01292597266,1031.35835104,405.35761834,7.98335275378,326.304150958,62.4197341683,8.39455032543,1103.16419235,920.908687096,7.81299437501,160.044492894,275.000989759,9.72882425222,1234.8191211,1035.68835671,9.23383115262,1113.33045997,69.4797829742,6.78736638145,234.637761115,357.81192518,8.08101485048,250.956944152,697.827993495,9.53055186543,818.389476686,242.193474869,6.44165782977,366.169956972,166.77280553,7.41692807215,400.806634493,634.681595163,10.4410682927,975.794602882,95.8883555259,8.24254913137,308.6248822,886.695399903,6.18274005411,847.575355566,47.9054198291,9.97842871688,563.894088686,823.703251131,6.60342099003,1021.17834042,262.638890616,8.66195711646,440.36955035,5.66827705553,6.61866295707,591.276451436,410.006485636,9.48599105849,1052.86475831,766.71254419,7.44198052169,1319.57537778,909.005104351,6.38597239807,1153.95251498,10.9967037203,9.86758525434,842.462072441,540.775925983,8.96784918951,277.177803189,314.738148464,7.86725831026\n336.713421043,931.148056824,6.51004954226,1389.42347605,24.1297845291,6.79840628143,746.671833617,872.419911247,9.63631379017,526.882907408,342.927648375,6.98972938251,131.511129318,30.5843513681,9.62764726264,171.634704797,423.755466319,9.34602353976,1078.62721684,972.601097608,8.42361337444,780.409611794,233.839722899,9.64200172266,1236.19609097,1006.7368882,7.6371203393,1228.04337112,574.216222861,7.44767584798,1306.61892702,309.888200544,8.0852990356,240.550692801,661.551009749,8.79747035037,27.9711114182,977.924824699,8.41935274152,492.647244414,187.415855717,10.9171209712,1309.31174167,670.594847075,8.80306773896,220.849508773,268.042565442,7.69436898855,689.145984683,557.529791938,10.3883345187,775.442045786,148.392403327,9.58813418633,461.531310343,745.948597948,8.82949501732,100.457529525,362.590780035,7.54041540093,273.502739093,213.284308291,8.66435184696,0.71356001775,150.471624718,7.13210079694,266.188550735,757.589421923,8.49770590731,413.622647985,327.194254973,8.91780532435,1061.417493,253.186075301,9.27169463306,1273.33491906,93.6955704033,9.87029229464,1142.29933825,756.429459509,9.50240757779,675.519061753,716.57295293,7.95688203064,295.995954198,665.123674633,9.36772133278,984.715727325,796.170560714,8.69092244396,886.316373947,493.852312927,9.14251654986,383.324658925,669.170155745,10.1266780436,715.449044821,107.078320291,8.91431001363,978.658877106,77.4456145692,9.24114049731,448.191257319,737.150020483,7.95829974569,960.196327257,397.06790144,10.3507795118,278.23126939,293.423015608,7.65310969443,549.085301194,187.942407036,9.96861383626,895.734735923,418.865938436,6.53041810116,1074.31127248,78.9110911511,9.7383860577,948.870147568,62.1054418078,8.15608279317,479.995709774,823.247071642,8.09799202166,1079.85675754,83.8368468205,9.24031649399,816.458654106,772.726925158,8.18058742727,1306.15298973,998.365317903,9.65474597828,1029.71035295,223.743902214,8.26516319088,711.807697821,299.482942789,7.35293980242,523.546491156,383.891332425,6.45973873875,1206.56288085,1000.38425977,9.6510165153,1319.48654871,195.003879994,7.50937786642,1175.68319761,390.757814082,7.75828440516,816.805771121,777.110600519,5.84069732058,703.322074078,98.9946530116,9.07658141922,1011.88553181,289.671583749,6.65951038965,626.213887477,312.875030777,8.46765176146,1366.53689194,436.114528565,8.23645460012,1184.87123661,442.031138929,9.34464276155,595.381124763,71.6741191908,8.35854180033,945.089447862,177.431337055,9.39025040508,787.817922734,390.672890294,8.99083175945,613.780358085,894.494100722,8.66755268414,165.620877983,665.53595193,8.71414286894,1232.54658605,446.632681675,8.05360921258,366.002742515,573.712568317,7.52225359241,149.39649314,647.869824755,8.942167533,269.155699268,126.343528766,9.33517742034,854.371097789,473.317290924,10.8839173429,138.948334468,910.625334781,8.79355130533\n1203.88338331,405.077859477,9.27642205182,1075.02392393,66.2098259066,6.11932801257,665.220514349,110.418736543,8.54215626539,109.421514118,265.031248937,8.97677504009,171.750630389,428.089624678,8.23901228507,700.751769026,552.11093085,9.43785312342,378.192794913,612.393640812,10.0083381916,219.17684842,391.281739721,9.25260517876,1256.98916475,72.8156793531,5.79503147642,1300.05073512,786.602497773,8.47584454918,439.80141755,280.055450942,9.34692941851,694.50274864,553.568844278,7.83617552103,1227.06491266,684.82097739,9.85091447773,209.295062955,25.5730821611,10.5435043247,673.066338069,259.333466793,9.76948879468,1121.70534549,862.501720889,7.64344210543,250.505416526,886.114213245,9.98064379101,889.613547139,729.229363068,9.8579139388,884.038621245,410.86622727,7.32993647045,848.510474397,267.609260235,6.47449888157,127.505056965,1024.39500009,6.99677409927,99.0104769945,731.349071599,8.66505774947,1191.8274972,746.873842684,7.76764747415,1234.40620147,426.467563024,6.87859169686,1313.22563074,927.037914891,6.49384280539,1388.32939908,282.190515201,7.04066961006,229.635455594,481.196968862,8.42062369464,347.523005084,712.01987909,8.09264281367,1143.26561112,570.503202955,6.4774648052,1157.3939598,872.975517766,9.08161032015,416.942829993,18.8338297795,8.42683256436,1152.76222756,299.487810734,10.2020996853,594.564885661,996.864152958,8.50589343844,400.405318999,213.903887961,9.51182291676,180.520336016,406.580303572,10.1004479706,25.307905494,746.744133629,8.27571050676,591.715547306,346.609532576,7.97819911906,837.335382096,626.196727486,9.76038996116,870.168816046,805.954770704,5.84669149742,1157.24628126,261.067325746,7.56209765266,869.203363773,878.568731436,8.18949900752,897.855233121,23.5405335362,9.02769616448,1017.21923611,676.46224152,8.15368197834,998.82962851,220.632226277,7.53181531755,401.218301015,841.148189963,7.52118584349,1309.567322,189.845783771,9.69998106227,601.823373303,835.920462705,10.6541099161,604.055028511,788.841377869,6.32296685577,1202.8565241,100.317244385,8.19132221557,232.370335659,102.062414972,10.1216889723,442.473732787,752.623393264,7.48164629378,140.008198177,1015.91398633,8.32892577577,37.5424154611,209.481262705,5.92975281654,558.292053274,115.306374962,7.82143104496,120.212603578,754.718766303,4.77692036788,984.274297297,533.876017543,10.815464672,21.47483729,662.589281318,7.49359385866,393.478892666,424.185176827,8.37844801359,1095.78137133,975.458984125,8.82712454156,732.013353921,59.1526769566,6.91901095872\n367.491866802,174.942120605,8.29561474525,12.0879198581,13.7268401035,6.56770092184,435.893999425,929.884339539,6.5189856268,196.10887106,311.532490254,8.27792854329,900.395760283,56.2895967958,8.17373695573,67.9833315985,52.1220776477,6.67181012626,1195.79243736,35.3383161649,7.7669471506,524.708617971,682.940421443,6.90259627283,324.168900392,814.589629852,4.05213393894,294.180566676,0.657269072294,8.72312473195,488.955651053,385.328696623,7.72662145526,717.61640571,171.245879121,8.96446921193,433.954156769,106.495325308,8.78533512171,713.058797763,1010.64981185,8.48729810458,1056.71659474,683.095999055,8.05070874198,849.98373794,356.670053111,4.94699253704,273.274635512,81.2057358905,6.90410920836,5.93546194324,187.432465524,8.84704292955,391.029640641,944.655441624,8.53054632854,1387.86430467,119.383952205,6.17124057405,427.500398433,232.495300114,8.78529410622,47.273298098,985.441785815,7.4988932988,577.303837289,490.525008314,8.67175331581,277.629963505,763.041492557,7.2654313078,1328.89699702,541.799680225,8.92618983497,1168.82933681,808.128429406,8.37708727367,718.222688458,410.044926699,7.44774605688,784.277393474,193.020755346,7.57219316976,1021.53919801,171.215621267,8.1594897465,1262.5170644,878.576538782,7.5492563828,843.588992459,856.57034469,7.55882265374,746.06201547,585.415675498,6.96753141241,506.51175229,597.945624613,7.54055621942,748.376858474,960.845520735,8.3094468593,1109.99711787,537.511582988,8.11734702039,1009.04485072,356.035041557,9.2061667907,438.256107334,624.05125275,6.74832371008,812.372294924,17.0557158557,9.77828980767,944.147699266,336.810647253,8.12260764945,428.612810468,751.597110078,7.45759859534,1007.91672162,712.049492839,8.80181268018,773.084503407,883.096498432,8.09856130239,527.36494902,881.671898663,7.45286528544,194.982188014,339.641423544,8.35561272226,366.204115803,712.328138985,7.25966430468,688.17580768,568.303184418,7.21449934716,1277.63297947,152.806517387,8.80257271479,2.90631035375,509.089090039,8.70866094409,727.48087846,188.813903109,8.30382111018,69.3648328125,907.973113674,10.6252445364,851.781798313,673.849720377,7.23783771974,920.980121141,1009.89985867,9.01341033304,215.968336304,829.801054151,9.46627764631,1102.70590748,778.008777116,8.35366390157,1304.82598815,121.590666051,8.44447541488,823.655517223,174.795591368,8.58077739388,892.154172928,296.920790104,7.68993557921,871.999329521,983.603513502,9.77127970013,201.883420435,534.806663925,6.32724892366,1254.27607804,308.273625606,7.77495908942,678.020724041,57.8071711527,7.83259291853,55.1493863016,733.884540805,6.89996658754,608.252454169,99.1114378351,9.19978012039,666.01945803,777.46726192,8.48169696185,849.927830352,355.420197696,6.12770497036,1115.98317152,605.101748574,8.35596740094,631.496793576,307.741390283,8.24002049239,507.997530359,148.912721319,8.17041226818,263.714083063,201.478848089,10.6536743785,522.40189887,976.104508854,9.63702520461,1037.42451551,13.3474958196,6.94738697139,1301.5827001,17.3818427838,6.29196983372,900.658110572,531.425802647,8.11654863538,342.050067976,424.279955213,7.98787455665,865.767813858,103.141142123,7.22140144916,205.098480252,810.773941486,6.88258231423,1193.80528917,922.106365166,8.34065940957,358.10037979,963.648979232,7.52117336056,275.139418523,206.990360982,7.37181473838,1116.68502544,160.226442691,10.1265296168,879.514937661,521.798891995,6.17456320984,2.6506351642,1011.90984848,10.5999066407,1102.80308463,397.837727625,8.83123145307,544.514408236,758.434485998,10.7715947937,705.154068022,33.4950168443,7.45556683862,1060.51995363,1029.96334247,6.7245809584,1198.07983779,307.990029676,9.65204559194,145.434241608,766.488079566,6.42752552596,21.3774482008,907.952821747,7.40030143295,815.207527499,186.43077535,9.68591670979,678.897124269,863.275888041,9.19087842131,142.177737748,77.8117230399,9.69300734645,340.43083023,489.1361316,7.95147977491,1266.90293468,545.268853996,7.63416140837,660.025259275,345.596227881,8.37013454611,706.320179571,739.032581868,8.77304023504,689.282728286,121.0466339,8.19889131929,331.480184445,426.873455566,9.60704189692,147.229733116,1017.93717394,10.1596018136,1162.91281561,446.078760198,7.97163066331,567.07605097,674.612834736,9.93423311997,473.898995364,461.620514696,8.94279792581,1328.91101189,864.650892541,8.88283862685,843.294247702,254.918199724,7.35528113756\n836.991832033,756.471154831,9.87192193244,13.8186306022,393.890001601,7.14887665038,1158.53792502,137.00666998,7.13955424019,24.5062346689,954.385315001,5.16054571127,27.438566445,459.176366276,8.45330788405,868.952974862,1023.41082949,8.07997768958,106.250244328,205.669457158,7.67831091061,175.825478625,813.064200062,8.26077812385,232.749356548,768.949556353,8.88484703623,1183.1580837,955.067680632,8.06606505171,92.9678972329,484.927188367,8.24338169187,948.37490298,381.012885407,7.32454385975,575.425704308,521.044267483,9.79532825106,225.824817689,554.039311026,9.83399475716,22.4352873448,1029.24831265,8.67644637191,939.639987147,847.710454507,9.05750644053,1156.7047898,127.775169692,8.26704668695,935.823327897,264.476545647,9.32466384424,1155.15759585,488.601395628,7.55957738991,273.33114367,745.676890065,7.7057334908,994.053340667,402.156991606,7.01626741699,628.905595746,61.6514804876,8.82631324028,368.781753152,817.587672571,7.83704569675,542.435704177,1014.00367363,6.52886663603,758.756006567,218.585395101,9.5147189356,47.8161025345,631.473716277,8.47512052272,376.005955785,219.692261061,8.16505696049,431.458237941,362.246078989,8.51155307114,249.444292095,986.177632036,1.80747478625,132.990110979,333.273080605,8.66670864268,1072.14657528,162.748026332,7.75548399934,1277.07863409,550.214283865,8.85356729542,68.8887418076,75.3269034021,6.2678750348,28.7185562387,48.3101153812,8.68572987278,2.24362969054,371.449655456,8.04748006507,1032.18849678,633.083356795,7.15143301722,550.841502475,732.44461347,9.02585701837,119.043775201,936.248767602,7.72936629715,1162.92726001,421.53151029,8.48168339731,38.8404822503,775.738912271,6.96250675666,723.534889267,270.501998765,7.47571297778,561.137409275,797.017865508,8.99809305949,805.28528517,513.611165192,7.66177300219,1051.26017316,487.775047097,8.86669666511,1272.82954737,979.005136848,9.12167997697,791.730984884,813.814186912,8.19860434006,958.49390865,307.101848837,7.53278549625,918.183176851,627.483109055,7.54008984913,51.0400539293,978.635581557,5.1229740927,519.587012434,910.08683556,9.24694234102,291.512470602,732.562599374,9.95083914547,1372.18853307,928.529092269,5.76676944458,0.0711637175764,882.180467108,8.78858383869,431.449247483,371.060716021,10.4710847589,1118.81892637,105.475062964,8.25863290612,969.507523327,144.900798009,6.94224080127,625.531799415,470.559326048,9.41504239738,791.781299836,988.353923531,6.61355000013,1065.64488009,88.5403482397,8.20538515541,448.021006096,1014.76784984,4.67147797978,1042.71266187,429.181687052,8.74020480741,477.622714269,195.276262464,6.69532368938,502.203149297,953.737407879,8.21694485247,159.04925242,421.996854116,8.31489825108,1320.44883536,679.24224872,8.28538413077,1112.81677053,981.657326,7.48290839518,276.997023667,261.268045667,7.80494201681,82.2828552332,603.895829812,8.37480647245,1028.11208164,544.651260817,6.46840965637,381.817638282,1011.8006855,6.54807992987,1324.85654894,252.873616356,8.21890607283,572.900958075,193.029995395,7.55452289328,725.676634715,925.013107047,9.0986220574,1349.2907968,1032.78781564,8.56727753073,1281.34210606,69.8575991529,10.2602906616,451.602942198,784.089668496,7.4352893363,74.9991008507,249.181333038,10.2720628874,1196.13011557,435.258797494,9.71776601827,68.8125566342,762.829048642,9.29409401152,919.221890758,347.681169,6.55647387118,319.510948443,711.410783146,7.5343736423,444.943015983,4.79940789906,8.61058901582,410.38734439,945.192516666,5.82689762712,14.3548127678,629.662313447,7.94102863967,316.574476427,994.361298236,7.0702528386,561.838342881,248.635560826,8.59408684328,785.641084022,602.578362844,8.70387225393,1126.60087033,48.792156631,7.26241222636,1051.29453114,545.809290525,8.63455871842,242.814252,88.1393773944,9.19580579502,883.517477036,725.126656119,8.68215375329,951.807857908,945.147581457,9.58886633994,1313.50750316,454.050543273,5.4750658848,793.024893664,1015.58899755,6.85035599477,405.94244562,667.055457368,8.63937226645,859.616690483,894.580129907,9.40804176574,97.8015134899,731.118674396,8.47657426184,1041.36235559,515.117626598,7.17880903597,922.600800732,117.209699715,6.59441872132,120.319472453,568.657707991,7.96123250447\n971.315621499,690.65836029,7.75688894254,505.209296195,997.495553494,8.64881684004,332.576492586,35.4524927163,8.37777181701,484.180404947,145.622232932,10.1272780656,967.415035112,795.904125428,7.50103048132,767.402124863,894.425207023,8.07909505624,191.028220675,213.819307905,7.85856187921,1045.7336178,464.017495519,9.54706487802,444.982285133,430.230220363,8.64629766115,101.63108288,850.472722874,8.31774870379,240.073273766,871.399343199,7.93748880663,1389.83351536,407.984155957,9.87080735093,66.4813836089,601.041444488,8.3561997329,139.545509072,171.508826636,9.07422489806,361.262230622,429.35778661,7.62785972655,1264.75243214,876.297681724,7.47993878302,832.817431694,473.066343973,9.511863083,661.903892393,109.706029991,7.87951626685,391.131109664,858.563572356,8.54311374923,558.575799812,652.159011792,6.59950205404,40.8437344347,11.3654738204,7.81060672995,1155.58953384,338.483920615,7.73965609497,1110.63635283,505.873166288,8.63346089844,229.231787534,758.33131871,5.88825360909,1358.62314355,24.5741104047,9.7280274431,1035.80676815,102.698035144,7.93205412594,635.848929329,354.012771172,8.32158295731,895.682565686,884.188166343,8.11467476369,658.073097225,552.302265773,8.03860380896,1382.54287636,383.893121183,6.94140685715,1198.71266016,1017.72816807,7.0606634143,342.481501946,613.629285135,8.68700643643,993.617385945,400.039016616,9.30948823864,804.422978444,35.5813980114,9.16398202974,1316.55738862,839.754335173,8.70238243351,790.828028499,802.826125717,10.4457026769,204.033015742,414.020200371,8.67792622832,1370.91921853,528.561226898,9.01186122587,275.438168017,545.815969065,10.7120890626,293.945062014,427.175705812,7.97510595603,3.84766265033,244.597887699,8.48400140335,1238.29252194,1001.42507373,5.70744409022,1165.42106549,8.46285203089,8.47707276892,428.234353316,57.4503303856,8.11071055662,952.046385609,745.789327424,7.17255811647,13.8376776313,240.06582571,10.6971382034,496.598647696,528.884509272,7.89236827232,816.847421026,756.823551899,3.14813852286,817.298506604,197.436693478,3.75318435618,330.030325604,213.171695734,7.14805499392,1057.7396296,291.836092302,6.56025100587,1328.76816776,680.611728126,5.4216181008,390.23144475,263.880925171,10.3924111271,1044.33545816,912.36371873,8.15745184062,887.924906934,455.660274321,9.07071644204,465.010460694,898.832339407,7.50222518523,1065.00821337,263.411997693,8.54374546991,737.483439195,516.974095062,6.12083837512,845.737926774,633.770705454,7.52131783371,1139.13153126,700.790885929,9.25558817445,776.686441791,451.455300569,7.01011416771,1135.69887268,717.474132263,9.5387251917,13.4246584446,362.363872033,10.2418488011,887.732784979,987.075329183,7.06007708805,567.507676363,399.113257534,9.95892895497,738.238036354,128.633313105,8.37591639885,476.94308882,825.118395471,9.39815564644,604.401147166,924.137503047,6.7605355018\n406.44337965,642.348149856,10.5558855297,1068.33969774,91.7035965828,6.33302864079,1261.40439131,224.920010451,7.06015581149,103.491732619,495.271171465,5.02071691635,759.843101031,136.405337941,9.70160890869,1361.22302471,223.241400259,9.09638477364,1002.94496536,69.5352095364,7.8226518772,77.2111566422,896.881589222,10.1206178871,772.470584929,356.278473019,8.06483693179,1098.06463954,320.167849719,7.30401136771,135.382421414,848.216841386,10.1508317515,408.196630043,121.310290214,5.54284488992,1231.9961844,100.364097438,7.00921453021,681.952295858,16.0910312008,6.20814680843,543.511503937,43.0334177136,8.70327799908,901.627870777,797.394009374,8.6688877418,971.978670985,614.09764749,1.71769488494,74.1135745777,475.670256973,7.36448586464,280.85265286,558.456409454,10.6409985293,931.795469204,772.051366685,7.19893089334,402.765262714,951.980156679,7.83647124307,954.637128768,275.737109907,9.7429840143,103.319710234,926.214952983,8.46069751848,1169.85357873,959.798721754,7.9136563987,979.315827585,790.219404571,8.35954274771,466.024876652,100.347731738,8.59935780082,100.876836439,313.552046899,8.53082795001,310.650554238,106.87069265,7.29673423295,246.627572385,247.975485441,10.5688007282,1125.52185683,771.068580857,8.71543915175,1257.24041651,1011.48540325,8.84847395807,1332.77745997,233.756016476,7.94706370276,354.278835419,313.91042968,7.84755516156,208.629047746,157.464598159,9.22030403113,996.752508979,176.690069674,8.33070720589,1375.43788532,7.76016966723,7.88443892433,637.871498452,813.530907684,8.49649315901,717.785830343,478.967627787,7.75417590788,1020.91380596,1014.89846367,7.29808902253,476.56661169,72.9007956267,9.57950834539,1327.47409918,514.072818183,9.67423374136,719.343627508,478.185877587,7.99971074811,1202.12963565,164.884950555,7.70758676757,232.118568162,106.443778555,8.81912968133,813.367850583,909.233233004,5.55493599345,481.554206011,35.9539491796,10.2430164826,1365.96414945,272.682850278,10.2075683271,671.418202838,637.96862437,7.0614194086,760.418205787,830.49719914,7.74745547974,331.167190212,552.179168603,7.52963313692,439.289828232,898.383785965,9.1387560053,606.249040341,655.367133607,6.51441783649,463.55947932,677.993452704,8.82969021979,719.999644943,213.301295338,8.69669869662,1184.90941635,526.849638011,9.11083015859,666.990681427,687.259110474,7.95487488911,1355.48433119,695.693453429,10.1443304236,408.423511983,826.373258335,6.17883823253,162.038073169,91.0765682585,7.66997909063,616.268458625,1012.12221813,9.78899264522,1309.88883644,196.716934936,7.79270213389,310.614498121,609.56744216,8.85354018932,1174.91788058,840.938332215,6.28227491528,520.847203089,509.376017033,8.88725606232,608.306034592,703.181644066,9.15920996216,1039.03333631,766.336166011,8.21127997422,260.830222782,735.296250347,9.81392525935,805.081492566,478.473008011,5.80706368885,238.478318423,229.963223015,9.20602627505,194.149863945,76.6200115079,6.03263497878,439.244710663,896.932700334,8.44683249084,140.83252053,658.960044184,7.88562463076,67.4036734672,106.802513485,6.06456432141,81.4744213152,728.129446887,9.58666105497,426.923324426,823.317394732,5.64727524468\n685.662740682,46.1858056368,8.35023888538,706.307549503,732.400332131,8.06534957771,1362.14441103,415.589123028,9.59465074819,259.325208744,466.162472289,8.99565531812,1129.83766006,973.329411821,2.47997734835,698.954224363,228.918580968,7.35348324791,405.85354929,335.2950643,10.2470482701,738.189659263,496.593165268,8.2623607678,1056.64404726,181.329095885,8.38888589439,1275.49504571,415.444706392,8.14876770154,1272.19622638,768.128279915,8.33832374885,1224.18826656,434.074031756,8.766996401,298.83128563,23.9805037771,7.94827516553,497.124575549,89.6749905015,7.39044672739,807.392906818,949.417616628,8.77708820335,398.538406885,814.701528768,8.8824005432,1123.04388595,497.385129246,7.96663287171,1180.39792636,573.42385549,9.98669636987,178.093704657,377.956713304,7.69010205894,973.855047257,609.627277614,8.89398639413,568.09559942,876.710903516,7.12803932747,1224.58027656,80.8403058487,5.94925366189,229.073929746,738.34019714,8.07873310291,84.6809516798,1027.91655433,8.68335949993,522.305345395,342.615643447,8.94795826072,392.277318862,82.9586141942,10.5993035301,1374.22065623,838.54733755,9.93241862333,1214.52656522,731.45706492,8.60845884332,97.727435506,445.417996043,7.8451204846,1310.9956956,171.996166809,7.67326524764,87.7644987194,71.930002881,10.7803850981,989.176419736,298.602608265,9.67284319172,820.814817342,120.655294328,6.68995623283,1363.91673184,415.476405422,8.67901306208,52.5758666707,571.14300106,8.35862529073,1301.69561882,1011.92527776,6.95738916006,122.815194616,698.955580514,8.93508299207,1386.58429725,797.478384591,8.25221671842,244.050190713,808.103927749,7.33429603727,924.272591696,1032.4176479,7.70885594493,145.671556734,576.198257475,9.85266812785,1380.15015361,21.6512908936,9.01965316696,477.547355033,677.38871272,10.4119415273,689.967446804,700.931547892,9.32026464429,889.680258274,86.7592928018,9.68901731424,1382.78326034,587.463611152,9.79908756081,993.662789097,45.6474942534,8.01282644662,927.479561677,482.805446934,7.54532699151,175.473241079,665.747737208,9.41635616759,986.026584782,324.233520269,8.46093970739,137.239696946,728.38691567,8.41966576921,748.395479335,281.038815688,8.55276694545,355.514094512,858.534552245,8.58613780349,362.643473133,561.593472467,9.00139724283,1009.73103671,1016.7293715,10.3149703729,367.631209161,1030.4808894,7.48812193655,1259.3768628,536.221713882,8.18038366554,504.571698535,868.638131854,8.98158014962,861.835251207,763.815759537,8.37046945326,788.076918705,358.063799816,9.2347775368,963.99547812,227.972686616,7.51285870107,583.586557398,700.385904792,8.97848542488,400.890757282,963.479518123,8.01892959075,335.840428311,584.030035371,7.95539426983,113.977834615,119.082264596,9.82099768289,873.600143868,667.752675557,9.84357388862,1273.34835308,767.266192707,9.42467018684,1038.47412794,139.191711415,9.75584412964,82.0988283434,395.701818332,8.32529232849\n1003.35211474,237.855504992,8.31085306279,695.79931758,796.382461742,7.83276755701,1341.56205109,345.075161305,7.22349445745,1198.8627059,1011.11799944,8.62571889625,1000.32274801,546.152129227,8.34573411367,114.077536815,261.600987805,8.38635816643,244.852857706,989.670327729,10.4270424215,224.056000248,770.813411985,9.60086774761,545.010056512,1002.10451162,8.27368991069,686.533775578,140.633758396,4.82420189455,584.096054956,654.032320573,8.42879034978,187.259519693,572.532141958,7.98510255181,1161.22018616,978.98190444,8.88682531082,1206.20953517,746.839779435,6.01582582993,753.975558974,128.829580302,9.24526271904,1065.74904836,638.809274646,5.95805383203,1248.61790335,60.9337904601,6.97112253663,55.8883031157,436.183088647,5.07339025841,206.814023167,1.60763296616,7.99912064504,194.368905201,932.099757625,7.3732074462,577.878411329,717.120734131,7.42306655771,1085.65679842,538.066556476,8.84466458036,934.39171152,674.680995839,5.64992335336,281.400182201,543.302548546,7.49117427888,1168.2154415,276.666492482,9.15599538308,392.868471254,180.08635489,8.65962613223,409.665355091,1033.8742423,9.51846307165,876.643495892,605.617434643,7.02490906475,356.971286873,565.751144507,6.93016192,1175.16435033,542.685244979,10.7506503759,905.67072082,926.23828573,6.70805514,1211.03374237,873.207678225,8.62833312137,225.772090691,837.829544983,8.96801722681,388.072879042,389.716152578,8.78857467433,326.983900027,427.407478807,9.91501558741,1053.67310544,793.158375263,8.64893073036,778.825516615,276.088629784,7.90666164134,1183.5687128,905.794568779,10.1320529085,522.486920353,289.835705586,7.42119750059,584.836369174,318.188046936,7.44123521544,414.181823632,975.324629925,6.69972091628,52.3359985592,979.83868538,8.52804716124,1148.67288079,253.676619284,10.51375725,1290.64994128,432.260720804,6.56027607429,957.656807725,808.579322425,8.45756689897,700.507824634,588.272533901,8.99304342567,338.312055713,4.72020681759,10.2141012075,419.756806593,570.166389962,8.22594967516,1350.57387467,617.185340197,7.99464758586,1245.20381475,1010.28045664,8.72418303657,217.597393558,148.923008759,9.52834143554,1213.58351763,373.451723865,8.93976322748,1371.07541099,572.357076029,10.387103034,1308.21013297,289.935584363,8.74112643499,161.281942719,322.790297325,7.32119209102,420.231730678,727.821552058,7.70137220712,468.567642083,136.488634683,7.59237734745,56.0254306628,103.6116822,8.20186090702,931.958576817,367.998041071,8.06108182757,839.628925607,715.042853375,8.75416253457,782.177347148,952.139050631,6.1406096223,358.053994693,745.487753671,9.26970499321,397.485697051,159.138450758,8.36120663147,90.2547657976,503.483077186,8.54996428981,393.661582692,832.100886833,9.44617800704,1174.1601195,665.624149183,9.23481012963,1005.14390773,543.161200942,9.65690567209,1052.45713085,45.4040343507,7.07522803145,547.517914462,894.889283931,7.98640973766,225.805007302,375.085126371,8.74621254472,680.936327687,398.671820007,7.79788504573,2.75123116702,719.176953736,6.48094308461,160.438374066,11.9667849172,9.05939840032,1276.32557229,470.900480738,7.13556080961,906.152165188,365.607873606,9.77581168878,341.108232166,276.548056567,6.36610795986,813.917071224,479.91001079,9.2963280191,417.752836532,809.461392102,6.96439906933,1065.1799658,219.781796104,8.4224120365,511.012895794,677.694318945,7.86442146263,614.694134611,681.035249146,9.94428750696,926.341183898,124.11367703,9.30411493547,1157.13248962,779.285051101,6.81830973023,297.18865308,841.712924117,9.04433481522,1365.27219186,282.813948197,9.80805509608,755.077252604,690.58328364,7.67411625938,1225.51222854,213.689379933,9.0920818055,920.046442528,838.389765995,7.84998248824,126.615546331,698.902881712,7.31263281438,696.39529862,79.0302573906,4.12104770101,218.336969715,160.856229587,8.11967180567\n297.823570445,479.939188486,9.43272088098,327.905831453,358.519718302,6.70597054453,1386.5177286,170.852064917,10.377908853,938.840210338,933.004301496,9.38438907887,994.376985057,246.746394538,8.57844897817,838.164146688,110.914607932,7.11743736356,788.904068973,525.736082618,8.50112488082,1052.47487311,564.832499865,8.75834204308,394.198205585,309.812330899,9.03339204375,948.682572038,856.882932201,7.5654793558,332.885758417,814.868361527,8.47023190637,1309.90503617,8.7109712181,8.35839423428,335.478847506,311.334808706,7.11407896529,30.363049221,418.323864601,8.07344672648,171.66669951,321.592237212,9.8253631279,609.711402568,114.099297345,8.10521536098,1223.18226385,135.546059994,9.21859842731,898.128210325,90.9563301389,8.84223366099,752.852553758,2.95096526182,7.91398598374,577.66385754,175.469876413,7.65531050228,1342.24129139,977.065113422,7.75416260611,543.143709593,682.588236213,9.96815006708,1242.49577133,200.74547748,5.84923698335,873.60345241,67.777947383,6.10741807329,863.855530154,379.699147968,6.48170646818,849.564691733,645.987391935,8.59533244966,1374.58344249,974.337682004,8.54672479198,1322.89026671,657.468257222,8.19960806869,354.105453436,31.5292372784,8.21977489571,82.681807983,544.490221633,8.90006639389,864.53151315,111.802572041,7.19980231541,362.283864372,724.240910842,7.00180782228,1331.44241945,708.612405227,6.91463695878,82.9106461439,64.799252995,6.6690578421,139.23529199,993.309339079,7.17575431215,692.741188035,205.899198632,8.33642683316,73.3591388888,355.272357026,6.59487927264,132.169575583,387.411602904,8.18006365698,188.692043011,905.393056055,7.80475418176,603.627777887,471.805118386,5.83857853768,1216.35230939,906.312739963,7.5758737411,1215.99675598,745.055157502,8.72288210459,625.40734877,118.415222574,8.21579731525,1032.30124484,60.2338635435,6.11992961755,581.563817718,106.472943406,9.31370223663,1154.31435272,328.894004315,9.89602985194,856.705226469,927.118383679,7.87256740762,857.479801528,119.016387776,6.20296912053,1005.59416758,699.399063432,7.68620427178,926.600508271,262.796079484,9.45611821307,901.644771747,608.09722403,7.94482502882,350.816108024,617.742846403,7.24154332624,806.980052875,206.024846986,10.1299216802,78.2131854552,813.019921161,10.8705742486,1010.67336005,136.773004987,7.08003604677,1283.37139112,616.813327813,8.88576080664,454.510137145,464.187347094,7.26951396899,519.148649406,379.216517068,8.87642863929,670.159034157,530.097252987,8.13154734675,260.638686655,91.5399430554,9.97156397772,597.706312908,950.07808794,10.4454234076,1296.03505833,380.907634891,8.78392099069,552.288364536,1012.80989273,9.2165172073,637.738909452,463.707470521,6.08728791321,287.326745215,905.105391978,7.12880358624,514.727638586,63.4053356328,8.09568054217,1069.76573819,133.583379336,10.6390854363,1127.33596927,580.069734837,9.16753723303,1201.34099781,421.238045528,9.83574038344,22.7334398097,825.913915682,9.84896979403,121.226791705,710.01805573,7.92554644687,1063.72041647,91.1860759678,7.89507139075,323.204479131,713.020038803,7.69146250528,762.911537795,19.2550565764,9.45787269589,645.502470283,882.883701854,8.54458822776\n1017.0443612,1025.58566328,9.14239931381,859.145522339,398.919790424,8.42575389064,447.023396791,917.930254409,9.35404932927,12.4474020993,999.814560059,7.14831004647,1237.34640028,746.212360632,7.79313366691,1327.63864919,859.386163918,8.58684325671,914.95117893,59.011821867,9.4357445193,290.187550746,904.331306449,6.31075817724,738.457936367,752.603922941,6.89304415555,21.4980644464,567.219364023,8.88598271052,324.127256715,824.572996934,9.32814800234,876.766685237,11.5118131494,7.06920988104,1127.00912164,172.915612818,7.78651364902,136.964305017,538.95221624,9.06660869033,638.698680552,786.613882707,8.1164043675,913.097547447,574.118008161,7.57582477014,1313.20644442,482.779170395,6.02755665835,176.180143223,14.0913895531,8.75417705182,1388.79645297,818.246418826,6.60535686876,1050.84044631,505.267830855,5.99032435009,851.295716776,809.540472785,7.60421749308,1288.28338393,291.141209858,8.20575164756,1123.42448813,3.48358137739,8.18837234487,1263.56981929,991.731605757,7.99761168119,512.289470625,63.518600681,7.15646600601,782.026998674,354.697469657,7.63277913634,590.308992854,443.269508646,6.5384387126,53.0362141915,12.9761842383,9.64414378071,159.352267346,732.201563844,9.31881864707,385.928057333,366.631049946,10.1859182335,443.692304771,39.4803274986,8.97945299599,602.685441972,461.531148788,7.407335286,983.158525705,315.095421016,6.47425409907,806.919935147,996.169811114,7.78886996477,1335.79411612,309.505291994,6.3064518105,190.592977397,274.902490615,6.22217519794,1256.94799256,13.716137691,7.69452196769,92.8212132828,370.104118219,6.6750415953,1314.99208014,167.212967916,8.68946438661,832.861230617,850.770172699,8.54547002424,1090.30848236,919.602252566,7.35284759455,306.011467164,761.808246687,7.18630466538,678.849505204,59.4095143851,7.93993756178,1348.69674036,132.551742906,7.26276541593,478.337552503,784.810188519,8.07234047301,381.664745793,76.2424077135,6.79949836345,1018.79913202,480.029844334,8.75770654112,615.81212304,321.828081997,8.54931424713,721.162986332,486.302836142,8.85456299546,400.858542084,380.993875962,8.46171207593,266.572715827,28.0293301067,7.73311343961,857.435989143,793.550511549,10.1147436684,546.944054636,508.3268831,4.87051489364,603.091121088,588.165924218,6.26611336038,22.461596274,649.35444844,8.56769305442,324.274371311,1031.69756953,8.06616893035,81.3152221384,246.477120828,10.0036120349,26.6631542575,810.579230517,8.86232613701,653.769925709,89.072474544,7.80032147097,202.278839141,918.574041503,8.75698857445,991.586162154,314.890215959,8.63236750873,259.738393003,629.21572491,8.65234890704,255.658613673,40.0020968197,8.9757080464,490.440767951,999.021911163,7.47223108848,657.614444125,920.670288542,7.21174490012,1286.08961081,483.824137445,6.75306711469,1373.51116061,349.824839586,7.38843754563,1068.66557463,668.965143053,10.2130523635,652.966099029,237.870642461,8.20691824904,1225.47629389,662.688068156,8.92818007173,358.263107575,374.200574684,7.6142662102,276.032330995,431.861586297,6.82265374208,150.538652871,845.941740704,8.23346132471,955.085365188,284.769825729,8.28327110625,187.952897091,560.29329782,7.82067793165,854.652814463,998.755453915,8.59364274065,1167.59778933,428.447714061,8.6025920107,255.904509679,797.917798236,6.88862956256,447.80842907,967.327541965,6.948421752,558.920812751,755.084686092,8.26915249853,329.167017819,748.74716281,6.40012632319,831.663819986,483.32069264,8.24283827515,1087.14378852,251.8828853,8.36259569339,908.038245635,581.316655324,9.04740881696,1237.61229151,119.762625657,7.58452553925,57.5648202115,421.370843568,8.78105663445,196.918235858,1014.54298487,5.90707883712\n1164.87917189,181.040823827,8.61990927679,73.2220795035,692.066104933,5.66582222561,1219.44420787,310.130152782,8.31579222282,567.096066813,38.0920305265,7.95373648268,845.167241522,284.968785157,8.67459325773,886.590539105,392.197071452,7.83606363934,1301.6866839,217.55330998,6.63198619724,391.905189906,579.354205183,8.10368458766,1048.46750601,1012.78530182,7.34011808718,66.3771731463,913.539053489,8.30217098382,1344.68691369,424.246262228,8.05281522783,819.84686459,720.659300729,9.24687483099,886.108534618,776.078216719,8.32957038801,917.783188884,919.560401524,9.49976345712,196.237357234,938.820367195,7.65410716895,818.238531352,110.029074711,8.0485600462,596.525863181,724.233460587,6.76440868607,1238.30391803,681.506541924,5.9516684272,92.4495825571,701.287456202,8.62195550597,1167.04682418,912.748021182,8.66621340877,368.966691432,645.580903558,8.37438233284,274.978772302,1007.4494761,8.06920545135,321.305866271,685.655887399,7.78620195356,1127.3325932,430.014660558,7.79010769457,284.316375551,47.129985691,9.18398555889,395.823139083,882.93645068,9.69586546707,864.268291604,489.197962878,10.2224312265,1217.19766325,312.145904601,8.54066479107,1391.3264434,544.54855616,8.24608111235,327.488613746,500.524236761,7.67611337271,1327.10391451,772.851368666,10.9279358298,796.243261463,959.058221638,8.00344730967,7.18120416803,792.75717553,10.5915275401,79.8361821255,235.774758072,8.45761050644,190.673707755,446.660818696,8.02939590357,407.665130674,683.04366974,6.44331929589,735.192142209,344.980801518,9.70351944482,730.188193489,575.205242034,7.43347794826,795.206107109,1004.96623522,8.38479429935,401.177258312,301.643624585,7.64845918104,173.384371204,754.406755856,7.54733493729,732.380077256,655.179433448,7.4047043278,780.510544133,621.906161904,10.3844738615,1379.06371867,1035.77903551,3.49895024209,943.765659412,1019.18802172,8.6625828213,1269.36438207,20.6587240176,8.02801086115,683.010590274,250.883916875,5.90323840122,460.780830651,788.652165957,9.83198618267,205.18608358,468.530510691,9.81038244758,84.8013935288,276.324402401,7.87762840188,294.636553195,894.526248153,6.39950230987,881.182050837,158.741469576,7.92892939888,188.305264958,74.2991091712,9.01393415765,1152.25079837,710.194551903,6.96992320607,1359.40333392,883.163304447,7.08295239673,1038.32800806,848.644624072,8.37923913475,1313.76734524,926.456062128,6.01806947356,1300.4776157,217.9749539,6.51838374165,352.701421721,997.644888575,7.86590972899,205.841693846,791.930521771,7.79934707483,1196.73109942,593.649672884,8.04733472614,441.050334686,1011.38903068,5.88171787357,1016.48673648,109.2650223,10.5651718308,1218.38278159,595.533941127,6.77601411383,249.329579662,485.43080145,7.22318010521,457.14557223,175.103416856,5.68551177549,1164.85943354,681.901717704,8.25374703453,1274.66567312,882.610194164,5.03689732251,593.691409251,449.403999144,7.93996291916,76.2755512038,560.34440044,7.12357226664,340.186899895,339.143433915,6.84514535241,753.171258838,410.928270368,10.1353262595,955.502716575,500.42868458,8.35866171304,985.103704236,365.76637829,9.65451639477,923.265309072,995.991120445,7.44763574586\n365.709267598,986.52551075,8.88786105357,1375.28486487,615.820996165,9.6368472882,1386.29928728,390.616585833,6.51831634533,898.980453317,967.041471024,8.82129643857,8.26467090042,152.970476671,8.42649474501,813.640992302,418.594974401,8.24779922736,203.886294883,427.428648068,7.55481737848,180.055269628,824.953458918,9.36540332501,1196.65872265,976.066039098,7.17348729882,244.705222224,710.735193211,6.02929914214,1142.86210137,421.336774437,7.75781153965,676.78763647,577.774954799,5.68037576183,907.967853467,616.946938457,7.42161731869,1013.88403484,173.912043987,10.1236514184,1241.86166182,991.064748597,10.949856538,195.016469718,313.870407718,7.9008411228,294.252815592,438.096717249,8.84344181794,282.501931993,91.3476108053,7.45953742842,673.790716109,511.878981207,9.22510274547,787.039154081,176.766541645,9.28229593347,879.20104397,151.437343518,8.63131544913,667.97128488,880.951876555,10.3993750823,992.896687479,28.4855948742,7.54126470088,505.870910133,254.779348112,7.78021787819,919.634278096,317.982633245,8.26010287448,1221.80346507,498.677914946,8.98049954549,43.6131267345,462.896632508,9.19704152912,1262.08823557,818.038550596,9.78360635466,639.732408707,741.442996047,7.7792431795,1244.95255697,271.762475415,8.36968142434,385.179511986,311.984572693,7.88759941498,1385.7392668,376.777251979,8.9853314192,177.673846575,244.920847108,8.43375988581,707.309523601,980.907870489,9.04531550731,592.530509988,829.406613726,8.94834519177,717.774370252,433.798161933,6.96779443968,507.053839584,249.00408359,7.19341123383,193.993820613,1008.82810592,10.1230968003,437.316511289,809.989350771,7.33871486454,585.482450393,531.208922569,8.20248793592,915.3362558,244.659851591,7.90641214118,1310.52870609,1038.25682406,6.58562847733,427.38226189,659.575298242,8.73127526314,184.984832352,56.4898733989,9.15761632653,1139.01461738,689.680804806,8.39224981392,1116.88297947,514.235026907,9.87910695834,1164.57366031,609.5088462,8.22347156733,1226.10956538,812.538975125,8.58878425224,691.724201695,462.005934253,8.41419906877,411.802119016,566.777955053,7.82888388416,587.053070453,956.594255577,8.80226168334,943.394964233,543.892803534,7.19279250427,427.042977345,823.757024763,7.19484458497,310.704590317,466.530319237,6.43824815011,270.159101571,1013.49846044,7.6564828693,30.2674649964,912.459715051,10.560659442,878.214600992,55.1206305075,8.47182484086,227.674141998,65.6876332457,6.12827868389,940.362027508,819.027336417,9.85896034072,233.221139754,724.49734347,6.68027326495,533.395819081,522.88171857,9.87455226215,477.538494068,292.74831308,7.62036302076,1296.87668659,489.569482637,6.89248060529,892.17887704,805.247899283,8.20221440543,91.1727986353,633.434609237,6.88951664595,338.033514181,980.162636875,6.79536323735,171.025827443,850.122317685,7.57467291633,942.776179597,601.606122651,7.26119688134,314.478800282,176.81568113,8.60458270208,21.3051208726,327.672409296,7.03606904394,1349.98465466,266.499589974,8.72729583135,1084.83406859,79.3733319717,10.4124866712,477.811156794,936.873279367,9.42466915306\n772.689680844,830.116044407,6.49127750378,1276.41171273,1021.08981634,9.04623162787,53.1090860143,90.1522284728,8.09293891512,641.752432594,350.174753618,9.09372440884,1070.63711744,122.073032764,8.65219250825,461.865489807,670.334503589,7.86800162595,64.5754497761,403.592202046,6.85229705595,96.9376138005,674.796704047,9.76702333436,867.220021474,847.2217449,8.7755741143,794.921307181,285.475952399,8.27384416353,1242.43738897,378.060753763,7.13580461061,1071.2763072,232.731407018,7.09410233076,1377.21751864,141.980446553,9.10881092996,284.123162854,1006.19282313,7.34007913768,376.535719871,826.456785764,8.38236525069,457.231372969,308.139874748,7.88759286513,1104.41183716,508.38656784,7.69330650522,921.22149798,450.259136162,10.5210767028,741.801872628,184.915632567,6.27195796478,1375.24734615,842.29315519,9.70807511618,858.26963658,1010.23851403,10.8031221815,42.4668581285,639.330155562,9.8398998516,726.853566666,686.683074369,5.29368786096,615.710705554,334.281244397,8.60660239787,1013.66104879,964.237832019,7.81965738144,533.634778475,193.241199079,7.96794047363,311.551889903,570.2444085,5.24324128041,1241.97822383,463.110016428,9.46752286472,1316.68032738,652.827018786,8.27854863945,347.957328226,931.583096505,9.12829947182,212.53578986,139.597895457,5.09978502361,1052.66115482,865.180869879,8.12543871935,771.511139945,61.8501108068,8.18003501542,1080.97642157,173.974582574,8.49922789718,545.058961373,204.470788173,7.88410003343,290.979700317,770.429500781,6.99891203687,896.460303951,973.350254179,9.01323545022,1180.78081739,606.727423012,8.87370370547,1346.83605193,1000.41539819,9.08118542526,478.806908973,82.54411777,8.08634026984,925.964993876,521.377858126,9.34452585203,1079.09327338,277.043858542,7.31768944378,243.647453153,327.577347761,9.20378901777,1048.30703002,759.855348013,8.44457356283,111.254263085,212.034626057,8.12275052576,1171.52359931,773.172815098,7.23724658405,253.570628199,213.492228871,7.12087078389,1054.52146154,449.955655877,9.48780611284,1190.16905911,245.227032859,6.51981383639,1217.88361103,27.0195498801,8.85670732843,311.034629645,564.343985643,5.85065503293,530.129653912,265.326824732,7.68309295912,971.424028385,504.183606471,6.78871972141,1063.76368814,769.446501466,7.43593664925,54.6150761345,374.091154969,9.1589926174,639.34789332,758.186087536,9.6384405119,17.3015701667,524.478330962,8.58410988468,783.408969433,522.410420949,5.84339068472,575.450544348,1028.28206262,5.89057856066,1163.15652133,161.049418596,7.91560371764,390.286583603,154.331166014,10.2088999272,286.51379926,790.509426701,8.19594009373,652.06022695,71.8443746443,8.68098167298,126.579278239,991.33559763,8.58563137446,1376.28034764,926.073849622,7.53765214064,625.642034426,818.698879004,8.96272676801,1166.99900725,641.903700141,8.64744971609,353.722631435,668.533008591,8.46337367764,992.409384027,845.199870711,10.6700765951,251.575423862,431.632527354,7.34728812889,457.623416167,378.28273615,8.10579285095,49.1339743655,544.780676956,8.09012130849,684.721968488,317.699260519,7.29882907365,667.272896269,908.635305118,9.79914302312,177.112421913,917.376024524,7.73210580839,211.47143299,679.133477058,7.32605350517,291.559034771,984.750937298,7.78575423723,490.255848288,468.238352975,7.06008693512,187.800044317,878.004316022,9.12768801583,975.562136434,663.705760455,9.93069230033,898.218154897,726.910031673,9.97057589953,1366.98760213,285.290383586,9.65068457633,132.42111177,602.842950045,8.06045703482,577.256815968,688.35654448,9.31959328362,633.052675442,650.853351676,7.6035265082,1374.37824144,928.259310923,7.6052386658,1090.62799578,672.465073044,6.42642519048,228.937776955,476.230027959,8.49746531409,897.136048029,416.586275924,7.12623347816,1060.73811442,331.684973692,8.70503470465,60.2366927382,321.517119005,5.44316282488,1157.42004325,491.382881863,6.67021987453,1070.26393238,561.850116956,7.20566882733,1311.27757439,202.176041053,8.6440847874,1215.46956464,383.124859217,8.71687412782,950.357489097,123.648401761,8.72185135\n292.97487059,940.107592622,6.79965077838,502.060689078,297.050187076,7.74616938379,117.601613441,1025.71272682,9.80152905231,401.385173527,287.53064933,4.62022827001,818.198015499,16.6739856811,6.01698137129,751.949283396,700.001587644,5.97322088558,1113.24167647,894.476392724,7.65335699792,719.865258032,496.1835767,9.44686630444,1151.07498707,999.472781202,6.21805463402,16.2313186345,423.306217517,9.55823389296,1331.53973798,194.370730117,7.63752664191,1059.5249834,569.09501477,9.37991942744,683.968645069,235.178118539,7.68749200255,1384.13085058,668.516942237,9.00738133008,547.829533345,270.325173317,8.71155744419,1092.524773,777.925473553,8.06043705461,1253.25309738,795.427442338,8.71396469963,1330.58990255,198.963851626,8.97283862921,824.965540988,786.001816393,8.51443202274,597.825871383,78.2851035936,9.46516105039,1281.62101912,785.306683373,7.31911656797,688.00830827,882.249526995,7.93487257742,955.578028328,68.8920432313,7.89880283573,1083.71669904,618.447506727,8.10060166299,942.139272809,594.677365203,7.95251790231,204.777237994,319.460434282,7.95657484706,225.642480704,763.05976277,5.08234589464,1145.19509666,270.167163201,7.58817868201,245.134562918,441.064940752,7.77110461553,449.523622148,65.2512258322,7.87005104044,950.987465555,893.78867303,6.74920766746,1084.54680824,676.962038276,7.01620346011,722.090583615,840.125242053,7.98604193563,1158.16178951,588.271489419,7.73839710677,153.583057814,813.315863945,9.19390986169,1042.45033165,963.423636598,6.86438198224,140.255306268,855.064960867,9.07785453029,1249.70516556,152.386707351,7.37262510611,512.997612302,946.406100287,8.60842266892,157.693606,67.9486422818,8.33295153538,113.047921849,972.644429003,5.55630041757,1203.27399302,663.264797832,6.6037872773,471.713278263,652.816917181,7.31713612945,783.661493706,336.105982679,8.19509180943,454.258214653,474.205918097,6.7670247704,561.121170277,820.247008825,8.50659085863,1218.31120225,91.5698037211,10.3473337593,497.123282289,876.888828245,10.6076186652,1099.98810569,718.027163376,7.50675888126,75.7554182446,992.668182183,9.21129218593,401.974687276,334.312635387,7.19089745004,773.725392503,11.3622715512,5.7781604659,171.051269762,473.265390883,7.33971370378,1297.94323078,866.496569078,8.47767721541,564.20259305,1027.29814185,6.86802942493,330.954547068,6.03149017828,7.93132048925,983.117205357,222.962809774,10.7536413362,841.146803419,453.917846414,4.56024648209,936.518866679,32.1895401526,9.99313751439,1008.31259383,294.786108554,7.65411603896,1223.04490594,911.693828485,6.52832608014,482.864013935,475.573834512,8.46109750785,329.613485914,6.33809349314,8.39580225173,20.7724759454,332.827488349,8.154320027,433.404846391,403.484914526,8.94843347617,817.292782075,251.842841579,8.79864574765,1113.69655432,84.4393009316,5.5372748316,639.965254133,606.284771355,8.48063145909,1146.26699438,302.233968815,7.67680354396,113.406643849,0.727344576607,7.74780737054,754.7631129,573.926404087,8.11275461873,31.100417286,111.297989372,7.00106908039,659.557996105,870.795109209,8.67070880227,51.442188497,1000.06232143,8.10250856172,564.675382181,758.458415842,8.22906599082,1111.91712326,93.2779934068,8.51527768568,1312.89049378,597.619971802,10.2696815876,1366.80650272,442.350344838,6.20478771686,548.123494562,749.628704309,10.5721552984,990.007032846,19.9354230108,8.56703914908,1183.83119532,447.614915176,8.40870640202,276.888726208,829.975973473,6.78543896714,683.346401106,481.108479088,9.43975689254,277.760908171,85.1972105285,1.70541987777,619.617050119,117.69890173,8.77871780831,289.752406769,353.096962,10.6734236082,400.9137272,741.403491447,10.6250151846,24.6582730871,248.127303971,8.47313943083,273.755874965,596.282598048,7.64310789952,861.344666334,1020.281047,6.46596906746,1172.35664672,940.316590632,7.95266088876,54.3340982575,330.550956218,8.541812189,1268.67021637,1020.50724836,9.2966605696,790.909584983,91.2840895248,8.00633192948,1226.15894597,297.187823131,8.04124095616,1040.33075491,26.4573360755,7.36592983396\n597.616053366,705.646437418,8.55553822929,49.2782396358,796.351174127,8.08346605644,1087.06389534,752.031843123,9.79273645825,402.939073983,965.88800029,7.71865108111,384.710715783,225.90627837,7.5637646912,888.721920779,712.89540991,8.04222048713,454.056940381,498.755334075,9.3578840469,1078.74604696,375.689867059,6.42294527424,1280.33244018,546.674246573,7.35298401199,799.96259098,519.862032727,9.23901161966,781.225599396,296.648779752,3.8013036817,699.247186217,454.049380914,10.7512484315,407.72871114,564.212759763,9.64978660495,1186.93512834,990.44563924,8.5337777042,1369.16766837,61.7567394843,8.89980471934,398.402043262,763.24179496,9.36781232751,1038.85025167,634.122385774,10.8935320957,808.942301905,111.518465828,9.77742080215,821.084399453,318.343636893,9.74946675203,1034.32664103,47.8111172301,7.76035943004,472.916521421,299.416693965,8.0051060235,1160.31681742,537.646930433,7.5982166297,250.469585231,140.406099331,8.55473859086,73.8116372727,527.176312036,8.53412200872,769.731047176,999.451892952,7.75386509101,273.978271202,583.387269482,7.159870306,714.896162351,136.479721375,8.42384368241,121.305011647,265.20427554,8.21721035203,1367.38085072,168.303158057,6.20943629679,1230.17244766,412.559444399,10.7032312602,153.907769993,600.746480594,7.31137178316,556.259858025,57.2892336671,8.29189121413,1123.51455654,527.208398726,8.53611811579,642.826377721,158.48676078,5.97482107004,1133.99835086,725.956328972,7.26182447236,1001.16997986,336.34635305,7.82282250068,1176.13150511,142.003940324,7.14697005364,638.488558926,24.5533064509,7.48350205542,215.586475236,125.777232122,8.77723300758,121.766365185,419.929241926,9.54565568026,546.037122207,532.753284722,9.03142983232,1028.21072059,933.79161766,7.64984421438,905.696524787,837.489884321,9.32612344962,1151.02693576,983.015436183,8.15660208151,597.721396421,381.56545993,7.77120205573,1194.37979865,141.169203655,5.67163713542,643.562560327,836.017138688,7.35373169136,876.819395245,457.85390668,8.1523592986,720.975072054,944.062802297,8.46284970009,400.236389624,757.372654224,10.7316139413,999.677186667,556.436401997,8.38472365208,44.5359368453,63.9664027339,8.38121515697,536.189490502,334.752567213,7.99134114323,283.80444248,171.647657125,7.98727290903,1284.45990226,1036.75027266,7.82082547883\n311.485129915,317.850753082,4.47647603901,442.093578,715.740849596,10.8570885851,835.502480227,3.85073427185,9.14680900339,1138.38008832,781.628570161,8.88789208861,1004.89746789,751.648057459,8.83061729975,853.572218886,266.945316042,8.04291410646,1097.39217781,958.072577719,7.98274147382,894.77003806,461.497989378,7.87390569297,258.403858404,729.136903695,8.51546101638,345.507912307,491.740080298,8.88259336451,1030.40663552,96.103529718,7.22449127638,1009.10300866,815.161274208,7.25029194594,1044.01785885,474.99137236,7.8041553439,35.8408129874,194.369347297,8.19564066305,826.369022842,118.069026058,8.4737402425,353.417276223,100.627251246,9.17020696177,464.749935558,2.72696508084,8.28812240509,217.58314201,1015.38004133,9.60679885201,1218.13963724,522.381021055,10.5727870251,1145.24942079,699.635240304,6.75039542588,1064.41535085,131.536606755,9.22266539527,674.936133789,205.703293078,5.72683873305,490.627878776,775.346958117,7.53066587245,406.91383814,509.287846364,7.14632351743,120.721594881,0.608761110746,7.49203835413,671.094456308,906.80057764,8.55074107142,731.123407039,683.762695689,6.89392121421,1082.2850565,1028.82354055,10.1134179931,150.654038135,488.369520447,8.63711826757,460.966194274,942.307211552,6.9224047879,635.840451583,432.879103765,8.6169178913,1315.8508522,247.060265816,8.84005197677,1380.74073428,108.692969291,8.90910442501,325.040549886,935.440358431,8.31700973006,563.437719683,550.525993872,8.79670787598,1263.04792515,987.561551394,6.20658929146,435.447573784,914.001453651,7.62299474406,335.251211469,428.354399238,7.26987426128,953.455851209,680.922194499,7.34250884079,1354.84132764,880.706340121,7.7937130324,1195.06432237,465.258229102,7.79713692006,376.082977991,810.880000222,7.59294485032,1025.05996895,344.227681026,7.41792986945,8.42744202881,280.312214674,7.65992001112,805.814065123,801.59830218,7.53282223763,510.80219475,297.024481128,8.95348856036,866.03763983,1037.95245994,7.33911236937,817.73168432,193.204297834,8.94642319065,613.427341369,510.547013456,7.08831346646,1051.97121446,563.686602017,7.6135176682,1367.13883387,245.938051593,10.4031534896,873.423024422,331.964035865,7.591012994,991.807642006,804.014099725,8.80839232451,207.535949976,808.853643752,6.69644937551,651.38149946,604.631219384,8.49641565033,739.231339925,953.63971237,8.36887374266,798.508068547,499.139002146,9.73706423608,609.9078481,154.91776422,8.4779884527,240.295726724,558.523767879,8.49839382557,545.059223989,229.440922208,6.32499616752,1180.81504083,313.895713045,8.71412968367\n89.2688756771,350.678238189,9.25034227341,826.048514165,45.317115975,8.49059105535,920.554061667,694.707079554,8.76358731544,171.18867351,250.375724521,9.83652372736,648.364511198,623.525374858,7.61802945649,126.101497254,292.132721299,8.42227667293,106.54562972,885.945740608,8.7026168852,225.358558827,637.916356232,8.02772360515,1026.34289222,193.804384493,5.57864529675,673.289963492,456.515928569,10.1743753302,1158.80529469,876.91474616,7.76960842499,792.007668784,582.121380623,10.4937273154,1301.49377869,924.9903796,8.53287232823,264.543791857,811.21109634,9.18306019884,473.205945503,712.457356195,7.58688232343,977.076171585,154.01073209,7.30985578792,248.93797978,714.900474705,8.27777572154,449.240305944,52.3738196449,7.55781284479,303.111204676,416.897219807,8.86195629689,985.988806092,660.171249308,9.22791822217,347.435906549,317.166567165,9.05623328586,853.159943613,291.669630405,7.81299260609,719.000551995,978.152872286,8.55362723733,465.802970889,62.8071607856,7.10595877022,975.905405743,852.643406594,9.24879868403,1389.94226325,383.565033329,7.55178504148,1246.90307572,444.408682045,9.28036453531,428.078109335,294.6719491,6.22675339346,773.938920621,628.796376184,7.24582297037,393.80449383,88.1902311578,7.16874270047,49.1859998887,642.762700639,8.86476694871,642.145754594,376.425687547,8.20205874635,610.226595556,225.567764005,9.24927956625,406.237119591,668.668848771,5.73465207673,230.017788155,129.220761628,7.7484031559,831.093893057,546.389570508,4.65484607745,1161.35807207,268.607583298,9.99846092856,428.425065103,960.67179821,7.336180006,1211.20966125,674.250540048,8.6428058455,998.4268559,226.450425777,5.84196998331,405.03005002,908.967989966,9.96907366013,954.701553006,281.755201312,10.4349565459,72.1999413764,744.280837661,8.49805106174,1210.25425544,1035.56017832,10.3877064721,1209.57337559,10.7361910778,8.54843449999,1001.20957304,673.149192381,7.63612044958,269.246554954,115.081507616,7.87679786066,396.964955474,919.527105898,8.2323293435,1118.6663994,838.775948917,8.61601384022,795.44424616,957.189078794,8.96588352388,644.074562755,3.65027787593,10.5819822917,1063.14380825,932.998868133,6.44355267309,220.399691225,965.261802076,8.01776809195,1089.12078906,385.45408575,5.56200228487,188.087439044,609.208962636,9.64339547491,464.787523428,586.770943545,8.06292964439,133.904635548,1029.52743955,8.38037460832,538.083522255,818.97745538,8.37372129872,1259.67973944,823.567919945,8.63741566307,1189.47227374,296.849428702,7.84324766174\n382.583885632,936.872727167,9.36032300074,386.426523038,703.904464851,7.50813014024,787.215358443,290.035005712,9.27754057099,949.565173109,368.181640331,8.33473794613,916.317459352,60.2367318775,9.59424760809,200.757761668,38.8804707823,8.50548006244,1156.29421779,981.55012061,10.5564197336,901.973750628,442.4473356,10.4117494516,1385.53357792,355.429927048,9.67025226638,1322.92681935,708.76127559,9.88968902893,98.5885891487,303.895202827,8.72748402172,321.680869946,273.742481495,8.85230051993,846.079523,311.657976589,8.31534645785,1325.68796954,837.954994211,9.11367157635,950.555688281,847.417846606,10.1933764704,1325.27007018,391.106156784,9.97581297223,23.3828302032,979.045511094,9.08514816937,944.760372483,85.1505654359,7.71823941162,1197.94996099,18.4045635063,7.76254204304,77.6141767538,32.1767291062,7.17401142423,462.116301146,1016.55278597,8.45255409514,577.313486084,90.5723168953,10.6026123048,683.839806736,799.772834675,10.7758628114,784.175832864,843.565939688,7.49385409768,790.739424757,436.512066094,8.92635724903,513.799048936,555.953103496,7.49231283754,134.355036597,656.877750659,8.44861340497,200.512025422,864.958925396,6.32207856461,462.673215034,690.160255651,7.66964949133,999.423297308,724.185202173,7.82860769174,854.163955433,635.590574579,10.0121747549,802.776473468,8.28478073173,8.51576873758,566.106214919,341.259424391,8.41252761104,413.651162795,18.1179942293,9.59399011564,184.054240718,787.833561197,6.91426210483,833.401333469,941.90183221,8.51333320832,538.766269022,653.003956634,8.08823667446,943.133783836,591.335873774,8.15681318532,141.39262604,218.538690119,6.90265518557,964.091699153,276.371531821,8.66185584794,1390.42211644,982.389641777,9.65375714522,7.11081400787,676.112758008,10.0426055899,967.709007082,1010.72082771,10.0190443705,1188.97904314,478.30437511,7.3584257479,732.819356565,214.656817068,8.57114330569,688.615243519,624.012899701,10.3505047329,908.903083593,388.104008086,6.4856898691,274.635056751,442.930438101,9.38200297295,1273.40671867,338.760738668,9.70907627939,1070.83074321,536.659046726,8.97989854772,1327.17467899,839.479567844,10.6967113538,1115.6727798,744.532085571,10.3106968802,1357.38847052,253.790097043,9.10187289451,745.957953682,408.812760624,6.95578597264,169.31606285,831.243747875,8.71113286527,1092.61925636,191.108622456,7.89766717059,1207.2302883,677.945208285,8.61288411752,879.270233693,820.143924205,9.04391115503,511.235008427,525.126677337,8.58438980957,681.241664226,86.0234469025,8.15707421227,459.794584946,111.782806951,9.05843604084,477.739768866,836.462337861,10.5765589561,889.538797191,495.016008473,9.70984823613,646.349385279,494.519116315,5.37866846525,534.543078297,324.78616926,7.18585845971,11.6989928915,552.755081974,9.31664050892,854.383867412,897.015441386,9.26563342209,1230.74252763,482.323989709,6.61563261683,1270.1565401,231.716902461,6.3091697941,36.9743136583,565.228290393,9.4789034547,399.388786477,160.424305302,8.52662005368,16.9884656473,464.731269953,8.69758560197\n137.489021877,408.347418916,7.91339568246,406.331156083,557.506691687,6.22170016033,969.380759003,234.776568424,9.22942828359,368.545334298,41.8286192988,6.26336638922,837.022395462,307.393455195,7.84092530667,502.063838606,899.500698209,7.24949283012,1106.36403149,505.241994104,7.94593619284,228.593550235,308.584376747,7.11809159384,1312.76253316,611.295239243,8.75505423947,1118.24066431,406.56801747,8.96182375733,912.118012478,689.48915763,6.66896010001,238.890861376,338.702554405,7.83023286836,1335.38126425,372.257081331,8.56159945297,61.2088741676,611.402236858,7.76935716316,1079.973514,958.148754411,9.58261547179,1354.5421668,141.349199517,8.95584827309,216.533509604,672.351006864,8.66889589398,59.2185508737,671.330686681,7.27602580723,578.965052306,587.025653751,7.00410175735,401.391197206,344.897929635,10.0858527101,782.954636108,735.717438492,9.5401463388,1377.29753868,871.48727231,5.21541575785,959.84996082,204.014577809,8.06907296127,379.533559687,889.059990666,6.61522639259,57.5774214697,869.597126621,8.08051024543,1322.03260461,183.238870594,9.15467474019,445.935489571,648.013008501,8.25979432333,975.54935342,369.332481907,8.87192467804,821.949665125,321.304750345,9.97105005989,494.424134207,533.857318053,8.42999745652,120.800201011,978.767648286,9.40464354897,1370.25359275,914.391943566,7.34834650339,127.399648252,214.464563335,5.8053750914,1155.97199439,45.2514993614,8.1589065755,332.058453233,186.042542962,7.41225927387,976.949559082,752.512292039,8.90274673565,156.096196312,446.791477936,9.74105098623,485.710468872,570.745011209,8.5785512561,1222.85793726,34.9840586114,9.11273025738,120.115173824,36.1892857291,9.88169012875,60.4703392276,787.784106154,6.23453467981,23.1406984722,338.031339474,6.74217682278,871.223428595,335.311562941,8.76556955439,810.080969408,696.452567809,9.89374472868,473.757586629,1033.64421139,7.50079788162,759.914474641,633.270964291,7.35158684509,242.827950734,645.854612847,9.038591482,1164.93322273,7.84536186799,9.06826724727,370.213209296,380.168213973,9.13573984965,902.579204429,510.654922091,9.1784052022,764.228411974,459.723956691,6.26892494804,1218.86828351,522.926917436,9.09349814772,604.79712455,392.584112939,10.2272392863,1113.56947571,343.586647638,9.44954044567,1322.62988461,440.522529091,7.07154894329,483.770830398,996.578913425,8.76247082074,1123.1312248,687.218890014,8.14160476816,1171.6935122,937.685866387,8.24709335716,144.79353818,507.999717855,7.2082736252,94.652199773,1.56864344262,7.30930031575,1249.92651979,843.473187677,7.48850215977,897.215333807,526.826669861,8.15663938936,1055.42695421,220.068069305,7.8479929304,826.504607721,5.55030985495,3.17427313008,1172.87286662,703.348266664,8.93905924248,890.67516891,69.9803342216,7.03544496486,411.902339557,854.788568285,7.3661687502,618.629697962,762.319192959,8.10887569692,523.682332428,525.117349173,8.11392765138,715.345964591,475.996672475,5.24342454298,1108.58464508,977.028490232,9.29289861485,833.452820082,149.366578522,8.9083690012,1250.26913576,314.679475983,6.86761393077,555.381208329,127.547809988,7.47992253375,460.33754925,152.205712746,8.70803312843,1253.47625858,853.407527507,8.86832303101,828.908619313,950.890290971,1.33031483989,721.946490898,94.4486159947,7.20221823588,895.648815881,138.373859555,8.91280805937,923.535847671,576.197894857,8.99966570198,107.742469014,950.28750619,7.70981813665,1119.44928938,1009.84350354,10.0199743153,1090.066277,971.445242727,8.96100557925,293.363823902,236.539116014,9.29535319633,1077.76299464,178.843823663,7.88312839569,541.489726701,675.343554674,8.453242662,225.917819602,701.400421589,10.0939374643,1364.35341997,958.733726579,8.568751495,610.710618561,606.725220941,9.9578219424,489.95780377,751.994303649,10.7364857359,772.725468366,370.525993183,8.19800739328,1011.03773643,194.38343086,9.05376302587,1325.62621235,807.665591237,8.1675473944,1145.03852358,219.244066124,8.31566703213,1094.57630314,963.335238976,10.3777553083,695.561997196,783.433840232,7.03060832599,571.411534256,374.902209397,10.692958658,1295.68153388,63.2000178269,8.77071581814,219.205405103,407.861525334,9.53426023252,1358.63295859,172.014228085,8.20930547325,328.496915301,806.506038369,8.93167906856,126.023958894,246.010017504,9.40672415659,382.476326938,806.936524959,7.15702988675,881.476584719,474.322939272,9.30338755556,256.482821454,149.871824548,5.05752298081,971.208842368,734.81647886,8.80410618504,552.811114059,244.185833402,5.98231727657,640.971212209,358.087848019,7.14802493507,417.242056892,463.831745604,5.25748380317,647.232973902,792.233518509,7.51386025221,432.299842191,674.504534215,7.12551078453,1052.62419978,466.734296506,9.43353163906,523.68916848,754.890422439,8.61355166439,280.799138823,930.473293232,7.96816632451,592.566868631,1026.25256276,8.16592571225,671.45706918,229.978420205,7.43731302524,385.241307776,980.205066877,8.06383429725,998.50636594,37.739222185,8.55083427477,688.185520618,551.604352169,8.79811953432,1000.81700333,727.126769562,8.04131323171,692.042448525,214.130776015,8.46159571438,827.383950157,952.225723658,-0.025735632965,653.213194931,369.327829395,9.4322177994,711.954808126,236.562968441,8.36583353499,1127.76923011,1034.21303535,9.32745343749,535.230409939,219.528518962,8.04919891804,551.822198957,974.468955267,8.46403732838,339.889749498,515.090893494,7.61105877878\n481.839200497,131.879958713,6.64582588259,47.4309769028,891.227359831,8.11156568432,964.284579322,67.0968369118,9.94388329717,821.474680559,1039.70413934,8.65755148982,887.288961383,339.024613446,9.59560102479,1014.82042413,175.103410214,8.92322818003,1297.07267821,474.306866981,7.9327853505,57.1827253215,883.243180196,7.48047794761,157.311122562,337.334824414,5.581084373,1239.01985415,675.968050065,7.97475824006,237.650730136,771.282033284,9.42562532355,137.869767911,231.743454698,6.32416795494,592.662516847,78.8673487267,10.5850681257,261.429718587,486.953529305,8.47996312248,1302.62654216,391.460005283,8.1845143194,813.109873099,884.019992185,7.55761445018,412.01397374,315.80675678,7.5359499921,1279.32979057,214.434000351,7.51617211518,800.207844913,707.028490465,7.17283709336,561.42583107,293.329155308,6.37526591066,237.345028168,869.865010825,9.45187079509,600.046712199,538.916867731,6.10888917949,307.084085186,956.221457705,9.27810224405,517.751084703,724.222495496,8.38745845121,893.539460644,95.4413909959,8.67952350224,744.328910478,354.196795627,8.69412287613,1192.82806568,839.039260911,9.90753085263,199.109226499,605.084690739,9.9187564498,232.134871832,82.0860410015,9.57161358116,653.860265288,786.226676525,7.68484831237,695.072192508,476.389263139,8.87482407688,954.307874519,589.770341218,8.69250917298,400.336875069,86.3242608119,9.40493566481,1261.40319639,995.649423742,8.47797150855,759.45617463,149.907681221,9.4187075178,1099.24798424,846.442787282,9.64146836369,144.159557432,563.436622974,9.03825011624,368.562593554,642.141476854,10.8541094069,1171.09014284,943.806951923,7.51950095079,502.611350201,430.776620863,6.95517037172,1307.92378015,421.769328035,8.70494906564,977.80081984,890.869725848,8.83735974391,634.831503062,474.127580279,10.227216296,997.960265632,741.820186779,7.19522845713,31.5951795415,851.080460746,8.41496299241,1198.02455019,345.117269331,9.0912249916,778.722039676,628.465791089,10.5933350633,313.009394553,53.6425725109,7.44151610384,913.076208694,307.650628385,5.39072470967,724.64757146,843.869141529,7.97200353177,161.628218469,300.539960856,9.629467458,1088.15132444,390.880618064,9.66411738804,1316.78153101,1000.64686344,7.90539349689,941.423230188,698.605918126,9.71405000606,433.303391211,109.622529419,8.96120953848,80.1475376671,51.0453291003,7.56306413832,956.076621174,300.012238169,8.08971848532,436.770312799,19.9505202251,8.65263509125,94.9335988587,919.979686955,9.76776609873\n1328.12834026,422.370243329,7.18604035307,650.039895241,805.37435888,8.41168528035,921.165985062,641.29924484,8.91441788881,970.047197671,372.715526675,6.7157303007,1288.72948706,865.056414495,6.51961500743,1061.91635609,723.771725608,7.00889071155,953.780068371,377.873421567,9.48099730816,458.764990497,329.744211581,8.69895517551,645.609386247,1020.56093724,8.38855113631,1094.16891044,495.271607751,7.44817404763,736.127271616,569.603222494,7.2529385986,6.92629392053,197.589468703,7.26852830659,1311.09131047,470.452819961,6.82650071954,333.047940964,323.864898734,8.69271542279,1340.16033917,914.558727205,8.91051152434,201.985710319,12.0093472584,8.27579417293,1335.51891558,572.020169953,7.7701493785,742.087246986,100.119279061,5.71038456079,471.701538054,305.547789337,5.58289290778,1352.27988799,713.590453273,7.84359898613,1040.66837962,30.8286081167,9.9780205414,519.936524738,429.095634785,10.677760672,1315.12063953,439.300702698,6.07698658946,807.818909714,503.927621754,7.88059312323,1037.5710914,606.779181857,10.1512586042,1372.35969922,988.62841212,7.35258956443,711.762527834,468.964665671,5.89140868652,250.70513127,390.085271718,2.86816899971,658.299138838,577.292204248,9.36313371758,720.131662594,631.506184225,8.03771368638,386.643335137,44.6698927783,5.7318523774,471.350207447,713.967382171,7.98220079772,917.914121749,775.836878488,8.28083893142,12.1528859806,429.906546558,8.59680328645,141.625918572,1035.03595958,7.15664022136,703.026307518,488.32596113,7.86488871408,1323.63025925,207.053197273,7.21007519512,1033.78506044,245.822595315,6.87818704934,1301.33651626,771.939415602,5.78837586989,908.853786889,90.3424940229,9.87949790434,713.92142181,768.54122207,8.17068114189,885.554426198,971.203038131,3.13439903923,1089.00757558,655.338660195,9.37223680291,952.155702177,837.132469998,7.34080052484,159.153896778,856.719421761,7.69410266356,826.520535257,0.657174439387,9.90758554079,583.365139168,806.658062486,8.86975209403,489.522077938,734.73779403,8.22789752897,292.113974756,596.080367361,7.18861015527,128.689333321,989.857706421,7.8856818801,1235.56501409,915.189806742,9.03224940542,619.557755617,436.742944178,10.0694773512,118.557044653,353.10236877,5.98629698008,1126.52777903,57.7494995562,7.89046019133,805.492406358,148.589653077,8.25378026689,458.375264442,713.886298074,8.43033493133,283.8836321,417.537207128,8.16163629201,1097.51847783,450.421942567,10.7675439449,926.961892328,825.609656731,6.0627420412,264.935515736,829.407893267,9.68962284282,855.15052553,308.429364662,7.54391980584,644.567401207,1021.09866569,9.9625859694,401.308202232,267.778513634,3.31887155344,928.96696736,177.247134888,8.81821197276,865.055912291,194.383581775,8.25082796601,1316.69048633,272.263775629,10.889243083,516.189754911,30.2411815349,7.72981106489,917.482234996,840.94256872,7.67003663947,22.2551887591,459.494041364,8.57666581795,1095.7390794,242.383622669,7.22591718148,122.662600324,515.112026905,8.58658691398,723.549023419,412.82492374,9.02045461326,827.499208984,37.7042731056,6.3743585141,83.9152448648,637.296567099,7.05284238543,66.4701073151,123.143562358,10.0228990302,496.183847817,120.475650405,8.34838435897,413.296462962,36.3714887914,8.98046719481,1219.49517025,474.192746925,7.35019018862,884.95423032,1018.15217767,7.66670744253,356.940627979,69.837500162,8.29423695153,1245.78175823,153.151349246,8.86212897037,720.262790574,281.251553639,7.6968228594,1047.86537994,756.416370694,10.1666505178,699.958698243,231.195477278,8.72234268143,536.699845072,209.38961873,7.69836583321,719.573397176,118.52595812,8.5159169594,551.540575662,590.844660937,7.9514629519,381.02133196,796.368831953,8.03741823632,1051.46564829,572.855923603,6.41521543996,129.718179095,194.86249047,9.18471200506,236.178952301,84.2346267764,7.83500791978,158.846690281,704.037381841,8.62583269351,1087.29405091,198.322452381,7.85801575779,963.175200563,311.987098409,9.39761440856,362.985053066,956.688632123,8.12021471474,653.237822653,267.030395436,8.29461911516,878.165042455,878.49100333,8.34671662869,458.553325679,280.109687292,8.82025831663,58.949134365,560.765919168,7.77384367125\n16.4528802678,416.212926926,8.5610039779,154.191146929,826.825395645,9.02308327404,1031.88162704,345.557660225,7.70399615451,297.207034339,788.527384205,9.36700466348,790.164108897,501.524579063,7.15593098672,1118.51151244,483.727764507,9.08938326903,674.788330964,78.6399099022,7.37243285866,768.715943329,286.296138095,9.34317361359,298.898214056,524.632349046,7.98719617609,385.317448465,117.614751236,8.05773279858,704.954513888,773.88182228,10.5343838592,527.242662053,477.737445323,8.31750916926,1104.92027193,689.297008633,8.49970100206,652.751099438,617.00886861,8.01978780122,1134.22755206,618.109915484,6.18432571225,1130.73542281,667.068706891,8.7757361902,157.612158809,181.440209833,8.62107353442,755.196519588,387.975100812,8.94095040193,1024.83339552,24.4503276001,5.99740432838,1236.02299181,358.910588692,9.77949209116,16.4733196655,260.323194955,8.47017900401,1251.46975322,384.619454945,8.27756647958,1055.24918004,963.424367463,7.86488386814,639.564134987,824.3775653,8.97995570243,492.590869987,74.213634759,7.43727281088,684.106505083,934.892108061,7.68524124638,985.676025991,289.711398673,6.75644414608,530.124289767,1001.6546467,6.54711905144,1212.77912269,764.145875251,10.0415845926,622.937717954,57.9160347746,8.76404443187,0.748953425018,242.011237436,9.27319326223,716.147300322,919.653748744,4.07956594823,1206.95006323,891.896903875,9.65132855576,814.370742395,705.092288141,6.91707543756,95.6892225345,746.461887529,8.97952468434,60.956377091,40.2668247168,10.695500505,825.471430932,1032.7037428,9.23299700934,739.528373231,312.950274391,9.51753694767,98.1313321993,931.467171499,6.80229476219,1308.94204561,880.972911999,7.63684974407,861.667226944,23.4955665132,9.57861292924,195.093140314,901.325291478,10.5988554399,1062.92467198,57.828026919,7.60185393119,403.481498236,665.324312386,10.8373618133,494.789483889,203.785692913,9.27022891551,715.119166967,315.091454256,8.49420244061,623.210183354,631.489131286,8.3231375756,846.21048299,75.6862390543,9.28205042755,176.214726832,412.130034501,8.70654208523,1356.81890313,405.196855445,8.45785982417,913.6695812,595.156135699,9.35918224931,1284.63899632,90.8805915698,8.62931398707,343.585959447,738.841449555,9.82370998272,52.9617262433,600.442908121,10.2380153336,181.237414227,142.505464784,8.16464736959,927.435774879,209.72007423,9.16570746049,405.927998209,819.098096488,9.48097262132,611.122312333,290.549081422,10.6719471923,300.326991272,327.324991895,7.75886210194,449.418554487,240.235228058,10.4656627196,1205.14720188,372.876395985,9.45230586695\n1276.18910876,529.931946247,7.17088345732,294.313653667,565.714950121,8.71107399193,88.6192768384,281.302181677,8.47316486594,507.625570091,984.76464063,7.42462523852,171.542726784,825.05345991,6.96100744693,525.556038146,604.460072764,8.22423741845,470.708936561,221.098816162,8.11152300767,235.552449345,265.61488901,8.7886621212,1209.38396553,865.664585921,6.81560088522,697.214558489,13.0286867104,8.84015858805,1235.44073258,725.15719459,6.78087088012,533.438226918,47.1931518666,7.2007160119,1025.5292489,613.941399013,6.06364998444,240.318947972,878.927784995,7.4435729101,728.067581272,544.490081566,8.33683331947,879.348302167,913.761531631,8.91993890692,333.978495867,1004.11247437,8.27035003857,1002.85376345,575.224618611,7.27228086058,821.421307046,64.8697570654,9.03185543595,213.132626921,857.586063835,6.98868008801,890.595310541,345.869082424,7.40991518393,70.2351205553,37.0227831238,8.38243612668,368.776659838,923.779292874,6.25181353612,139.338918587,547.914672678,10.02931776,126.4042914,588.966871181,8.70794087192,138.759342306,694.543882315,7.23544546181,15.7521247279,741.613318442,7.55719977952,944.683053004,350.835060595,6.40179440449,1342.51622615,723.841958666,6.80593672075,393.953636922,366.850954832,9.5708861338,235.318838507,861.757055,7.24690515119,981.81304229,414.95601856,7.40008464213,1166.37575201,765.281203086,8.20586292286,648.476600034,834.690088249,6.90372223068,418.819906457,229.525546253,10.18480868,1194.31529388,614.27246383,7.40068517954,1170.13119596,199.044056093,8.01075423302,48.6313739743,501.935792034,5.40854224548,165.944984794,627.221793262,6.72626287161,715.585127968,243.416886858,9.20806128706,644.400477322,219.379454747,9.01757485276,1385.81363274,442.44393731,7.85943556034,456.110258163,912.861336705,9.06662637233,123.819147996,243.472732345,6.51813148529,352.106734326,10.9360498353,10.1429334306,3.04661825397,899.619860684,7.44319590726,329.129118528,154.412495309,8.61065239758,1372.85239443,580.132341503,7.95742370731,629.436364966,1022.91329202,8.93019405542,268.269091438,407.358876072,10.3526667261,906.440890101,946.788705092,8.03661916692,212.904685753,906.668466504,7.85530443078,600.478990221,371.097920381,6.94612714984,178.099245493,277.05692805,8.04728256363,213.01205108,51.7576478636,8.43732709328,954.53412593,908.674145552,8.48469625708,66.2876370866,343.057893092,6.73977632121,1330.82303937,733.172217922,6.34198638236,402.982348793,1031.95137421,7.44860382242,1161.02451144,757.702506481,7.01368770098,354.080566571,679.751306161,7.69899509042,1309.63734279,821.053639847,6.98933790586,17.0512252519,1034.23507486,8.39127363905,398.614827988,519.415474321,8.48579201581,464.0425063,814.286012651,7.02630201144,338.303577883,796.090009029,9.17225483724,1368.68325896,292.884328919,8.38861925692,375.409635558,755.304833595,5.993116801,719.77769721,685.144878859,8.09153306642,57.9435142687,218.844814249,7.76633567324,828.554597289,707.3994378,8.73829928474\n547.053352581,301.765355474,9.92812567681,143.659728766,499.382950144,7.62098541297,603.840555583,457.40576266,9.681332605,247.713834497,620.030651005,6.46817572372,71.058384099,734.095805638,9.62409777692,326.134604378,75.3620586597,8.61270141213,309.265896524,619.350946284,7.73186183991,820.323155427,160.508980451,6.12910001205,886.904737268,328.519981477,7.49421925476,204.397723868,794.599766934,10.3101466861,1324.30096775,467.25435706,7.90977053235,1001.02809285,975.396635353,6.61337914102,701.771606942,695.280702739,8.6143521106,52.9874338455,813.315457357,8.22823143155,625.216906838,987.739056673,7.0672159698,376.418475789,886.043212176,8.14884598228,418.717046837,75.3201630812,7.59883830956,483.534838289,563.138484507,10.3698691916,113.282344816,595.69228673,7.6204889758,746.557762581,864.097883234,7.52554401371,646.178543705,638.968373104,10.7737464607,566.886385545,526.164909864,8.03674877305,905.206579198,926.401197568,7.95105719133,1075.34986229,799.012348061,8.91348798302,1175.19315427,567.789870333,10.0030153067,1078.27426902,1018.48832249,8.17117286591,198.190681224,154.70252565,9.64398012244,1022.07812774,245.881561285,8.52781252544,1174.90513269,849.534608031,7.3781739381,19.7641918627,567.611012039,7.77456927315,101.517877768,949.248017516,9.23140939691,901.919800945,152.079738712,9.89881086285,157.994186368,590.133707277,7.56975027033,532.704519447,254.420175168,8.06785337543,1225.33129285,568.394714411,8.83287947788,659.528868383,500.645183068,7.69623722518,630.516634682,1013.83761264,8.69838384623,53.0461864382,813.722759283,7.79202369759,778.824835476,93.5475167832,7.00492763777,282.160829029,770.674108512,8.62589539852,11.8588003761,878.601569736,7.45806269675,313.934809401,386.276635884,9.1146396163,1288.22442612,944.096486493,7.87935004633,709.962586122,433.912902975,10.0668106536,1126.47580766,114.841073217,10.276428853,876.015451418,423.785708449,8.57337480912,1007.41328471,741.418120877,7.2441461752,1041.97846997,829.833427991,8.590216883,553.542949083,84.4365601473,8.45171268779,1319.5945948,722.904117622,8.06670568667,1089.34640481,691.973292908,9.11381031047,907.434014285,592.427972294,7.44430137682,1319.99221265,19.4343958129,7.13666294979,84.0800443757,405.343034182,7.61526544804,904.306922315,629.079515889,8.30877749739,220.638280539,591.060048614,6.27172556334,116.56696307,138.702870882,8.18075742378,130.09846719,938.980844361,7.81182630428,868.602733582,1006.34216788,9.48742304705,433.896317853,202.437719462,9.08510832843,800.432417292,153.997943485,8.97997894439,814.364528389,317.820379312,6.43285477816,1179.18946014,167.512359324,8.8127808444,1377.55582439,926.196979076,8.01928216745,1165.71154579,320.000574633,6.46842460156,546.050769877,34.6818878856,8.29369002566,1092.04834908,304.609060029,8.78190983818,110.467487762,230.706784017,8.46887500968,221.985735846,516.415463371,6.68164701039,1225.60615455,390.741148857,7.81141782703,485.199610489,225.017987236,7.61944315053,263.68832068,809.142339928,4.88640717104,1038.14248311,974.106981389,7.66482595796,1306.05836254,21.385708644,8.68982541981,873.445198335,305.843162889,10.2605928167,341.28352159,608.476661915,9.79985785985,1333.24925721,914.651193126,6.68199295326,1371.70111456,423.158073045,10.5309747933,452.252109918,201.773098138,6.5243352027,73.9361834501,309.813265666,7.85897046972,646.424291539,871.201227083,8.06596074442\n870.807099085,1001.61907216,9.01833409228,1318.0105556,703.617255359,7.84599481015,349.640713546,206.31628453,6.73662214298,1061.3580748,252.442349014,8.14614375936,259.237378049,704.514499102,8.34508670252,206.675555461,281.173788958,8.54364868074,822.426741477,946.341624477,7.69084302727,58.6922368013,656.555696258,8.19215542456,1110.64729252,127.016979574,7.08529469503,259.760957057,66.5455388296,8.10866443671,1381.27680814,712.79465835,7.91780104627,718.354319381,305.241324458,8.15860539806,222.084004908,335.27192615,6.23212035278,530.943496722,501.002689506,5.9952262825,8.84956946172,987.090473369,7.57616283472,746.020808443,425.955435575,8.41526006834,205.660154326,740.044721738,6.8419768521,337.854473498,554.704784165,7.89934632183,349.592745936,903.697873417,8.68294763403,98.564650957,969.326169853,10.2192044739,936.25769852,557.28442216,8.13953771928,175.830919025,880.029714994,8.58104558498,727.372386167,562.247070589,8.17329824032,1338.30239556,881.714267692,7.12859439474,323.731026687,190.831822834,6.13079091985,1315.79493815,435.867406681,6.58433646155,478.424475606,816.858394381,6.64164249414,937.425978506,579.378977803,7.24027033484,1294.04832795,231.992045398,7.60447554411,943.432834304,998.176380994,6.92811877567,1316.60307185,187.062302556,7.37930456014,1082.31879183,741.457511282,10.1392799744,1116.19940115,319.385842291,7.96800891886,1342.66752957,433.997745275,7.73538399493,1208.33324658,739.533078505,6.49139401944,1106.87045235,750.895645243,7.52260403154,410.954973741,504.869931259,7.83634331522,90.9666078464,392.054621263,7.76120598731,869.905237401,291.491162809,7.40391290219,1331.33137536,216.993188486,7.25877751046,676.383060699,869.75828564,9.506812959,1326.52186187,7.69264294993,6.89259998413,125.362020642,483.130978161,7.0924911606,64.5502299378,227.785314679,7.35480593277,1356.42928569,967.939504073,9.44959860906,150.454078365,807.590897999,8.2809842709,171.372897365,468.244525714,8.08686306125,844.750379545,477.417537553,10.0590751213,856.414705731,671.207117582,7.18452400587,4.18229294885,990.822501209,8.22121206104,681.452806958,487.636115312,7.52110920544,147.088766761,631.076927088,8.35839271001,1073.44209614,723.340001813,8.03293160834,1333.91449507,200.045651029,7.05838962865,542.720645854,540.398448597,8.18599963662,542.919870157,1002.1371422,9.56643081353,35.3582215805,435.798547621,8.44339944356,1293.61916352,139.193247554,7.7112624815,1318.19304789,573.078797893,8.24418510704,922.483790887,103.794510927,9.90276837152,488.105643007,78.8123954743,8.95214943508,785.580662546,727.942876295,8.8571140438,1008.15165546,541.072939499,5.12438179801,726.757935343,301.716840178,8.99609262652,710.418174377,857.13124243,7.55500261749,749.189756272,842.101501729,8.92543346896,887.297951124,130.82596303,7.8057110466,23.1710331523,1032.34038083,6.71003207032,127.934747953,912.603595085,5.88914004302,997.773237031,443.889243808,6.8824162581,149.768710465,7.88175292572,8.0311964517,566.126107116,300.323083175,5.48829765879,414.190732995,835.493600043,7.60936007889,1346.8904853,668.35514969,9.53504283351,580.912959599,338.062096055,8.32671820472,1355.16552507,373.275994397,8.39593481786,1290.16011945,995.081270231,8.16437525261,957.938954482,234.705521017,6.67382310132,425.881655057,312.943133113,7.72831432702,1207.00474674,917.763277376,6.62991069718,523.942372941,495.950070939,7.47570046664,143.401573831,216.404728948,8.32609457151,1028.51248116,457.652884968,7.78973332703,468.36726823,756.269508813,7.538870225,1200.75111387,333.193551555,7.8273674761,215.602602078,547.476921544,8.3861229312\n467.13878698,684.93610608,7.87789124203,839.45196974,722.549489981,6.50192537269,562.961732312,189.626014393,8.31160741836,698.696276657,424.274737187,7.08999291318,876.159545692,207.20188371,7.20165047008,898.835703751,552.907470224,7.69982601297,919.698970233,953.246436145,8.85113802907,1231.30813853,674.886858374,9.92440577751,1193.4783513,977.398112753,8.8802732902,1361.83794893,582.420980712,8.21686093227,632.344916885,884.535472722,7.78456939716,67.0065521657,264.187505793,8.95062299898,34.2012275101,634.867675218,4.39629816999,1039.78974385,864.566638624,7.24138869814,760.088091412,891.689549335,9.81611444791,245.396417293,323.713441227,8.82292887956,441.827941698,427.551741993,8.27986157491,118.192481569,721.257755654,9.07029141357,375.061867286,50.183949408,9.61773328615,1034.00390525,178.839786231,6.9839947063,166.609233446,955.347738613,8.21946052522,36.0834458927,702.483211918,5.94722304417,69.3305057978,354.810372984,9.80103650309,1274.57259764,280.031774926,7.72627792406,436.019505086,720.505679636,7.64676188768,447.319886047,970.021216074,8.56293743107,607.874289247,464.163119922,8.2599166711,372.059366712,825.659690326,6.71024616152,267.067042213,393.351031766,8.41938561289,609.062579451,462.83823578,7.71307228962,1352.0640854,288.816650367,8.37562653571,778.113131015,900.99915591,8.39517480515,1193.16296314,775.907799435,7.43158596336,1103.11199485,699.260323797,8.05546702159,890.971879543,737.360277589,5.38843619343,384.667415747,961.636663613,6.11771260685,1082.35984402,523.971813805,8.56428028304,499.604037678,225.694557935,7.47126104057,253.619418072,886.207309986,6.72677193357,1061.63205868,1034.75565968,7.78983633904,943.589325936,587.886749206,9.62491420744,1073.70658346,247.381350212,8.43725310466,541.555955021,321.043260856,8.71227497485,1189.90561939,940.158262394,8.41195419935,1311.76302406,916.421598843,8.86492229219,796.405002356,203.939356435,8.43849114768,174.102576914,706.233332369,6.44123464289,837.193157466,762.101606644,8.99893815338,1114.51232152,698.587126656,10.7093928911,714.600391906,999.04592523,8.14674262168,1162.23184282,130.578237183,8.35737733292,988.228760504,399.756091776,9.06675648642,261.407650668,16.286088947,9.42100379448,1205.49891092,40.1410265806,8.12792262466,779.080134454,1000.18272043,6.78405957378\n10.5418027322,331.957179494,6.06036752414,247.560789912,167.250401401,8.97774175964,0.4894051147,915.864540768,9.614540651,742.878696538,842.599855169,7.95204893609,71.7946845068,957.609586905,8.1312887477,153.28328066,321.915523027,8.74449081454,447.813067587,13.0183457421,3.07609381549,302.090557337,926.054862565,8.8162903788,630.811881618,322.279370344,9.03562693125,582.220226879,40.2989842176,8.52391750843,21.915771863,1035.52698008,7.86392141105,225.932916118,575.679445149,7.04314355333,388.038614627,491.378883093,5.77280915304,318.684951482,925.56797243,8.15276176718,485.367466153,630.916997691,7.76766354131,112.489082681,1026.65646966,7.37636003759,1294.27798125,640.980368615,8.3021104939,452.268975207,443.084420072,8.22486643191,377.935886243,296.364399679,7.61673930918,1110.06882054,168.10031853,9.3403347466,1356.1063675,637.248607233,9.69917130897,1013.7029257,198.177535233,8.98060197735,1197.71484942,221.248448748,8.34302108639,1288.34269603,856.927530116,8.80334518248,933.846172583,802.222821243,7.51131663436,1024.93355275,682.223458644,9.31616702353,1386.92810392,222.480634875,10.367536783,971.225163586,33.1075876942,7.70180137964,1059.5549022,1016.56530124,7.87009914898,425.248823617,149.619957814,7.99409765409,588.768319404,823.499253165,7.85549934257,233.952410554,564.4549927,6.82341459378,1059.60696408,210.681636624,9.80295342663,630.197381616,605.377708529,7.68885203158,720.35678478,604.099826007,7.64270813724,1158.57715402,971.946333754,8.87741572056,930.118757476,840.845891611,6.7818365687,200.919588563,818.100002086,10.5646883129,1187.52697511,403.363464427,5.42051051742,1018.99965509,81.1357048461,8.15660375079,802.585536097,318.383891958,9.11049278084,1182.24918409,487.593381761,8.38040215812,1015.50606274,861.299354726,7.19967715391,319.816140152,938.307343846,8.50549108155,389.189922698,570.489024878,6.86083055942,252.302835923,501.07737697,9.38285740466,1181.38312592,867.43890932,7.98977988583,1375.80188223,275.743139152,9.37534587986,315.292139935,16.1992023826,10.6062672275,883.616875458,201.90224042,7.78236036225,434.206116496,411.699998502,8.61494607454,902.399614683,576.675284005,9.20107363729,1085.48220707,206.464898278,7.81467624037\n1143.79416133,727.31691575,9.70810790848,816.709218422,675.129089542,7.47229480873,797.159604007,481.804142023,9.7012181923,920.806931829,513.55585227,8.90830455316,735.978129023,632.537396505,8.06194958804,1026.31417569,271.273830809,8.1865266856,1306.02525218,758.188560196,9.46580731583,1118.0848204,240.717893259,5.82463530852,1250.23275943,385.00379896,8.1749924979,443.335512507,651.103148045,6.72530242516,197.149063851,857.487708496,8.30039523453,617.85332695,574.928457244,8.20274087687,617.818254231,304.603815183,7.1522339799,711.827265294,733.905594775,7.80960644791,573.119990629,901.84295777,7.94522866607,1271.83363068,350.41791681,7.91115700327,41.0786101694,557.204801683,7.75454617034,1257.96378727,868.422376083,7.39291736887,291.135542161,699.758910791,7.8779580537,1082.62580356,521.939667833,9.4207296325,451.742738054,786.213285634,9.99481243877,966.84018815,241.344595109,8.60409692196,94.9266173911,356.856839397,8.71895510874,978.727476671,968.53021695,9.11694672989,38.5841121726,899.962500759,8.47684258201,392.569369256,241.912751464,7.73622362963,1180.34149955,290.810787219,8.13824637814,105.004156075,464.056386768,9.4927098925,475.210850675,934.979276797,9.31523872914,1138.4024854,55.1704058565,10.728348313,936.645122168,952.645347353,8.40548208699,831.818066645,807.201154339,8.44446130258,830.625834322,353.147623772,9.39248411387,708.107639496,116.410737632,7.69762167848,592.27074699,507.07881575,7.57358564821,775.49543802,87.9515803689,7.64327749766,1127.01578403,589.010533705,10.638573851,326.224683819,990.714025344,9.54431495895,702.771360758,1022.97179762,8.42868935143,534.473104967,49.9100146142,8.02550532801,520.844581011,287.37405645,8.7253743107,278.440695648,132.956198957,8.94346611104,690.681874018,138.016080863,10.4569470086,426.862947662,612.843004537,7.25507803131,1245.3874252,156.92218427,8.44397503808,91.1171434237,740.73979231,8.2091452444,1173.43044168,375.429837359,7.00641601764,1151.18907346,884.45242767,8.78211664663,104.152548648,427.356059176,9.08346167766,400.134372683,93.6673894006,4.63029941373,1191.47081021,655.048614225,8.00155243735,827.186999467,136.025007553,9.59753210622,1192.57440219,600.155652702,8.31596498619,219.002891215,743.240329315,7.73751173784,446.678350011,299.494910309,7.83432550775\n1088.04539409,810.055068879,9.94739040519,191.202132464,996.188483176,8.17309438875,1157.88235733,571.579428739,7.99311108962,691.112195519,974.058310083,10.7754227996,342.266003843,862.416051129,7.69485643784,1188.69819207,825.039482422,6.41029965494,611.878427225,798.209082987,9.55312856055,882.140392683,402.695918505,8.69340513037,1279.19413024,359.386873354,10.9104672279,583.688937684,508.559278166,10.0833672803,286.092617978,597.861820916,7.86097683677,989.535483005,831.848125755,8.96188255291,645.668298257,223.751119885,8.07815791704,1119.38777824,198.209532944,8.30743825114,1206.65698126,708.381976835,10.0838352426,950.559022902,59.7944036052,8.76477023806,1200.04357806,215.526347815,6.97257369269,768.998223126,600.087519693,6.5272658115,61.930194731,925.208421841,7.69219932816,930.729596232,630.636897401,10.1420872965,1377.19801107,930.583995038,7.55536801262,58.4469215993,498.388782367,5.29118636858,1174.29574376,613.455671034,10.6770370286,1035.80517352,511.064394132,10.162374296,859.445360904,868.977878315,7.86821015274,1117.47820027,927.403858631,7.99044503897,586.508779158,400.871189272,7.7446370803,1216.31581243,408.370867499,7.28128708791,598.159360157,205.912669853,7.78201692295,1125.42304836,777.993043453,9.44848201144,890.88426437,756.466824404,7.19126455908,993.683138807,352.499497569,8.24540719937,633.549269987,624.557356661,8.73745790119,839.531894832,467.014990358,7.69662942289,203.963114409,120.398982957,8.25282050458,565.940994701,945.107417844,9.08876831024,1375.41969754,154.809002745,9.99726748336,1054.44597048,290.432412298,6.47069062927,1295.44234627,534.707821164,8.46466228495,62.7036357442,644.337073348,8.51090199509,417.350851711,334.693579764,8.70434491223,1162.65523208,617.977689152,6.03075325675,756.287997437,58.5293690368,7.20729010973,813.761400164,753.879398039,7.21606415796,330.364344579,201.943066921,7.08751279616,807.20209552,228.777863902,8.16823520684,127.084555316,130.595463787,8.0324829657,38.1654080781,449.64599442,8.19329457224,9.04393573375,214.325849257,8.88781967248,745.69718323,166.224757807,7.97805002472,1071.00676074,293.530343373,10.3531098908,955.157037917,725.388857681,6.66015695842,537.263403445,6.31264731974,9.22398476165,154.653572617,132.218096776,6.49247572198,25.376351431,455.338126262,8.30929436068,943.31111369,238.63088253,9.07203873084,1129.48741126,141.182769171,8.98070499241,1046.61194396,497.676922281,8.34464288608,851.331868833,664.329105525,7.42649990517,211.457831751,664.833604277,9.93498538009,178.08167188,215.84610195,9.46439796479,1311.42495258,277.059930481,8.79976399046,359.803340545,1012.3440583,9.33901645051,886.60537924,951.790177007,9.52815934756,163.214283348,867.226497228,10.1454052666,575.767271208,673.205754659,9.36446226484\n84.9723474432,780.938590777,5.13422665928,1310.56335298,448.679010628,7.77136920972,1079.01842277,810.225551746,8.06587773632,251.948103513,930.385632167,9.22498290479,667.172988073,869.823804302,6.33754010299,849.800000686,41.3497340705,7.8211756624,904.532326445,723.688565295,7.52993241576,109.112133647,941.011005829,6.92686681266,1031.9855299,896.504904923,9.46421106088,111.600553572,941.58975817,5.56924559673,678.823002256,40.0362753402,7.00298187891,795.976602198,88.3305649762,8.51494426733,447.208783439,6.64303809142,3.09120103775,762.509667375,467.230021629,5.72438944041,1211.9180479,803.709683617,7.58174023899,129.220120308,779.127421067,8.63214888201,971.481883609,743.275330894,6.64463505475,1284.35493788,341.071747915,8.83819090425,201.443831013,800.47746281,6.60678572243,198.722810675,623.52842306,7.01986323249,913.112528451,1020.66191269,5.74552991428,785.159169729,1023.13970044,6.96646867486,203.090322079,332.292406536,8.18353439966,1183.57392414,1011.36727726,7.67666402291,92.8557275451,310.837450266,7.59629619227,187.220772886,83.7978720426,7.6509689306,1265.7311169,693.05256054,7.5778624652,625.623833294,28.276931888,6.78248529421,628.660192796,560.099092991,7.38826754684,1374.93954381,369.272652325,6.98399908507,721.069127168,949.033156242,10.6120342303,835.549419619,182.279991443,7.47289256684,146.171470896,355.278988526,7.90616624915,190.883962355,486.341105642,7.83866395003,665.896467144,259.073765346,7.63623578608,137.901386121,16.7352421813,7.97153234635,62.8320109559,629.876369329,8.94760534293,560.254319451,470.488623652,6.39364531276,1132.76104553,33.9453773889,7.21604576629,335.273477693,102.839177435,7.18571314975,768.338335282,734.322167196,7.45132754452,544.923932103,757.402143524,7.15750969836,1339.93694015,189.142074241,6.77167134147,275.849032395,733.133558393,6.74309991447,1125.23336435,558.186989706,9.12876442135,329.829824335,422.490842789,8.58335811054,1266.12513774,234.787329112,8.72613973776,1335.86064169,22.7905722419,8.86848008783,468.357128553,421.849906192,8.73591501177,36.7804113599,472.143672738,8.81185514099,1106.11260104,399.369419046,6.27782372893,1013.39844772,310.245101483,10.4298754244,271.967449249,694.437654673,7.08045300831,596.105596866,246.494288992,7.54787041185,411.805749527,785.202236429,8.19213246192,316.237641851,219.840204122,7.86916836154,6.77232570469,30.2176710553,7.84021736553,489.36825954,670.765690058,7.9722196004,206.835889112,784.411046464,4.97069960908,467.000534677,805.470703766,7.72293024458,1083.55372121,130.798182999,7.44405066178,1072.65469049,793.811430725,5.26913829027,16.284313353,1010.56658904,8.27456223803,665.785999653,693.96476032,9.00477770601,910.281827947,426.310405916,9.15760565613,1086.70648366,316.183758596,8.96390102873\n946.491109522,692.057185211,7.3378634836,699.464958875,363.839948139,8.36957628272,1248.37629967,376.605112267,7.36857984047,953.4476179,665.73159948,9.1611326405,780.569228605,427.166201826,9.13048308731,165.38416974,935.524196642,9.48092006262,1034.13093966,389.539107824,7.94696139022,742.023260611,140.593339379,8.08659048263,291.696383476,330.232782882,8.20762730921,1106.68365313,92.7467727505,8.22420158929,1115.95808907,378.910256203,8.99899575033,244.098208569,257.220026849,8.37213880941,766.909970704,571.008588025,7.44969029073,317.506317211,749.383598471,10.7425340367,650.270047616,975.321100347,6.91190205657,313.091150374,625.990804479,9.54813250393,1159.56585993,137.067723058,9.17785313208,389.782025975,507.512636517,9.84702948025,853.118226174,123.155487232,8.12854850148,76.0866044002,140.3273236,8.25689617807,355.269928508,768.581199238,9.06751330214,678.572087493,278.905928796,8.58024284486,201.937489301,772.785085349,8.6535294869,490.506210775,708.90305129,10.4633226757,205.001138322,573.887952203,8.49811696985,476.541385098,451.177094353,8.20752565538,10.1158369043,59.0003130256,7.33281477247,1259.9761676,545.311571349,10.8565646721,120.673181412,323.670335176,5.85600655739,879.623164199,574.692471943,7.97029840204,591.813039451,857.127564635,8.91527546902,619.002094847,852.414039358,9.63977033864,311.406887011,526.717849774,7.4424312662,687.090412372,25.2561733809,6.95633987632,1251.01364233,742.336285141,7.02086938694,664.225325398,642.991781124,8.85552286264,807.007525434,810.852422281,9.53226035444,624.839120429,315.368672327,7.74701454177,518.516568565,298.057528395,7.97220279049,1340.63431971,488.277791399,8.08101666508,970.924181858,305.115864163,8.18473371674,523.581710978,17.9598613113,8.51114789633,280.362534412,137.153033061,8.57921750677,1362.12214531,1036.82613055,6.7885826064,761.665066509,338.164370296,7.24404692503,589.07999566,947.068289721,7.56990943541,301.767398238,919.205542117,8.08773860424,1361.18772817,217.876822479,8.32757205668,530.291558426,838.757092915,5.54801444257,790.531608319,71.4323695482,8.33761465373,1117.24518198,786.179102595,7.98478822528,874.982454182,412.195074679,10.350357388,279.853378756,27.4424494255,10.3283406838,811.14620869,695.06188597,7.59732032394,6.22577160134,218.386942683,10.1795666886,86.9877051386,601.42758496,6.89204860777,633.291638563,675.32646786,8.38824226453,144.24450226,281.323321478,6.65384331916,39.8248277999,538.504289912,8.73775919657,97.6304606476,409.700641989,7.88930413215,35.1502175978,763.733904427,7.85889943739,1137.64743045,714.275603519,9.89537745391,968.441506562,389.03448332,8.04162637356,891.869317876,998.006292619,9.74359140077,156.344540389,528.731541599,9.03964690544,103.490600215,877.167877878,7.78331354957,313.109670592,23.5464305642,7.40337408988,565.713485161,588.665961679,7.59366818937,1369.83600079,658.332812429,7.42349776444,1384.84192072,740.313908768,7.92692174478,602.07126026,203.624259786,7.50963063118,99.6254023986,997.923974349,8.63970255257,1062.38109023,570.089204799,9.14620070787,721.032785964,54.7348439505,8.75768735093,1193.81258609,222.349971002,4.67675022712,317.139689791,384.029095279,8.4855152266,909.695719667,874.372138204,8.35190319326,1192.39750508,341.969343858,7.65017855405,755.241127283,774.105042897,9.85937404435,871.446936445,946.678736039,9.35211832969,579.050059972,992.932525221,8.25034337857\n561.965148658,417.211356458,8.00974981684,422.452864201,92.4107591248,7.939938645,375.962662077,15.2118339234,8.58364927087,511.423645482,816.657021283,7.02448472056,320.717552078,273.562718689,9.23432043736,297.883361669,804.889114446,10.8918271918,1184.28947741,1000.36582171,9.07405412672,1249.62263447,751.034582985,9.30631685167,596.780502985,998.592087311,8.28170188585,728.046857629,968.838740112,6.43382157863,381.732745936,420.374402187,7.88543152551,1143.00971286,163.438718736,7.63498049769,33.8429645882,456.15650198,9.11732139823,104.024395068,447.847664483,9.16355270257,442.261099845,113.022880962,5.96245885593,276.101896587,367.467915328,8.10376982514,154.342462677,795.393065439,7.12572652188,642.292850205,126.100032391,8.00276250677,727.617880441,860.674323488,7.74435829708,683.908740946,471.653673696,8.57548650078,615.027980857,716.253736652,9.55627114095,929.88345954,954.508103694,8.02214217042,766.167082788,981.255135696,6.36453698292,1283.15320055,327.233424373,9.00809506445,306.924065873,671.804884828,7.30992153588,30.884988384,677.664768127,6.33792628795,994.247681006,99.2961326149,7.80187189862,1266.41307894,100.714525776,8.26898643105,149.603071875,727.708936806,2.98397556214,1372.46873185,414.201973772,8.70879283929,796.154958505,129.414294497,8.11603439385,231.607211408,649.354718651,7.762809151,1230.96857339,734.780462674,6.93773978701,1003.43465457,274.76937165,5.85186911384,92.7796244002,636.781855893,6.36574488052,1018.19738569,867.331123202,8.52261009073,796.825952886,429.560924807,7.82267530059,886.776579553,1007.96373068,10.0153352393,721.857624652,924.869215447,6.96218402648,852.962030836,31.9188763633,6.47597341396,500.701916488,813.799363311,8.62700452742,1119.04451294,599.752258599,7.77829307476,157.788765408,706.297813577,3.483028031,1200.36110144,81.5798245455,7.81750229213,953.80320214,23.2347932399,5.84752404838,1136.67091279,637.8315678,8.3814215246,974.98055044,466.721025011,8.43226048326,62.8468284838,839.486323753,7.29874048746,709.873077927,35.8840173489,8.0429072526,1063.92133499,744.1007791,8.02508919039,472.704455718,716.730871931,10.7765470886,273.057600224,485.217212553,8.71644033336,490.510384553,87.7539149766,7.89497869849,944.636749059,981.456868607,8.59341687384,46.2295623789,109.232555028,5.91782650421,1206.25366054,68.1653752912,8.35485178204,1108.31072149,1025.32591634,7.07068604215,90.5205249498,643.56655323,9.54365353911,128.016819216,452.431461242,7.30894613628,1130.04710394,641.06865828,9.60789545404,549.104989307,657.153050981,7.38933883928,282.320692484,424.88168629,6.07156003307,1081.96346022,766.606018108,7.8922987022,428.117140933,981.223239252,7.81335241853,634.217408458,372.683572733,8.28694066814,504.664435483,276.229340814,9.01788446172,1044.83229424,466.629340426,7.91661932281,866.777466478,362.258284311,8.19853527942,278.730657278,94.4395237106,9.154452754,370.601235825,252.095962435,9.09548450214,1214.41902067,116.305784588,7.57851447558,309.841947079,27.4159837692,8.6238072604,1112.68415616,246.204872433,6.32103659958,236.998489263,761.978528237,9.19962048742,667.571710556,990.955123714,7.05343641935,889.577051702,166.365327065,6.40008796268,508.109896463,684.294816507,6.38207848534,366.141602248,611.293632184,8.46782925337,835.803041024,650.200130721,7.33422616159,452.573050531,433.439588252,7.28188807668,772.526425016,1.5349416147,6.43988066881,1169.65155768,679.681623908,9.3268499214,517.76809185,289.242637714,9.95541165951,546.251144908,417.345491964,7.68710919509,523.104758029,338.603511259,6.07626847381,378.224737537,830.567967008,8.68931550416,285.192201301,405.15567019,8.30924051446,473.221175063,288.534306593,5.89772146774\n1348.35163131,515.635225685,7.75601435751,180.626464231,514.032191178,7.44461890311,325.031592541,760.563409148,8.18311198214,916.671809025,274.307792992,8.47327853046,450.336559881,246.816697634,7.87587920073,846.057888857,640.201268932,8.13768857629,1067.07212195,754.512568979,5.63368469273,78.2529620131,289.819238902,6.82083150753,677.860229791,908.466332145,7.76094783538,872.141816554,195.321383114,6.65791689601,1015.96638451,708.752459412,6.96476418555,275.831099296,317.965724589,10.9272916366,965.005113943,178.557594696,8.30372934749,702.641494991,570.6362567,9.14577278628,133.632598684,307.85892465,6.81497908878,1123.12283407,421.746990006,10.0241425571,717.591191263,836.652860712,9.00862982633,402.520590694,641.118679804,8.20989212932,444.429353101,13.2111375613,7.51183653211,1083.39967259,249.858106951,9.3670537053,272.698441114,491.626774583,10.3520589624,6.67125276073,322.650791843,10.0958007154,796.305775616,162.131668003,8.33578431507,323.804291245,77.3045238195,7.57100600999,309.977033587,128.779054684,9.67201735296,109.308803419,887.106182137,2.3299082517,196.800632945,71.1662306006,8.79753160315,112.622966465,106.800583643,8.38738570863,330.989858429,29.827670071,8.36221484159,1157.05314477,689.511578786,8.64360497922,305.408086763,864.029635172,8.82550792756,1074.87472337,414.249928026,8.39669512022,7.47502484021,753.531593742,6.8144919429,1226.87076883,317.10853951,9.77968627239,284.099612375,844.124747173,7.88783868394,844.481519617,594.379957285,10.072125378,1385.14043436,555.963950709,9.12198223509,548.561302522,668.384958492,5.02753728107,818.602158767,294.391846659,7.17808829673,694.689273808,39.0091402482,6.84997770831,1379.66881964,978.140018417,8.61916113259,499.27335297,844.846701322,8.61050972749,775.531190858,218.69772751,8.62688058681,941.098422265,1005.91923943,9.21000080362,266.741070847,268.767351448,8.16993970114,735.009264519,142.001981263,7.81516474145,344.752170472,660.661392388,8.81088839766,436.83089932,997.703881905,8.90747533457,1238.05559788,826.119544148,6.33098295278,637.176313323,275.87504774,9.52019602203,1044.79584308,83.9964285542,7.94386898414,892.06021104,926.088409187,8.62486628315,782.975737931,454.749100224,9.41308943856,1220.72295721,580.341565297,7.92609413351,1322.84941271,138.389589425,7.15608924631,150.682142174,327.792173203,9.10969361501,636.281825959,102.810634608,8.26001511481,417.396979463,1032.26801534,8.03737236298,633.431073561,451.970217737,8.89056265478,506.489044592,699.881821064,7.29897518696,424.234120783,1005.70348918,8.38808847157,69.3224173378,542.446201111,9.21005267911,1252.52126238,860.906849244,9.0239923744,536.681964327,51.6414065098,8.68902707099,922.754170831,417.270320048,10.5760292566,1094.16448066,580.729085779,7.34433286042,1278.99814495,775.843376979,8.05989815524,825.049901154,282.055125823,6.89603716729,561.310869345,441.824850795,8.39847479223,1001.90361868,567.186066838,9.1767791157,242.455026609,606.793080304,7.69239905418,531.419332099,161.18436643,6.96827500212\n102.316921875,137.819585135,7.70221945007,428.072319674,829.366762158,8.30834335726,797.21654206,341.077726015,8.97758103698,285.230727107,771.367501311,8.72443054429,992.191447357,344.634728446,9.13789030618,455.192891947,1011.70104789,6.94690036628,124.91800426,150.561093299,7.62298808825,448.122703616,167.114142635,8.47299713214,48.8815893596,404.969030426,8.54974898996,637.921427953,877.887313946,8.56063854881,788.041343828,527.504799046,9.04977854971,571.289889772,882.884359681,7.97449605099,1044.34406201,662.220761284,8.28467294529,1092.88559987,297.204436415,5.64793205486,741.492326087,286.48333109,8.30607680791,476.833910716,700.558106368,4.89282893022,1282.78825411,518.042772181,8.9179380595,401.52205921,411.790062378,9.71568011855,715.185069806,428.850891521,5.19557555725,638.684774112,630.974246615,8.27237247568,75.1199585174,576.732185359,7.7243756474,1349.22436926,797.591023625,8.09536764079,354.936703008,455.887090804,7.82767127218,1248.54014159,184.841965434,6.86933903986,1242.25843485,707.912880518,8.41287380288,435.220073673,685.89784156,9.35012480576,1105.90292623,495.469272092,8.17552459367,549.17889865,739.204340427,8.97793057553,271.268729342,560.769192289,7.70388959657,318.639417735,396.479158149,8.83392709325,614.04733778,77.856159717,8.64884717096,266.356072388,989.806329986,6.61988239859,962.448625158,446.424827782,5.26343864408,828.995401163,65.4137301308,7.22643548331,268.278848438,359.838581029,6.49100612508,687.810331627,539.326628702,7.63555422319,1250.82820204,282.558308676,8.96839237549,859.000757149,965.990796985,10.5148780418,905.700824485,127.936398392,8.33783095323,145.135390235,820.757104776,7.29989836771,864.538082106,1035.66059234,9.03205160348,1129.35258036,172.313896369,9.73257743346,1037.79883936,641.757196697,8.79496598059,669.783082277,109.414904911,9.41835815922,1083.98125672,18.4871323416,9.07802445992,918.214662981,861.884916625,7.92094692475,800.746294484,657.062088868,7.5615148395,1099.8485384,335.839281774,8.0623807316,597.628855534,313.795982608,9.0022076887,49.5743202498,159.581094974,9.61120441289,407.888258101,97.4846990146,9.19910031764,900.012985206,805.820581626,10.411045006,411.722063896,1033.72306242,7.46378698705,479.519580503,386.96275662,9.02877798924,231.891988267,362.112060972,8.63854526265,1374.73920316,554.266103067,9.14732475525,66.0110088893,17.1343383676,6.6452624428,1343.37506389,608.739420727,9.12291656061,652.048902813,424.89842358,8.45270089359,539.454354888,596.429435238,7.34850985895,528.197442802,310.886256641,10.2040723247,300.190672254,119.727123955,3.50190411682,640.368018579,631.265518795,9.07627501459,1226.88252685,906.531889884,8.54338052066,1374.62760311,402.224588522,6.85453853871,395.650250629,62.5028845827,8.12091770521\n844.219338684,40.5065332654,7.10227359099,417.017310191,894.135339501,9.18892378647,298.875799115,696.743687756,7.39933871829,780.928412448,836.081678002,7.92113174842,227.760595665,107.292175834,9.27348213215,1364.92570684,1019.69714323,8.71327285837,869.593334777,893.300578382,6.44301149949,1355.63016739,831.64597124,8.40427363602,870.476188287,767.480441146,7.91963256063,13.9819705855,94.7161198978,9.06258324575,561.3392239,306.989474099,9.11622780818,921.444061598,635.730187504,9.4877589935,526.630665958,739.48809974,7.34633830616,1383.51572362,326.453978385,10.061621641,591.837408743,964.989664328,7.45319411708,39.8875345666,844.26043771,9.13374748229,9.76112080794,1022.94491501,10.1452497941,652.516457077,775.496361175,8.62045409683,773.856494303,19.1199671947,6.8642110051,1268.84829414,157.65841005,10.0747426927,13.2740921788,331.171755915,10.2854458782,1107.25645217,632.330653116,8.69015317517,1387.34219713,812.585739318,9.15510980122,396.673760403,17.7604626582,8.15781964915,836.101258913,642.492085206,6.30659114912,369.388814677,216.210326372,5.24561638496,452.273776481,427.333055104,7.29659546667,857.153510083,853.41910402,10.3589472817,479.467259496,758.867885206,9.70605602344,1065.18138128,1025.49703633,8.56244324433,616.333205501,285.8133302,7.68532406219,624.757228093,266.63549198,6.93946766616,423.271062482,796.005016672,8.7273503428,451.277237438,944.861798909,8.62932927345,1342.31912233,429.01549706,8.40822995603,316.270611866,413.738519589,8.52374820602,871.671632369,768.174009222,10.8930922466,140.257495923,724.606098921,8.80748898971,490.469756519,428.427534069,4.5913497229,281.336733282,171.238649551,7.80146050742,859.723571526,632.62732511,8.33753359514,1053.9635351,82.1576782916,9.20588274262,992.774778738,807.900993795,7.33185034436,351.882301552,421.533644494,5.8376551057,1300.17790426,579.535071803,5.54404205408,1170.96946862,664.812108279,8.15119909694,111.256216627,230.875451926,7.37731396743,1003.80679665,832.245465283,8.95241003511,905.044478553,813.923522709,6.93146199376,1365.98165439,145.114831356,10.3656991774,773.989115601,157.597083124,9.22142113144,25.7451528707,673.509962465,9.63732062304,559.445766158,10.1108461913,10.4076675586,1363.95824454,351.967037769,10.3739727385,1105.31252968,168.721827437,8.21115278128,108.030905528,979.512657114,9.88463560218,1228.19626976,344.350674359,8.63402895905,851.577002108,664.799763111,9.67833305559,654.607903565,612.239998192,8.31227319575,440.746793628,230.941055714,8.66509197572,180.828648346,871.350159289,8.26364831945,250.553770923,561.138343621,9.75842769737,583.821600166,639.506097416,9.6907805806,729.183122734,219.688076676,8.13274832516,986.113439155,337.034311434,7.23712021586,181.592108292,171.837268447,8.45333503433,718.39416345,953.623587823,8.04992354656\n725.379250111,543.876204968,10.9062113481,731.031447194,194.307791911,8.39110847527,904.716810338,10.3766109191,9.51689793927,1370.31527614,1005.96755165,8.79724152049,627.645688024,228.473445825,9.51505866541,1204.30236647,655.108813701,9.96723388618,833.332147157,441.418654733,8.60669067004,94.9833467416,717.451484135,8.57699278151,417.239992033,266.159647011,8.38938555775,779.230256148,174.373988857,8.26376201754,973.756812178,955.333169537,9.79606550249,600.01582263,322.976244638,9.50070722996,484.175277545,965.213782852,9.90694214983,689.652828452,995.116387698,10.0044337926,645.784203991,455.303279529,7.13735627689,1028.63503021,30.5673182652,6.22062654437,1265.61620451,940.658307312,6.780008875,287.502104548,582.14695481,10.7100772179,1191.32619465,804.173947651,8.29892904063,1002.64992649,276.53846295,7.83415355266,148.896527559,453.083600968,9.01194848567,410.964123899,988.458712009,8.89334414682,558.724479903,94.4746050509,6.04258975341,1183.47296682,980.679565502,5.69805606221,161.861034575,407.951164028,8.96690789197,721.332252568,788.766912636,8.40512171449,1207.80090751,68.8045292259,9.44822959014,896.141074924,606.536278495,9.4121077363,1349.92792784,621.869339482,10.8846336975,1168.06861317,42.7143401275,8.31593515441,378.406809812,132.56816106,9.15639712088,767.594511617,463.925436821,6.48290997557,11.2132324947,645.769067337,7.42767222396,1170.24872057,377.826944614,6.5712242777,721.416369866,251.536021534,10.7016692248,204.198619607,817.891123908,5.95781145924,969.966981455,481.774346255,9.52509422349,1227.47075287,479.739425198,7.65649845573,984.306383134,764.397400471,10.7359162881,302.692506527,277.7619727,8.61517143495,1011.91712469,566.377993396,8.34508867182,763.503124544,685.612245214,10.0550087446,1139.87709855,885.694573288,8.39071081951,806.005127539,977.544924833,7.2244238849,351.840207953,848.047678269,8.27859115869,0.549735191721,253.407288742,9.53114877199,1372.09133227,951.12498286,6.44528900614,883.556530975,751.185749566,8.14540860766,1247.71487037,469.438974682,8.55148610651,600.839655395,1025.46153706,9.85277324859,373.809444543,645.70716341,9.78129573934,347.899147402,679.074582492,6.6425445683,280.44315379,552.123926646,5.87153553333,1083.35897357,212.521012367,9.96448587644,898.169060616,643.188916025,9.22813969445,859.01810205,300.436484,9.88903724475,1346.97452974,695.276583551,8.75190978474,572.13498972,658.011544282,7.92332843091,291.434923952,93.1030446952,8.74853411126,521.995019389,673.877445248,9.71694076879,1080.42477243,243.844345572,8.03255703197,759.533159855,795.545854931,8.51459375901,1022.4442808,729.278773621,10.0387871908,635.171449551,415.443864702,8.27596100449\n1139.4674751,588.689718703,9.33418396894,93.4955435358,1028.75514794,7.11157072508,272.172619704,178.921811956,9.86762838323,614.407660923,845.007214151,9.60486787469,1.93842312164,813.949598146,9.27612707993,997.966756839,49.6670352755,9.76813706494,913.043359527,281.056655791,8.3064452327,1048.91520843,56.8564916048,8.79922260453,51.6898761207,3.60382254962,6.60157130849,682.659508302,618.023361871,9.40210492441,1257.90255034,417.789030938,8.53868719106,844.424968234,265.166917234,8.39978700316,1364.15047025,893.53266579,9.06181139077,826.635233904,601.559460556,9.61188942502,1132.31755896,763.413799269,9.51780060186,610.158248124,544.466741662,9.2317073961,1187.38591196,909.743879493,8.78893322846,98.9407315404,79.122646274,9.1485838422,421.469474784,973.466848515,8.83637015071,688.206275329,636.927361748,8.67994231387,1378.52866092,62.4408936739,8.22830743299,58.2544629545,211.829898143,9.83525954022,1072.41682777,472.475501071,7.61165617703,296.304460324,646.730840713,10.0469418916,885.846005448,391.526408887,6.75014777197,617.322738198,420.003728373,7.47889162476,697.987673938,745.697686763,9.62201698372,214.744041532,328.765827612,9.08437853227,1226.30795006,782.267160871,8.64362574921,1003.97207463,1019.14066925,9.52830374299,770.840244003,348.416460178,7.93559191814,764.059265711,924.91959921,8.22004006748,690.431178812,75.7458553446,8.81860003772,1390.18938117,905.796054331,5.94714320518,35.0387305488,749.897969882,9.71797274938,575.631058178,1015.142934,9.77568718697,49.0599119246,438.036778059,8.32770313227,982.923253604,97.1643585551,8.78817055907,818.309040141,702.072892903,6.88925858551,387.882455298,701.128280518,8.59379818433,1313.28032052,463.301455321,9.99959332996,297.224231236,400.765102702,10.5134621709,392.805335653,414.113571432,8.44225405198,561.070779903,1004.73399754,7.9485437793,1261.59200626,527.075053711,6.70361376053,1085.24121056,105.589840921,6.72105439828,136.873427073,388.640977021,8.70032530967,756.408450511,92.9666165303,8.55203712643,776.933971284,361.825022045,8.94615443081,620.905911637,277.636227581,7.26537431132,325.184733051,68.3097703489,8.68804667715,296.10516866,736.855373288,8.25270824898,421.562427549,265.518276868,9.47879732486,762.777410437,170.683374451,9.0114016004,365.191047147,706.446685365,8.31079470338,1016.55218093,1000.14500753,4.49751828531,781.429512657,341.357429546,10.2812477944,441.037308839,745.329649796,8.89289215503,855.879238029,745.064623407,9.0842489603,511.015863706,150.690017305,8.8444979056,437.123197445,55.0665116601,10.0006528641,1294.223718,421.7517717,8.48586474265,14.2405872071,1016.32608055,9.81526021427,1279.38720606,990.133409971,10.617734047,518.982119996,746.221136397,8.37878995527,180.013417049,981.222412465,10.4411942062\n435.605810069,817.914388485,6.72480340369,539.968455528,232.127341301,7.72737436702,1248.8080721,1012.27666081,8.93838898873,1252.24298369,113.512707664,8.48181594272,293.967036399,233.169202112,8.40249830257,531.213594658,961.691782584,4.17968064772,108.309611944,1009.28509356,10.2657801797,753.161422293,367.535900157,9.55591996754,305.753830846,723.269306708,9.64553043155,955.569009707,632.886026542,8.38040969415,1004.91518791,766.327492199,9.41388100716,724.178773315,685.754202886,7.10936513621,950.395662875,173.758651605,6.72512160046,1153.22663928,142.242187787,10.7468604942,504.979691661,881.275384287,8.9913014124,216.154609947,355.638643338,9.63909595246,156.887745926,148.494822286,9.12067465138,463.480088324,682.010695085,6.55010120812,791.732375431,528.182230734,7.9222233597,786.318159194,990.036528223,9.0864150697,568.203949624,832.974908256,7.26607369889,1012.31237423,710.430115418,7.07419550329,1090.06092874,482.552898811,8.18788888733,372.228525041,380.801549929,7.85159235653,1346.97975568,522.394988859,8.00927576302,960.518358657,915.411735089,9.31017520804,1312.58648154,67.9862402046,7.97238217198,1304.07405662,642.98492386,9.60703286873,1233.18090649,421.025666293,9.22844813211,1088.52604697,481.566120294,8.6892203086,643.952321488,181.933315809,9.71694150311,601.489080053,48.986683177,10.3713007955,147.566145258,424.405570006,7.00029373505,360.214886356,659.526472573,7.41529203347,648.593588537,548.754254148,8.78657639249,239.075129287,998.016943179,7.73864216178,911.77886128,491.236801293,8.08486956507,313.396423566,532.236235765,8.88274770304,1163.96023594,258.34216292,8.71514629873,891.732470209,860.038762402,7.78441391028,359.935884853,101.276766754,7.50014176401,1171.11267309,31.720281764,7.98607388676,613.93748533,538.612223459,8.18300366044,455.575931642,334.294036005,7.50254101726,941.641925132,112.270979461,8.71886251322,170.70177906,372.764133438,6.05154879325,1187.90321741,749.950399642,7.92212280734,503.123300822,680.512847103,7.19739557467,62.4943986679,476.862752917,7.74960608599,386.821549533,511.088886815,6.96957038133,135.676384544,688.517015223,9.48265399176,1306.36058785,239.51263154,8.6363343895,78.2108962495,871.136335968,8.60210380691,806.837970455,227.972886637,7.07452162617,442.639801569,308.625033864,10.342879203,804.033641679,995.051625912,9.16049233857,660.908126341,671.494666764,9.75738584862,151.272878656,60.7261851664,9.32591942252,791.083907437,179.629329007,9.11759190297,1351.40557372,338.535611895,7.66251650534,1035.89239791,238.011169089,8.98365935894,660.939483484,950.043757271,8.03062275539,47.2834224939,312.975552804,9.94501412518,387.158409147,941.730717293,7.5466545457,758.212841963,422.37425695,8.56468230443,336.274040457,646.409446426,7.04289689226,895.169934276,906.886411581,8.97853545213,656.893126402,168.515772985,7.23823929152,665.967189534,883.980895171,7.3819097775,847.338332691,498.941200984,7.83598538733,1072.44877897,485.576231716,8.23702046346,1277.21352385,609.415953669,9.06541730883,49.5159652845,232.8332768,9.24145411765,977.909256315,450.44055604,7.19527016813,388.475645409,436.573220448,8.9945220257,288.431021994,767.920632694,8.68541023489,939.51742103,168.126790444,8.42712612074,1016.21554327,985.776302728,9.66405956632\n1102.14263692,426.848594868,6.00584039245,740.422315974,548.960130848,8.03370748532,1082.02497208,336.794735611,9.8399462668,1268.2881426,990.222960487,10.1654692696,819.604397072,939.455221175,8.01346149916,1376.65993312,509.90487313,9.85174031831,619.020989755,455.981553179,6.56193979663,472.525352921,520.432525245,9.58502878225,228.588859451,456.022624694,8.29847369115,700.376892604,340.038408465,6.40481729384,1173.47932335,763.372496705,7.81075796371,162.780214586,397.841093117,10.6624861731,539.301083691,994.692387465,8.01719070972,1211.09002709,707.535554062,8.24745028465,17.6892567894,136.323715812,7.96780506101,1238.36929873,959.100783227,7.0609921552,18.0442028961,486.324231379,7.42329332642,706.538559287,759.23019976,7.68499664374,662.92081397,255.510106432,7.93152308422,445.885767227,464.221388437,5.74126871105,796.605615802,616.163172639,8.42346478154,526.201611909,740.412181728,7.45388894317,968.982694511,179.640819057,7.66273443131,62.3275309842,460.254624322,10.6067918773,129.826514584,878.066465412,6.17246009839,1155.4863396,215.389901261,6.41027885718,161.000559475,764.288479481,8.47979892206,317.010944855,264.902396909,6.81058437854,456.402430786,679.295442381,8.53783708458,586.620213542,935.543135259,7.9125530401,1288.4373238,151.439647842,8.04269323542,588.701676575,882.382123533,6.83502655771,639.245818232,48.1161331647,7.33684382942,1319.07282331,766.876786437,7.88560020971,296.498837065,714.499267005,8.62072564067,582.972228506,19.9866012575,7.95896393548,752.963520343,324.48595086,7.78372409754,364.975065567,750.673358715,8.67498731681,554.720188186,109.26354921,7.24723640378,892.123646269,118.65777469,8.61689866741,965.660313702,601.864451543,7.98350502483,283.733207555,473.884795666,6.94043817754,969.359289068,638.965692579,8.08125192782,544.524911242,203.092202798,9.00002677468,835.31322265,783.695993069,8.10438513649,285.170094471,245.466384001,9.79120941515,313.726481826,770.171468805,9.02626388865,1122.25125575,719.559066964,10.3412153885,150.533281387,251.038193255,8.90028510251,410.652533376,528.708041029,8.83353276281\n226.82970501,483.714614307,8.38740006344,1044.91158726,647.903296439,10.5363252361,676.768907353,65.0456484968,10.5375578034,725.051294228,485.071017435,7.83798023926,873.468549989,651.546214494,9.04817429544,147.742487748,370.900768049,8.09005830211,459.602158154,748.087492014,10.5153656778,643.813778245,927.090798276,7.63963744635,204.481844711,225.046136821,8.09342985124,1055.73374466,99.4189773431,9.71942070779,1047.96719262,669.949601777,9.77959178106,1381.80952202,512.985091382,8.43942762743,248.603540387,98.1111451147,8.53443502971,100.782469113,151.324124077,7.2938054687,897.734900365,731.226990797,7.85262151285,1114.61757371,244.512642771,5.94983250318,858.057127111,987.562058372,7.79759284748,32.9968787822,981.65127105,7.63244380993,552.548080506,313.827499791,7.76753241975,690.174468101,160.797050725,9.14627147494,271.662296391,970.149667221,9.7543264443,1233.8683146,975.107509123,8.36921549914,230.086049409,579.344781999,8.31410110692,990.993852662,237.621557556,8.28676064411,1272.13667757,311.616857164,7.65602077113,125.672059461,255.775147477,6.79522557047,688.196761402,951.562963837,8.55420483469,787.512765076,351.020502824,7.07733027362,639.749033574,702.682031727,8.65881047445,398.043135009,77.2104933826,10.2115526298,358.887421649,478.768708886,8.53706306362,1213.82429076,818.964104325,10.6344694041,45.8796682809,373.280893535,10.1503216658,448.543528521,1016.10518625,8.86292675398,42.2420944093,650.03075394,7.38347568195,629.540556598,489.507089712,6.15854644536,722.970388451,653.712781284,8.63981964616,1250.77095679,133.178461785,8.34105536126,1279.38505872,492.169103291,5.68203085771,526.10609632,212.000794465,6.52771245158,782.140672769,427.909436399,5.8608905875,522.799365398,262.176435143,7.49385607474,715.326606767,355.944842262,8.72515394874,1273.39422333,212.642111118,10.3787766233,1174.63331845,950.013521629,8.34987216827,1027.7195347,596.369727845,6.2706859137,693.833637019,901.275149262,9.03855882266,1391.02203097,700.997950976,9.06330674656,87.2057861426,283.958582774,6.80687087708,547.801846537,979.333879516,9.67280303641,1388.64859183,253.298114307,9.61518844811,997.693195318,884.55526184,8.95098501629,641.912665834,396.437076666,7.68545361451,1270.93796456,310.745739494,7.00858003914,948.785854673,80.6676009665,9.0900364708,642.232427851,436.230808269,8.1061195184,1262.17327962,718.076760076,9.57742488525,1086.13988684,304.104034327,10.1291006282,936.719710896,768.812811967,8.86603669751,1229.02608605,645.575894064,9.47352024326,639.788565333,794.025409213,8.1227826453\n256.972207277,342.783752342,5.99119007162,760.382109268,798.223564136,7.41550814928,1332.37358089,847.987047409,5.92763711901,657.269447677,416.790501087,8.69310624548,564.741254041,215.817645978,7.34513493253,749.988147216,570.452993506,9.03501119558,415.064109044,432.383440496,8.09762880116,1059.53085502,759.027529464,7.89239264412,1292.32084695,229.922557447,9.1223023258,984.787633617,451.511000633,6.68481361042,736.15500701,364.998364061,9.33454793994,1366.66413448,716.473511555,8.36376294987,239.481599777,693.714798545,8.35141268023,686.393629363,642.978402867,9.43263356608,579.458715173,1005.65946398,7.97226822537,1002.15935589,328.799058001,7.20891640627,720.6288943,633.320890803,6.7484109959,808.032302226,57.5614068664,8.0615262368,1063.45434645,107.205505787,8.86685509085,430.102684079,270.24098144,8.14123805978,157.113462686,757.378536322,5.51642334639,536.092857146,634.87089059,8.77023819476,116.354012293,768.180532647,8.54399846311,664.654833974,277.178280937,8.68616000678,1349.47504273,577.308268434,8.39179175296,833.353807722,65.5835003011,7.37915206451,341.908677857,275.350630384,8.94566818059,261.297382643,365.419752799,6.82266633076,9.88546753202,339.194540552,8.01692103634,189.19680825,783.685611441,8.0318224319,1043.50617278,203.982015873,9.20601224883,1304.35397226,933.512197111,10.3235964023,388.857470171,842.05741721,10.5790732585,1105.86021596,652.732309818,8.4818379645,876.536354645,700.613399366,10.7734322349,1259.99300809,972.375435227,8.39536532933,1127.0050611,900.527077144,9.10558695517,994.017272311,845.730463104,8.23701277619,135.62630608,224.96339532,6.42976259404,268.50388726,867.898837913,8.40904184946,908.14006229,257.371331371,8.40403393594,144.823764718,1013.85709892,6.87456194297,1050.45121943,1016.30079382,6.20524126507,1390.31239372,16.0396971024,10.6814036441,1278.89805958,994.701285934,9.40546683802,709.079081302,153.570988959,7.87758621305,691.768073647,821.324024738,7.67159912187,466.253023067,681.324665659,6.25541629417,339.575759368,737.489873437,6.83591596082,432.134428533,189.192127697,9.49409073318,763.23814525,989.245326592,9.75108911368,1080.3617074,385.365100857,7.17424226491,205.449454281,191.13825974,9.80496687061,794.709465026,169.233176599,8.55928631626,1215.11785403,203.380540796,8.43787809313,848.814063895,898.594425265,9.65768936709,1093.12849443,615.86576554,7.2926002449,270.493380216,800.456876099,8.13365738818,838.757148589,156.416661909,7.04527027633,14.4307103858,257.03424852,8.57806480841,541.752119829,1.98151545338,6.18298858946,519.366409183,345.911342444,10.3552537608,1333.28601533,569.453856831,7.15961172982,512.95594933,172.972192505,7.1510532696,1308.60168161,381.334133666,9.77560909646,124.128763487,428.437333555,8.59101230727,616.502835639,295.340028162,8.03264506174,123.953983299,436.091232056,6.70992212689,769.58722782,529.962677563,8.13952349074,377.249013103,1008.87180523,9.17832191384,32.0192631378,934.098716667,8.14814150299,1162.84844998,275.030216326,6.13956342701\n636.151437349,885.93526786,9.58041619422,750.684104241,770.565295437,8.57467235752,53.9974222368,937.813540092,9.08036269116,16.6580405377,251.439710543,5.87835756843,949.35701682,94.9233551542,8.21469185125,601.606155553,842.84144975,7.79736760784,241.510998147,791.357343515,7.43430027007,676.771312569,373.394747739,7.82779452358,1104.75792453,214.849572372,8.08826979761,373.578883665,816.68340938,6.90846499964,1214.17913126,899.265224544,7.33790666443,213.499705996,223.472866976,9.51992228298,395.525710556,127.580258368,7.8357047559,925.1210285,438.772877781,8.71774255321,461.947462606,211.685882792,5.9418101088,307.245151502,83.115817474,7.94478125526,1277.11998897,247.57431356,6.80047194207,834.110466491,254.489416031,10.4165387477,420.609732772,557.161877498,9.56711253245,416.105611501,158.604084652,7.05730552494,450.946011993,959.612387528,8.85425587011,928.415515929,418.755030711,8.85392771147,306.742191138,269.150274127,10.134374374,737.010162032,3.91550706774,8.82032928705,346.62827043,285.050101906,6.01621832363,123.105385502,994.311830841,8.36768788484,231.387069199,550.06437091,8.93128875887,1023.52958888,619.119693799,9.23140492812,911.049552234,521.800790528,7.26957139956,1042.32421996,527.99195867,8.59573376172,379.150067618,1025.49246108,6.34989263231,1375.1976974,862.907191384,8.55330235518,1149.6327156,640.352482156,7.60923525572,611.869856485,592.229896655,7.69121346071,1018.20557501,157.035408524,6.42782252834,499.370824792,770.40104322,7.81156971043,1242.44429576,511.291222844,9.59132830267,1157.50772095,729.24500472,8.61959458093,123.025976682,850.661833802,9.87332557289,129.55564093,664.19187212,7.4158241813,1136.1528876,541.63443634,7.23142220482,561.30283752,582.108391804,8.84120217483,201.334991615,312.501780429,9.18010542857,1136.14787724,1007.34384926,8.70468867969,1183.91563105,739.227148272,6.96011121022,477.965912223,817.22954061,8.17743937011,1220.31900648,864.974133503,6.61305935176,337.343634012,1006.71658455,8.3320822704,1082.83371435,1039.61553724,10.8914842224,736.122827671,558.440923122,8.77684331973,740.064010982,367.991701539,10.1817811547,958.227951238,893.050508754,10.145167257,1286.61201984,512.737585459,8.2620936148,723.533134365,127.045151453,6.66590404884,527.903184991,761.335431376,7.95302133588,383.205714192,463.973398229,7.23205057965,366.002680349,440.335843436,7.24710901523,867.694372599,611.700613854,6.3802321774,190.123457124,423.009184188,8.45676787073,157.620432946,350.913544455,10.0049822007,86.514549008,646.033595678,8.42716201696,476.159286014,24.9896213852,9.09839151346,1145.99188503,234.275291001,8.97706926523,843.902315333,211.511490867,7.84034318829,571.872675543,304.602431297,8.60858868862,813.585626041,888.025976707,9.62456976086,49.1922025606,545.531690806,8.58384264906,246.045804516,803.51448601,7.70138727858,301.401247053,757.197263966,8.7815247899,936.788462063,176.930430608,9.28117946108,1382.55331206,928.37541201,8.48446707966,273.481983606,965.692826268,6.11990196004\n408.494361933,7.06200801037,8.49419751578,1302.99722136,360.971355737,8.85654046429,384.541596405,735.211155065,6.77409483588,784.376345005,44.1893207675,8.76141991753,1039.22658088,573.767077504,7.92696654212,659.793057498,456.773807525,7.50884325615,379.695269409,246.638405283,6.50767975702,820.865499527,646.673354465,7.44613105043,1270.46864378,78.8987585179,9.30280836363,569.268790652,668.967975232,10.6265974153,391.748052693,969.086603128,9.10977009422,1169.59728867,724.216658219,9.54004057074,1191.05606872,178.73619815,7.56322180019,682.679535458,888.846209755,6.80037836103,95.7219119654,185.391714751,9.03284439304,957.585055299,977.773917453,8.71571803229,296.204683534,404.460529511,6.82607984012,584.021725115,928.399314811,9.05350434219,7.45458772007,479.496150377,6.59996838838,788.870520783,646.006650012,8.1349783254,630.036268216,253.87069293,8.06608587442,603.161308378,698.750448611,6.80566243303,774.55879521,250.839560581,7.89266546399,839.214068383,602.485828188,6.89960631113,699.632067264,277.122836776,8.02798464151,198.182321585,617.612367127,10.0426538551,498.978701979,570.878635973,10.0877251498,1369.45489962,136.085210872,8.1634201123,149.446529028,809.327121174,6.08889234358,963.187606973,951.530489723,8.41243401463,330.731597666,689.637418407,9.03020520147,878.711195766,563.310746679,8.48852992959,1076.64535292,358.075993952,8.29695207091,778.670416645,797.182019412,7.33718836554,1389.18848212,751.23942364,8.68563140397,1301.35569924,549.531733836,7.01106852251,986.758167821,362.998107866,7.05272100049,55.5784473198,968.476077012,7.04138011677,838.095892698,278.895050969,8.0673664012,354.765045589,953.376374136,9.28386648414,202.324584337,64.1650917093,8.96697413231,1133.58329075,680.658463266,8.27675340049,459.445171408,169.543740201,9.63217252257,160.218067683,604.859922111,6.87281674601,823.15230375,645.45194213,10.8712723646,1324.58565525,912.843711703,8.88483139867,1173.93028548,876.247443825,7.17959204148,915.958382121,251.53225939,9.34823239936,704.469580126,722.759574582,7.14863871486,1141.08908376,188.437607481,8.31398560003,342.342188503,320.875666915,6.80418890616,1159.20175178,604.251014607,7.53485727601,492.164821323,355.743823648,8.38695519958,1386.57763963,422.093968885,9.9003519864,169.842706952,782.220747328,8.2635595262,490.849409335,746.932532042,8.29275571027,198.174084789,1020.30283829,7.70702104932,1239.5509986,79.1830759812,7.91140005543,465.547963032,455.527974785,8.04430526462\n"
  },
  {
    "path": "tests/science_cam_may8_0.05sec_gain40/result.csv",
    "content": "5120,6667,6238,7790,6285,5832,8565,8452,5804,6579,7399,6650,6632,6580,8066,6473,7044,7729,8081,6904,6548,5668,6542,7246,6035,5497,6306,7970,7253,6681,7138,-1,6889,5708,7002,8740,5324,8025,6697,6911,6149,6250,7494,6359,6045,6474,5683,7785,7221,6270,7786,6129,7247,6287,8170,6986,6496,6923,7145,8118,8235,6725,6583,7498,7401,8109,7745,7171,-1,8242,5876,5251,7441,7666,7713,7419,6611,5214,6080,7820,6932,8357,8483,7528,6465,6311,8604,8182,5984,7763,5347,7563,7257\n105597,-1,106981,106909,105614,106516,106526,105170,106839,105695,106725,106841,106104,106243,105360,106697,106471,106282,105326,105371,106075,105747,105847,106053,106283,106902,106157,106232,105551,106222,105784,105744,106760,105200,106361,105224,105365,106460,106005,106221,106513,105937,105743,106519,106666,107062,107028,105902,-1,106397,105295,105533,105216,106402,105827,105431,105793,105785,106060,106337,105852,106895\n3973,3925,4564,4176,2988,4557,4352,3019,4623,3738,4642,3518,4312,3665,4500,4203,4336,3777,4677,3055,4582,4464,3793,3535,3416,3399,3722,4007,3302,4529,4453,4286,3350,3407,4979,3481,4169,4297,3540,3410,3947,-1,4123,4465,3591,4186,3265,3863,3992,4825,3758,3763,3439,3889,3278,4504,-1,4056,3582,5064,3655,3652,2970\n67361,64598,68815,66416,70594,68431,67351,71855,69850,64080,65992,65174,65470,66911,72786,67478,70637,67837,66121,65832,-1,64921,68472,69794,69380,69002,66111,65600,70874,72036,70001,-1,71919,67405,66607,69457,71197,69576,68980,73415,68122,69090,63998,70901,70656,72670,69575,65890,70388,69204,70460,70679,70654,71601,68685,69313,71055,65468,67606,66196,69778,73231,65073,71944,73223,67731,70974,65865,70128,68972,70042,66069,70271,67986,68954,65053,70524,72344,72005,67257,70942,66852,71031,71870,68238,67670,66806,69027,67698\n115672,114524,115646,114312,114351,114457,113987,114024,114872,114155,113869,115075,115159,114846,114526,115188,114025,113630,114467,114863,114321,114492,115360,114689,113946,114807,113582,114289,115787,114279,115140,114944,115079,115326,115638,114972,113893,-1,114844,114835,115212,114742,115389,-1,114008,114247,114806,113542,115741,114688,114632,114350,114293,114448,115189,113646,115583,114479,114809,115422,115453,114774,114543,115057,115410,115077\n83329,82411,82933,83549,83367,82240,83700,83830,84115,82779,83152,83975,83643,83815,82263,83274,82873,82043,83043,82385,83433,84340,82608,83172,82359,83604,83753,82485,83158,82987,83347,83568,83412,83315,83814,82510,83449,-1,83903,83007,82686,83639,83690,83397,82780,83096,82662,84291,83208,82765,83063,82354,83631,83383,82713,83134,84138,82940,82928,82346,82859,83049,83375,82634,83095\n36582,37616,37594,36257,38030,37514,37938,37739,38010,37659,36653,38224,37684,36963,37838,37373,37336,37653,37668,37128,36926,36792,37675,36269,37029,37998,37303,37666,36608,37322,36559,38250,36304,37297,36800,37241,38455,37790,37329,37678,37004,37325,37915,37623,38448,37562,37450,38011,38624,37572,37223,36857,37803,37710,37557,37658,37098,37939,37841,37752,37664,36787,37996,36657,37711,37462,37757,36409,37087,37819,37829,36877,37202,37184,36515,37430,36938,36776,37925,37697,38414,36728,38192,38071,37992,37227,37446,38074,36940,36959,37809,37345,37742,37437,38129,37317,37618,37982,36414,37157,36457,38165,37250,38369,36778,37123,37060,36363,36774,37348,38552,37057,37889\n2181,1938,2244,2677,1435,2264,2030,2166,1535,2781,1943,2391,2831,1602,1847,2195,2356,2025,2659,2521,1566,2594,2918,2759,2046,1869,2080,2373,2688,2736,1894,2510,2067,1770,2052,2500,2369,3000,1738,2398,1628,1771,2358,2340,1645,2765,2083,1767,2165,2039,2609,2156,2548\n18041,17283,16417,16637,15773,17760,18656,15176,16990,16952,17269,17632,17393,16992,15758,17054,18536,17433,18043,17968,18303,17501,16722,-1,16756,16333,16013,18069,15801,17669,16284,17117,16163,18659,15389,16942,17092,16526,15434,18055,16026,15715,15108,17652,18378,18400,16105,16443,18456,18202,15695,15346,18592,16959,15631,15867,15780,17691,17152,18360,15212,16085,16082,17089,17494,15464,17725,16542,18445\n115623,114686,115207,-1,116040,116281,115502,115834,115548,115766,115432,115725,115991,116054,114734,116175,115606,114922,114749,115558,115904,115011,114183,115370,114282,115835,115250,115214,115118,115185,114631,115512,116307,115829,115100,114953,115071,115915,114759,114596,115032,115585,115856,115249,115549,115196,114442,115371,115419,114881,116282,115255,115417,115268,114683,115239,115962,114955,116527,115407,115345,116000,-1,115546,116264,114877\n86322,86512,85752,86030,86744,87657,87555,86432,86887,86915,87022,86751,87220,87466,85881,86580,86911,87368,86948,88072,87364,86005,86011,85524,85482,85985,85569,87361,86035,87116,86342,86672,87030,87233,86650,87391,86522,87223,86967,85531,86360,86892,87162,86138,85797,87038,85961,87810,86761,85775,85811,86276,85803,86629,86149,85770,87173,87102,87839,86527,86953,85816,85999,-1,86883,85329,87144,87456,87613,87498,87438,87700,87966,86487,87733,86624,86244,86408,87381,87345,86619,86404,87395,86617,86504,86317,86468,87508,86716,86285,86508,86376,87196,86140,86665,85739\n34721,34397,34246,35394,34701,33700,34821,35815,35393,33161,33502,35090,35067,35040,34065,34201,35645,35376,33912,34802,33498,34801,33055,36015,34638,35879,35902,34134,33642,34118,34109,35001,34069,36190,34137,34052,36167,33697,35360,33803,35319,34339,34495,33375,34028,35532,35279,33683,33256,33487,35396,33922,34919,33776,34966,33641,34659,33549,33505,35860,34840,35627,33909,35013,35054,34470,33046,33879,33744,35288,34053,34756,35966,33185,35698,35147,34889,35450,33725,35114,34202,35739,35483,33984,34415,34346,36247,34436,33078,35202,35287,34081\n100776,100924,100446,100383,99995,100511,99659,101130,101181,100192,100648,100892,101769,100781,100451,99873,101223,100687,101700,100898,100406,99866,100658,100226,100174,100849,101320,100639,100709,100690,100115,101730,101410,100429,100365,100598,101195,100274,100929,100506,101482,101298,99807,100208,99589,99670,99742,101483,101733,100056,100344,99689,100353,100269,100551,101305,101487,101047,99921,100010,100212,101698,100899,100309,99607,100204,101389,101554,101710,99857,101315,-1,101589,100498,101502,99847,101056,99602,101694,99699,100256,100011,100222,101055\n96607,97084,99341,97615,97352,97761,99626,98608,96731,96794,96140,97953,96413,97250,97581,97421,99803,98484,98751,98102,96505,97771,97252,96732,96781,97032,98174,98536,96253,97535,95635,97803,95932,98163,96231,95463,98983,96806,97819,98240,97646,97881,96701,97362,97518,98653,97253,97128,97857,98231,98031,95866,97746,98170,97441,95994,96677,98574,97816,97548,96955,97694,96831,96884,97705,98364,98453,96498,97993,99453,96935,98994,97574,98457,96239,97606,97656,97784,96575,99076,98211,96211,95592,98795,98629,95258\n22260,24542,20297,19350,15931,20143,20144,16815,16910,14515,21136,16140,18157,14112,19393,19188,21945,22518,16850,20110,16899,21101,17319,20049,15803,20612,20610,20382,24718,16190,15824,19445,18970,18783,21087,17624,16821,16827,22295,-1,18515,14900,16768,20195,22101,24084,18949,14926,17321,18493,24187,20442,19250,18847,16290,17242,14521,22404,19437,17184,15470,23435,18179,19433,19561,17808,15311,17270,21519,21124\n31351,32355,31480,32398,32630,32345,32965,32046,31707,-1,31628,31904,32682,31342,32928,32188,32384,31994,32027,32282,32957,32584,32138,32596,31476,31921,32644,32633,31874,32286,32191,33184,32133,32901,32915,31760,32617,32214,32042,33328,33379,31614,33225,33237,32116,31942,33520,32416,32058,33106,32221,32312,32851,32936,32146,31344,31517,33123,32698,31930,32624,31992,32572,32745,32300,32998,32608,32594,32024,31733,32977,32137,33210,32586,31629\n78370,78319,79219,79177,78759,79193,79225,79782,79889,79510,77956,78583,78159,79811,79985,80077,78994,79445,77965,79141,78187,80078,79999,78470,79483,-1,79413,78554,79772,79930,78278,78572,78206,78497,79305,78760,78950,79291,78777,79441,79683,79327,79154,79365,80118,80189,79331,80092,78464,79639,78954,78259,78338,80026,79686,79115,79726,78709\n59238,59980,60039,59121,59986,60091,60202,59723,59942,60893,61000,59525,60347,59571,-1,60957,60038,60354,58831,60368,60939,58939,60633,59130,59501,60282,60423,58818,59049,59391,60046,60005,60055,60087,60631,60033,60535,59753,59567,59333,60706,59876,60404,59911,59554,60193,60145,61099,60834,59152,60326,59550,60200,59754,60531,59418,60290,58701\n117262,287,117924,117911,82,117541,117753,117652,118203,72,117410,117579,118171,524,177,118247,117351,117949,117563,117756,118020,95,179,117745,117843,117789,117743,117411,117950,117719,117917,117528,117978,118115,117722,117948,33,117696,117595,266,117964,117212,117994,117747,80,117713,117988,118205,117533,117318,117476,117980,117314,116975,117093,117977,118208\n4159,4103,5055,3568,3555,3312,4901,4517,3214,4670,3884,4469,4373,3805,-1,5005,4975,3256,5034,3438,4196,4416,4378,4053,3301,4047,4803,3396,4108,3102,3092,4132,3569,3620,4612,5148,4110,4191,5212,3191,3978,4908,4779,4005,3875,4402,3062,5175,3360,4531,4304,4889,3141,4452,4838,4246,4197,3617,3623,-1,4327\n44070,43076,43827,42668,45059,45044,44204,43364,43173,44459,43703,44982,44546,43504,43926,43853,43997,44276,43040,43641,43691,43771,44334,42752,43301,44268,44383,44281,42955,44290,44785,43541,44919,43922,43687,44887,44164,43606,43825,42873,42842,43404,44929,43041,42757,44479,42975,43248,43533,43153,43365,44660,44824,44007,44291,44048,-1,43409,42735,43003,44086,43334,44417,43256,42825,43434,44343,44874,44566,43444,44431,43215,43597,44051,44697,43782,43149,43002\n4878,5382,4806,3753,5073,4094,5092,3960,4778,4278,5103,5218,4906,4485,4503,5048,4526,4065,5406,4655,4763,5216,4323,4728,4601,4832,4804,4113,4480,4219,4687,5562,3968,4413,4841,4708,3969,4978,4858,3701,5209,4399,3963,3799,4559,4570,4765,4431,4120,5593,5231,4445,5089,4752,4461,3938,4686,4891\n73113,73699,73077,73596,73917,72105,73364,73999,73248,72244,71945,72236,73635,73002,73712,73960,72680,71976,72970,73931,72701,73467,72376,71991,73220,73006,72461,73461,72552,73162,72753,73726,72062,72805,72326,71712,71995,-1,73890,72953,73745,73887,73968,72920,73499,72200,72830,72791,73224,71787,-1,71851,73388,71813,71751,72144\n15858,16390,16000,15621,15465,16360,15263,15626,15430,16086,16226,-1,16021,15977,15383,16528,16032,15264,16389,15711,16214,15619,15427,16262,15461,16045,16515,15436,15728,16421,16569,15830,15158,15599,16076,15501,15603,15302,16058,16240,15800,15872,16023,15624,15457,15732,15284,15956,-1,16698,15948,15743,15914,15779,15524,16651,15583,16334,16311,16472,15523,15174,16066\n51188,51019,50566,50489,49772,50987,49950,50525,49855,50697,49404,50510,50247,49784,50718,-1,50168,50948,49769,49488,50311,51198,49599,50393,49428,49418,50721,50406,49665,49513,51259,49916,51333,51530,51330,50956,50529,51112,50234,50631,51227,51228,49384,49911,49670,50708,50163,50492,49797,51175,49943,50497,51238,50356,49793,50723,50442,49891,51375,50349,50888,51129,51349,50592,51474,49645,49845\n35718,37081,35055,36565,35810,36791,36976,36206,35300,35251,35583,35060,36821,35543,37134,35547,36687,35529,35737,36260,35173,35556,35107,35634,36150,36969,35343,35749,36447,36004,35259,36162,35299,35231,37104,36394,35600,35669,36563,35843,-1,37088,35340,35306,36055,36880,37349,36080,36541,37220,35881,37142,36137,35705,36131,36388,36235,36572,35629,35602,35271,35792,36526,36071,36613,35896,35649\n79917,79724,79368,79782,79914,79115,80111,80078,81119,80420,79483,79177,80325,79811,79441,80879,80641,79154,79726,80175,80917,80500,79985,79219,78709,80117,79930,79889,79772,79225,80118,78994,79413,80077,79445,79683,78760,80435,80646,80601,80092,80026,79999,79305,79193,80681,80318,80665,79327,80189,79533,80967,79894,78787,79365,-1,79686,78671,80985,80370,79639,80471,79846,80476,80523\n108435,104458,103628,104953,104105,100966,105694,109039,103602,105618,103219,106339,-1,107459,101750,106244,104736,104982,103342,103908,104968,102787,104149,-1,101863,102270,107828,107236,108676,104213,104414,103754,106048,104609,104957,106583,105526,100504,101634,101161,106024,104667,104147,100646,106748,101824,100670,109596,107700,106503,101732,103170,105557,104964\n104878,106011,105661,105756,105349,105218,106375,104622,105767,104618,105152,104947,105059,106031,105899,105469,105155,105588,104629,105993,105819,106161,104626,105549,105066,105203,106095,105046,106015,104872,105212,104813,104930,104893,104911,105409,106325,105800,104616,105797,106236,105040,105534,105750,120250,105729,104740,105563,105359,105926,-1,105302,105985\n114188,114412,116963,116387,113696,115769,115620,114270,116056,113647,114560,115295,115192,116263,116407,116444,115510,114646,116284,114039,115181,116270,113287,114716,115890,115580,114217,113460,115380,116084,114333,115848,114142,113563,114019,114198,114571,116640,113885,112839,114810,115754,114613,113890,114150,114899,114790,114072,115612,114851,115744,115930,113735,113330,115087,115035,114901,114996,115073,115506,115895,113863,113900,114583,114982,115233,115636,-1,114091,113351,114658,114151,114728,115462,116734,115157,114086,115429,114216,116390,116099,114961,114731\n69085,70284,70446,69862,70048,70449,70900,69624,69573,71224,69662,69616,70254,69518,69805,70844,70585,-1,71381,71172,70633,71104,70066,70625,69824,71056,69620,69704,69690,71165,70198,71235,71109,-1,70710,70139,70841,70617,70420,70428,71611,71618,69919,70999,71491,70848,70447,69641,70910,69040,71432,70881,70435,69951,70151,69121,70347,71499,69732,69405,71008,69527,69521,70393\n77886,78153,78344,77260,77245,76814,78363,76870,77402,77299,76791,78016,76696,78012,77791,77284,77501,78281,77681,76764,78537,77222,77252,78048,78050,78248,76773,78768,77551,77091,78222,77598,-1,78741,78077,77207,77655,78276,78235,78448,77508,-1,77950,78028,77153,77767,76938,78102,77053,76844,78214,77180,77046,78334,76802,77583,77488,78657,77624\n67741,68806,68936,68452,-1,69052,68626,69289,68592,69282,68810,69572,69044,69414,69409,69152,68469,68440,-1,68789,68899,69651,67931,68639,69242,67991,69352,68380,68458,69328,69402,68192,68949,69747,68636,68755,69531,68221,68348,68997,68739,68738,68050,68661,68716,68524,68595,68297,68794,69058\n113757,115265,115235,115010,115497,113886,115178,113929,114934,113539,114453,115049,115593,114615,114047,115676,114206,114022,115168,114656,114177,113878,114973,114748,114360,113590,115102,115176,115843,-1,115055,114601,-1,115442,114319,115794,114139,114765,113615,114434,114896,114842,114176,115535,115897,114634,115571,115314,115318,115659,115113,114464,114746,114455,114331,115532,114487,114466,115519,115501,113935,115231,114191,115150,113838,114400,114318,113959,115846,114935,114447,114635,114115,115300,113817,114867\n110662,110933,110356,109603,110275,109972,109249,109153,110431,111346,111457,110309,111071,110362,110964,110807,110310,110056,109767,110704,110988,108476,109124,109358,111633,110441,110925,110836,110025,109701,109669,111795,109252,108887,108607,109225,108879,110414,109894,109841,111543,109759,110154,110266,111317,110142,111088,110314,109679,110090,111854,110020,109599,110713,109857,109363,111972,110923,110893,110500,109492,109572,110991,110967,110647,111094,110327,109867,109606,110525,109425,109130,111243,111060,110459,109426,109617,109200,110648,111179,108921,112026,110021,110934,109497,111362,110417,110824,109876,108689,110497,108889,110026,109065,109926,109373,111423,110561,109096,108794,108977,109424,109713,110294,110230,110504,109213\n19907,20218,20179,19707,21119,20407,20747,-1,20628,20658,20233,19590,20603,20787,20742,21050,21264,20598,20932,19778,20469,20676,20307,20158,21172,19933,20344,20263,20401,20882,20429,20471,19814,20666,20029,20358,20360,20503,20723,19996,19598,20409,19511,20675,20793,20265,20431,20797,20671,20874,20809,20476,19871,20137,19849,21076,20240,20602,20271\n46833,45837,47950,45754,46734,46396,47042,46931,47199,47873,46617,47190,46305,46521,46363,47451,46657,46263,46494,46081,45626,45958,47020,46430,45903,46438,45995,47530,47872,46102,47564,45945,45868,47562,47439,45759,47647,-1,46616,47448,47346,47067,46966,47167,46562,46379,-1,46440,47036,46245,46934,46065,45707,47766,45745,45857,46231,46257,46001,47246,45957,47210,47434,47782,47769,46688,47144,45679,46536,46714,47108,47678,47208,46937,46626,46738\n104785,105060,105491,104686,104774,105235,104232,105107,105939,105225,104272,104641,104946,104395,105389,105120,104294,104201,105258,104157,104271,104897,105574,105575,104985,104658,105204,105705,104783,104720,105424,105301,104995,104938,104557,104380,105734,104898,104300,104394,105051,105019,104684,104560,103947,104904,-1,104910,104869,104939,105329,105236,104657,105641,105035,105931,105970,105115,105667\n92559,92466,92770,92904,92960,92684,93093,92144,93381,92716,92494,94053,93078,93551,93323,92546,91925,92884,92426,93743,92914,92878,92200,92117,93245,92091,93768,93836,92023,92118,93865,93190,93063,93717,93958,92524,92320,93614,93342,92628,92501,92955,92963,93716,94066,93195,92746,93554,93935,93429,93317,92349,93526,92634,92781,93135\n108162,110895,112781,107665,-1,106406,105514,111876,111504,110256,107693,111049,108045,105426,106881,113169,108260,105876,110070,107833,104796,108799,110078,110158,110100,109848,112092,104453,114859,113346,103372,108449,105316,108801,106057,108900,108970,108768,106051,105073,107782,107089,108615,107681,110852,106424,111153,110329,114550,110282,109773,108377,112405,112189,111793,104206,103520,106846,106861,108759,114258,107999,114640,111486,114281,110800,114993,115028,105720\n46910,45510,45989,46311,45678,46304,45454,46501,47274,47233,47211,47375,47189,47148,46232,46137,46149,46419,47504,46662,45827,45894,45699,46999,46100,45648,46349,46272,47196,45579,45886,45597,46155,46745,45917,45456,46635,46357,45747,46866,45777,47138,46896,46986,45540,46570,46545,46104,-1,47262,46900,46397,46561,45826\n4368,3843,3825,4656,4525,4723,4855,4326,3893,4272,4716,4073,3898,4539,3834,4530,3872,5030,3699,4753,4417,4072,5158,4259,5180,3741,3845,4833,4020,3607,4702,4586,4606,4063,4234,4106,4817,3672,4662,4739,3822,4104,4022,4164,4233,4815,4361,4691,4158,4195,5068,3850,4925,4700,3858,3794,4420,4730,3567,-1,3606,4659,5051,4410,5056,5201,4093,5143,4442,4091,4376,4251\n44210,43315,44554,43992,44185,44936,44859,43939,44190,44580,44407,44427,44320,44277,44639,43776,43805,43746,44311,43288,43309,43868,43578,44633,44754,44182,43565,44254,44468,44284,44151,43896,44807,44793,44237,45030,44328,44578,43651,43859,44059,44249,44933,43608,45078,43039,44974,43818,44134,44212\n114001,114159,115330,114032,114692,114824,114753,112853,114138,112965,115205,114776,113957,114659,113201,113794,113815,113575,114789,114472,113638,113657,113761,115221,114655,115020,115506,113777,113701,113016,115580,115418,113564,113882,113922,115139,114301,114362,114292,114199,-1,114590,113219,113850,113077,114950,114614,114167,114585,114626,113643,114874,113434,113439,114064,113596,115084,115328,114709,113704,113604,113004,114248,114598,114869,113352,114179,114736,115510,114272,113799,113629,113607,114610,113955\n8549,8691,8050,8013,7440,8264,8940,7870,7759,7836,7716,8710,7959,8509,7916,8411,8486,7782,8542,8007,7877,8197,8268,7373,8095,8944,7555,-1,8022,7274,-1,7796,8874,8880,8497,8645,9237,7862,8217,7417,9094,8564,7578,8360,8446,7872,8174,8759,8390,7485,7692,8572,8361,7567,7980,8296,7726,7611,8729,8304,8923,8636,8683,8220,7776\n20838,21258,21025,21249,21370,21400,20797,21239,21003,21296,20212,20882,20849,21375,19938,19804,20358,20829,20523,20598,21719,20757,20675,20787,21245,21536,20913,20603,21377,21493,19777,20265,20240,19871,20723,20912,20589,20809,20409,20236,21119,20310,20893,19707,21156,21382,21297,20666,20401,19717,-1,19882\n4922,3455,4845,3990,4078,3554,4494,4982,4346,4333,3909,4031,3369,4657,4066,4854,5164,4842,5296,3725,4074,3610,3630,3496,3995,3386,4371,4071,3670,3734,4101,4335,3770,4211,5121,4788,4736,4257,3783,4587,4009,4488,4342,5197,4044,5154,4276,4375,3975,4909,3861,4385,4824,4146,4403,4380,-1\n26299,27179,26718,26196,27312,26852,26291,26162,26640,26730,26993,25997,26419,27040,27376,27071,27092,-1,25730,26708,25755,25492,26574,26351,27180,26845,27017,25845,26177,25764,26854,27039,26863,26606,27088,26650,25925,26875,27456,26566,26832,27016,25512,26601,27613,26619,26192,26754,26969,26759,26712,26225,27562,27336,25948,25969,27172,26330,26396,27605,26208,26094,25500,26374,25789,25871,26206,25763,27447,26332,25988,26711,26134,26781,26783,27063,26946,26536,25418,27110,27077,26658,25422,26571\n73015,72951,71749,71846,72214,72538,72582,71418,72932,73304,72199,72807,73018,73065,72393,72318,72458,73302,72620,73282,71760,72495,73160,73158,73530,72175,72085,72123,72440,71897,71644,72007,72124,72469,72219,72369,72968,71839,71925,73034,72892,72794,73380,71485,72711,72927,72945,72923,-1,72730,73144\n117529,117858,118320,117847,117900,224,117866,118013,117656,239,223,117774,117298,117474,117877,433,118054,117169,117359,118137,118268,118185,117526,117683,117459,118242,117787,117467,117804,117475,117463,118104,429,117674,118235,117179,117818,117704,118030,117914,117805,117473,117953,118035,117927,117530,117776,117607,448,31,117933,117367,368,117781,117498,129\n40795,40226,41685,40378,39729,40671,41624,40960,40603,39985,41159,39958,39940,-1,40240,40676,40619,39614,40140,41046,40209,41187,41682,40278,40311,40103,41269,40852,40484,41821,39792,40782,41248,41292,41086,40815,40715,39939,41124,40524,41482,41283,40401,40716,40472,40891,41172,39233,40192,41423\n70765,71934,72080,72217,71245,71621,72645,72310,71114,71380,70801,70415,71071,72525,71473,71792,70864,70644,71816,70889,71654,71850,71689,-1,70961,72172,70261,71619,71295,71242,70932,71614,71407,70482,70518,70598,72501,70513,72202,71098,72093,70382,71730,70681,70608,70991,71776,71992,72148\n97859,98158,98370,98433,98241,98991,99575,99111,98079,99223,99796,97745,98119,97938,98823,98710,99048,99771,99215,98862,98492,98758,99010,99056,98199,99578,98840,98442,98526,98515,99477,98455,97942,99158,98626,99577,98641,98314,99234,99410,98777,99045,98508,98538,99367,98690,98377,99295,98124,99055,98342,98250,98826,99282,98805,98292,97964,99054,98907,98366,99686,98201,98705,99541,99250,99113,97958,99843,98487,98721,99198,98578,98965,98400\n42824,42871,41960,41770,41337,43024,43091,41359,40968,41367,42744,43368,42364,42306,41931,41262,42465,43213,41502,-1,43634,42730,41530,42686,42696,41554,41610,43419,42583,42405,-1,41614,42983,41975,42475,41845,43440,42230,43155,41945,41996,42417,41935,42580,42864,41669,42386,41310,41149,43113,41286,41912,42623,42616,41820,42223,41552,42798,41888,43685,42856,41798,41691,43279,42006,42445,43437,41519,41454,42090\n26236,24788,23766,24495,26195,25438,24443,25356,26297,26996,24525,26806,27346,26498,27832,25907,27498,24653,26968,26371,27472,26663,26988,25620,27888,25868,25109,26485,26814,23982,27370,27199,26358,24726,25754,27046,25414,28293,27990,23958,26890,27541,27028,27030,26829,25094,24313,24914,26011,25328,25150,24794,24479,27167,25379,27188,26700,25393,25748,24658,25769,25991\n12108,11780,11072,11359,10932,12424,11566,12133,10870,12499,11306,12810,12399,11586,12658,11820,11994,11671,12837,11761,12425,12167,11212,12317,11600,11594,12313,11051,11287,11683,12250,12164,11041,12360,11914,12110,10909,12913,12797,12141,-1,-1,11622,11549,12220,11567,11778,12466,11986,12507,12521,11644,11356,12576,11750,11073,11392,11204,12594,12105,11552,12217\n5095,4747,4308,5485,5644,5296,5237,5301,5217,5504,5197,5799,5164,5047,5384,5443,4914,4648,4372,4474,5590,5620,4982,5281,4909,6048,5220,4777,5666,5524,4948,5933,4592,5918,4796,5760,5754,5356,5154,5121,6150,5326,5294\n42197,40093,41376,41768,42475,42451,40711,41270,40393,40411,40245,42352,42833,41830,40236,42341,41472,41272,41943,42590,42237,42744,42314,41998,40729,40319,40573,41514,42250,40898,41082,42093,41382,40887,41974,40928,42238,41713,41056,40698,40936,41914,40681,41225,40241,40788,41406,41782,40447,40224,40507,41224,41411,40823,41592,40128,40488,41630,40946,41263,41655,42498,40403,42111,42525,42231,41141,42596\n13964,13883,-1,12534,12574,13249,12809,12660,14110,13995,12978,13236,13916,12749,13292,13724,12539,13445,13527,13520,-1,12374,13857,14006,13970,14235,12650,12736,13843,13781,13032,13919,12981,12945,12595,12267,13168,13406,13402,13933,13383,13655,13636,13740,12774,14151,13051,13064,14050,12760,12849,12341,12444,13182,12390,13630,12279,12882,13660,13421\n104647,105034,103189,104410,104763,104941,104749,103641,103413,105009,104215,104593,104754,103012,103580,104214,104844,104689,103163,104579,104527,103108,104002,103528,103799,103352,104133,104548,104547,103216,103295,103782,103793,103098,103824,104190,103749,104862,104233,103535,103540,103255,103277,104354,103603,103822,104541,104050,104561,103269,103624,103003,103404,103410,104588,104566,104334,103051,103963,104242,104801,103596,104741,103452,104217,103706,104347,104678,104614,103084,104814,104765,103873,104159,104699,103442,103137,103126,104599,104550,103894,103061,104104,103502,104852,102953,104257,103532,103272,104552,103299,104877,104042,103802,104273,103526,104694,104158,103041,104008,103655,104074,103239,104417\n17237,15675,18366,15404,15673,17131,15986,15798,15950,17811,15790,17718,16819,16052,15363,17384,18372,17782,18100,16047,17807,17261,16196,16447,17427,15632,16575,16612,15863,15976,18167,18295,15979,15903,15666,17713,16642,-1,18160,15531,17334,16625,17341,17869,17991,17104,17800,17476,15444,16455,16088,18212,15388,16605,18309,17963,16965,16986,18207,16244,17905,16820,16403,15982,18282,17634,16316,15717,17772,16118,18604,17033,16880,18103,18653,16394,15892,18215,15610,17675,16149,16871,16210,15556,16001,16973,17231,18370,17833,16351,17359,17357,18453,16962,16361,17197,15679,17827,17877,15814\n46098,45431,44794,45112,46122,45822,44620,46157,45148,44714,44962,46769,44559,44519,45017,46663,45795,45403,45196,45412,44301,46321,46282,44897,46583,46025,45438,46022,45539,46749,46581,45053,46051,45618,46757,45835,44720,46766,44898,44882,44335,46652,46243,-1,46083,44347,45258,45860,45688,44866,46125,46735,45006,46289,45883,45329,46131,45661,45870,46391,45702,46393,44388,46042,45334,45536,45325,45572\n25614,26291,25969,25984,26342,-1,26351,25304,25948,25871,25361,26536,26192,26606,26619,25158,25428,26034,25801,25192,25078,25997,25252,24776,25141,26550,26326,26611,26374,25112,24647,25925,26206,26570,26162,26299,25237,25763,24735,26601,25450,25764,26094,26650,25001,26658,25845,25500,25157,25794,25169,25492,25512,26227,25484,25422,25159,25290,-1,24878,25988,25711,24984,25789,25418,25160,25494,25730,26419,26712,25175,25696,26718,25590,25291\n57683,58514,56855,58992,58001,57876,58555,58147,57156,57025,57487,57140,58357,58080,58617,59194,57431,57413,59024,57846,58980,56731,59371,60054,58355,58256,57364,57558,59228,56665,58770,57450,57556,56854,59470,57720,59538,57272,59454,58496,59305,56375,58870,58501,57377,57023,57131,57774,59370,57493,59543,57854,59312,58927,58318,59548,57203,59073,58258,57873,57406,58694,59372,59007,58784,58108,57483,57141,59203\n72235,73319,72372,73560,72802,72448,73739,73379,73687,72104,73082,73030,73505,73107,72075,72959,71890,72800,71952,73650,73195,72761,73049,72957,72279,72248,73779,72940,72984,72755,73485,73331,73487,72630,72712,73221,72350,73387,72427,72459,73672,73774,72240,72536,73267,72948,71935,72977,72857,73538,72215,72439,72767,72276,72559,73250,72140,72155,72485,73140,73559,-1,72196,72926,73448,72985,72797,71893,73511,72639,72584,73341,71977,72600,72484,72432,72705,73398,72185,73145,73123,72038,73174,73484,72257,73108,72149,73335,73266,72010,72241\n111050,111041,112842,112360,112175,111828,111922,112402,111135,112345,111268,112628,111032,110571,110754,111408,112513,111919,111605,111380,113076,111559,112590,111869,111990,112089,113141,112921,110918,110710,111872,111279,112952,110487,111033,111599,110603,110716,111074,111567,112837,112775,111438,112144,111351,112476,112227,111864,-1,112055,112173,111203,111814,110840,112140,112840,111307,111378,111721,110788,111796,112768,111734,111627,111227,111217,112249,112539,112609,110757,110858,112224,111202,111636,111842\n2198,980,1409,1093,1987,2268,437,1233,1456,391,1125,297,885,474,1400,1337,1639,117896,2271,1372,1671,1257,566,2414,11,826,767,117798,812,428,118212,817,967,1916,1352,63,727,119,1075,1711,2103,1008,173,1043,1229,118214,1289,591,984,473,-1,1650,841,1026,539,1475,118218,808,195,1152,982,747,118024,1593,1642,1603,1478,1676,485,1826,404,424,988,889,559,1972,1370,1011,1496,1255,1009,1090,972,1343,905,176,1302\n91789,93843,91863,92479,92366,92419,91636,93301,92851,94117,91790,92853,92832,92944,93960,92228,93185,92243,93828,92591,93409,93926,93512,92129,92863,93634,92554,91869,91868,93305,92216,93166,94058,93348,93433,93397,92581,92827,93214,92986,93777,92911,92809,92420,93024,91473,92550,93442,93436,93386,93770,92190,93043,92396,92281,92703,92398,91635,93798,93776,-1,93720,91945,92178,93396,92768,92338,92405,92875,93712,93111,92632,92439,92261,93032\n28715,-1,30741,29617,28506,29760,28698,28502,30115,28644,30316,29451,29815,30226,30182,28725,28851,28997,29478,29835,30013,29283,30270,29308,29987,30411,28423,30309,29302,30573,29072,30751,28729,29301,29173,29581,-1,28445,28919,29309,30029,30273,28974,28844,30168,30222,30253,30250,29534,28994,29116,29911,28890,28861,28575,28206,30056,28908,29776,28626,29230,29242,30540,29688,28429,28683,28477,29878,29008,28448,30748,30403,28929\n40386,40292,42329,42384,44418,40618,41119,40030,40456,43022,43700,43930,45169,38765,39745,42210,42690,42541,43351,41580,39589,40105,41003,42407,40108,42855,40817,43277,42463,39204,42425,40725,43927,44219,42841,39899,39853,42369,40555,43201,-1,43747,41740,41273,41985,41478,42206,42858,44192,45212,40834,42532,42388,41254,41217,40502,40540,41907,39041,44480,42727,39770,43629,38634,41079,40179,42168,40436,40705,41304,41916,40511,42644,39802,39045,40173,38877,41604,-1,41631,41140,44473,40391,40728,41000,41070,41837,41093,42649,43449,41451,42915,42342,44699,43598,44106\n41740,44737,41217,44626,46407,43351,42858,44221,42342,43617,46719,44418,45275,44473,44939,43449,43598,46679,43022,45757,43700,42384,46452,44219,44106,44255,42425,45940,43823,45582,42649,43930,42644,44480,-1,42388,41985,46720,41916,45135,41451,44192,43201,45036,43958,42532,46940,42210,43747,41329,44445,46358,43604,43277,41604,45620,45847,44599,46573,45583,42915,43996,45622,43974,44218,45435,46741,43629,45799,45315,43927,44786,42407,41281,42841,46682,44699,45585,42855,46760,45212,42206,44247,45238,45651,44226,42727,44298,43221,41907,42690,44025,42369,46040,45976,46849\n51945,52707,51249,52257,52187,51532,52123,51213,50950,51626,51624,51757,52198,51120,50770,52241,51304,51571,51582,51239,52056,51105,52350,52625,51725,52373,51696,52528,50792,50999,52532,51922,51168,51802,51179,51316,51036,51787,52387,52554,-1,51360,-1,51184,51898,51008,51892,51520,51786,52236,51351,52604,51975,52315,50990\n54682,55295,54698,55887,55758,55056,56084,55326,55174,54922,54960,55830,55454,54329,54838,54466,54420,55505,55639,55802,55049,-1,55409,55002,54149,55700,55480,56161,54771,55596,55091,55381,55248,55487,55183,56245,55541,54843,55636,56179,55553,55375,55269,54406,55670,54820,56016,54914,55173,55570,55414,55152,55813,55228,55313,55812,55294,54707,54924,54749,55363\n77827,76942,78548,77591,78410,77695,79082,78489,77272,77970,79011,78274,79123,78894,78646,77178,78667,77062,77936,78461,77714,77550,79294,77084,78942,77674,77850,77652,78403,77161,78519,77790,77447,78542,77303,78180,77438,79255,78474,77370,79126,77496,78745,79423,76740,78492,77253,79157,78911,79241,76893,79164,79272,77738,78427,78327,79428,78892,78856,77484\n48013,48074,49040,49345,49383,47818,49554,49224,50295,50012,47524,48041,49150,49968,49189,50165,47245,49437,50035,47531,48171,48655,48673,48871,49003,48391,47532,47633,48243,49330,49063,49162,48548,48317,47605,48931,48423,49251,47635,49415,50039,47264,49174,49825,48954,48732,49253,47899,50060,49535,49971,49560,50280,48917,47568,49727,49789,49055,48393,48887,48397,48239,49179,48682,48485,47305,48986,49908,50097,47366,48242,47331\n74023,73118,71400,73483,71786,72673,70922,73785,70237,70897,71492,73728,70168,74147,70940,70098,73625,74110,72556,73229,71858,70035,71437,73067,74011,70213,72967,71355,71831,72853,73756,70052,74181,-1,73520,71281,73948,72864,70565,74290,74044,74415,71678,71780,72713,71960,73572,70773,73322,71551,72000,70546,72542,70917,70215,72690,70856,70673,73950,74398,70436,71563,71124,71908,70686,71677,72989,72366,72754,72131,70870,71847,70459,72816,73127,70423,71681,72242,71645,71475,73817,70832,70925,73609,71050,72633,73584,70074,72437,72777,72001,71264,70203,70821,70911,72103,72649,70301,73755,70080,73247,74163,73091,71622,73776,71307,72773,72431,73129,72264,72995,71093,72657,73343,72367,72379,73017,71337,72206,71217,72305,71683,72390,72232,70808,72851,72500,73347\n72629,71377,73010,71591,72574,72889,72618,71394,72154,72309,71628,72298,72776,72014,72739,71778,72339,72990,72015,72449,71507,72122,71434,71829,72931,72473,72049,71817,72561,71820,72275,72265,72648,71879,72771,72002,71842,71869,-1,72226,72697,71868,72243,72069,71422,72740,72094,72644,72631,71785,72212,72614,71903,72091,72635,72521,72663,72766,71363\n83338,83785,83641,84063,82528,83229,84079,85030,83387,83618,84069,85993,83268,85260,82367,86093,83028,85049,85068,82698,84662,84724,83323,84077,83502,82173,84311,85258,84197,83983,85751,84241,83380,85529,84148,84288,83794,84229,82672,84777,83749,83081,83312,83205,84457,85120,83894,84157,84760,84268,82531,84534,85520,84447,84834,84257,85142,83702,83269,84339,84394,83390,85267,84547,84619,83661,85577,83250,85461,84111,85198,84406,85038,85010,86061,85421,85725,83429,82991,85743,84030,84686,83185,84839,85164,85050,84338,84232,83535,85835,85897,84755,84231,84208,83960,84844,83249,85145,85214\n15525,15625,16985,15822,16593,17068,16538,16627,15894,16117,16399,16221,16991,16359,17049,17031,15777,16571,17058,17281,15564,17300,16838,16273,16268,16314,16924,16095,17133,16469,15546,16369,17084,16572,15558,15683,16497,16568,15508,17235,16831,15662,17121,16007,16241,16532,16304,16788,-1,17426,16748,17413,15906,15536,15823,16865,15975,16393,15951,16176,17232\n986,1871,2534,988,1593,1591,2229,2396,525,2305,714,2420,1086,1434,1490,751,1125,1164,2108,1496,1634,2934,1233,2059,2004,1818,1879,1575,625,2089,1474,1445,712,1093,2258,926,1594,2225,1905,1951,2053,1014,1152,2553,2681,1642,2476,828,808,2153,668,1409,1867,2434,2742,683,2455,626,1011,737,1641,508,1400,1833,1302,1475,1256,1501,1261,2668,1122\n23739,26296,23175,25416,26758,25334,24969,22361,21764,25607,19145,19619,22160,26878,22093,24125,24760,23803,26486,21558,22621,23318,20405,19667,19697,18980,26097,21212,18913,27225,26362,21970,26115,23885,19429,22769,22011,26877,22703,25022,27209,25162,17990,22561,20928,21662,20225,19766,23943,18510,19845,21165,20173,26790,21116,25653,26662,26103,20416,24544,22495,22152,20584,17510,20330,24036,20746,26673,25714,19841,-1,25110,19390,20249,21859,-1,17810,19017,24440,26888,22188\n118212,498,1603,1400,566,1478,11,679,1642,1896,474,1337,1352,967,118272,1090,497,885,113,118308,817,175,826,119,1639,1009,297,767,1409,118214,1496,428,1255,1008,424,404,972,1247,1346,1434,173,1818,1043,1604,118282,323,1075,984,591,118264,980,727,473,1474,889,118216,1157,1593,747,1711,1826,485,841,1343,195,229,1671,118162,106,1026,2034,1372,259,559,1289,1125,118218,1456,1370,63,982,1618,995,437,1229,905\n74172,73953,73433,73636,73238,73670,74209,73613,74050,73416,74299,73867,74392,74007,74234,73822,73827,74455,73370,73097,74728,74493,73995,73074,74232,74568,73753,74412,73904,73751,73032,74235,73766,73724,73945,74600,73517,73514,74593,-1,73692,73161,73606,74005,73880,73290,74391,74010,73720,74401,72947,73428,73400,72784,74367\n60157,59711,60565,59467,60486,59939,59316,60135,59275,59171,60623,60011,59728,60106,59694,60474,58604,59615,59623,58532,58515,58679,58451,58745,59195,59000,58186,58629,59163,59447,59677,59993,58626,59465,59336,-1,59217,60207,58587,58596,59053,58653,59124,60117,59791,59914,58900,58236,59522,58861,59619,59089,58593\n19151,19759,19570,19352,19869,18802,18860,18592,18529,20552,21303,20059,19726,20051,20566,18445,21312,-1,20931,19025,20696,18878,20976,19783,21692,20153,18536,21096,20805,18303,19848,19880,19327,19277,20030,19086,19020,21183,20428,19579,19904,20277,19353,20543,18229,21406,18656,19344,21048,19921,18969,19045,18889,21149,20101\n67044,68187,67249,67396,68134,66892,67768,67900,67354,68233,68560,67158,68497,67804,67011,68261,67662,67800,68479,67509,66464,69038,67178,67513,67294,66848,68369,67375,68585,67039,67392,67790,67985,67883,69274,67634,67488,67778,67106,68828,68700,67194,68536,67529,68982,68252,69379,69131,69447,68420,67752,67338,68912,69350,69142,68032,67874,67518,67581,68590,-1,67410,67880,67147,68403,68012\n100881,101734,101947,101249,101608,100798,101649,101120,101999,101123,100623,100800,100345,101221,102061,100931,101751,101606,101040,100817,102026,101906,100477,102289,100337,100154,101988,100556,101199,101706,101740,100948,100445,100650,100862,100014,100703,101011,101088,100342,101555,101357,101492,101036,101680,100730,101468,101277,100855,100471,101507,101293,100975,100785,101244,100463,99892,101190,101027,101331,101157,101923,101111,101409,101330,101378\n109107,109328,110630,-1,109359,106803,110072,109976,108538,110914,110306,108610,108976,107584,107678,107853,110939,108310,110259,108534,107614,109485,107285,108020,107774,108631,108590,110257,108195,109233,107854,107922,108093,110088,109726,108575,108464,109274,109094,110592,110117,109749,108944,109214,109547,-1,107104,111286,107773,110227,109260,109628,109203,108778,108216,107496,108429,108340,107561,107947,106995,109512,109925,108148,107783,106836,109266,108493,110260,110083,109491,106509,109699,110102,110838,108463,108528,110567,108445,108247,107490\n83434,83701,83745,82832,83340,82569,83403,83846,82652,82876,83214,84485,82747,82852,83693,83159,82430,83922,83036,83516,83101,83155,82911,84442,82786,82453,84377,84735,82514,84440,84087,82709,83845,84150,82565,83379,83709,83025,82936,84290,82819,83879,82545,84668,84425,83858,83880,82279,84104,83607,82926,83009,83789,83132,83235,84694,83266,82551,82869,83848,83104,83100,83598,82489,83583,83561,83959,83886,83527,83418,84638,83646,84332,82561,82767,84151,83014,82943,83457,83281,84238,83843,83559,83410,83491,82625,83124,83499\n51910,54216,53600,52989,53972,52692,52136,54674,52684,53173,52294,54251,53008,53041,54552,52439,52700,53587,54250,52724,54040,54786,53380,54407,54389,53910,54662,54793,54457,52041,53517,52529,54314,52375,53584,52755,51771,53261,53155,53706,51220,53119,53351,52040,54328,53510,53680,53042,51697,53551,52976,52251,53025,52057,52413,54501,53748,53036,53358,53304,53061,54419,51630,54016,52826,52309,51695,53157,53504,52480,53974,53890\n47704,46687,46764,46911,46516,46464,47665,47325,47515,46398,46568,46462,46160,46457,46885,46771,46036,47142,46774,46637,47342,45717,47151,46400,45909,46837,46261,46627,47143,47234,47219,46713,46454,46994,47336,46681,46303,46069,46862,47022,45990,46532,46197,47136,46761,46106,46431,46416,47012,47748,47435,46189,46486,47072,47384,45912,47880,-1,46854,46812,47091,47508,46634,45740,46053,47462\n3471,1516,1824,1828,2931,1800,1766,2218,2028,2803,2747,2321,1880,3306,1476,1398,1029,1883,3459,3556,2348,2462,2262,3207,2256,2802,2446,1842,1801,1624,2848,2888,1705,1430,3068,2376,2029,1693,2472,2849,2282,3547,2020,2383,2711,2435,2616,1977,1955,3653,3195,1723,3332,3243,3422,1165,3154,2230,2217,2835,1426,2065,2107,3048,2993,2757,1571\n67560,67105,66998,68663,67079,68094,67500,67318,66983,67115,68318,67185,67963,68165,67379,67104,68508,67291,68281,67404,67038,67939,66860,68498,66989,67898,67283,67770,68156,67233,66788,67481,67186,67674,67180,67545,67660,67860,68074,66921,67805,67779,68353,68228,67705,66662,68594,-1,67862,68137,67430,67461,67246,67377,67827,67329,68251,67598,66661,67586,67416,67943,68052,67312\n3910,4776,3398,4396,4455,3105,3468,3117,3142,4026,3629,3453,4347,3967,4201,3913,4401,3257,4631,4052,3088,3464,3733,4145,3637,3715,4248,3628,4218,4603,3592,4502,3180,4363,4343,4663,3826,3182,4148,4225,3695,3729,3735,4649,3788,3188,3731,3202,3608,3506,3219,4282,3514,3321,4236,4577,3586,4274,4217,3320,3177,3631,4769,4508,4265,4682\n29975,30943,29390,30857,31036,29696,29776,30618,30182,30101,29866,30091,30880,30839,29846,30855,31233,30200,30331,29570,29902,29955,30306,30738,30142,29628,30917,29967,30346,30304,30987,31219,30747,30273,30348,29742,30349,30510,30644,29749,31230,31031,30388,30779,30984,30827,29826,30188,30697,30518,30309,30622,30020,30823,30835,29554,30137,31389,30934,30452,30724,29675,30997,29790,30525,-1,29668,31001,29793,30354,30305,30035,31129,30396,30639,30115,30893,29510\n48584,49090,48516,48962,49388,-1,49141,49369,49591,48943,48845,-1,49776,48747,49500,48964,49856,49337,48906,49339,49099,49521,48479,49796,50142,48327,49982,49294,49543,49654,48096,49610,48722,48693,49780,48757,48879,49725,48884,48505,48912,49533,48937,48979,49216,49309,49810,48856,49469,49446\n9387,8389,8280,8660,8621,9384,9336,9251,9120,7809,8405,7822,8932,9209,8694,7886,9004,10161,8732,8368,9806,8481,9468,8059,7739,9296,9208,8431,9015,8699,9179,8343,9524,9606,9812,8820,8854,7574,7941,8641,8514,8722,8534,7627,8527,8369,9130,8023,9381,9443,7526,8715,8697,7742,7938,8739,8202,8002,8681,8162,9106\n40305,38437,37046,39265,39747,38822,39807,37828,38117,38449,39160,37178,39878,38865,38560,38604,38800,39426,38780,40006,39995,39230,40067,39444,37449,39363,40185,40262,40905,39871,38684,36958,39285,37898,38333,36999,37431,37840,40743,39555,38911,39639,37406,38219,36916,39518,-1,39348,39572,40094,38136,38354,40614,39301,38320,38086,37973,39643,39207,40992,40086,39685,37501,39944,37860,40510,39539,40497,38840,39055,40040,38325\n94506,94750,94261,95408,96004,94575,94558,95416,95827,94548,94663,95519,95735,95380,95619,95782,-1,95662,95003,95695,94329,95420,95472,96089,95456,94176,94958,95102,95226,95252,94184,94777,95106,95004,95905,94678,95348,94938,94425,94752,95262,95006,95356,94441,94926,94583,94730,94202,94367,95120,95444,94595,95358,95849,94705,95164,95203,95054,95182,95278,-1,95941,95804,95747,95509,94552,94914,94537,94642,95838,94661,94272\n43788,45142,44030,44325,-1,44306,43837,44584,45008,44257,44119,45099,44931,44476,43415,44893,43774,44372,43397,44532,44179,44316,44379,44594,44293,43724,44124,45156,43726,44890,43924,44622,44820,44575,45398,45203,44696,43648,44470,44063,43521,45041,43907,-1,44585,45368,45161,44564,44450,44854,43810,45047,44040,45267,43741,44173,43857,44951,44038\n"
  },
  {
    "path": "tests/science_cam_may8_0.05sec_gain40/result_real.csv",
    "content": "5120,6667,6238,7790,6285,5832,8565,8452,5804,6579,7399,6650,6632,6580,8066,6473,7044,7729,8081,6904,6548,5668,6542,7246,6035,5497,6306,7970,7253,6681,7138,-1,6889,5708,7002,8740,5324,8025,6697,6911,6149,6250,7494,6359,6045,6474,5683,7785,7221,6270,7786,6129,7247,6287,8170,6986,6496,6923,7145,8118,8235,6725,6583,7498,7401,8109,7745,7171,-1,8242,5876,5251,7441,7666,7713,7419,6611,5214,6080,7820,6932,8357,8483,7528,6465,6311,8604,8182,5984,7763,5347,7563,7257\n105597,-1,106981,106909,105614,106516,106526,105170,106839,105695,106725,106841,106104,106243,105360,106697,106471,106282,105326,105371,106075,105747,105847,106053,106283,106902,106157,106232,105551,106222,105784,105744,106760,105200,106361,105224,105365,106460,106005,106221,106513,105937,105743,106519,106666,107062,107028,105902,-1,106397,105295,105533,105216,106402,105827,105431,105793,105785,106060,106337,105852,106895\n3973,3925,4564,4176,2988,4557,4352,3019,4623,3738,4642,3518,4312,3665,4500,4203,4336,3777,4677,3055,4582,4464,3793,3535,3416,3399,3722,4007,3302,4529,4453,4286,3350,3407,4979,3481,4169,4297,3540,3410,3947,-1,4123,4465,3591,4186,3265,3863,3992,4825,3758,3763,3439,3889,3278,4504,-1,4056,3582,5064,3655,3652,2970\n67361,64598,68815,66416,70594,68431,67351,71855,69850,64080,65992,65174,65470,66911,72786,67478,70637,67837,66121,65832,-1,64921,68472,69794,69380,69002,66111,65600,70874,72036,70001,-1,71919,67405,66607,69457,71197,69576,68980,73415,68122,69090,63998,70901,70656,72670,69575,65890,70388,69204,70460,70679,70654,71601,68685,69313,71055,65468,67606,66196,69778,73231,65073,71944,73223,67731,-1,65865,70128,68972,70042,66069,70271,67986,68954,65053,70524,72344,72005,67257,70942,66852,71031,71870,68238,67670,66806,69027,67698\n115672,114524,115646,114312,114351,114457,113987,114024,114872,114155,113869,115075,115159,114846,114526,115188,114025,113630,114467,114863,114321,114492,115360,114689,113946,114807,113582,114289,115787,114279,115140,114944,115079,115326,115638,114972,113893,-1,114844,114835,115212,114742,115389,-1,114008,114247,114806,113542,115741,114688,114632,114350,114293,114448,115189,113646,115583,114479,114809,115422,115453,114774,114543,115057,115410,115077\n83329,82411,82933,83549,83367,82240,83700,83830,84115,82779,83152,83975,83643,83815,82263,83274,82873,82043,83043,82385,83433,84340,82608,83172,82359,83604,83753,82485,83158,82987,83347,83568,83412,83315,83814,82510,83449,-1,83903,83007,82686,83639,83690,83397,82780,83096,82662,84291,83208,82765,83063,82354,83631,83383,82713,83134,84138,82940,82928,82346,82859,83049,83375,82634,83095\n36582,37616,37594,36257,38030,37514,37938,37739,38010,37659,36653,38224,37684,36963,37838,37373,37336,37653,37668,37128,36926,36792,37675,36269,37029,37998,37303,37666,36608,37322,36559,38250,36304,37297,36800,37241,38455,37790,37329,37678,37004,37325,37915,37623,38448,37562,37450,38011,38624,37572,37223,36857,37803,37710,37557,37658,37098,37939,37841,37752,37664,36787,37996,36657,37711,37462,37757,36409,37087,37819,37829,36877,37202,37184,36515,37430,36938,36776,37925,37697,38414,36728,38192,38071,37992,37227,37446,38074,36940,36959,37809,37345,37742,37437,38129,37317,37618,37982,36414,37157,36457,38165,37250,38369,36778,37123,37060,36363,36774,37348,38552,37057,37889\n2181,1938,2244,2677,1435,2264,2030,2166,1535,2781,1943,-1,2831,1602,1847,2195,2356,2025,2659,2521,1566,2594,2918,2759,2046,1869,2080,2373,2688,2736,1894,2510,-1,1770,2052,2500,2369,3000,1738,2398,1628,-1,2358,2340,1645,2765,2083,1767,2165,2039,2609,2156,2548\n18041,17283,16417,16637,15773,17760,18656,15176,16990,16952,17269,17632,17393,16992,15758,17054,18536,17433,18043,17968,18303,17501,16722,-1,16756,16333,16013,18069,15801,17669,16284,17117,16163,18659,15389,16942,17092,16526,15434,18055,16026,15715,15108,17652,18378,18400,16105,16443,18456,18202,15695,15346,18592,16959,15631,15867,15780,17691,17152,18360,15212,16085,16082,17089,17494,15464,17725,16542,18445\n115623,114686,115207,-1,116040,116281,115502,115834,115548,115766,115432,115725,115991,116054,114734,116175,115606,-1,114749,115558,115904,115011,114183,115370,114282,115835,115250,115214,115118,115185,114631,115512,116307,115829,115100,114953,115071,115915,114759,114596,115032,115585,115856,115249,115549,115196,114442,115371,115419,114881,116282,115255,115417,115268,114683,115239,115962,114955,116527,115407,115345,116000,-1,115546,116264,114877\n86322,-1,85752,86030,86744,87657,87555,86432,86887,86915,87022,86751,87220,87466,85881,86580,86911,87368,86948,88072,87364,86005,86011,85524,85482,85985,85569,87361,86035,87116,86342,86672,87030,87233,86650,87391,86522,87223,86967,85531,86360,86892,87162,-1,85797,87038,85961,87810,86761,85775,85811,86276,85803,86629,86149,85770,87173,87102,87839,86527,86953,85816,85999,-1,86883,85329,87144,87456,87613,-1,87438,87700,87966,86487,87733,86624,86244,86408,87381,87345,86619,86404,87395,86617,86504,86317,86468,87508,86716,86285,86508,86376,87196,86140,86665,85739\n34721,34397,34246,35394,34701,33700,34821,35815,35393,33161,33502,35090,35067,35040,34065,34201,35645,35376,33912,34802,33498,34801,33055,36015,34638,35879,35902,34134,33642,34118,34109,35001,34069,36190,34137,34052,36167,33697,35360,33803,35319,34339,34495,33375,34028,35532,35279,33683,33256,33487,35396,33922,34919,33776,34966,33641,34659,33549,33505,35860,34840,35627,33909,35013,35054,34470,33046,33879,33744,35288,34053,34756,35966,33185,35698,35147,34889,35450,33725,35114,34202,35739,35483,33984,34415,34346,36247,34436,33078,35202,35287,34081\n100776,100924,100446,-1,99995,100511,99659,101130,101181,100192,100648,100892,101769,100781,-1,99873,101223,100687,101700,100898,100406,99866,100658,100226,100174,100849,101320,100639,100709,-1,100115,101730,101410,100429,100365,100598,101195,100274,100929,100506,101482,101298,99807,100208,99589,99670,99742,101483,101733,100056,100344,99689,100353,100269,100551,101305,101487,101047,-1,100010,100212,101698,100899,100309,99607,100204,101389,101554,101710,99857,101315,-1,101589,100498,101502,99847,101056,99602,101694,-1,100256,100011,100222,101055\n96607,97084,99341,97615,97352,97761,99626,98608,96731,96794,96140,97953,96413,97250,97581,97421,99803,98484,98751,98102,96505,97771,97252,96732,96781,97032,98174,98536,96253,97535,95635,97803,95932,98163,96231,95463,98983,96806,97819,98240,97646,97881,96701,97362,97518,98653,97253,97128,97857,98231,98031,95866,97746,98170,97441,95994,96677,98574,-1,97548,96955,97694,96831,96884,97705,98364,98453,96498,97993,99453,96935,98994,97574,98457,96239,97606,97656,97784,96575,99076,98211,96211,95592,98795,98629,95258\n22260,24542,20297,19350,15931,20143,20144,16815,16910,14515,21136,16140,18157,14112,19393,19188,21945,22518,16850,20110,16899,21101,17319,20049,-1,20612,-1,20382,24718,16190,15824,19445,18970,18783,21087,17624,16821,16827,22295,-1,18515,14900,16768,20195,22101,24084,18949,14926,17321,18493,24187,20442,19250,18847,16290,17242,14521,22404,19437,17184,15470,23435,18179,19433,19561,17808,15311,17270,21519,21124\n31351,32355,31480,32398,32630,32345,32965,32046,31707,-1,31628,31904,32682,31342,32928,32188,32384,31994,32027,32282,32957,32584,32138,32596,31476,31921,32644,32633,31874,32286,32191,33184,32133,32901,32915,31760,32617,32214,32042,33328,33379,31614,33225,33237,32116,31942,33520,32416,32058,33106,32221,32312,32851,32936,32146,31344,31517,33123,32698,31930,32624,31992,32572,32745,32300,32998,32608,32594,32024,31733,32977,32137,33210,32586,31629\n78370,78319,79219,79177,78759,79193,79225,79782,79889,79510,77956,78583,78159,79811,79985,80077,78994,79445,77965,79141,78187,80078,79999,78470,79483,-1,79413,78554,79772,79930,78278,78572,78206,78497,79305,78760,78950,79291,78777,79441,79683,79327,79154,79365,80118,80189,79331,80092,78464,79639,78954,78259,78338,80026,79686,79115,79726,78709\n59238,59980,60039,59121,59986,60091,60202,59723,59942,60893,61000,59525,60347,59571,-1,60957,60038,60354,58831,60368,60939,58939,60633,59130,59501,60282,60423,58818,59049,59391,60046,60005,60055,60087,60631,60033,60535,59753,59567,59333,60706,59876,60404,59911,59554,60193,60145,61099,60834,59152,60326,59550,60200,-1,60531,59418,60290,58701\n117262,287,117924,117911,82,117541,117753,117652,118203,72,117410,117579,118171,524,177,118247,117351,117949,117563,117756,118020,95,179,117745,117843,117789,117743,117411,117950,117719,117917,117528,117978,118115,117722,117948,33,117696,117595,266,117964,117212,117994,117747,80,117713,117988,118205,117533,117318,117476,117980,117314,116975,117093,117977,118208\n4159,4103,5055,3568,3555,3312,4901,4517,3214,4670,3884,4469,4373,3805,-1,5005,4975,-1,5034,3438,4196,4416,4378,4053,3301,4047,4803,3396,4108,3102,3092,4132,3569,3620,4612,5148,4110,4191,5212,3191,3978,4908,4779,4005,3875,4402,-1,5175,3360,4531,4304,4889,3141,4452,4838,4246,4197,3617,3623,-1,4327\n44070,43076,43827,42668,45059,45044,44204,43364,43173,44459,43703,44982,44546,43504,43926,43853,43997,44276,43040,43641,43691,43771,44334,42752,43301,44268,44383,44281,42955,44290,44785,43541,44919,43922,43687,44887,44164,43606,43825,42873,42842,43404,44929,43041,42757,44479,42975,43248,43533,43153,43365,44660,44824,44007,44291,44048,-1,43409,42735,43003,44086,43334,44417,43256,42825,43434,44343,44874,44566,43444,44431,43215,43597,44051,44697,43782,43149,43002\n4878,5382,4806,3753,5073,4094,5092,3960,4778,4278,5103,5218,4906,4485,4503,5048,4526,4065,5406,4655,4763,5216,4323,4728,4601,4832,4804,4113,4480,4219,4687,5562,3968,4413,4841,4708,3969,4978,4858,3701,5209,4399,3963,3799,4559,4570,4765,4431,4120,5593,5231,4445,5089,4752,4461,3938,4686,4891\n73113,73699,73077,73596,73917,72105,73364,73999,73248,72244,71945,72236,73635,73002,73712,73960,72680,71976,72970,73931,72701,73467,72376,71991,73220,73006,72461,73461,72552,73162,72753,73726,72062,72805,72326,71712,71995,-1,73890,72953,73745,73887,73968,-1,73499,72200,72830,72791,73224,71787,-1,71851,73388,71813,71751,72144\n15858,16390,16000,15621,15465,16360,15263,15626,15430,16086,16226,-1,16021,15977,15383,16528,16032,15264,16389,15711,16214,15619,15427,-1,15461,16045,16515,15436,15728,16421,16569,15830,15158,15599,16076,15501,15603,15302,16058,16240,15800,15872,16023,15624,15457,15732,15284,15956,-1,16698,15948,15743,15914,15779,15524,16651,15583,16334,16311,16472,15523,15174,16066\n51188,51019,50566,50489,49772,50987,49950,50525,49855,50697,49404,50510,50247,49784,50718,-1,50168,50948,49769,49488,50311,51198,49599,50393,49428,49418,50721,50406,49665,49513,51259,49916,51333,51530,51330,50956,50529,51112,50234,50631,51227,51228,49384,49911,49670,50708,50163,50492,49797,51175,49943,50497,51238,50356,49793,50723,50442,49891,51375,50349,50888,51129,51349,50592,51474,49645,49845\n35718,37081,35055,36565,35810,36791,36976,36206,35300,35251,35583,35060,36821,35543,37134,35547,36687,35529,35737,36260,35173,35556,35107,35634,36150,36969,35343,35749,36447,36004,35259,36162,35299,35231,37104,-1,35600,35669,36563,35843,-1,37088,35340,35306,36055,36880,37349,36080,36541,37220,35881,37142,36137,35705,36131,36388,36235,36572,35629,35602,35271,35792,36526,36071,36613,35895,35649\n79917,79724,79368,79782,79914,79115,80111,80078,81119,80420,79483,79177,80325,79811,79441,80879,80641,79154,79726,80175,80917,80500,79985,79219,78709,80117,79930,79889,79772,79225,80118,78994,79413,80077,79445,79683,78760,80435,80646,80601,80092,80026,79999,79305,79193,80681,80318,80665,79327,80189,79533,80967,79894,78787,79365,-1,79686,78671,80985,80370,79639,80471,79846,80476,80523\n108435,104458,103628,104953,104105,100966,105694,109039,103602,105618,103219,106339,-1,107459,101750,106244,104736,104982,103342,103908,104968,102787,104149,-1,101863,102270,107828,107236,108676,104213,104414,103754,106048,104609,104957,106583,105526,100504,101634,101161,106024,104667,104147,100646,106748,101824,100670,109596,107700,106503,101732,103170,105557,104964\n104878,106011,105661,105756,105349,105218,106375,104622,105767,104618,105152,104947,105059,106031,105899,105469,105155,105588,104629,105993,105819,106161,104626,105549,105066,105203,106095,105046,106015,104872,105212,104813,-1,104893,104911,105409,106325,105800,104616,105797,106236,105040,105534,105750,120250,105729,104740,105563,105359,105926,-1,105302,105985\n114188,114412,116963,116387,113696,115769,115620,114270,116056,113647,114560,115295,115192,116263,116407,116444,115506,114646,116284,114039,115181,116270,113287,-1,115890,115580,114217,113460,115380,116084,114333,115848,114142,113563,114019,114198,114571,116640,113885,112839,114810,115754,114613,113890,114150,114899,114790,114072,115612,114851,115744,115930,113735,113330,115087,115035,114901,114996,115073,-1,115895,113863,113900,114583,114982,115233,115636,-1,114091,113351,114658,114151,114728,115462,116734,115157,114086,115429,114216,116390,116099,114961,114731\n69085,70284,70446,69862,70048,70449,70900,69624,-1,71224,69662,69616,70254,69518,69805,70844,70585,-1,71381,71172,70633,71104,70066,70625,69824,71056,69620,69704,69690,71165,70198,71235,71109,-1,70710,70139,70841,70617,70420,70428,71611,71618,69919,70999,71491,70848,70447,69641,70910,69040,71432,70881,70435,69951,70151,69121,70347,71499,69732,69405,71008,69527,69521,70393\n77886,78153,78344,77260,77245,76814,78363,76870,77402,77299,76791,78016,76696,78012,77791,77284,77501,78281,77681,76764,78537,77222,77252,78048,78050,78248,76773,78768,77551,77091,78222,77598,-1,78741,78077,77207,77655,78276,78235,78448,77508,-1,77950,78028,77153,77767,76938,78102,77053,76844,78214,77180,77046,78334,76802,77583,77488,78657,77624\n67741,68806,68936,68452,-1,69052,68626,69289,-1,69282,68810,69572,69044,69414,69409,69152,68469,68440,-1,68789,68899,69651,67931,68639,69242,67991,69352,68380,68458,69328,69402,68192,68949,69747,68636,68755,69531,68221,68348,68997,68739,68738,68050,68661,68716,68524,68595,68297,68794,69058\n113757,115265,115235,115010,115497,113886,115178,113929,114934,113539,114453,115049,115593,114615,114047,115676,114206,114022,115168,114656,114177,113878,114973,114748,114360,-1,115102,115176,115843,-1,115055,114601,-1,115442,114319,115794,114139,114765,113615,114434,114896,114842,-1,115535,115897,114634,115571,115314,115318,115659,115113,114464,114746,114455,114331,115532,114487,114466,115519,115501,113935,115231,114191,115150,113838,114400,114318,113959,-1,114935,114447,114635,114115,115300,113817,114867\n110662,110933,110356,109603,110275,109972,109249,109153,110431,111346,111457,110309,111071,110362,-1,110807,110310,110056,109767,110704,110988,108476,109124,109358,111633,110441,110925,110836,110025,109701,109669,111795,109252,108887,108607,109225,108879,110414,109894,109841,111543,109759,110154,110266,111317,110142,111088,110314,109679,110090,111854,110020,109599,110713,109857,109363,111972,110923,110893,110500,109492,109572,110991,110967,110647,-1,110327,109867,109606,110525,109425,109130,111243,111060,110459,109426,109617,109200,110648,111179,108921,112026,110021,110934,109497,111362,110417,110824,109876,108689,110497,108889,110026,109065,109926,109373,111423,110561,109096,108794,108977,109424,109713,110294,110230,110504,109213\n19907,20218,20179,19707,21119,20407,20747,-1,20628,20658,20233,19590,20603,20787,20742,21050,21264,20598,20932,19778,20469,20676,20307,20158,21172,19933,20344,20263,20401,20882,20429,20471,19814,20666,20029,20358,20360,20503,20723,19996,19598,20409,19511,20675,20793,20265,20431,20797,20671,20874,20809,20476,19871,20137,19849,21076,20240,20602,20271\n46833,45837,47950,45754,46734,46396,47042,46931,47199,47873,46617,47190,46305,46521,46363,47451,46657,46263,46494,46081,45626,45958,47020,46430,45903,46438,45995,47530,47872,46102,47564,45945,45868,47562,47439,45759,47647,-1,46616,47448,47346,47067,46966,47167,46562,46379,-1,46440,47036,46245,46934,46065,45707,47766,45745,45857,46231,46257,46001,47246,45957,47210,47434,47782,47769,46688,47144,45679,46536,-1,47108,47678,47208,46937,46626,46738\n104785,105060,105491,104686,104774,105235,104232,105107,105939,105225,104272,104641,104946,104395,105389,105120,104294,104201,105258,104157,104271,104897,105574,105575,104985,104658,105204,105705,104783,104720,105424,105301,104995,104938,104557,104380,105734,104898,104300,104394,105051,105019,104684,104560,103947,104904,-1,104910,104869,104939,105329,105236,104657,105641,105035,105931,105970,105115,105667\n92559,92466,92770,92904,92960,92684,93093,92144,93381,92716,92494,94053,93078,93551,93323,92546,91925,92884,92426,93743,92914,92878,92200,92117,93245,92091,93768,93836,92023,-1,93865,93190,-1,93717,93958,92524,92320,93614,93342,92628,92501,92955,92963,93716,94066,93195,92746,93554,93935,93429,93317,92349,93526,92634,92781,93135\n108162,110895,112781,107665,-1,106406,105514,111876,111504,110256,107693,111049,108045,105426,106881,113169,108260,105876,110070,107833,104796,108799,110078,110158,110100,109848,112092,104453,114859,113346,103372,108449,105316,108801,106057,-1,108970,-1,106051,105073,107782,107089,108615,107681,110852,106424,111153,110329,114550,110282,109773,108377,112405,112189,111793,104206,103520,106846,106861,108759,114258,107999,114640,111486,114281,110800,114993,115028,105720\n46910,45510,45989,46311,45678,46304,45454,46501,47274,47233,47211,47375,47189,47148,46232,46137,46149,46419,47504,46662,45827,45894,45699,46999,46100,45648,46349,46272,47196,45579,45886,45597,46155,46745,45917,45456,46635,46357,45747,46866,45777,47138,46896,46986,45540,46570,46545,46104,-1,47262,46900,46397,46561,45826\n4368,3845,3825,4656,4525,4723,4855,4326,3893,4272,4716,4073,3898,4539,3834,4530,3872,5030,3699,4753,4417,4072,5158,4259,5180,3741,-1,4833,4020,3607,4702,4586,4606,4063,4234,4106,4817,3672,4662,4739,3822,4104,4022,4164,4233,4815,4361,4691,4158,4195,5068,3850,4925,4700,3858,3794,4420,4730,3567,-1,3606,4659,5051,4410,5056,5201,4093,5143,4442,4091,4376,4251\n-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\n114001,114159,115330,114032,114692,114824,114753,112853,114138,112965,115205,114776,113957,114659,-1,113794,113815,113575,114789,114472,113638,113657,113761,115221,114655,115020,115506,113777,113701,113016,115580,115418,113564,113882,113922,115139,114301,114362,114292,114199,-1,114590,113219,113850,113077,114950,114614,114167,114585,114626,113643,114874,113434,113439,114064,113596,115084,115328,114709,113704,113604,113004,114248,114598,114869,113352,114179,-1,115510,114272,113799,113629,113607,114610,113955\n8549,-1,8050,8013,7440,8264,8940,7870,7759,7836,7716,8710,7959,8509,7916,8411,8486,7782,8542,8007,7877,8197,8268,7373,8095,8944,7555,-1,8022,7274,-1,7796,8874,8880,8497,8645,9237,7862,8217,7417,9094,8564,7578,8360,8446,7872,8174,8759,8390,7485,7692,8572,8361,7567,7980,8296,7726,7611,8729,8304,8923,8636,8683,8220,-1\n20838,21258,21025,21249,21370,21400,20797,21239,21003,21296,20212,20882,20849,21375,19938,19804,20358,20829,20523,20598,21719,20757,20675,20787,21245,21536,20913,20603,21377,21493,19777,20265,20240,19871,20723,20912,20589,20809,20409,20236,21119,20310,20893,19707,21156,21382,21297,20666,20401,19717,-1,19882\n4922,3455,4845,3990,4078,3554,4494,4982,4346,4333,3909,4031,3369,4657,4066,4854,5164,4842,5296,3725,4074,3610,3630,3496,3995,3386,4371,4071,3670,3734,4101,4335,3770,4211,5121,4788,4736,4257,3783,4587,4009,4488,4342,5197,4044,5154,4276,4375,3975,4909,3861,4385,4824,4146,4403,4380,-1\n26299,27179,26718,26196,27312,26852,26291,26162,26640,26730,26993,25997,26419,27040,27376,27071,27092,-1,25730,26708,25755,25492,26574,26351,27180,26845,27017,25845,26177,25764,26854,27039,26863,26606,27088,26650,25925,26875,27456,26566,26832,27016,25512,26601,27613,26619,26192,26754,26969,26759,26712,26225,27562,27336,25948,25969,27172,26330,26396,27605,26208,26094,25500,26374,25789,25871,26206,25763,27447,26332,25988,26711,26134,26781,26783,27063,26946,26536,25418,27110,27077,26658,25422,26571\n73015,72951,71749,71846,72214,72538,72582,-1,72932,73304,72199,72807,73018,73065,72393,72318,72458,73302,72620,73282,71760,72495,73160,73158,73530,72175,72085,72123,72440,71897,71644,72007,72124,72469,72219,72369,72968,71839,71925,73034,72892,72794,73380,71485,72711,72927,72945,72923,-1,72730,73144\n117529,117858,118320,117847,117900,224,117866,118013,117656,239,223,117774,117298,117474,117877,433,118054,117169,117359,118137,118268,118185,117526,117683,-1,118242,117787,117467,117804,117475,117463,118104,429,117674,118235,117179,117818,117704,118030,117914,117805,117473,117953,118035,117927,117530,117776,117607,448,31,117933,117367,368,117781,117498,129\n40795,40226,41685,40378,39729,40671,41624,40960,40603,39985,41159,39958,39940,-1,40240,40676,40619,39614,-1,41046,40209,41187,41682,40278,40311,40103,41269,40852,40484,41821,39792,40782,41248,41292,41086,40815,40715,39939,41124,-1,41482,41283,40401,40716,40472,40891,41172,39233,40192,41423\n70765,71934,72080,72217,71245,71621,72645,72310,71114,71380,70801,70415,71071,72525,71473,71792,70864,70644,71816,70889,71654,71850,71689,-1,70961,72172,70261,71619,71295,71242,70932,71614,71407,70482,70518,70598,72501,70513,72202,71098,72093,70382,71730,70681,70608,70991,71776,71992,72148\n97859,98158,98370,98433,98241,98991,99575,99111,98079,99223,99796,97745,98119,97938,98823,98710,-1,99771,99215,98862,-1,98758,99010,99056,98199,-1,98840,98442,98526,98515,99477,98455,97942,99158,98626,99578,98641,98314,99234,99410,98777,99048,98508,98538,99367,98690,98377,99295,98124,99055,98342,98250,98826,99282,98805,98292,97964,99054,98907,98366,99686,98201,98705,99541,99250,99113,97958,99843,98487,98721,99198,98578,98965,98400\n42824,42871,41960,41770,41337,43024,43091,41359,40968,41367,42744,43368,42364,42306,41931,41262,42465,43213,41502,-1,43634,42730,41530,42686,42696,41554,41610,43419,42583,42405,-1,41614,42983,41975,42475,41845,43440,42230,43155,41945,41996,42417,41935,42580,-1,41669,42386,41310,41149,43113,41286,41912,42623,42616,41820,42223,41552,42798,41888,43685,42856,41798,41691,43279,42006,42445,43437,41519,41454,42090\n26236,24788,23766,24495,26195,25438,24443,25356,26297,26996,24525,26806,27346,26498,27832,25907,27498,24653,26968,26371,27472,26663,26988,25620,27888,25868,25109,26485,26814,23982,27370,27199,26358,24726,25754,27046,25414,28293,27990,23958,26890,27541,27028,27030,26829,25094,24313,24914,26011,25328,25150,24794,24479,27167,25379,27188,26700,25393,25748,24658,25769,25991\n12108,11780,11072,11359,10932,12424,11566,12133,10870,12499,11306,12810,12399,11586,12658,11820,11994,11671,12837,-1,12425,12167,11212,12317,11600,11594,12313,11051,11287,11683,12250,12164,11041,12360,11914,12110,10909,12913,12797,12141,-1,-1,11622,11549,12220,11567,11778,12466,11986,12507,12521,11644,11356,12576,11750,11073,11392,11204,12594,12105,11552,12217\n-1,4747,4308,5485,5644,5296,5237,5301,5217,5504,5197,5799,5164,5047,5384,-1,4914,4648,4372,4474,5590,5620,4982,5281,4909,6048,5220,4777,5666,5524,4948,5933,4592,5918,4796,5760,5754,5356,5154,5121,6150,5326,5294\n42197,40093,41376,41768,42475,42451,40711,41270,40393,40411,40245,42352,42833,41830,40236,42341,41472,41272,41943,42590,42237,42744,42314,41998,40729,40319,40573,41514,42250,40898,41082,42093,41382,40887,41974,40928,42238,41713,41056,40698,40936,41914,40681,41225,40241,40788,41406,41782,40447,40224,40507,41224,41411,40823,41592,40128,40488,41630,40946,41263,41655,42498,40403,42111,42525,-1,41141,42596\n13964,13883,-1,12534,12574,13249,12809,12660,14110,13995,12978,13236,13916,-1,13292,13724,12539,13445,13527,13520,-1,12374,13857,14006,13970,14235,12650,12736,13843,13781,13032,13919,12981,12945,12595,12267,13168,13406,13402,13933,13383,13655,13636,13740,12774,14151,13051,13064,14050,12760,12849,12341,12444,13182,12390,13630,12279,12882,13660,13421\n104647,105034,103189,104410,104763,104941,104749,103641,103413,105009,104215,104593,104754,103012,103580,104214,104844,104689,103163,104579,104527,103108,104002,103528,103799,103352,104133,104548,104547,103216,103295,103782,103793,103098,103824,104190,103749,104862,104233,103535,103540,103255,103277,104354,103603,103822,104541,104050,104561,103269,103624,103003,103404,103410,104588,104566,104334,103051,103963,104242,104801,103596,104741,103452,104217,103706,104347,104678,104614,103084,104814,104765,103873,104159,104699,103442,103137,103126,104599,104550,103894,103061,104104,103502,104852,102953,104257,103532,103272,104552,103299,104877,104042,103802,104273,103526,104694,104158,103041,104008,103655,104074,103239,104417\n17237,15675,18366,15404,15673,17131,15986,15798,15950,17811,15790,17718,16819,16052,15363,17384,18372,17782,18100,16047,17807,17261,16196,16447,17427,15632,16575,16612,15863,15976,18167,18295,15979,15903,15666,17713,16642,-1,18160,15531,17334,16625,17341,17869,17991,17104,17800,17476,15444,16455,16088,18212,15388,16605,18309,17963,16965,16986,18207,16244,17905,16820,16403,15982,18282,17634,16316,15717,17772,16118,18603,17033,16880,18103,18653,16394,15892,18215,15610,17675,16149,16871,16210,15556,16001,16973,17231,18370,17833,16351,17359,17357,18453,16962,16361,17197,15679,17827,17877,15814\n46098,45431,44794,45112,46122,45822,44620,46157,45148,44714,44962,46769,44559,44519,45017,46663,45795,45403,45196,45412,44301,46321,46282,44897,46583,46025,45438,46022,45539,46749,46581,45053,46051,45618,46757,45835,44720,46766,44898,44882,44335,46652,46243,-1,46083,44347,45258,45860,45688,44866,46125,46735,45006,46289,45883,45329,46131,45661,45870,46391,45702,46393,44388,46042,45334,45536,45325,45572\n25614,26291,25969,25984,26342,-1,26351,25304,25948,25871,25361,26536,26192,26606,26619,25158,25428,26034,25801,25192,25078,25997,25252,24776,25141,26550,26326,26611,26374,25112,24647,25925,26206,26570,26162,26299,25237,-1,24735,26601,25450,25764,26094,26650,25001,26658,25845,25500,25157,25794,25169,25492,25512,26227,25484,25422,-1,25290,-1,24878,25988,25711,24984,25789,25418,25160,25494,25730,26419,26712,25175,25696,26718,25590,25291\n57683,58514,56855,58992,58001,57876,58555,58147,57156,57025,57487,57140,58357,58080,58617,59194,57431,57413,59024,57846,58980,56731,59371,60054,58355,58256,57364,57558,59228,56665,58770,57450,57556,56854,59470,57720,59538,57272,59454,58496,59305,56375,-1,58501,57377,57023,57131,57774,59370,57493,59543,57854,59312,58927,58318,59548,57203,59073,58258,57873,57406,58694,59372,59007,58784,58108,57483,57141,59203\n72235,73319,72372,73560,72802,72448,73739,73379,73687,72104,73082,73030,73505,73107,72075,72959,71890,72800,71952,73650,73195,72761,73049,72957,72279,72248,73779,72940,72984,72755,73485,73331,73487,72630,72712,73221,72350,73387,72427,72459,73672,73774,72240,72536,73267,72948,71935,72977,72857,73538,72215,72439,72767,72276,72559,73250,72140,72155,72485,73140,73559,-1,72196,72926,73448,72985,72797,71893,73511,72639,72584,73341,71977,72600,72484,72432,72705,73398,72185,73145,73123,72038,73174,73484,72257,73108,72149,73335,73266,72010,72241\n111050,111041,112842,112360,112175,111828,111922,112402,111135,112345,111268,112628,111032,110571,110754,111408,112513,111919,111605,111380,113076,111559,112590,111869,111990,112089,113141,112921,110918,110710,111872,111279,112952,110487,111033,111599,110603,110716,111074,111567,112837,112775,111438,112144,111351,112476,112227,111864,-1,112055,112173,111203,111814,110840,112140,112840,111307,111378,111721,110788,111796,112768,111734,111627,111227,111217,112249,112539,112609,110757,110858,112224,111202,111636,111842\n2198,980,1409,1093,1987,2268,437,1233,1456,391,1125,297,885,474,1400,1337,1639,117896,2271,1372,1671,1257,566,2414,11,826,767,117798,812,428,118212,817,967,1916,1352,63,727,119,1075,1711,2103,1008,173,1043,1229,118214,1289,591,984,473,-1,1650,841,1026,539,1475,118218,808,195,1152,982,747,118024,1593,1642,1603,1478,1676,485,1826,404,424,988,889,559,1972,1370,1011,1496,1255,1009,1090,972,1343,905,176,1302\n91789,93843,91863,92479,92366,92419,-1,93301,92851,94117,91790,92853,92832,92944,93960,92228,93185,92243,93828,92591,93409,93926,93512,92129,92863,93634,92554,91869,91868,93305,92216,93166,94058,93348,93433,93397,92581,92827,93214,92986,93777,92911,92809,92420,93024,91473,92550,93442,93436,93386,93770,92190,93043,92396,92281,92703,92398,91636,93798,93776,-1,93720,-1,92178,93396,92768,92338,92405,92875,93712,93111,92632,92439,92261,93032\n28715,-1,30741,29617,28506,29760,28698,28502,30115,28644,30316,29451,29815,30226,30182,28725,28851,28997,29478,29835,30013,29283,30270,29308,29987,30411,28423,30309,29302,30573,29072,30751,28729,29301,29173,29581,-1,28445,28919,29309,30029,30273,28974,28844,30168,30222,30253,30250,29534,28994,29116,29911,28890,28861,28575,28206,30056,28908,29776,28626,29230,29242,30540,29688,28429,28683,28477,29878,29008,28448,30748,30403,28929\n40386,40292,42329,42384,44418,40618,41119,40030,40456,43022,43700,43930,45169,38765,39745,42210,42690,-1,43351,41580,39589,40105,41003,42407,40108,42855,40817,43277,42463,39204,42425,40725,43927,44219,42841,39899,39853,42369,40555,43201,-1,43747,41740,41273,41985,41478,42206,42858,44192,45212,40834,42532,42388,41254,41217,40502,40540,41907,39041,44480,42727,39770,43629,38634,41070,40179,42168,40436,40705,41304,41916,40511,42644,39802,39045,40173,38877,41604,-1,41631,41140,44473,40391,40728,41000,-1,41837,41093,42649,43449,41451,42915,42342,44699,43598,44106\n41740,44737,41217,44626,46407,43351,42858,44221,42342,43617,46719,44418,45275,44473,44939,43449,43598,46679,43022,45757,43700,42384,46452,44219,44106,44255,42425,45940,43823,45582,42649,43930,42644,44480,-1,42388,41985,46720,41916,45135,41451,44192,43201,45036,43958,42532,46940,42210,43747,-1,44445,46358,43604,43277,41604,45620,-1,44599,46573,45583,42915,43996,-1,43974,44218,45435,46741,43629,45799,45315,43927,44786,42407,41281,42841,46682,44699,45585,42855,46760,45212,42206,44247,45238,45651,44226,42727,44298,43221,41907,42690,44025,42369,46040,45976,46849\n51945,52707,-1,52257,52187,51532,52123,51213,50950,51626,51624,51757,52198,51120,50770,-1,51304,51571,51582,51239,52056,51105,52350,52625,51725,52373,51696,52528,50792,50999,52532,51922,51168,51802,51179,51316,51036,51787,52387,52554,-1,51360,-1,51184,51898,51008,51892,51520,51786,-1,51351,52604,51975,52315,50990\n54682,55295,54698,55887,55758,55056,56084,55326,55174,54922,54960,55830,55454,54329,54838,54466,54420,55505,55639,55802,55049,-1,55409,55002,54149,55700,55480,56161,54771,55596,55091,55381,55248,55487,55183,56245,55541,54843,55636,56179,55553,55375,55269,54406,55670,54820,56016,54914,55173,55570,55414,55152,55813,55228,55313,55812,55294,54707,54924,54749,55363\n77827,76942,78548,77591,78410,77695,79082,78489,77272,77970,79011,78274,79123,78894,78646,77178,78667,77062,77936,78461,77714,77550,79294,77084,78942,77674,77850,77652,78403,77161,78519,77790,77447,78542,77303,78180,77438,79255,78474,77370,79126,77496,78745,79423,76740,78492,77253,79157,78911,79241,76893,79164,79272,77738,78427,78327,79428,78892,78856,77484\n48013,48074,49040,49345,49383,47818,49554,49224,50295,50012,47524,48041,49150,49968,49189,50165,47245,49437,50035,47531,48171,-1,48673,48871,49003,48391,47532,47633,48243,49330,49063,49162,48548,48317,47605,48931,48423,49251,47635,49415,50039,47264,49174,49825,48954,48732,49253,-1,50060,49535,-1,49560,50280,48917,47568,49727,49789,49055,48393,48887,48397,48239,49179,48682,48485,47305,48986,49908,50097,47366,48242,47331\n74023,73118,71400,73483,71786,72673,70922,73785,70237,70897,71492,73728,70168,74147,70940,70098,73625,74110,72556,73229,71858,70035,71437,73067,74011,70213,72967,71355,71831,72853,73756,70052,74181,-1,73520,71281,73948,72864,70565,74290,74044,74415,71678,71780,72713,71960,73572,70773,73322,71551,72000,70546,72542,70917,70215,72690,70856,70673,73950,74398,70436,71563,71124,71908,70686,71677,72989,72366,72754,72131,70870,71847,70459,72816,73127,70423,71681,72242,71645,71475,73817,70832,70925,73609,71050,72633,73584,70074,72437,72777,72001,71264,70203,70821,70911,72103,72649,70301,73755,70080,73247,74163,73091,71622,73776,71307,72773,72431,73129,72264,72995,71093,72657,73343,72367,72379,73017,71337,72206,71217,72305,71683,72390,72232,70808,72851,72500,73347\n72629,71377,73010,71591,72574,72889,72618,71394,72154,72309,71628,72298,72776,72014,72739,71778,72339,72990,72015,72449,71507,72122,71434,71829,72931,72473,72049,71817,-1,71820,72275,72265,72648,71879,72771,72002,71842,71869,-1,72226,72697,71868,72243,72069,71422,72740,72094,72644,72631,71785,72212,72614,71903,72091,72635,72521,72663,72766,-1\n83338,83785,83641,84063,82528,83229,84079,85030,83387,83618,84069,85993,83268,85260,82367,86093,83028,85049,85068,82698,84662,84724,83323,84077,83502,82173,84311,85258,84197,83983,85751,84241,83380,85529,84148,84288,83794,84229,82672,84777,83749,83081,83312,83205,84457,-1,83894,84157,84760,84268,82531,84534,85520,84447,84834,84257,85142,83702,83269,84339,84394,-1,85267,84547,84619,83661,85577,83250,85461,84111,85198,84406,85038,85010,86061,85421,85725,83429,82991,85743,84030,84686,-1,84839,85164,85050,84338,84232,83535,85835,85897,84755,84231,84208,83960,84844,83249,85145,85214\n15525,15625,16985,15822,16593,17068,16538,16627,15894,16117,16399,16221,16991,16359,17049,17031,15777,16571,17058,17281,15564,17300,16838,16273,16268,16314,16924,16095,17133,16469,15546,16369,17084,16572,15558,15683,16497,16568,15508,17235,16831,-1,17121,16007,16241,16532,16304,16788,-1,17426,16748,17413,15906,15536,15823,16865,15975,16393,15951,-1,17232\n986,1871,2534,988,1593,1591,2229,2396,525,2305,714,2420,1086,1434,1490,751,1125,1164,2108,1496,1634,2934,1233,2059,2004,1818,1879,1575,625,2089,1474,1445,712,1093,2258,926,1594,2225,1905,1951,2053,1014,1152,2553,2681,1642,2476,828,808,2153,668,1409,1867,2434,2742,683,2455,626,1011,737,1641,508,1400,1833,1302,1475,1256,1501,1261,2668,1122\n23739,26296,23175,25416,26758,25334,24969,22361,21764,25607,19145,19619,22160,26877,22093,24125,24760,23803,26486,21558,22621,23318,20405,19667,19697,18980,26097,21212,18913,27225,26362,21970,26115,23885,19429,22769,22011,26878,22703,25022,27209,25162,17990,22561,20928,21662,20225,19766,23943,18510,19845,21165,20173,26790,21116,25653,26662,26103,20416,24544,22495,22152,20584,17510,20330,24036,20746,26673,25714,19841,-1,25110,19390,20249,21859,-1,17810,19017,24440,26888,22188\n118212,498,1603,1400,566,1478,11,679,1642,1896,474,1337,1352,967,118272,1090,497,885,113,118308,817,175,826,119,1639,1009,297,767,1409,118214,1496,428,1255,1008,424,404,972,1247,1346,1434,173,1818,1043,1604,118282,323,1075,984,591,118264,980,727,473,1474,889,118216,1157,1593,747,1711,1826,485,841,1343,195,229,1671,118162,106,1026,2034,1372,259,559,1289,1125,118218,1456,1370,63,982,1618,995,437,1229,905\n74172,73953,73433,73636,73238,73670,74209,73613,74050,73416,74299,73867,74392,74007,74234,73822,73827,74455,73370,73097,74728,74493,73995,73074,74232,74568,73753,74412,73904,73751,73032,74235,73766,73724,73945,74600,73517,73514,74593,-1,73692,73161,73606,74005,73880,73290,74391,74010,73720,74401,72947,73428,73400,72784,74367\n60157,59711,60565,59467,60486,59939,59316,60135,59275,59171,60623,60011,59728,60106,59694,60474,58604,59615,59623,58532,58515,58679,58451,58745,59195,59000,58186,58629,59163,59447,59677,59993,58626,59465,59336,-1,59217,60207,58587,58596,59053,58653,59124,60117,59791,59914,58900,58236,59522,58861,59619,59089,58593\n19151,19759,19570,19352,19869,18802,18860,18592,18529,20552,21303,20059,19726,20051,20566,18445,21312,-1,20931,19025,20696,18878,20976,19783,21692,20153,18536,21096,20805,18303,19848,19880,19327,19277,20030,19086,19020,21183,20428,19579,19904,20277,19353,20543,18229,21406,18656,19344,21048,19921,18969,19045,18889,21149,20101\n67044,68187,67249,-1,68134,66892,67768,67900,-1,-1,68560,67158,68497,67804,67011,68261,67662,67800,68479,67509,66464,69038,67178,-1,67294,66848,68369,67375,68585,67039,67392,67790,67985,67883,69274,67634,-1,67778,67106,68828,68700,67194,68536,67529,68982,68252,69379,69131,69447,68420,67752,67338,68912,69350,69142,68032,67874,67518,67581,68590,-1,67410,67880,67147,68403,68012\n100881,101734,101947,101249,101608,100798,101649,101120,101999,101123,100623,100800,100345,101221,102061,100931,101751,101606,101040,100817,102026,101906,100477,102289,100337,100154,101988,100556,101199,101706,101740,100948,100445,100650,100862,100014,100703,101011,101088,100342,101555,101357,101492,101036,101680,100730,101468,101277,100855,100471,101507,101293,100975,100785,101244,100463,99892,101190,101027,101331,101157,101923,101111,101409,101330,101378\n109107,109328,110630,-1,109359,106803,110072,109976,108538,110914,110306,108610,108976,107584,107678,107853,110939,108310,110259,108534,107614,109485,107285,108020,107774,108631,108590,110257,108195,109233,107854,107922,108093,110088,109726,108575,108464,109274,109094,110592,110117,109749,108944,109214,109547,-1,107104,111286,107773,110227,109260,109628,109203,108778,108216,107496,108429,108340,107561,107947,106995,109512,109925,108148,107783,106836,109266,108493,110260,110083,109491,106509,109699,110102,110838,108463,108528,110567,108445,108247,107490\n83434,83701,83745,82832,83340,82569,83403,83846,82652,82876,83214,84485,82747,82852,83693,83159,82430,83922,83036,83516,83101,83155,82911,84442,82786,82453,84377,84735,82514,84440,84087,82709,83845,84150,82565,83379,83709,83025,82936,84290,82819,83879,82545,84668,84425,83858,83880,82279,84104,83607,-1,83009,83789,83132,83235,84694,83266,82551,82869,83848,83104,83100,83598,82489,83583,83561,83959,83886,83527,83418,84638,83646,84332,82561,82767,84151,83014,82943,83457,83281,84238,83843,83559,83410,83491,82625,83124,83499\n51910,54216,53600,52989,53972,52692,52136,54674,52684,53173,52294,54251,53008,53041,54552,52439,52700,53587,54250,52724,54040,54786,53380,54407,54389,53910,54662,54793,54457,52041,53517,52529,54314,52375,53584,52755,51771,53261,53155,53706,51220,53119,53351,52040,54328,53510,53680,53042,51697,53551,52976,52251,53025,52057,52413,54501,53748,53036,53358,53304,53061,54419,51630,54016,52826,52309,51695,53157,53504,52480,53974,53890\n47704,46687,46764,46911,-1,46464,47665,47325,47515,46398,46568,46462,46160,46457,46885,46771,46036,47142,46774,46637,47342,45717,47151,46400,45909,46837,46261,46627,47143,47234,47219,46713,46454,46994,47336,46681,46303,46069,46862,47022,45990,46532,46197,47136,46761,46106,46431,46416,47012,47748,47435,46189,46486,47072,47384,45912,47880,-1,46854,46812,47091,47508,46634,45740,46053,47462\n3471,1516,1824,1828,2931,1800,1766,2218,2028,2803,2747,2321,1880,-1,1476,-1,1029,1883,3459,-1,2348,2462,2262,3207,2256,2802,2446,-1,1801,1624,2848,2888,1705,1430,3068,2376,2029,1693,2472,2849,2282,3547,2020,2383,2711,2435,2616,1977,1955,3653,3195,1723,3332,3243,3422,1165,3154,2230,2217,2835,1426,2065,2107,3048,2993,2757,1571\n67560,67105,66998,68663,67079,68094,67500,67318,66983,67115,-1,67185,67963,68165,67379,67104,68508,67291,68281,67404,67038,67939,66860,68498,66989,67898,67283,67770,68156,67233,66788,67481,67186,67674,67180,67545,67660,67860,68074,66921,67805,67779,68353,68228,67705,66662,68594,-1,67862,68137,67430,67461,67246,67377,67827,67329,68251,67598,66661,67586,67416,67943,68052,67312\n3910,4776,3398,4396,4455,3105,3468,3117,3142,4026,3629,3453,4347,3967,4201,3913,4401,3257,4631,4052,3088,3464,3733,4145,3637,3715,4248,3628,4218,4603,3592,4502,3180,4363,4343,4663,3826,3182,4148,4225,3695,3729,3735,4649,3788,3188,3731,3202,3608,3506,3219,4282,3514,3321,4236,4577,3586,4274,4217,3320,3177,3631,-1,4508,4265,4682\n29975,30943,29390,30857,31036,29696,29776,30618,30182,30101,29866,30091,30880,30839,29846,30855,31233,30200,30331,29570,29902,29955,30306,30738,30142,29628,30917,29967,30346,30304,-1,31219,30747,30273,30348,29742,30349,30510,30644,29749,31230,31031,30388,30779,30984,30827,29826,30188,30697,30518,30309,30622,30020,30823,30835,29554,30137,31389,30934,30452,30724,29675,-1,29790,30525,-1,29668,31001,29793,30354,30305,30035,31129,30396,30639,30115,30893,29510\n48584,49090,48516,48962,49388,-1,49141,49369,49591,48943,48845,-1,49776,48747,49500,48964,49856,49337,48906,49339,49099,49521,48479,49796,50142,48327,49982,49294,49543,49654,48096,49610,48722,48693,49780,48757,48879,49725,48884,48505,48912,49533,48937,48979,49216,49309,49810,48856,49469,49446\n9387,8389,8280,8660,8621,9384,9336,9251,9120,7809,8405,7822,8932,9209,8694,7886,9004,10161,8732,8368,9806,8481,9468,8059,7739,9296,9208,8431,9015,8699,9179,8343,9524,9606,9812,8820,8854,7574,7941,8641,8514,8722,8534,7627,8527,8369,9130,8023,9381,9443,-1,8715,8697,7742,7938,8739,8202,8002,8681,8162,9106\n40305,38437,37046,39265,39747,38822,39807,37828,38117,38449,39160,37178,39878,38865,38560,38604,38800,39426,38780,40006,39995,39230,40067,39444,37449,39363,40185,40262,40905,39871,38684,36958,39285,37898,38333,36999,37431,37840,40743,39555,38911,39639,37406,38219,36916,39518,-1,39348,39572,40094,38136,38354,40614,39301,38320,38086,37973,39643,39207,40992,40086,-1,37501,39944,37860,40510,39539,40497,38840,39055,40040,38325\n94506,94750,94261,95408,96004,94575,94558,95416,95827,94548,94663,95519,95735,95380,95619,95782,-1,95662,95003,95695,94329,95420,95472,96089,95456,94176,94958,95102,95226,95252,94184,94777,95106,95004,95905,94678,95348,94938,94425,94752,95262,95006,95356,94441,94926,94583,94730,94202,94367,95120,-1,-1,95358,95849,94705,95164,95203,95054,95182,95278,-1,95941,95804,95747,95509,94552,94914,94537,94642,95838,94661,94272\n43788,45142,44030,44325,-1,44306,43837,44584,45008,44257,44119,45099,44931,44476,43415,44893,43774,44372,43397,44532,44179,44316,44379,44594,44293,43724,44124,45156,43726,44890,43924,44622,44820,44575,45398,45203,44696,43648,44470,44063,43521,45041,43907,-1,44585,45368,45161,44564,44450,44854,43810,45047,44040,45267,43741,44173,43857,44951,44038\n"
  },
  {
    "path": "tests/score.py",
    "content": "from __future__ import print_function\nimport sys\nstars=open(\"hip_main.dat\",\"r\").readlines()\nresult=open(sys.argv[1],\"r\").readlines()\nresult_real=open(sys.argv[2],\"r\").readlines()\nassert len(result)==len(result_real)\n\nstardict={}\nfor i in range(0,len(stars)):\n\tstardict[int(stars[i].split(\"|\")[1])]=i\n\nscores=[]\nfor i in range(0,len(result)):\n\tthisscore=[]\n\tt=0\n\tc=0\n\tw=0\n\ta=result[i].split(\",\")\n\tb=result_real[i].split(\",\")\n\tassert len(a)==len(b)\n\tfor j in range(0,len(a)):\n\t\tif int(a[j])!=-1:\n\t\t\tt+=1\n\t\t\tthisscore+=[stardict[int(a[j])]]\n\t\tif int(b[j])!=-1:\n\t\t\tif int(a[j])==int(b[j]):\n\t\t\t\tc+=1\n\t\t\telse:\n\t\t\t\tw+=1\n\tthisscore=[max((c-2*w)/float(max(t,1)),-1)]+thisscore\n\tif t>0:\n\t\tscores+=[[1.0]+thisscore]\n\telse:\n\t\tscores+=[[0.0]+thisscore]\n\na=0\nb=0\t\t\nfor i in range(0,len(scores)):\n\tif scores[i][1]<scores[i][0]:\n\t\tprint (i,\" \".join([str(j) for j in scores[i]]))\n\ta+=scores[i][0]\n\tb+=scores[i][1]\n\t\nprint (a,b)\t#print \n"
  },
  {
    "path": "tests/simulator.py",
    "content": "#!/usr/bin/python\n# coding: utf-8\n\n# Copyright (c) 2016 Joerg H. Mueller <nexyon@gmail.com>\n# \n# Permission is hereby granted, free of charge, to any person obtaining a\n# copy of this software and associated documentation files (the\n# \"Software\"), to deal in the Software without restriction, including\n# without limitation the rights to use, copy, modify, merge, publish,\n# distribute, distribute with modifications, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n# \n# The above copyright notice and this permission notice shall be included\n# in all copies or substantial portions of the Software.\n# \n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n# IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\n# THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n# \n# Except as contained in this notice, the name(s) of the above copyright\n# holders shall not be used in advertising or otherwise to promote the\n# sale, use or other dealings in this Software without prior written\n# authorization.\n\n# Imports\n# -------\n\nfrom __future__ import print_function\nimport pandas as pd\nimport numpy as np\nimport math\nimport sys\n\nBASE_PHOTONS = 19100 # photoelectrons per mm^2 and second of a magnitude 0 G2 star\n            \n\n# Geometric Transformations\n# -------------------------\n\ndef angles_to_vector(azimuth, altitude):\n    \"\"\"Transforms azimuth altitude representation to unit-length vectors.\"\"\"\n    caz = np.cos(azimuth)\n    saz = np.sin(azimuth)\n\n    cal = np.cos(altitude)\n    sal = np.sin(altitude)\n\n    x = caz * cal\n    y = saz * cal\n    z = sal\n\n    return np.array([x, y, z]).transpose()\n\ndef vector_to_angles(vectors):\n    \"\"\"Transforms unit-length vectors to the azimuth altitude representation.\"\"\"\n    x, y, z = split_vectors(vectors)\n\n    az = np.arctan2(y, x)\n    alt = np.arcsin(z)\n\n    return np.array([az, alt])\n\ndef split_vectors(vectors):\n    \"\"\"Splits vectors into their x, y and z components.\"\"\"\n    return vectors[..., 0], vectors[..., 1], vectors[..., 2]\n\ndef randomVectors(num):\n    \"\"\"Generates `num` random three dimensional unit-length vectors.\"\"\"\n    rands = np.random.rand(num, 2)\n\n    ca = np.cos(2. * np.pi * rands[:, 0])\n    sa = np.sin(2. * np.pi * rands[:, 0])\n\n    z = rands[:, 1] * 2 - 1\n    r = np.sqrt(1 - z * z)\n\n    return np.vstack([r * ca, r * sa, z]).transpose()\n\ndef random_matrix():\n    \"\"\"Generates a random 3x3 orientation matrix.\n    Based on James Arvo's algorithm from Graphics Gems III, pages 117-120\"\"\"\n    rands = np.random.rand(3)\n\n    ca = np.cos(2. * np.pi * rands[0])\n    sa = np.sin(2. * np.pi * rands[0])\n\n    R = ([[ca, sa, 0],\n        [-sa, ca, 0],\n        [0, 0, 1.]])\n\n    cb = np.cos(2 * np.pi * rands[1])\n    sb = np.sin(2 * np.pi * rands[1])\n\n    sc = np.sqrt(rands[2])\n    mc = np.sqrt(1 - rands[2])\n\n    v = np.array([[cb * sc, sb * sc, mc]])\n\n    H = np.eye(3) - 2 * np.dot(v.transpose(), v)\n\n    matrix = -np.dot(H, R)\n\n    return matrix\n\ndef add_vector_noise(base_vectors, stddev):\n    \"\"\"Adds Gaussian noise to a list of vectors.\"\"\"\n    num = len(base_vectors)\n\n    v_r = randomVectors(num)\n\n    v_r = np.cross(base_vectors, v_r)\n\n    v_r /= np.linalg.norm(v_r, axis=1).reshape((-1, 1))\n\n    v_r = base_vectors + stddev * (np.random.randn(num, 1) * v_r)\n\n    return v_r / np.linalg.norm(v_r, axis=1).reshape((-1, 1))\n\n# Camera\n# ------\n\nclass Camera(object):\n    def __init__(self, resolution, pixel_ar = 1, principal_point = (0.5, 0.5)):\n        self.resolution = resolution\n        self.pixel_ar = pixel_ar\n        self.principal_point = principal_point\n\n    def from_angles(self, azimuth, altitude):\n        \"\"\"Transforms camera-relative azimuth altitude information to pixel coordinates.\"\"\"\n        res_x, res_y = self.resolution\n        pp_x, pp_y = self.principal_point\n\n        ar = self.pixel_ar * res_x / res_y\n\n        theta = np.pi / 2 - altitude\n\n        # x-axis flip: note that we look in the positive z-axis direction,\n        # so in a right-handed coordinate system the x-axis goes to the left,\n        # but we want it to go to the right, so we flip the x-axis\n        # the y-axis still goes up\n        # this equals transforming the azimuth as follows:\n        alpha = np.pi - azimuth\n\n        r = self.project(theta)\n        x = (     np.cos(alpha) * r + pp_x) * res_x\n        y = (ar * np.sin(alpha) * r + pp_y) * res_y\n\n        return np.array((y, x)).transpose()\n\n    def to_angles(self, pos):\n        \"\"\"Transforms pixel coordinates to camera-relative azimuth altitude information.\"\"\"\n        res_x, res_y = self.resolution\n        pp_x, pp_y = self.principal_point\n\n        ar = self.pixel_ar * res_x / res_y\n\n        x = pos[:, 1]\n        y = pos[:, 0]\n\n        x = (x / res_x - pp_x)\n        y = (y / res_y - pp_y) / ar\n\n        az = np.pi - np.arctan2(y, x)\n\n        r = np.sqrt(x ** 2 + y ** 2)\n        theta = self.unproject(r)\n\n        alt = np.pi / 2 - theta\n\n        return az, alt\n\nclass EquidistantCamera(Camera):\n    def __init__(self, f, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.f = f\n        super(EquidistantCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        return theta * self.f\n\n    def unproject(self, r):\n        return r / self.f\n\nclass RectilinearCamera(Camera):\n    def __init__(self, f, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.f = f\n        super(RectilinearCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        result = np.tan(theta) * self.f\n        result[theta > np.pi / 2.] = 1.e9\n        return result\n\n    def unproject(self, r):\n        return np.arctan(r / self.f)\n\nclass OrthographicCamera(Camera):\n    def __init__(self, f, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.f = f\n        super(OrthographicCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        result = np.sin(theta) * self.f\n        result[theta > np.pi / 2.] = 1.e9\n        return result\n\n    def unproject(self, r):\n        return np.arcsin(r / self.f)\n\nclass EquisolidAngleCamera(Camera):\n    def __init__(self, f, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.f = f\n        super(EquisolidAngleCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        result = np.sin(theta / 2.) * 2. * self.f\n        result[theta > np.pi] = 1.e9\n        return result\n\n    def unproject(self, r):\n        return 2. * np.arcsin(r / (2. * self.f))\n\nclass StereographicCamera(Camera):\n    def __init__(self, f, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.f = f\n        super(StereographicCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        result = np.tan(theta / 2.) * 2. * self.f\n        result[theta > np.pi] = 1.e9\n        return result\n\n    def unproject(self, r):\n        return 2. * np.arctan(r / (2. * self.f))\n\nclass CubicCamera(Camera):\n    def __init__(self, k1, k2, resolution, pixel_ar = 1., principal_point = (0.5, 0.5)):\n        self.k1 = k1\n        self.k2 = k2\n        super(CubicCamera, self).__init__(resolution, pixel_ar, principal_point)\n\n    def project(self, theta):\n        return self.k1 * theta + self.k2 * theta ** 3\n\n    def unproject(self, r):\n        # 0 = a * theta ^ 3 + c * theta + d\n        a = self.k2\n        c = self.k1\n        d = -r\n\n        if a == 0:\n            theta = r/c\n            return theta\n\n        delta_0 = -3. * a * c\n        delta_1 = 27. * a * a * d\n\n        if a < 0:\n            C = ((delta_1 + np.sqrt(np.complex64(delta_1 ** 2 - 4. * delta_0 ** 3))) / 2.) ** (1. / 3.)\n\n            theta = np.real(-1. / (3. * a) * (C + delta_0 / (C)))\n        else:\n            C = ((delta_1 + np.sqrt(delta_1 ** 2 - 4. * delta_0 ** 3)) / 2) ** (1. / 3.)\n\n            theta = -1. / (3. * a) * (C + delta_0 / (C))\n\n\n        return theta\n\n\n# Star Catalog\n# ------------\n\nclass StarCatalog:\n    def __init__(self, filename='hip_main.dat'):\n        if filename is not None:\n            self.read(filename)\n            self.preprocess()\n\n    def preprocess(self):\n        filter_index = np.logical_not(np.logical_or(np.isnan(self.catalog['RAdeg']), np.isnan(self.catalog['Vmag'])))\n\n        self.catalog = self.catalog[filter_index]\n\n        self.star_vectors = angles_to_vector(np.deg2rad(self.catalog['RAdeg']), np.deg2rad(self.catalog['DEdeg']))\n\n        self.magnitudes = self.catalog['Vmag'].values\n\n        # alternative magnitude\n        #VT = self.catalog['VTmag']\n        #BT = self.catalog['BTmag']\n        ## http://www.aerith.net/astro/color_conversion.html\n        ## http://ads.nao.ac.jp/cgi-bin/nph-bib_query?bibcode=2002AJ....124.1670M&db_key=AST&high=3d1846678a19297\n        #self.magnitudes = VT + 0.00097 - 0.1334 * (BT - VT) + 0.05486 * (BT - VT) ** 2 - 0.01998 * (BT - VT) ** 3\n\n        # randomly fill out missing magnitudes\n        #magnitudes = self.catalog['Vmag'].values\n        #nans = np.isnan(magnitudes)\n        #magnitudes[nans] = np.random.choice(magnitudes[~nans], np.sum(nans))\n        #self.catalog['Vmag'] = magnitudes\n\n    def lookup_indices(self, indices):\n        result = indices.copy()\n        result[indices >= 0] = self.catalog['HIP'].iloc[indices[indices >= 0]]\n        return result\n\n    def read(self, filename='hip_main.dat'):\n        \"\"\"Loads the Hipparchos star catalog.\"\"\"\n\n        columns = [\n            \"Catalog\",\n            \"HIP\",\n            \"Proxy\",\n            \"RAhms\",\n            \"DEdms\",\n            \"Vmag\",\n            \"VarFlag\",\n            \"r_Vmag\",\n            \"RAdeg\",\n            \"DEdeg\",\n            \"AstroRef\",\n            \"Plx\",\n            \"pmRA\",\n            \"pmDE\",\n            \"e_RAdeg\",\n            \"e_DEdeg\",\n            \"e_Plx\",\n            \"e_pmRA\",\n            \"e_pmDE\",\n            \"DE:RA\",\n            \"Plx:RA\",\n            \"Plx:DE\",\n            \"pmRA:RA\",\n            \"pmRA:DE\",\n            \"pmRA:Plx\",\n            \"pmDE:RA\",\n            \"pmDE:DE\",\n            \"pmDE:Plx\",\n            \"pmDE:pmRA\",\n            \"F1\",\n            \"F2\",\n            \"---\",\n            \"BTmag\",\n            \"e_BTmag\",\n            \"VTmag\",\n            \"e_VTmag\",\n            \"m_BTmag\",\n            \"B-V\",\n            \"e_B-V\",\n            \"r_B-V\",\n            \"V-I\",\n            \"e_V-I\",\n            \"r_V-I\",\n            \"CombMag\",\n            \"Hpmag\",\n            \"e_Hpmag\",\n            \"Hpscat\",\n            \"o_Hpmag\",\n            \"m_Hpmag\",\n            \"Hpmax\",\n            \"HPmin\",\n            \"Period\",\n            \"HvarType\",\n            \"moreVar\",\n            \"morePhoto\",\n            \"CCDM\",\n            \"n_CCDM\",\n            \"Nsys\",\n            \"Ncomp\",\n            \"MultFlag\",\n            \"Source\",\n            \"Qual\",\n            \"m_HIP\",\n            \"theta\",\n            \"rho\",\n            \"e_rho\",\n            \"dHp\",\n            \"e_dHp\",\n            \"Survey\",\n            \"Chart\",\n            \"Notes\",\n            \"HD\",\n            \"BD\",\n            \"CoD\",\n            \"CPD\",\n            \"(V-I)red\",\n            \"SpType\",\n            \"r_SpType\",\n        ]\n\n        self.catalog = pd.read_csv(filename, sep='|', names=columns, skipinitialspace=True)\n\n# Star Detector\n# -----\n\nclass StarDetector:\n    def __init__(self, sigma_psf, t_exp, aperture, base_flux):\n        self.sigma_psf = sigma_psf\n        self.t_exp = t_exp\n        self.aperture = aperture\n        self.base_flux = base_flux\n        \n    @staticmethod\n    def norm_gaussian(sigma):\n        return math.erf((2*sigma)**-0.5)**2/4.\n    #photon_floor is the cutoff at which we can round the number of photons from a star down to zero\n    def compute_flux(self, magnitude, add_noise=True,photon_floor=0.001):\n        flux = self.base_flux * (10 ** (-magnitude / 2.5))\n\n        if add_noise:\n            flux = flux + np.random.normal(0, IMAGE_VARIANCE, len(flux))\n            \n            flux_per_photon = self.base_flux* self.t_exp * self.aperture ** 2 * np.pi/BASE_PHOTONS\n            flux += flux_per_photon*np.random.normal(0, self.norm_gaussian(self.sigma_psf)*np.sqrt(np.clip(flux/flux_per_photon,photon_floor,None)), len(flux))\n        return np.clip(flux,photon_floor*flux_per_photon,None)\n\n    def compute_magnitude(self, flux):\n        return -2.5 * np.log10(flux / self.base_flux)\n\n    def compute_magnitude_threshold(self):\n        threshold = THRESH_FACTOR*IMAGE_VARIANCE\n        return self.compute_magnitude(threshold)\n\n    def add_noise(self, magnitude):\n        return self.compute_magnitude(self.compute_flux(magnitude))\n\n# Scene\n# -----\n\nclass Scene:\n    def __init__(self, catalog, camera, detector, gaussian_noise_sigma=None, quantization_noise=None, magnitude_gaussian=None):\n        self.catalog = catalog\n        self.camera = camera\n        self.detector = detector\n        self.gaussian_noise_sigma = gaussian_noise_sigma\n        self.quantization_noise = quantization_noise\n        self.magnitude_gaussian = magnitude_gaussian\n        self.orientation = None\n        self.pos = None\n        self.ids = None\n        self.magnitude_threshold = detector.compute_magnitude_threshold()\n    def compute(self, orientation=None):\n        \"\"\"Generates a scene for the star tracker.\n        If not orientation is given a random one is generated.\n        Gaussian noise is applied to star positions if enabled.\"\"\"\n\n        res_x, res_y = self.camera.resolution\n\n        if orientation is None:\n            orientation = random_matrix()\n\n        self.orientation = orientation\n\n        star_ids = np.arange(len(self.catalog.star_vectors))\n        pos = np.dot(self.catalog.star_vectors, orientation.transpose())\n\n\n        # instead vector noise\n        if self.gaussian_noise_sigma:\n            pos = add_vector_noise(pos, self.gaussian_noise_sigma)\n\n        az, alt = vector_to_angles(pos)\n\n        scene = self.camera.from_angles(az, alt)\n\n        if self.quantization_noise:\n            scene = np.int32(scene)\n\n        selection = np.logical_and(np.logical_and(scene[:, 0] >= 0, scene[:, 0] < res_y), np.logical_and(scene[:, 1] >= 0, scene[:, 1] < res_x))\n\n        scene = scene[selection]\n        scene_ids = star_ids[selection]\n\n        self.pos = scene\n        self.magnitudes = self.catalog.magnitudes[scene_ids]\n        self.ids = self.catalog.lookup_indices(scene_ids)\n\n    def add_false_stars(self, false_stars):\n        \"\"\"Adds randomly generated false stars to a scene.\"\"\"\n\n        if isinstance(false_stars, int):\n            res_x, res_y = self.camera.resolution\n\n            false_star_pos = np.random.rand(false_stars, 2) * (res_y, res_x)\n        else:\n            false_star_pos = false_stars\n            false_stars = len(false_stars)\n\n        if self.quantization_noise:\n            false_star_pos = np.int32(false_star_pos)\n\n        self.pos = np.concatenate([self.pos, false_star_pos])\n        self.magnitudes = np.concatenate([self.magnitudes, np.random.choice(self.catalog.magnitudes[self.catalog.magnitudes < self.magnitude_threshold], size=false_stars)])\n        self.ids = np.concatenate([self.ids, -np.ones(false_stars, np.int32)])\n\n    def copy(self, camera=None, orientation=None, copy_false_stars=True):\n\n        false_stars = self.pos[self.ids == -1] if copy_false_stars else []\n\n        if camera is None:\n            camera = self.camera\n        else:\n            false_stars = camera.from_angles(*self.camera.to_angles(false_stars))\n\n        if orientation is None:\n            orientation = self.orientation\n\n        scene = Scene(self.catalog, camera, self.detector, self.gaussian_noise_sigma, self.quantization_noise, self.magnitude_gaussian)\n        scene.compute(orientation)\n\n        scene.add_false_stars(false_stars)\n\n        scene.scramble()\n\n        scene.add_magnitude_noise(self.magnitude_gaussian)\n\n        scene.filter_magnitudes()\n\n        return scene\n\n    def scramble(self):\n        \"\"\"Scrambles the order of stars in a scene.\"\"\"\n\n        scramble_index = np.random.permutation(range(len(self.ids)))    #permutation returns ndarray\n        \n        if len(scramble_index) == 0:\n            return None\n\n        self.pos = self.pos[scramble_index, ...]\n        self.magnitudes = self.magnitudes[scramble_index]\n        self.ids = self.ids[scramble_index]\n\n    def add_magnitude_noise(self, gaussian=None):\n        #if catalog:\n        #    self.magnitudes[self.scene_ids >= 0] += np.random.normal(0, self.catalog.catalog['e_VTmag'])\n\n        self.magnitudes = self.detector.add_noise(self.magnitudes)\n\n        if gaussian is not None:\n            self.magnitudes += np.random.normal(0, gaussian, size=len(self.magnitudes))\n\n    def filter_magnitudes(self):\n        filter_index = self.magnitudes <= self.magnitude_threshold\n        self.pos = self.pos[filter_index]\n        self.magnitudes = self.magnitudes[filter_index]\n        self.ids = self.ids[filter_index]\n\n    @staticmethod\n    def random(catalog, camera, detector, min_true, max_true, min_false, max_false, min_stars=1, max_tries = 1000, gaussian_noise_sigma=None, quantization_noise=None, magnitude_gaussian=None):\n        scene = Scene(catalog, camera, detector, gaussian_noise_sigma, quantization_noise, magnitude_gaussian)\n\n        num_stars = 0\n        tries = 0\n\n        ok = False\n\n        while not ok and tries < max_tries:\n            scene.compute()\n\n            scene.add_false_stars(np.random.randint(min_false, max_false + 1))\n\n            scene.scramble()\n\n            scene.add_magnitude_noise(magnitude_gaussian)\n\n            scene.filter_magnitudes()\n\n            num_stars = np.sum(scene.ids >= 0)\n\n            ok = num_stars >= min_true and num_stars <= max_true and len(scene.ids) > min_stars\n\n            tries += 1\n\n        if tries == max_tries:\n            return None\n\n        return scene\n\n#only do this part if we were run as a python script\nif __name__ == '__main__':\n\tif len(sys.argv)!=4:\n\t\tsys.stdout.write(\"Usage: python simulator.py calibration.txt input.csv results.csv\\n\")\n\t\texit()\n\n\texec(open(sys.argv[1]).read())\n\n\tres_x = float(IMG_X) # pixels\n\tres_y = float(IMG_Y) # pixels\n\n\t# normalized focal length\n\tf = 0.5 / np.tan(np.deg2rad((IMG_X*PIXSCALE/3600)) / 2.)\n\t# pixel aspect ratio\n\tpixel_ar = 1.\n\n\t# normalized principal point\n\tppx = 0.5\n\tppy = 0.5\n\n\tgaussian_noise_sigma = (np.pi*PIXSCALE)*np.sqrt(POS_VARIANCE)/(180*3600.0) # rad\n\n\tcam = 0\n\n\tsigma_psf = 0.5*float(DOUBLE_STAR_PX) # pixel\n\n\n\tt_exp = float(EXPOSURE_TIME) # s\n\taperture = float(APERTURE) # mm\n\tbase_flux = float(BASE_FLUX)\n\n\tmagnitude_gaussian = 0.02 # mag\n\n\tmin_true = 0\n\tmax_true = 1000\n\tmin_false = 0\n\tmax_false = MAX_FALSE_STARS\n\n\n\tcatalog = StarCatalog()\n\tcameras = [\n\t\tRectilinearCamera,  #no distortion\n\t\tEquidistantCamera,  # the rest model barrel and pin-cushion distortion\n\t\tEquisolidAngleCamera,\n\t\tStereographicCamera,\n\t\tOrthographicCamera,\n\t]\n\n\tcamera = cameras[cam](f, (res_x, res_y), pixel_ar, (ppx, ppy))\n\tdetector = StarDetector(sigma_psf, t_exp, aperture, base_flux)\n\tnum_scenes = 100\n\tinputs = []\n\toutputs = []\n\n\tfor i in range(num_scenes):\n\t\tscene = Scene.random(catalog, camera, detector, min_true, max_true, min_false, max_false, gaussian_noise_sigma=gaussian_noise_sigma, magnitude_gaussian=magnitude_gaussian)\n\t\tinputs.append(np.hstack((scene.pos[::, ::-1], scene.magnitudes.reshape(-1, 1))).flatten())\n\t\toutputs.append(scene.ids)\n\n\tdef write_csv(filename, lines):\n\t\twith open(filename, 'w') as f:\n\t\t\tfor line in lines:\n\t\t\t\tf.write(','.join(str(value) for value in line) + '\\n')\n\n\twrite_csv(sys.argv[2], inputs)\n\twrite_csv(sys.argv[3], outputs)\n"
  },
  {
    "path": "tests/test.c",
    "content": "/****************************************************************************\n * Copyright (c) 2016 Joerg H. Mueller <nexyon@gmail.com>                   *\n *                                                                          *\n * Permission is hereby granted, free of charge, to any person obtaining a  *\n * copy of this software and associated documentation files (the            *\n * \"Software\"), to deal in the Software without restriction, including      *\n * without limitation the rights to use, copy, modify, merge, publish,      *\n * distribute, distribute with modifications, sublicense, and/or sell       *\n * copies of the Software, and to permit persons to whom the Software is    *\n * furnished to do so, subject to the following conditions:                 *\n *                                                                          *\n * The above copyright notice and this permission notice shall be included  *\n * in all copies or substantial portions of the Software.                   *\n *                                                                          *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *\n * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *\n * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *\n *                                                                          *\n * Except as contained in this notice, the name(s) of the above copyright   *\n * holders shall not be used in advertising or otherwise to promote the     *\n * sale, use or other dealings in this Software without prior written       *\n * authorization.                                                           *\n ****************************************************************************/\n\n#include \"../beast/beast.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <math.h>\n#include <time.h>\n\n#define MAX_STARS 1000\n#define VECTOR_LENGTH 3\n\n#define EDISON_SPEED_FACTOR 30\n\nstar_db *S_DB,*S_FILTERED;\nstar_query *SQ_RESULTS;\nconstellation_db *C_DB;\n\n/***\n * Determines the HIP numbers of stars in a scene.\n * \n * @param spikes The data of the spikes in the scene. x, y, and magnitude interleaved.\n * @param result The output array that should be filled with the HIP numbers.\n * @param length The number of spikes in the scene.\n */\nint IDNUM;\nvoid star_id(double spikes[], int result[], size_t length)\n{\t\n\tstar_db* img_stars=new star_db;\n\tfor(size_t i = 0; i < length; i++) {\n\t\t*img_stars+=star(spikes[3*i]-IMG_X/2.0,-(spikes[3*i+1]-IMG_Y/2.0),BASE_FLUX*powf(10.0,-spikes[3*i+2]/2.5),-1);\n\t\tresult[i] = -1;\n\t}\n\tstar_db* img_stars_n_brightest=img_stars->copy_n_brightest(MAX_FALSE_STARS+REQUIRED_STARS);\n\tconstellation_db * img_n_brightest=new constellation_db(img_stars_n_brightest,MAX_FALSE_STARS+2,1);\n\tdb_match* lis = new db_match(C_DB,img_n_brightest);\n\tif (lis->p_match>0.9) {\n\t\tfloat x=lis->winner->R11;\n\t\tfloat y=lis->winner->R21;\n\t\tfloat z=lis->winner->R31;\n\t\t\n\t\t//Tests relative matching, and fills in missing stars\n\t\t//and fill in missing stars\n\t\tSQ_RESULTS->kdsearch(x,y,z,MAXFOV/2,THRESH_FACTOR*IMAGE_VARIANCE);\n\t\tC_DB->results->kdsearch(x,y,z,MAXFOV/2,THRESH_FACTOR*IMAGE_VARIANCE);\n\t\tstar_db* near_stars=SQ_RESULTS->from_kdresults();\n\t\tconstellation_db* fov_db = new constellation_db(near_stars,C_DB->results->r_size(),1);\n\t\tdelete near_stars;\n\t\tC_DB->results->clear_kdresults();\n\t\tSQ_RESULTS->clear_kdresults();\n\t\t\n\t\tconstellation_db * img=new constellation_db(img_stars,MAX_FALSE_STARS+2,1);\n\t\tdb_match* fov_match = new db_match(fov_db,img);\n\t\tstar_db* db_stars=fov_match->winner->from_match();\n\t\tfor(size_t i = 0; i < length; i++) result[i] = db_stars->get_star(i)->id;\n\t\tdelete img;\n\t\tdelete db_stars;\n\t\tdelete fov_db;\n\t\tdelete fov_match;\n\t}\n\tdelete lis;\n\tdelete img_n_brightest;\n\tdelete img_stars;\n\tdelete img_stars_n_brightest;\n}\n\n\nint main(int argc, char* argv[])\n{\n\tif(argc < 4) {\n\t\tprintf(\"./test input.csv calibration.txt year\\n\");\n\t\tprintf(\"year >= 1991.25\");\n\t\treturn 0;\n\t}\n\t\n\tload_config(argv[2]);\n\tS_DB=new star_db;\n\tS_DB->load_catalog(\"hip_main.dat\",atof(argv[3]));\n\t\n\tSQ_RESULTS=new star_query(S_DB);\n\tSQ_RESULTS->kdmask_filter_catalog();\n\tSQ_RESULTS->kdmask_uniform_density(REQUIRED_STARS);\n\tS_FILTERED=SQ_RESULTS->from_kdmask();\n\tC_DB=new constellation_db(S_FILTERED,2+DB_REDUNDANCY,0);\n\tSQ_RESULTS->reset_kdmask();\n\t// read scenes and run star identification\n\tFILE* file = fopen(argv[1], \"r\");\n\n\tchar *line = NULL;\n\tsize_t len = 0;\n\tssize_t read;\n\n\tdouble* data = (double*)malloc(sizeof(double) * VECTOR_LENGTH * MAX_STARS);\n\tint* results = (int*)malloc(sizeof(int) * MAX_STARS);\n\n\tclock_t time_sum = 0;\n\tint run_times = 0;\n\tfor(IDNUM=0;(read = getline(&line, &len, file)) != -1;IDNUM++) {\n\t\tsize_t i = 0;\n\t\tfor(char* result = strtok(line, \",\"); result != NULL; i++) {\n\t\t\tdata[i] = atof(result);\n\t\t\tresult = strtok(NULL, \",\");\n\t\t}\n\t\tunsigned int length = i / VECTOR_LENGTH;\n\t\tclock_t start = clock();\n\t\tstar_id(data, results, length);\n\t\tclock_t end = clock();\n\t\ttime_sum += end - start;\n\t\tfor(i = 0; i < length; i++) printf(\"%d%c\", results[i], i == length - 1 ? '\\n' : ',');\n\t\trun_times++;\n\t\tfprintf(stderr,\"Time on edison: %f\\n\", ((float)time_sum*EDISON_SPEED_FACTOR) / (CLOCKS_PER_SEC*run_times));\n\t}\n\n\tfree(line);\n\tfree(results);\n\tfree(data);\n\tfclose(file);\n\n\treturn 0;\n}\n\n"
  },
  {
    "path": "tests/unit_test.sh",
    "content": "#!/bin/bash\n\nCALIBRATE=0\nREGENERATE=0\nESA_TEST=0\nIMG_TEST=0\n\n#PYTHON=\"/usr/bin/python2.7\"\nPYTHON=\"/usr/bin/python3.10\"\n\nwhile getopts \":crei\" opt; do\n  case $opt in\n    c)\n\t  CALIBRATE=1\n      ;;\n    r)\n\t  REGENERATE=1\n      ;;\n    e)\n\t  ESA_TEST=1\n      ;;\n    i)\n\t  IMG_TEST=1\n      ;;\n   \\?)\n      echo \"Usage: ./unit_test.sh [options] testdir [cmd]\"\n      echo -e \"\"\n      echo -e \"\\t-c\\tCalibrate based on images in testdir/samples/\"\n      echo -e \"\\t-r\\tRegenerate ESA test\"\n      echo -e \"\\t-e\\tRun ESA test\"\n      echo -e \"\\t-i\\tRun image test\"\n      echo -e \"\"\n      echo -e \"Example cmd:\"\n\t  echo -e \"\\tmassif-visualizer: valgrind --tool=massif\"\n\t  echo -e \"\\tkcachegrind: valgrind --tool=cachegrind\"\n      echo -e \"\"\n      exit\n      ;;\n  esac\ndone\nshift \"$[$OPTIND-1]\"\n\npushd \"`dirname $0`\">/dev/null\n\nTESTDIR=\"$1\"\nif [ ! -d \"$TESTDIR\" ]; then\n\techo \"'$TESTDIR' is not a valid directory \"\n\texit\nfi\n\nshift\n\nKILLPID=\"\"\nif [[ $ESA_TEST == 1 ]]; then\n\tmake || exit\nfi\nif [[ $IMG_TEST == 1 ]]; then\n\tpushd ../beast >/dev/null\n\t./go || exit\n\tpopd>/dev/null\nfi\nif [[ $CALIBRATE == 1 ]]; then\n\techo \"Calibrating...\"\n\ttime $PYTHON calibrate.py $TESTDIR || exit\nfi\nif [[ $REGENERATE == 1 ]]; then\n\techo \"Regenerating...\"\n\ttime $PYTHON simulator.py $TESTDIR/calibration.txt $TESTDIR/input.csv $TESTDIR/result.csv || exit\nfi\n\nif [[ $ESA_TEST == 1 ]]; then\n\techo \"ESA test...\"\n\tmake &&\n\ttime $@ ./test $TESTDIR/input.csv $TESTDIR/calibration.txt 1991.25 | tee $TESTDIR/result_real.csv &&\n\tgprof test | gprof2dot -s | dot -Tpdf -o test.pdf &&\n\techo \"camera coverage simulation percent:\" &&\n\techo \"100-`diff --suppress-common-lines --speed-large-files -y $TESTDIR/result.csv $TESTDIR/result_real.csv | wc -l`/1\" | bc -l &&\n\t$PYTHON score.py $TESTDIR/result.csv $TESTDIR/result_real.csv \nfi\n\nif [[ $IMG_TEST == 1 ]]; then\n\t$@ $PYTHON startracker.py $TESTDIR/calibration.txt 1991.25 $TESTDIR/median_image.png &\n\tKILLPID=\"$!\"\n\tsleep 10\n\t#make sure we dont crash when given an image w/ no stars\n\techo \"rgb.solve_image('$TESTDIR/median_image.png')\" | nc -w1 127.0.0.1 8010\n\tsleep 0.5\n\tfor i in $TESTDIR/samples/*; do\n\t\techo \"rgb.solve_image('$i')\" | nc -w1 127.0.0.1 8010\n\t\tsleep 0.5\n\t\techo \"rgb.solve_image('$i')\" | nc -w1 127.0.0.1 8010\n\t\tsleep 0.5\n\tdone\n  #sleep 0.5\n  #echo 'exception test' | nc 127.0.0.1 8010\n  sleep 0.5\n\techo 'quit()' | nc -w1 127.0.0.1 8010\nfi\nif [ \"$KILLPID\" != \"\" ] ; then \n\tkill $KILLPID\nfi\npopd>/dev/null\n\n"
  }
]