From e616e04191d907b385087f6e517281fc5d9b38c3 Mon Sep 17 00:00:00 2001 From: webisu Date: Tue, 1 Oct 2024 15:37:59 -0400 Subject: [PATCH] fixes copyright issues --- aux_progs/grb2.h | 2 + aux_progs/smallest_4.c | 2 +- aux_progs/smallest_grib2.c | 1 + aux_progs/uint8.c | 1 + c_api/grb2_cmd.c | 2 +- c_api/grb2_mk_inv.c | 1 + c_api/read.c | 2 + c_api/write.c | 2 +- cproj.c | 444 ------------------ include/proj.h | 355 -------------- proj.h | 355 -------------- somfor.c | 275 ----------- sominv.c | 248 ---------- wgrib2/Check_pdt_size.c | 13 + wgrib2/Cluster.c | 7 +- wgrib2/CodeTable4_4.h | 1 + wgrib2/Cress_lola.c | 2 +- wgrib2/Cyclic.c | 18 + wgrib2/EOF.c | 6 + wgrib2/Flush.c | 17 + wgrib2/Hybrid.c | 5 + wgrib2/Inv.c | 4 +- wgrib2/Match_inv.c | 9 + wgrib2/Misc.c | 4 + wgrib2/Ncpu.c | 6 + wgrib2/New_grid.c | 20 + wgrib2/Precision.c | 5 + wgrib2/Reset_delayed_error.c | 2 +- wgrib2/Sec1.c | 5 + wgrib2/UDF.c | 3 +- wgrib2/addtime.c | 2 + wgrib2/check_dup_gribtable.sh | 4 +- wgrib2/check_gribdat.sh | 2 + wgrib2/codetable_4_230.c | 2 + wgrib2/create_tables.sh | 2 +- wgrib2/enc_jpeg2000_clone.c | 2 + wgrib2/flt2ieee.c | 3 +- wgrib2/flt2ieee_nan.c | 4 +- wgrib2/fnlist.c | 2 + wgrib2/fnlist.h | 4 +- wgrib2/function.sh | 25 +- ...s and Credits _ U.S. Geological Survey.pdf | Bin 0 -> 110866 bytes wgrib2/gctpc/copyright.txt | 10 + wgrib2/grb2.h | 2 + .../ecmwf/create_ecmwf_gribtable.sh | 2 +- .../ecmwf/filter_local_gribtable.sh | 2 + wgrib2/grid_id.h | 2 + wgrib2/ieee2flt.c | 2 +- wgrib2/ieee2flt_nan.c | 2 +- wgrib2/intpower.c | 3 +- wgrib2/jpeg_pk.c | 2 + wgrib2/make_gribtable.sh | 3 +- wgrib2/ncep_grids.c | 9 + wgrib2/proj4_initialize.c | 5 + wgrib2/proj4_wgrib2.h | 1 + wgrib2/rd_seq_grib.c | 16 + wgrib2/rotll.c | 2 + wgrib2/setup_user_gribtable.c | 12 + wgrib2/simple_pk.c | 3 +- wgrib2/subtime.c | 4 +- wgrib2/test_sec.c | 4 +- wgrib2/units.c | 3 +- wgrib2/unpk_0.c | 2 +- wgrib2/wgrib2_api.h | 2 +- wmo_scripts/get_BUFR02020.sh | 1 + wmo_scripts/get_CCT05.sh | 1 + wmo_scripts/get_CCT08.sh | 1 + wmo_scripts/get_CCT11.sh | 1 + wmo_scripts/get_CCT14.sh | 1 + wmo_scripts/get_code_Table_0.0.sh | 1 + wmo_scripts/get_code_Table_1.2.sh | 1 + wmo_scripts/get_code_Table_3.1.sh | 1 + wmo_scripts/get_code_Table_3.11.sh | 1 + wmo_scripts/get_code_Table_3.15.sh | 1 + wmo_scripts/get_code_Table_3.2.sh | 1 + wmo_scripts/get_code_Table_3.20.sh | 1 + wmo_scripts/get_code_Table_3.21.sh | 1 + wmo_scripts/get_code_Table_3.8.sh | 1 + wmo_scripts/get_code_Table_4.0.sh | 1 + wmo_scripts/get_code_Table_4.10.sh | 1 + wmo_scripts/get_code_Table_4.11.sh | 1 + wmo_scripts/get_code_Table_4.15.sh | 1 + wmo_scripts/get_code_Table_4.16.sh | 1 + wmo_scripts/get_code_Table_4.208.sh | 1 + wmo_scripts/get_code_Table_4.212.sh | 1 + wmo_scripts/get_code_Table_4.222.sh | 1 + wmo_scripts/get_code_Table_4.230.sh | 1 + wmo_scripts/get_code_Table_4.235.sh | 1 + wmo_scripts/get_code_Table_4.240.sh | 1 + wmo_scripts/get_code_Table_4.3.sh | 1 + wmo_scripts/get_code_Table_4.4.sh | 1 + wmo_scripts/get_code_Table_4.5_ncep.sh | 1 + wmo_scripts/get_code_Table_4.7.sh | 1 + wmo_scripts/get_code_Table_4.8.sh | 1 + wmo_scripts/get_code_Table_4.9.sh | 1 + wmo_scripts/get_code_Table_4.91.sh | 1 + wmo_scripts/get_code_Table_5.0.sh | 1 + wmo_scripts/get_code_Table_5.1.sh | 1 + wmo_scripts/get_code_Table_6.0.sh | 1 + 99 files changed, 290 insertions(+), 1707 deletions(-) delete mode 100644 cproj.c delete mode 100644 include/proj.h delete mode 100644 proj.h delete mode 100644 somfor.c delete mode 100644 sominv.c create mode 100644 wgrib2/gctpc/Copyrights and Credits _ U.S. Geological Survey.pdf create mode 100644 wgrib2/gctpc/copyright.txt diff --git a/aux_progs/grb2.h b/aux_progs/grb2.h index 44a4adb4..14ca8594 100644 --- a/aux_progs/grb2.h +++ b/aux_progs/grb2.h @@ -1,3 +1,5 @@ +/* 10/2024 Public Domain Wesley Ebisuzaki */ + #ifndef INT3 #define INT3(a,b,c) ((1-(int) ((unsigned) (a & 0x80) >> 6)) * (int) (((a & 127) << 16)+(b<<8)+c)) #endif diff --git a/aux_progs/smallest_4.c b/aux_progs/smallest_4.c index 81a034da..1f0f214f 100644 --- a/aux_progs/smallest_4.c +++ b/aux_progs/smallest_4.c @@ -1,6 +1,6 @@ #include #include -// +// 10/2024 Public Domain Wesley Ebisuzaki // 4 files .. same fields but with different packing // returns smaller of indiv fields // diff --git a/aux_progs/smallest_grib2.c b/aux_progs/smallest_grib2.c index c279d6bd..d42ed43a 100644 --- a/aux_progs/smallest_grib2.c +++ b/aux_progs/smallest_grib2.c @@ -1,5 +1,6 @@ #include #include +// 10/2024 Public Domain Wesley Ebisuzaki // // 3 files .. same fields but with different packing // returns smaller of indiv fields diff --git a/aux_progs/uint8.c b/aux_progs/uint8.c index f8333a4f..e89e3c06 100644 --- a/aux_progs/uint8.c +++ b/aux_progs/uint8.c @@ -2,6 +2,7 @@ #include #include #include "grb2.h" +/* 10/2024 Public Domain Wesley Ebisuzaki */ unsigned long int uint8(unsigned char *p) { diff --git a/c_api/grb2_cmd.c b/c_api/grb2_cmd.c index 1b13371e..4f807099 100644 --- a/c_api/grb2_cmd.c +++ b/c_api/grb2_cmd.c @@ -2,7 +2,7 @@ #include #include "c_wgrib2api.h" -/* +/* 10/2024 Public Domain Wesley Ebisuzaki * handles arguments for wgrib2 */ diff --git a/c_api/grb2_mk_inv.c b/c_api/grb2_mk_inv.c index 3ba3f59d..8f26fec2 100644 --- a/c_api/grb2_mk_inv.c +++ b/c_api/grb2_mk_inv.c @@ -1,6 +1,7 @@ #include #include "c_wgrib2api.h" +/* 10/2024 Public Domain Wesley Ebisuzaki */ /* C transation of fortran grb2_mk_inv(..) */ int grb2_mk_inv(char *grb, char *inv) { diff --git a/c_api/read.c b/c_api/read.c index f6a96a8d..61091a4a 100644 --- a/c_api/read.c +++ b/c_api/read.c @@ -2,6 +2,8 @@ #include #include "c_wgrib2api.h" +/* 10/2024 Public Domain Wesley Ebisuzaki */ + int main() { /* simple program to read grib2 */ long long int ndata; int ierr; diff --git a/c_api/write.c b/c_api/write.c index 2e36d446..5036b684 100644 --- a/c_api/write.c +++ b/c_api/write.c @@ -2,7 +2,7 @@ #include #include "c_wgrib2api.h" #define GRIDSIZE 1679 - +/* 10/2024 Public Domain Wesley Ebisuzaki */ int main() { /* simple program write grib2 file */ float data[GRIDSIZE]; char *template; diff --git a/cproj.c b/cproj.c deleted file mode 100644 index 0a26ba13..00000000 --- a/cproj.c +++ /dev/null @@ -1,444 +0,0 @@ -/******************************************************************************* -NAME Projection support routines listed below. - -PURPOSE: The following functions are included in CPROJ.C. - - SINCOS: Calculates the sine and cosine. - ASINZ: Eliminates roundoff errors. - MSFNZ: Computes the constant small m for Oblique Equal Area. - QSFNZ: Computes the constant small q for Oblique Equal Area. - PHI1Z: Computes phi1 for Albers Conical Equal-Area. - PHI2Z: Computes the latitude angle, phi2, for Lambert - Conformal Conic and Polar Stereographic. - PHI3Z: Computes the latitude, phi3, for Equidistant Conic. - PHI4Z: Computes the latitude, phi4, for Polyconic. - PAKCZ: Converts a 2 digit alternate packed DMS format to - standard packed DMS format. - PAKR2DM: Converts radians to 3 digit packed DMS format. - TSFNZ: Computes the small t for Lambert Conformal Conic and - Polar Stereographic. - SIGN: Returns the sign of an argument. - ADJUST_LON: Adjusts a longitude angle to range -180 to 180. - E0FN, E1FN, E2FN, E3FN: - Computes the constants e0,e1,e2,and e3 for - calculating the distance along a meridian. - E4FN: Computes e4 used for Polar Stereographic. - MLFN: Computes M, the distance along a meridian. - CALC_UTM_ZONE: Calculates the UTM zone number. - -PROGRAMMER DATE REASON ----------- ---- ------ -D. Steinwand, EROS July, 1991 Initial development -T. Mittan, EROS May, 1993 Modified from Fortran GCTP for C GCTP -S. Nelson, EROS June, 1993 Added inline comments -S. Nelson, EROS Nov, 1993 Added loop counter in ADJUST_LON -S. Nelson, EROS Jan, 1998 Changed misspelled error message - -*******************************************************************************/ -#include "cproj.h" - -#define MAX_VAL 4 -#define MAXLONG 2147483647. -#define DBLLONG 4.61168601e18 - -/* Function to calculate the sine and cosine in one call. Some computer - systems have implemented this function, resulting in a faster implementation - than calling each function separately. It is provided here for those - computer systems which don`t implement this function - ----------------------------------------------------*/ -void sincos(val, sin_val, cos_val) -double val; -double *sin_val; -double *cos_val; -{ -*sin_val = sin(val); -*cos_val = cos(val); -return; -} - -/* Function to eliminate roundoff errors in asin -----------------------------------------------*/ -double asinz (con) - -double con; -{ - if (fabs(con) > 1.0) - { - if (con > 1.0) - con = 1.0; - else - con = -1.0; - } - return(asin(con)); -} - -/* Function to compute the constant small m which is the radius of - a parallel of latitude, phi, divided by the semimajor axis. ----------------------------------------------------------------*/ -double msfnz (eccent,sinphi,cosphi) - double eccent; - double sinphi; - double cosphi; -{ -double con; - - con = eccent * sinphi; - return((cosphi / (sqrt (1.0 - con * con)))); -} - -/* Function to compute constant small q which is the radius of a - parallel of latitude, phi, divided by the semimajor axis. -------------------------------------------------------------*/ -double qsfnz (eccent,sinphi,cosphi) - double eccent; - double sinphi; - double cosphi; -{ -double con; - - if (eccent > 1.0e-7) - { - con = eccent * sinphi; - return (( 1.0- eccent * eccent) * (sinphi /(1.0 - con * con) - (.5/eccent)* - log((1.0 - con)/(1.0 + con)))); - } - else - return(2.0 * sinphi); -} - -/* Function to compute phi1, the latitude for the inverse of the - Albers Conical Equal-Area projection. --------------------------------------------*/ -double phi1z (eccent,qs,flag) - double eccent; /* Eccentricity angle in radians */ - double qs; /* Angle in radians */ - long *flag; /* Error flag number */ -{ -double eccnts; -double dphi; -double con; -double com; -double sinpi; -double cospi; -double phi; -long i; - - phi = asinz(.5 * qs); - if (eccent < EPSLN) - return(phi); - eccnts = eccent * eccent; - for (i = 1; i <= 25; i++) - { - sincos(phi,&sinpi,&cospi); - con = eccent * sinpi; - com = 1.0 - con * con; - dphi = .5 * com * com / cospi * (qs / (1.0 - eccnts) - sinpi / com + - .5 / eccent * log ((1.0 - con) / (1.0 + con))); - phi = phi + dphi; - if (fabs(dphi) <= 1e-7) - return(phi); - } - p_error ("Convergence error","phi1z-conv"); - *flag = 001; - return(ERROR); -} - -/* Function to compute the latitude angle, phi2, for the inverse of the - Lambert Conformal Conic and Polar Stereographic projections. -----------------------------------------------------------------*/ -double phi2z(eccent,ts,flag) - -double eccent; /* Spheroid eccentricity */ -double ts; /* Constant value t */ -long *flag; /* Error flag number */ - -{ -double eccnth; -double phi; -double con; -double dphi; -double sinpi; -long i; - - *flag = 0; - eccnth = .5 * eccent; - phi = HALF_PI - 2 * atan(ts); - for (i = 0; i <= 15; i++) - { - sinpi = sin(phi); - con = eccent * sinpi; - dphi = HALF_PI - 2 * atan(ts *(pow(((1.0 - con)/(1.0 + con)),eccnth))) - - phi; - phi += dphi; - if (fabs(dphi) <= .0000000001) - return(phi); - } - p_error ("Convergence error","phi2z-conv"); - *flag = 002; - return(002); -} - -/* Function to compute latitude, phi3, for the inverse of the Equidistant - Conic projection. ------------------------------------------------------------------*/ -double phi3z(ml,e0,e1,e2,e3,flag) - -double ml; /* Constant */ -double e0; /* Constant */ -double e1; /* Constant */ -double e2; /* Constant */ -double e3; /* Constant */ -long *flag; /* Error flag number */ - -{ -double phi; -double dphi; -long i; - -phi = ml; -for (i = 0; i < 15; i++) - { - dphi = (ml + e1 * sin(2.0 * phi) - e2 * sin(4.0 * phi) + e3 * sin(6.0 * phi)) - / e0 - phi; - phi += dphi; - if (fabs(dphi) <= .0000000001) - { - *flag = 0; - return(phi); - } - } -p_error("Latitude failed to converge after 15 iterations","PHI3Z-CONV"); -*flag = 3; -return(3); -} - -/* Function to compute, phi4, the latitude for the inverse of the - Polyconic projection. -------------------------------------------------------------*/ -double phi4z (eccent,e0,e1,e2,e3,a,b,c,phi) - -double eccent; /* Spheroid eccentricity squared */ -double e0; -double e1; -double e2; -double e3; -double a; -double b; -double *c; -double *phi; -{ -double sinphi; -double sin2ph; -double tanphi; -double ml; -double mlp; -double con1; -double con2; -double con3; -double dphi; -long i; - - *phi = a; - for (i = 1; i <= 15; i++) - { - sinphi = sin(*phi); - tanphi = tan(*phi); - *c = tanphi * sqrt (1.0 - eccent * sinphi * sinphi); - sin2ph = sin (2.0 * *phi); -/* - ml = e0 * *phi - e1 * sin2ph + e2 * sin (4.0 * *phi); - mlp = e0 - 2.0 * e1 * cos (2.0 * *phi) + 4.0 * e2 * - cos (4.0 * *phi); -*/ - ml = e0 * *phi - e1 * sin2ph + e2 * sin (4.0 * *phi) - e3 * - sin (6.0 * *phi); - mlp = e0 - 2.0 * e1 * cos (2.0 * *phi) + 4.0 * e2 * - cos (4.0 * *phi) - 6.0 * e3 * cos (6.0 * *phi); - con1 = 2.0 * ml + *c * (ml * ml + b) - 2.0 * a * (*c * ml + 1.0); - con2 = eccent * sin2ph * (ml * ml + b - 2.0 * a * ml) / (2.0 * *c); - con3 = 2.0 * (a - ml) * (*c * mlp - 2.0 / sin2ph) - 2.0 * mlp; - dphi = con1 / (con2 + con3); - *phi += dphi; - if (fabs(dphi) <= .0000000001 ) - return(OK); - } -p_error("Latitude failed to converge","phi4z-conv"); -return(004); -} - -/* Function to convert 2 digit alternate packed DMS format (+/-)DDDMMSS.SSS - to 3 digit standard packed DMS format (+/-)DDDMMMSSS.SSS. ------------------------------------------------------------------*/ -double pakcz(pak) - - double pak; /* Angle in alternate packed DMS format */ - { - double con; - double secs; - long degs,mins; - char sgna; - - sgna = ' '; - if (pak < 0.0) - sgna = '-'; - con = fabs (pak); - degs = (long) ((con / 10000.0) + .001); - con = con - degs * 10000; - mins = (long) ((con / 100.0) + .001); - secs = con - mins * 100; - con = (double) (degs) * 1000000.0 + (double) (mins) * 1000.0 + secs; - if (sgna == '-') - con = - con; - return(con); - } - -/* Function to convert radians to 3 digit packed DMS format (+/-)DDDMMMSSS.SSS -----------------------------------------------------------------------------*/ -double pakr2dm(pak) - - double pak; /* Angle in radians */ - { - double con; - double secs; - long degs,mins; - char sgna; - - sgna = ' '; - pak *= R2D; - if (pak < 0.0) - sgna = '-'; - con = fabs (pak); - degs = (long) (con); - con = (con - degs) * 60; - mins = (long) con; - secs = (con - mins) * 60; - con = (double) (degs) * 1000000.0 + (double) (mins) * 1000.0 + secs; - if (sgna == '-') - con = - con; - return(con); - } - -/* Function to compute the constant small t for use in the forward - computations in the Lambert Conformal Conic and the Polar - Stereographic projections. ---------------------------------------------------------------*/ -double tsfnz(eccent,phi,sinphi) - double eccent; /* Eccentricity of the spheroid */ - double phi; /* Latitude phi */ - double sinphi; /* Sine of the latitude */ - { - double con; - double com; - - con = eccent * sinphi; - com = .5 * eccent; - con = pow(((1.0 - con) / (1.0 + con)),com); - return (tan(.5 * (HALF_PI - phi))/con); - } - - -/* Function to return the sign of an argument - ------------------------------------------*/ -int gctpc_sign(double x) { -if (x < 0.0) - return(-1); -else - return(1); -} - -/* Function to adjust a longitude angle to range from -180 to 180 radians - added if statments - -----------------------------------------------------------------------*/ -double adjust_lon(x) - -double x; /* Angle in radians */ -{ -long temp; -long count = 0; -for(;;) - { - if (fabs(x)<=PI) - break; - else - if (((long) fabs(x / PI)) < 2) - x = x-(sign(x) *TWO_PI); - else - if (((long) fabs(x / TWO_PI)) < MAXLONG) - { - x = x-(((long)(x / TWO_PI))*TWO_PI); - } - else - if (((long) fabs(x / (MAXLONG * TWO_PI))) < MAXLONG) - { - x = x-(((long)(x / (MAXLONG * TWO_PI))) * (TWO_PI * MAXLONG)); - } - else - if (((long) fabs(x / (DBLLONG * TWO_PI))) < MAXLONG) - { - x = x-(((long)(x / (DBLLONG * TWO_PI))) * (TWO_PI * DBLLONG)); - } - else - x = x-(sign(x) *TWO_PI); - count++; - if (count > MAX_VAL) - break; - } - -return(x); -} - -/* Functions to compute the constants e0, e1, e2, and e3 which are used - in a series for calculating the distance along a meridian. The - input x represents the eccentricity squared. -----------------------------------------------------------------*/ -double e0fn(x) -double x; -{ -return(1.0-0.25*x*(1.0+x/16.0*(3.0+1.25*x))); -} -double e1fn(x) -double x; -{ -return(0.375*x*(1.0+0.25*x*(1.0+0.46875*x))); -} -double e2fn(x) -double x; -{ -return(0.05859375*x*x*(1.0+0.75*x)); -} -double e3fn(x) -double x; -{ -return(x*x*x*(35.0/3072.0)); -} - -/* Function to compute the constant e4 from the input of the eccentricity - of the spheroid, x. This constant is used in the Polar Stereographic - projection. ---------------------------------------------------------------------*/ -double e4fn(x) -double x; -{ - double con; - double com; - con = 1.0 + x; - com = 1.0 - x; - return (sqrt((pow(con,con))*(pow(com,com)))); - } - -/* Function computes the value of M which is the distance along a meridian - from the Equator to latitude phi. -------------------------------------------------*/ -double mlfn(e0,e1,e2,e3,phi) -double e0,e1,e2,e3,phi; -{ -return(e0*phi-e1*sin(2.0*phi)+e2*sin(4.0*phi)-e3*sin(6.0*phi)); -} - -/* Function to calculate UTM zone number--NOTE Longitude entered in DEGREES!!! - ---------------------------------------------------------------------------*/ -long calc_utm_zone(lon) -double lon; -{ -return((long)(((lon + 180.0) / 6.0) + 1.0)); -} diff --git a/include/proj.h b/include/proj.h deleted file mode 100644 index eb49170d..00000000 --- a/include/proj.h +++ /dev/null @@ -1,355 +0,0 @@ -/* Projection codes - - - 0 = Geographic - 1 = Universal Transverse Mercator (UTM) - 2 = State Plane Coordinates - 3 = Albers Conical Equal Area - 4 = Lambert Conformal Conic - 5 = Mercator - 6 = Polar Stereographic - 7 = Polyconic - 8 = Equidistant Conic - 9 = Transverse Mercator - 10 = Stereographic - 11 = Lambert Azimuthal Equal Area - 12 = Azimuthal Equidistant - 13 = Gnomonic - 14 = Orthographic - 15 = General Vertical Near-Side Perspective - 16 = Sinusiodal - 17 = Equirectangular - 18 = Miller Cylindrical - 19 = Van der Grinten - 20 = (Hotine) Oblique Mercator - 21 = Robinson - 22 = Space Oblique Mercator (SOM) - 23 = Alaska Conformal - 24 = Interrupted Goode Homolosine - 25 = Mollweide - 26 = Interrupted Mollweide - 27 = Hammer - 28 = Wagner IV - 29 = Wagner VII - 30 = Oblated Equal Area - 99 = User defined -*/ - -/* Define projection codes */ -#define GEO 0 -#define UTM 1 -#define SPCS 2 -#define ALBERS 3 -#define LAMCC 4 -#define MERCAT 5 -#define PS 6 -#define POLYC 7 -#define EQUIDC 8 -#define TM 9 -#define STEREO 10 -#define LAMAZ 11 -#define AZMEQD 12 -#define GNOMON 13 -#define ORTHO 14 -#define GVNSP 15 -#define SNSOID 16 -#define EQRECT 17 -#define MILLER 18 -#define VGRINT 19 -#define HOM 20 -#define ROBIN 21 -#define SOM 22 -#define ALASKA 23 -#define GOOD 24 -#define MOLL 25 -#define IMOLL 26 -#define HAMMER 27 -#define WAGIV 28 -#define WAGVII 29 -#define OBEQA 30 -#define USDEF 99 - -/* Define unit code numbers to their names */ - -#define RADIAN 0 /* Radians */ -#define FEET 1 /* Feed */ -#define METER 2 /* Meters */ -#define SECOND 3 /* Seconds */ -#define DEGREE 4 /* Decimal degrees */ -#define INT_FEET 5 /* International Feet */ - -/* The STPLN_TABLE unit value is specifically used for State Plane -- if units - equals STPLN_TABLE and Datum is NAD83--actual units are retrieved from - a table according to the zone. If Datum is NAD27--actual units will be feet. - An error will occur with this unit if the projection is not State Plane. */ - -#define STPLN_TABLE 6 - -/* General code numbers */ - -#define IN_BREAK -2 /* Return status if the interupted projection - point lies in the break area */ -#define COEFCT 15 /* projection coefficient count */ -#define PROJCT 30 /* projection count */ -#define SPHDCT 31 /* spheroid count */ - -#define MAXPROJ 31 /* Maximum projection number */ -#define MAXUNIT 5 /* Maximum unit code number */ -#define GEO_TERM 0 /* Array index for print-to-term flag */ -#define GEO_FILE 1 /* Array index for print-to-file flag */ -#define GEO_TRUE 1 /* True value for geometric true/false flags */ -#define GEO_FALSE -1 /* False val for geometric true/false flags */ - -/* GCTP Function prototypes */ - -long alberforint(double r_maj, double r_min, double lat1, double lat2, - double lon0, double lat0, double false_east, double false_north); -long alberfor(double lon, double lat, double *x, double *y); -long alberinvint( double r_maj, double r_min, double lat1, double lat2, - double lon0, double lat0, double false_east, double false_north); -long alberinv( double x, double y, double *lon, double *lat); -long alconforint( double r_maj, double r_min, double false_east, - double false_north); -long alconfor(double lon, double lat, double *x, double *y); -long alconinvint( double r_maj, double r_min, double false_east, - double false_north); -long alconinv( double x, double y, double *lon, double *lat); -long azimforint( double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long azimfor( double lon, double lat, double *x, double *y); -long aziminvint( double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long aziminv( double x, double y, double *lon, double *lat); - -/* rename functions in gctpc */ - -void gctpc_sincos( double val, double *sin_val, double *cos_val); -#define sincos(a,b,c) gctpc_sincos(a,b,c) - -int gctpc_sign(double x); -#define sign(x) gctpc_sign(x) - - - -double asinz (double con); -double msfnz (double eccent, double sinphi, double cosphi); -double qsfnz (double eccent, double sinphi, double cosphi); -double phi1z (double eccent, double qs, long *flag); -double phi2z(double eccent, double ts, long *flag); -double phi3z(double ml, double e0, double e1, double e2, double e3, - long *flag); -double phi4z (double eccent, double e0, double e1, double e2, double e3, - double a, double b, double *c, double *phi); -double pakcz(double pak); -double pakr2dm(double pak); -double tsfnz(double eccent, double phi, double sinphi); -int sign(double x); -double adjust_lon(double x); -double e0fn(double x); -double e1fn(double x); -double e2fn(double x); -double e3fn(double x); -double e4fn(double x); -double mlfn(double e0,double e1,double e2,double e3,double phi); -long calc_utm_zone(double lon); -/* End of functions residing in cproj.h */ - -long eqconforint(double r_maj, double r_min, double lat1, double lat2, - double center_lon, double center_lat, double false_east, - double false_north, - long mode); -long eqconfor(double lon, double lat, double *x, double *y); -long eqconinvint(double r_maj, double r_min, double lat1, double lat2, - double center_lon, double center_lat, double false_east, - double false_north, long mode); -long eqconinv(double x, double y, double *lon, double *lat); -long equiforint(double r_maj, double center_lon, double lat1, - double false_east, double false_north); -long equifor(double lon, double lat, double *x, double *y); -long equiinvint(double r_maj, double center_lon, double lat1, - double false_east, double false_north); -long equiinv(double x, double y, double *lon, double *lat); -void for_init(long outsys, long outzone, double *outparm, long outspheroid, - char *fn27, char *fn83, long *iflg, long (*for_trans[])()); -void gctp(double *incoor, long *insys, long *inzone, double *inparm, - long *inunit, long *inspheroid, long *ipr, char *efile, long *jpr, - char *pfile, double *outcoor, long *outsys, long *outzone, - double *outparm, long *outunit, long *outspheroid, char fn27[], - char fn83[], long *iflg); -long gnomforint(double r, double center_long, double center_lat, - double false_east, double false_north); -long gnomfor(double lon, double lat, double *x, double *y); -long gnominvint(double r, double center_long, double center_lat, - double false_east, double false_north); -long gnominv(double x, double y, double *lon, double *lat); -long goodforint(double r); -long goodfor(double lon, double lat, double *x, double *y); -long goodinvint(double r); -long goodinv(double x, double y, double *lon, double *lat); -long gvnspforint(double r, double h, double center_long, double center_lat, - double false_east, double false_north); -long gvnspfor(double lon, double lat, double *x, double *y); -long gvnspinvint(double r, double h, double center_long, double center_lat, - double false_east, double false_north); -long gvnspinv(double x, double y, double *lon, double *lat); -long hamforint(double r, double center_long, double false_east, - double false_north); -long hamfor(double lon, double lat, double *x, double *y); -long haminvint(double r, double center_long, double false_east, - double false_north); -long haminv(double x, double y, double *lon, double *lat); -long imolwforint(double r); -long imolwfor(double lon, double lat, double *x, double *y); -long imolwinvint(double r); -long imolwinv(double x, double y, double *lon, double *lat); -void inv_init(long insys, long inzone, double *inparm, long inspheroid, - char *fn27, char *fn83, long *iflg, long (*inv_trans[])()); -long lamazforint(double r, double center_long, double center_lat, - double false_east, double false_north); -long lamazfor(double lon, double lat, double *x, double *y); -long lamazinvint(double r, double center_long, double center_lat, - double false_east, double false_north); -long lamazinv(double x, double y, double *lon, double *lat); -long lamccforint(double r_maj, double r_min, double lat1, double lat2, - double c_lon, double c_lat, double false_east, double false_north); -long lamccfor(double lon, double lat, double *x, double *y); -long lamccinvint(double r_maj, double r_min, double lat1, double lat2, - double c_lon, double c_lat, double false_east, double false_north); -long lamccinv(double x, double y, double *lon, double *lat); -long merforint(double r_maj, double r_min, double center_lon, double center_lat, - double false_east, double false_north); -long merfor(double lon, double lat, double *x, double *y); -long merinvint(double r_maj, double r_min, double center_lon, double center_lat, - double false_east, double false_north); -long merinv(double x, double y, double *lon, double *lat); -long millforint(double r, double center_long, double false_east, - double false_north); -long millfor(double lon, double lat, double *x, double *y); -long millinvint(double r, double center_long, double false_east, - double false_north); -long millinv(double x, double y, double *lon, double *lat); -long molwforint(double r, double center_long, double false_east, - double false_north); -long molwfor(double lon, double lat, double *x, double *y); -long molwinvint(double r, double center_long, double false_east, - double false_north); -long molwinv(double x, double y, double *lon, double *lat); -long obleqforint(double r, double center_long, double center_lat, - double shape_m, double shape_n, double angle, double false_east, - double false_north); -long obleqfor(double lon, double lat, double *x, double *y); -long obleqinvint(double r, double center_long, double center_lat, - double shape_m, double shape_n, double angle, double false_east, - double false_north); -long omerforint(double r_maj, double r_min, double scale_fact, - double azimuth, double lon_orig, double lat_orig, double false_east, - double false_north, double lon1, double lat1, double lon2, double lat2, - long mode); -long omerfor(double lon, double lat, double *x, double *y); -long omerinvint(double r_maj, double r_min, double scale_fact, double azimuth, - double lon_orig, double lat_orig, double false_east, double false_north, - double lon1, double lat1, double lon2, double lat2, long mode); -long omerinv(double x, double y, double *lon, double *lat); -long orthforint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long orthfor( double lon, double lat, double *x, double *y); -long orthinvint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long orthinv(double x, double y, double *lon, double *lat); -double paksz(double ang, long *iflg); -long polyforint(double r_maj, double r_min, double center_lon, - double center_lat, double false_east, double false_north); -long polyfor(double lon, double lat, double *x, double *y); -long polyinvint(double r_maj, double r_min, double center_lon, - double center_lat, double false_east, double false_north); -long polyinv(double x, double y, double *lon, double *lat); -long psforint(double r_maj, double r_min, double c_lon, double c_lat, - double false_east, double false_north); -long psfor( double lon, double lat, double *x, double *y); -long psinvint(double r_maj, double r_min, double c_lon, double c_lat, - double false_east, double false_north); -long psinv( double x, double y, double *lon, double *lat); - -/* functions in report.c */ -void close_file(); -long init(long ipr, long jpr, char *efile, char *pfile); -void ptitle(char *A); -void radius(double A); -void radius2(double A, double B); -void cenlon( double A); -void cenlonmer(double A); -void cenlat(double A); -void origin(double A); -void stanparl(double A,double B); -void stparl1(double A); -void offsetp(double A, double B); -void genrpt(double A, char *S); -void genrpt_long(long A, char *S); -void pblank(); -void p_error(char *what, char *where); -/* End of the report.c functions */ - -long robforint(double r, double center_long, double false_east, - double false_north); -long robfor( double lon, double lat, double *x, double *y); -long robinvint(double r, double center_long, double false_east, - double false_north); -long robinv(double x, double y, double *lon, double *lat); -long sinforint(double r, double center_long, double false_east, - double false_north); -long sinfor(double lon, double lat, double *x, double *y); -long sininvint(double r, double center_long, double false_east, - double false_north); -long sininv(double x, double y, double *lon, double *lat); -long somforint(double r_major, double r_minor, long satnum, long path, - double alf_in, double lon, double false_east, double false_north, - double time, long start1, long flag); -long somfor(double lon, double lat, double *x, double *y); -/* WNE static double som_series(double *fb, double *fa2, double *fa4, double *fc1, - double *fc3,double *dlam); */ -long sominvint(double r_major, double r_minor, long satnum, long path, - double alf_in, double lon, double false_east, double false_north, - double time, long start1, long flag); -long sominv(double x, double y, double *lon, double *lat); -void sphdz(long isph, double *parm, double *r_major, double *r_minor, - double *radius); -long sterforint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long sterfor(double lon, double lat, double *x, double *y); -long sterinvint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long sterinv(double x, double y, double *lon, double *lat); -long stplnforint(long zone, long sphere, char *fn27, char *fn83); -long stplnfor(double lon, double lat, double *x, double *y); -long stplninvint(long zone, long sphere, char *fn27, char *fn83); -long stplninv(double x, double y, double *lon, double *lat); -long tmforint(double r_maj, double r_min, double scale_fact, - double center_lon, double center_lat, double false_east, - double false_north); -long tmfor(double lon, double lat, double *x, double *y); -long tminvint(double r_maj, double r_min, double scale_fact, - double center_lon, double center_lat, double false_east, - double false_north); -long tminv(double x, double y, double *lon, double *lat); -long untfz(long inunit, long outunit, double *factor); -long utmforint(double r_maj, double r_min, double scale_fact, long zone); -long utmfor(double lon, double lat, double *x, double *y); -long utminvint(double r_maj, double r_min, double scale_fact, long zone); -long vandgforint(double r, double center_long, double false_east, - double false_north); -long vandgfor( double lon, double lat, double *x, double *y); -long vandginvint(double r, double center_long, double false_east, - double false_north); -long vandginv(double x, double y, double *lon, double *lat); -long wivforint(double r, double center_long, double false_east, - double false_north); -long wivfor(double lon, double lat, double *x, double *y); -long wivinvint(double r, double center_long, double false_east, - double false_north); -long wivinv(double x, double y, double *lon, double *lat); -long wviiforint(double r, double center_long, double false_east, - double false_north); -long wviifor(double lon, double lat, double *x, double *y); -long wviiinvint( double r, double center_long, double false_east, - double false_north); -long wviiinv(double x, double y, double *lon, double *lat); diff --git a/proj.h b/proj.h deleted file mode 100644 index eb49170d..00000000 --- a/proj.h +++ /dev/null @@ -1,355 +0,0 @@ -/* Projection codes - - - 0 = Geographic - 1 = Universal Transverse Mercator (UTM) - 2 = State Plane Coordinates - 3 = Albers Conical Equal Area - 4 = Lambert Conformal Conic - 5 = Mercator - 6 = Polar Stereographic - 7 = Polyconic - 8 = Equidistant Conic - 9 = Transverse Mercator - 10 = Stereographic - 11 = Lambert Azimuthal Equal Area - 12 = Azimuthal Equidistant - 13 = Gnomonic - 14 = Orthographic - 15 = General Vertical Near-Side Perspective - 16 = Sinusiodal - 17 = Equirectangular - 18 = Miller Cylindrical - 19 = Van der Grinten - 20 = (Hotine) Oblique Mercator - 21 = Robinson - 22 = Space Oblique Mercator (SOM) - 23 = Alaska Conformal - 24 = Interrupted Goode Homolosine - 25 = Mollweide - 26 = Interrupted Mollweide - 27 = Hammer - 28 = Wagner IV - 29 = Wagner VII - 30 = Oblated Equal Area - 99 = User defined -*/ - -/* Define projection codes */ -#define GEO 0 -#define UTM 1 -#define SPCS 2 -#define ALBERS 3 -#define LAMCC 4 -#define MERCAT 5 -#define PS 6 -#define POLYC 7 -#define EQUIDC 8 -#define TM 9 -#define STEREO 10 -#define LAMAZ 11 -#define AZMEQD 12 -#define GNOMON 13 -#define ORTHO 14 -#define GVNSP 15 -#define SNSOID 16 -#define EQRECT 17 -#define MILLER 18 -#define VGRINT 19 -#define HOM 20 -#define ROBIN 21 -#define SOM 22 -#define ALASKA 23 -#define GOOD 24 -#define MOLL 25 -#define IMOLL 26 -#define HAMMER 27 -#define WAGIV 28 -#define WAGVII 29 -#define OBEQA 30 -#define USDEF 99 - -/* Define unit code numbers to their names */ - -#define RADIAN 0 /* Radians */ -#define FEET 1 /* Feed */ -#define METER 2 /* Meters */ -#define SECOND 3 /* Seconds */ -#define DEGREE 4 /* Decimal degrees */ -#define INT_FEET 5 /* International Feet */ - -/* The STPLN_TABLE unit value is specifically used for State Plane -- if units - equals STPLN_TABLE and Datum is NAD83--actual units are retrieved from - a table according to the zone. If Datum is NAD27--actual units will be feet. - An error will occur with this unit if the projection is not State Plane. */ - -#define STPLN_TABLE 6 - -/* General code numbers */ - -#define IN_BREAK -2 /* Return status if the interupted projection - point lies in the break area */ -#define COEFCT 15 /* projection coefficient count */ -#define PROJCT 30 /* projection count */ -#define SPHDCT 31 /* spheroid count */ - -#define MAXPROJ 31 /* Maximum projection number */ -#define MAXUNIT 5 /* Maximum unit code number */ -#define GEO_TERM 0 /* Array index for print-to-term flag */ -#define GEO_FILE 1 /* Array index for print-to-file flag */ -#define GEO_TRUE 1 /* True value for geometric true/false flags */ -#define GEO_FALSE -1 /* False val for geometric true/false flags */ - -/* GCTP Function prototypes */ - -long alberforint(double r_maj, double r_min, double lat1, double lat2, - double lon0, double lat0, double false_east, double false_north); -long alberfor(double lon, double lat, double *x, double *y); -long alberinvint( double r_maj, double r_min, double lat1, double lat2, - double lon0, double lat0, double false_east, double false_north); -long alberinv( double x, double y, double *lon, double *lat); -long alconforint( double r_maj, double r_min, double false_east, - double false_north); -long alconfor(double lon, double lat, double *x, double *y); -long alconinvint( double r_maj, double r_min, double false_east, - double false_north); -long alconinv( double x, double y, double *lon, double *lat); -long azimforint( double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long azimfor( double lon, double lat, double *x, double *y); -long aziminvint( double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long aziminv( double x, double y, double *lon, double *lat); - -/* rename functions in gctpc */ - -void gctpc_sincos( double val, double *sin_val, double *cos_val); -#define sincos(a,b,c) gctpc_sincos(a,b,c) - -int gctpc_sign(double x); -#define sign(x) gctpc_sign(x) - - - -double asinz (double con); -double msfnz (double eccent, double sinphi, double cosphi); -double qsfnz (double eccent, double sinphi, double cosphi); -double phi1z (double eccent, double qs, long *flag); -double phi2z(double eccent, double ts, long *flag); -double phi3z(double ml, double e0, double e1, double e2, double e3, - long *flag); -double phi4z (double eccent, double e0, double e1, double e2, double e3, - double a, double b, double *c, double *phi); -double pakcz(double pak); -double pakr2dm(double pak); -double tsfnz(double eccent, double phi, double sinphi); -int sign(double x); -double adjust_lon(double x); -double e0fn(double x); -double e1fn(double x); -double e2fn(double x); -double e3fn(double x); -double e4fn(double x); -double mlfn(double e0,double e1,double e2,double e3,double phi); -long calc_utm_zone(double lon); -/* End of functions residing in cproj.h */ - -long eqconforint(double r_maj, double r_min, double lat1, double lat2, - double center_lon, double center_lat, double false_east, - double false_north, - long mode); -long eqconfor(double lon, double lat, double *x, double *y); -long eqconinvint(double r_maj, double r_min, double lat1, double lat2, - double center_lon, double center_lat, double false_east, - double false_north, long mode); -long eqconinv(double x, double y, double *lon, double *lat); -long equiforint(double r_maj, double center_lon, double lat1, - double false_east, double false_north); -long equifor(double lon, double lat, double *x, double *y); -long equiinvint(double r_maj, double center_lon, double lat1, - double false_east, double false_north); -long equiinv(double x, double y, double *lon, double *lat); -void for_init(long outsys, long outzone, double *outparm, long outspheroid, - char *fn27, char *fn83, long *iflg, long (*for_trans[])()); -void gctp(double *incoor, long *insys, long *inzone, double *inparm, - long *inunit, long *inspheroid, long *ipr, char *efile, long *jpr, - char *pfile, double *outcoor, long *outsys, long *outzone, - double *outparm, long *outunit, long *outspheroid, char fn27[], - char fn83[], long *iflg); -long gnomforint(double r, double center_long, double center_lat, - double false_east, double false_north); -long gnomfor(double lon, double lat, double *x, double *y); -long gnominvint(double r, double center_long, double center_lat, - double false_east, double false_north); -long gnominv(double x, double y, double *lon, double *lat); -long goodforint(double r); -long goodfor(double lon, double lat, double *x, double *y); -long goodinvint(double r); -long goodinv(double x, double y, double *lon, double *lat); -long gvnspforint(double r, double h, double center_long, double center_lat, - double false_east, double false_north); -long gvnspfor(double lon, double lat, double *x, double *y); -long gvnspinvint(double r, double h, double center_long, double center_lat, - double false_east, double false_north); -long gvnspinv(double x, double y, double *lon, double *lat); -long hamforint(double r, double center_long, double false_east, - double false_north); -long hamfor(double lon, double lat, double *x, double *y); -long haminvint(double r, double center_long, double false_east, - double false_north); -long haminv(double x, double y, double *lon, double *lat); -long imolwforint(double r); -long imolwfor(double lon, double lat, double *x, double *y); -long imolwinvint(double r); -long imolwinv(double x, double y, double *lon, double *lat); -void inv_init(long insys, long inzone, double *inparm, long inspheroid, - char *fn27, char *fn83, long *iflg, long (*inv_trans[])()); -long lamazforint(double r, double center_long, double center_lat, - double false_east, double false_north); -long lamazfor(double lon, double lat, double *x, double *y); -long lamazinvint(double r, double center_long, double center_lat, - double false_east, double false_north); -long lamazinv(double x, double y, double *lon, double *lat); -long lamccforint(double r_maj, double r_min, double lat1, double lat2, - double c_lon, double c_lat, double false_east, double false_north); -long lamccfor(double lon, double lat, double *x, double *y); -long lamccinvint(double r_maj, double r_min, double lat1, double lat2, - double c_lon, double c_lat, double false_east, double false_north); -long lamccinv(double x, double y, double *lon, double *lat); -long merforint(double r_maj, double r_min, double center_lon, double center_lat, - double false_east, double false_north); -long merfor(double lon, double lat, double *x, double *y); -long merinvint(double r_maj, double r_min, double center_lon, double center_lat, - double false_east, double false_north); -long merinv(double x, double y, double *lon, double *lat); -long millforint(double r, double center_long, double false_east, - double false_north); -long millfor(double lon, double lat, double *x, double *y); -long millinvint(double r, double center_long, double false_east, - double false_north); -long millinv(double x, double y, double *lon, double *lat); -long molwforint(double r, double center_long, double false_east, - double false_north); -long molwfor(double lon, double lat, double *x, double *y); -long molwinvint(double r, double center_long, double false_east, - double false_north); -long molwinv(double x, double y, double *lon, double *lat); -long obleqforint(double r, double center_long, double center_lat, - double shape_m, double shape_n, double angle, double false_east, - double false_north); -long obleqfor(double lon, double lat, double *x, double *y); -long obleqinvint(double r, double center_long, double center_lat, - double shape_m, double shape_n, double angle, double false_east, - double false_north); -long omerforint(double r_maj, double r_min, double scale_fact, - double azimuth, double lon_orig, double lat_orig, double false_east, - double false_north, double lon1, double lat1, double lon2, double lat2, - long mode); -long omerfor(double lon, double lat, double *x, double *y); -long omerinvint(double r_maj, double r_min, double scale_fact, double azimuth, - double lon_orig, double lat_orig, double false_east, double false_north, - double lon1, double lat1, double lon2, double lat2, long mode); -long omerinv(double x, double y, double *lon, double *lat); -long orthforint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long orthfor( double lon, double lat, double *x, double *y); -long orthinvint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long orthinv(double x, double y, double *lon, double *lat); -double paksz(double ang, long *iflg); -long polyforint(double r_maj, double r_min, double center_lon, - double center_lat, double false_east, double false_north); -long polyfor(double lon, double lat, double *x, double *y); -long polyinvint(double r_maj, double r_min, double center_lon, - double center_lat, double false_east, double false_north); -long polyinv(double x, double y, double *lon, double *lat); -long psforint(double r_maj, double r_min, double c_lon, double c_lat, - double false_east, double false_north); -long psfor( double lon, double lat, double *x, double *y); -long psinvint(double r_maj, double r_min, double c_lon, double c_lat, - double false_east, double false_north); -long psinv( double x, double y, double *lon, double *lat); - -/* functions in report.c */ -void close_file(); -long init(long ipr, long jpr, char *efile, char *pfile); -void ptitle(char *A); -void radius(double A); -void radius2(double A, double B); -void cenlon( double A); -void cenlonmer(double A); -void cenlat(double A); -void origin(double A); -void stanparl(double A,double B); -void stparl1(double A); -void offsetp(double A, double B); -void genrpt(double A, char *S); -void genrpt_long(long A, char *S); -void pblank(); -void p_error(char *what, char *where); -/* End of the report.c functions */ - -long robforint(double r, double center_long, double false_east, - double false_north); -long robfor( double lon, double lat, double *x, double *y); -long robinvint(double r, double center_long, double false_east, - double false_north); -long robinv(double x, double y, double *lon, double *lat); -long sinforint(double r, double center_long, double false_east, - double false_north); -long sinfor(double lon, double lat, double *x, double *y); -long sininvint(double r, double center_long, double false_east, - double false_north); -long sininv(double x, double y, double *lon, double *lat); -long somforint(double r_major, double r_minor, long satnum, long path, - double alf_in, double lon, double false_east, double false_north, - double time, long start1, long flag); -long somfor(double lon, double lat, double *x, double *y); -/* WNE static double som_series(double *fb, double *fa2, double *fa4, double *fc1, - double *fc3,double *dlam); */ -long sominvint(double r_major, double r_minor, long satnum, long path, - double alf_in, double lon, double false_east, double false_north, - double time, long start1, long flag); -long sominv(double x, double y, double *lon, double *lat); -void sphdz(long isph, double *parm, double *r_major, double *r_minor, - double *radius); -long sterforint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long sterfor(double lon, double lat, double *x, double *y); -long sterinvint(double r_maj, double center_lon, double center_lat, - double false_east, double false_north); -long sterinv(double x, double y, double *lon, double *lat); -long stplnforint(long zone, long sphere, char *fn27, char *fn83); -long stplnfor(double lon, double lat, double *x, double *y); -long stplninvint(long zone, long sphere, char *fn27, char *fn83); -long stplninv(double x, double y, double *lon, double *lat); -long tmforint(double r_maj, double r_min, double scale_fact, - double center_lon, double center_lat, double false_east, - double false_north); -long tmfor(double lon, double lat, double *x, double *y); -long tminvint(double r_maj, double r_min, double scale_fact, - double center_lon, double center_lat, double false_east, - double false_north); -long tminv(double x, double y, double *lon, double *lat); -long untfz(long inunit, long outunit, double *factor); -long utmforint(double r_maj, double r_min, double scale_fact, long zone); -long utmfor(double lon, double lat, double *x, double *y); -long utminvint(double r_maj, double r_min, double scale_fact, long zone); -long vandgforint(double r, double center_long, double false_east, - double false_north); -long vandgfor( double lon, double lat, double *x, double *y); -long vandginvint(double r, double center_long, double false_east, - double false_north); -long vandginv(double x, double y, double *lon, double *lat); -long wivforint(double r, double center_long, double false_east, - double false_north); -long wivfor(double lon, double lat, double *x, double *y); -long wivinvint(double r, double center_long, double false_east, - double false_north); -long wivinv(double x, double y, double *lon, double *lat); -long wviiforint(double r, double center_long, double false_east, - double false_north); -long wviifor(double lon, double lat, double *x, double *y); -long wviiinvint( double r, double center_long, double false_east, - double false_north); -long wviiinv(double x, double y, double *lon, double *lat); diff --git a/somfor.c b/somfor.c deleted file mode 100644 index 149e2c11..00000000 --- a/somfor.c +++ /dev/null @@ -1,275 +0,0 @@ -/******************************************************************************* -NAME SPACE OBLIQUE MERCATOR (SOM) - -PURPOSE: The first method of Transforming input longitude and - latitude to Easting and Northing for the SOM projection. - The longitude and latitude must be in radians. The - Easting and Northing values will be returned in meters. - -PROGRAM HISTORY -PROGRAMMER DATE REASON ----------- ---- ------ -D. Steinwand July, 1992 -T. Mittan Mar, 1993 -S. Nelson Nov, 1993 Changed error message - -ALGORITHM REFERENCES - -1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological - Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United - State Government Printing Office, Washington D.C., 1987. - -2. "Software Documentation for GCTP General Cartographic Transformation - Package", U.S. Geological Survey National Mapping Division, May 1982. -*******************************************************************************/ -#include -#include "cproj.h" -#define LANDSAT_RATIO 0.5201613 - -static double lon_center,a,b,a2,a4,c1,c3,q,t,u,w,xj,p21,sa,ca,es,s,start; -static void som_series(); -static double false_easting; -static double false_northing; -static void som_series(double *fb, double *fa2, double *fa4, double *fc1, - double *fc3,double *dlam); - -long somforint(r_major,r_minor,satnum,path,alf_in,lon,false_east,false_north, - time, start1,flag) - -double r_major; /* major axis */ -double r_minor; /* minor axis */ -long satnum; /* Landsat satellite number (1,2,3,4,5) */ -long path; /* Landsat path number */ -double alf_in; -double lon; -double false_east; /* x offset in meters */ -double false_north; /* y offset in meters */ -double time; -long start1; -long flag; -{ -long i; -double alf,e2c,e2s,one_es; -double dlam,fb,fa2,fa4,fc1,fc3,suma2,suma4,sumc1,sumc3,sumb; - -/* Place parameters in static storage for common use - -------------------------------------------------*/ -false_easting = false_east; -false_northing = false_north; -a = r_major; -b = r_minor; -es = 1.0 - SQUARE(r_minor/r_major); -if (flag != 0) - { - alf = alf_in; - p21 = time / 1440.0; - lon_center = lon; - start = start1; - } -else - { - if (satnum < 4) - { - alf = 99.092 * D2R; - p21=103.2669323/1440.0; - lon_center = (128.87 - (360.0/251.0 * path)) * D2R; - } - else - { - alf = 98.2 * D2R; - p21=98.8841202/1440.0; - lon_center = (129.30 - (360.0/233.0 * path)) * D2R; - /* - lon_center = (-129.30557714 - (360.0/233.0 * path)) * D2R; - */ - } - start=0.0; - } - -/* Report parameters to the user (to device set up prior to this call) - -------------------------------------------------------------------*/ -ptitle("SPACE OBLIQUE MERCATOR"); -radius2(a,b); -if (flag == 0) - { - genrpt_long(path, "Path Number: "); - genrpt_long(satnum, "Satellite Number: "); - } -genrpt(alf*R2D, "Inclination of Orbit: "); -genrpt(lon_center*R2D,"Longitude of Ascending Orbit: "); -offsetp(false_easting,false_northing); -genrpt(LANDSAT_RATIO, "Landsat Ratio: "); - -ca=cos(alf); -if (fabs(ca)<1.e-9) ca=1.e-9; -sa=sin(alf); -e2c=es*ca*ca; -e2s=es*sa*sa; -w=(1.0-e2c)/(1.0-es); -w=w*w-1.0; -one_es=1.0-es; -q = e2s / one_es; -t = (e2s*(2.0-es)) / (one_es*one_es); -u= e2c / one_es; -xj = one_es*one_es*one_es; -dlam=0.0; -som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); -suma2=fa2; -suma4=fa4; -sumb=fb; -sumc1=fc1; -sumc3=fc3; -for(i=9;i<=81;i+=18) - { - dlam=i; - som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); - suma2=suma2+4.0*fa2; - suma4=suma4+4.0*fa4; - sumb=sumb+4.0*fb; - sumc1=sumc1+4.0*fc1; - sumc3=sumc3+4.0*fc3; - } -for(i=18; i<=72; i+=18) - { - dlam=i; - som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); - suma2=suma2+2.0*fa2; - suma4=suma4+2.0*fa4; - sumb=sumb+2.0*fb; - sumc1=sumc1+2.0*fc1; - sumc3=sumc3+2.0*fc3; - } - -dlam=90.0; -som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); -suma2=suma2+fa2; -suma4=suma4+fa4; -sumb=sumb+fb; -sumc1=sumc1+fc1; -sumc3=sumc3+fc3; -a2=suma2/30.0; -a4=suma4/60.0; -b=sumb/30.0; -c1=sumc1/15.0; -c3=sumc3/45.0; -return(OK); -} - -long somfor(lon, lat, y, x) - -double lon; /* (I) Longitude */ -double lat; /* (I) Latitude */ -double *x; /* (O) X projection coordinate */ -double *y; /* (O) Y projection coordinate */ -{ -long n,i,l; -double delta_lon; -double rlm,tabs,tlam,xlam,c,xlamt,ab2,sc1,ab1,xlamp,sav; -double d,sdsq,sd,tanlg,xtan,tphi,dp,dd,ds,rlm2; -double scl,tlamp,conv,delta_lat,radlt,radln; -double temp; -char errorbuf[80]; - -/* Forward equations - -----------------*/ -conv=1.e-7; -delta_lat=lat; -delta_lon= lon-lon_center; - -/* Test for latitude and longitude approaching 90 degrees - ----------------------------------------------------*/ -if (delta_lat>1.570796) delta_lat=1.570796; -if (delta_lat<-1.570796) delta_lat= -1.570796; -radlt=delta_lat; -radln=delta_lon; -if(delta_lat>=0.0)tlamp=PI/2.0; -if(start!= 0.0)tlamp=2.5*PI; -if(delta_lat<0.0) tlamp=1.5*PI; -n=0; - -L230: sav=tlamp; - l=0; - xlamp=radln+p21*tlamp; - ab1=cos(xlamp); - if(fabs(ab1)=0.0) scl=1.0; - if(ab1<0.0) scl= -1.0; - ab2=tlamp-(scl)*sin(tlamp)*HALF_PI; -L240: xlamt=radln+p21*sav; - c=cos(xlamt); - if (fabs(c)<1.e-7) xlamt=xlamt-1.e-7; - xlam=(((1.0-es)*tan(radlt)*sa)+sin(xlamt)*ca)/c; - tlam=atan(xlam); - tlam=tlam+ab2; - tabs=fabs(sav)-fabs(tlam); - if(fabs(tabs) 50) goto L260; - sav=tlam; - goto L240; - -/* Adjust for confusion at beginning and end of landsat orbits - -----------------------------------------------------------*/ -L250: rlm=PI*LANDSAT_RATIO; - rlm2=rlm+2.0*PI; - n++; - if(n>=3) goto L300; - if(tlam>rlm&&tlam=rlm2) tlamp=HALF_PI; - goto L230; -L260: sprintf(errorbuf,"50 iterations without conv\n"); - p_error(errorbuf,"som-forward"); - return(214); - -/* tlam computed - now compute tphi - --------------------------------*/ -L300: ds=sin(tlam); - dd=ds*ds; - dp=sin(radlt); - tphi=asin(((1.0-es)*ca*dp-sa*cos(radlt)*sin(xlamt))/sqrt(1.0-es*dp*dp)); - -/* compute x and y - ---------------*/ -xtan = (PI/4.0) + (tphi/2.0); -tanlg = log(tan(xtan)); -sd=sin(tlam); -sdsq=sd*sd; -s=p21*sa*cos(tlam)*sqrt((1.0+t*sdsq)/((1.0+w*sdsq)*(1.0+q*sdsq))); -d=sqrt(xj*xj+s*s); -*x=b*tlam+a2*sin(2.0*tlam)+a4*sin(4.0*tlam)-tanlg*s/d; -*x = a* *x; -*y=c1*sd+c3*sin(3.0*tlam)+tanlg*xj/d; -*y = a* *y; - -/* Negate x & swap x,y - -------------------*/ -temp= *x; -*x= *y + false_easting; -*y=temp + false_northing;; -return(OK); -} -/* Series to calculate a,b,c coefficients to convert from transform - latitude,longitude to Space Oblique Mercator (SOM) rectangular coordinates - - Mathematical analysis by John Snyder 6/82 - --------------------------------------------------------------------------*/ -static void som_series(fb,fa2,fa4,fc1,fc3,dlam) -double *fb,*fa2,*fa4,*fc1,*fc3,*dlam; -{ -double sd,sdsq,h,sq,fc; - -*dlam= *dlam*0.0174532925; /* Convert dlam to radians */ -sd=sin(*dlam); -sdsq=sd*sd; -s=p21*sa*cos(*dlam)*sqrt((1.0+t*sdsq)/((1.0+w*sdsq)*(1.0+q*sdsq))); -h=sqrt((1.0+q*sdsq)/(1.0+w*sdsq))*(((1.0+w*sdsq)/((1.0+q*sdsq)*(1.0+ - q*sdsq)))-p21*ca); -sq=sqrt(xj*xj+s*s); -*fb=(h*xj-s*s)/sq; -*fa2= *fb*cos(2.0* *dlam); -*fa4= *fb*cos(4.0* *dlam); -fc=s*(h+xj)/sq; -*fc1=fc*cos(*dlam); -*fc3=fc*cos(3.0* *dlam); -} diff --git a/sominv.c b/sominv.c deleted file mode 100644 index 77e542cd..00000000 --- a/sominv.c +++ /dev/null @@ -1,248 +0,0 @@ -/******************************************************************************* -NAME SPACE OBLIQUE MERCATOR (SOM) - -PURPOSE: The first method to Transform input Easting and Northing to - longitude and latitude for the SOM projection. The - Easting and Northing must be in meters. The longitude - and latitude values will be returned in radians. - -PROGRAM HISTORY -PROGRAMMER DATE ----------- ---- -D. Steinwand July, 1992 -T. Mittan Mar, 1993 - -ALGORITHM REFERENCES - -1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological - Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United - State Government Printing Office, Washington D.C., 1987. - -2. "Software Documentation for GCTP General Cartographic Transformation - Package", U.S. Geological Survey National Mapping Division, May 1982. -*******************************************************************************/ -#include "cproj.h" -#define LANDSAT_RATIO 0.5201613 - -static double lon_center,a,b,a2,a4,c1,c3,q,t,u,w,xj,p21,sa,ca,es,s,start; -static double false_easting; -static double false_northing; -static void som_series(double *fb, double *fa2, double *fa4, double *fc1, - double *fc3,double *dlam); - -long sominvint(r_major,r_minor,satnum,path,alf_in,lon,false_east,false_north, - time, start1,flag) - -double r_major; /* major axis */ -double r_minor; /* minor axis */ -long satnum; /* Landsat satellite number (1,2,3,4,5) */ -long path; /* Landsat path number */ -double alf_in; -double lon; -double false_east; /* x offset in meters */ -double false_north; /* y offset in meters */ -double time; -long start1; -long flag; -{ -long i; -double alf,e2c,e2s,one_es; -double dlam,fb,fa2,fa4,fc1,fc3,suma2,suma4,sumc1,sumc3,sumb; - -/* Place parameters in static storage for common use - -------------------------------------------------*/ -false_easting = false_east; -false_northing = false_north; -a = r_major; -b = r_minor; -es = 1.0 - SQUARE(r_minor/r_major); - -if (flag != 0) - { - alf = alf_in; - lon_center = lon; - p21 = time/1440.0; - start = start1; - } -else - { - if (satnum < 4) - { - alf = 99.092 * D2R; - p21=103.2669323/1440.0; - lon_center = (128.87 - (360.0/251.0 * path)) * D2R; - } - else - { - alf = 98.2 * D2R; - p21=98.8841202/1440.0; - lon_center = (129.30 - (360.0/233.0 * path)) * D2R; - /* - lon_center = (129.30557714 - (360.0/233.0 * path)) * D2R; - */ - } - start=0.0; - } - -/* Report parameters to the user (to device set up prior to this call) - -------------------------------------------------------------------*/ -ptitle("SPACE OBLIQUE MERCATOR"); -radius2(a,b); -genrpt_long(path, "Path Number: "); -genrpt_long(satnum, "Satellite Number: "); -genrpt(alf*R2D, "Inclination of Orbit: "); -genrpt(lon_center*R2D, "Longitude of Ascending Orbit: "); -offsetp(false_easting,false_northing); -genrpt(LANDSAT_RATIO, "Landsat Ratio: "); - -ca=cos(alf); -if (fabs(ca)<1.e-9) ca=1.e-9; -sa=sin(alf); -e2c=es*ca*ca; -e2s=es*sa*sa; -w=(1.0-e2c)/(1.0-es); -w=w*w-1.0; -one_es=1.0-es; -q = e2s / one_es; -t = (e2s*(2.0-es)) / (one_es*one_es); -u= e2c / one_es; -xj = one_es*one_es*one_es; -dlam=0.0; -som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); -suma2=fa2; -suma4=fa4; -sumb=fb; -sumc1=fc1; -sumc3=fc3; -for(i=9;i<=81;i+=18) - { - dlam=i; - som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); - suma2=suma2+4.0*fa2; - suma4=suma4+4.0*fa4; - sumb=sumb+4.0*fb; - sumc1=sumc1+4.0*fc1; - sumc3=sumc3+4.0*fc3; - } -for(i=18; i<=72; i+=18) - { - dlam=i; - som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); - suma2=suma2+2.0*fa2; - suma4=suma4+2.0*fa4; - sumb=sumb+2.0*fb; - sumc1=sumc1+2.0*fc1; - sumc3=sumc3+2.0*fc3; - } - -dlam=90.0; -som_series(&fb,&fa2,&fa4,&fc1,&fc3,&dlam); -suma2=suma2+fa2; -suma4=suma4+fa4; -sumb=sumb+fb; -sumc1=sumc1+fc1; -sumc3=sumc3+fc3; -a2=suma2/30.0; -a4=suma4/60.0; -b=sumb/30.0; -c1=sumc1/15.0; -c3=sumc3/45.0; -return(OK); -} - -long sominv(y, x, lon, lat) - -double x; /* (I) X projection coordinate */ -double y; /* (I) Y projection coordinate */ -double *lon; /* (O) Longitude */ -double *lat; /* (O) Latitude */ -{ -double tlon,conv,sav,sd,sdsq,blon,dif,st,defac,actan,tlat,dd,bigk,bigk2,xlamt; -double sl,scl,dlat,dlon,temp; -long inumb; - -/* Inverse equations. Begin inverse computation with approximation for tlon. - Solve for transformed long. - ---------------------------*/ -temp=y; y=x - false_easting; x= temp - false_northing; -tlon= x/(a*b); -conv=1.e-9; -for(inumb=0;inumb<50;inumb++) - { - sav=tlon; - sd=sin(tlon); - sdsq=sd*sd; - s=p21*sa*cos(tlon)*sqrt((1.0+t*sdsq)/((1.0+w*sdsq)*(1.0+q*sdsq))); - blon=(x/a)+(y/a)*s/xj-a2*sin(2.0*tlon)-a4*sin(4.0*tlon)-(s/xj)*(c1* - sin(tlon)+c3*sin(3.0*tlon)); - tlon=blon/b; - dif=tlon-sav; - if(fabs(dif)=50) - { - p_error("50 iterations without convergence","som-inverse"); - return(214); - } - -/* Compute transformed lat. - ------------------------*/ -st=sin(tlon); -defac=exp(sqrt(1.0+s*s/xj/xj)*(y/a-c1*st-c3*sin(3.0*tlon))); -actan=atan(defac); -tlat=2.0*(actan-(PI/4.0)); - -/* Compute geodetic longitude - --------------------------*/ -dd=st*st; -if(fabs(cos(tlon))<1.e-7) tlon=tlon-1.e-7; -bigk=sin(tlat); -bigk2=bigk*bigk; -xlamt=atan(((1.0-bigk2/(1.0-es))*tan(tlon)*ca-bigk*sa*sqrt((1.0+q*dd) - *(1.0-bigk2)-bigk2*u)/cos(tlon))/(1.0-bigk2*(1.0+u))); - -/* Correct inverse quadrant - ------------------------*/ -if(xlamt>=0.0) sl=1.0; -if(xlamt<0.0) sl= -1.0; -if(cos(tlon)>=0.0) scl=1.0; -if(cos(tlon)<0.0) scl= -1.0; -xlamt=xlamt-((PI/2.0)*(1.0-scl)*sl); -dlon=xlamt-p21*tlon; - -/* Compute geodetic latitude - -------------------------*/ -if(fabs(sa)<1.e-7)dlat=asin(bigk/sqrt((1.0-es)*(1.0-es)+es*bigk2)); -if(fabs(sa)>=1.e-7)dlat=atan((tan(tlon)*cos(xlamt)-ca*sin(xlamt))/((1.0-es)*sa)); -*lon = adjust_lon(dlon+lon_center); -*lat = dlat; -return(OK); -} - - - - -/* Series to calculate a,b,c coefficients to convert from transform - latitude,longitude to Space Oblique Mercator (SOM) rectangular coordinates - - Mathematical analysis by John Snyder 6/82 - --------------------------------------------------------------------------*/ -static void som_series(fb,fa2,fa4,fc1,fc3,dlam) -double *fb,*fa2,*fa4,*fc1,*fc3,*dlam; -{ -double sd,sdsq,h,sq,fc; - -*dlam= *dlam*0.0174532925; /* Convert dlam to radians */ -sd=sin(*dlam); -sdsq=sd*sd; -s=p21*sa*cos(*dlam)*sqrt((1.0+t*sdsq)/((1.0+w*sdsq)*(1.0+q*sdsq))); -h=sqrt((1.0+q*sdsq)/(1.0+w*sdsq))*(((1.0+w*sdsq)/((1.0+q*sdsq)*(1.0+ - q*sdsq)))-p21*ca); -sq=sqrt(xj*xj+s*s); -*fb=(h*xj-s*s)/sq; -*fa2= *fb*cos(2.0* *dlam); -*fa4= *fb*cos(4.0* *dlam); -fc=s*(h+xj)/sq; -*fc1=fc*cos(*dlam); -*fc3=fc*cos(3.0* *dlam); -} diff --git a/wgrib2/Check_pdt_size.c b/wgrib2/Check_pdt_size.c index 7c43919a..b67aee0a 100644 --- a/wgrib2/Check_pdt_size.c +++ b/wgrib2/Check_pdt_size.c @@ -4,6 +4,19 @@ #include "wgrib2.h" #include "fnlist.h" +/* + * Check_pdt_size.c 10/2024 Public Domain Wesley Ebisuzaki + * + * check_pdt_size(..) checks the size of the pdt + * sees whether the actual size of the pdt is the expected value + * + * This check can be enabled or disabled by -check_pdt 1/0 (enable/disable) + * + * in theory, the pdt can be bigger than expected with no ill consequences + * howerver, if the pdt is smaller than expectations, then any routine that + * uses the pdt could be reading outside of the pdt. + */ + /* * HEADER:100:check_pdt_size:misc:1:check pdt size X=1 enable/default, X=0 disable */ diff --git a/wgrib2/Cluster.c b/wgrib2/Cluster.c index aa1889f6..e618f686 100644 --- a/wgrib2/Cluster.c +++ b/wgrib2/Cluster.c @@ -5,6 +5,12 @@ #include "wgrib2.h" #include "fnlist.h" +/* Cluster.c 10/2024 Public Domain Wesley Ebisuzaki + * + * options for showing cluster information + * + */ + /* * HEADER:-1:cluster:inv:0:cluster identifier */ @@ -72,4 +78,3 @@ int f_cluster_info(ARG0) { return 0; } - diff --git a/wgrib2/CodeTable4_4.h b/wgrib2/CodeTable4_4.h index d1af83b8..f7c1eb72 100644 --- a/wgrib2/CodeTable4_4.h +++ b/wgrib2/CodeTable4_4.h @@ -1,4 +1,5 @@ /* Code Table 4.4: Indicator of unit of time range */ +/* 10/2024 Public Domain Wesley Ebisuzaki */ #define MINUTE 0 #define HOUR 1 diff --git a/wgrib2/Cress_lola.c b/wgrib2/Cress_lola.c index fc8c9da0..e1d76952 100644 --- a/wgrib2/Cress_lola.c +++ b/wgrib2/Cress_lola.c @@ -6,7 +6,7 @@ #include "wgrib2.h" #include "fnlist.h" /* - * Cress_lola.c + * Cress_lola.c 10/2024 Public Domain Wesley Ebisuzaki * use Cressman analysis to create a LOngitude LAtitude grid * */ diff --git a/wgrib2/Cyclic.c b/wgrib2/Cyclic.c index c6db3e43..be6a69cd 100644 --- a/wgrib2/Cyclic.c +++ b/wgrib2/Cyclic.c @@ -5,6 +5,24 @@ #include "wgrib2.h" #include "fnlist.h" +/* Cyclic.c 10/2024 Public Domain Wesley Ebisuzaki + * + * routine for determining whether grid is cyclic + * covers the entire longitude band evenly + * + * only applies to lat-lon, Mercator and Gaussian grids + * any other grids? + * + * problem is made more difficult because NCEP grids can + * 1. have millidegree precision because they were converted from grib1 + * 2. have less than microdegree precision because they often use single precision + * for lat/lon calculations (centi-degrees in one case). + * + * + * cyclic is needed to determine whether a grid has a E or W boundary + */ + + /* NCEP dlat/dlon are only good to milli-degrees because they are converted from grib1 */ diff --git a/wgrib2/EOF.c b/wgrib2/EOF.c index da237c1d..c6d89743 100644 --- a/wgrib2/EOF.c +++ b/wgrib2/EOF.c @@ -5,6 +5,12 @@ #include "wgrib2.h" #include "fnlist.h" +/* EOF.c 10/2024 Public Domain Wesley Ebisuzaki + * + * EOF and error handling + */ + + FILE *err_file; int err_int; diff --git a/wgrib2/Flush.c b/wgrib2/Flush.c index fab0ef6d..d2dceca5 100644 --- a/wgrib2/Flush.c +++ b/wgrib2/Flush.c @@ -4,6 +4,23 @@ #include "wgrib2.h" #include "fnlist.h" +/* Flush.c 10/2024 Public Domain Wesley Ebisuzaki + * + * Most C programs flush the output when the buffers are full. + * This is usually the efficient method. + * + * However, life is different when you start writting to pipe instead of disk files. + * In this case, you want to flush the output buffers at the end of the write. + * If you don't flush after every write, the pipe line can stall and never complete. + * Wgrib2 gets around the stalling pipeline by checking the output files to see + * whether is a pipe. If so, it turns on the flush mode. This causes a flush + * after all writes. + * + * The automatic detection for flush mode works well. However, it is stll + * possible to turn on the flush mode manually which was done in the old + * days. + */ + extern int flush_mode; diff --git a/wgrib2/Hybrid.c b/wgrib2/Hybrid.c index 3ac70d1c..78769ebb 100644 --- a/wgrib2/Hybrid.c +++ b/wgrib2/Hybrid.c @@ -5,6 +5,11 @@ #include "wgrib2.h" #include "fnlist.h" +/* Hybrid.c 10/2024 Public Domain Wesley Ebisuzaki + * + * show hybrid coordinate metadata + */ + /* * HEADER:400:hybrid:inv:0:shows vertical coordinate parameters from Sec4 (assuming 2 var per level */ diff --git a/wgrib2/Inv.c b/wgrib2/Inv.c index 20b3fa75..ea1472c6 100644 --- a/wgrib2/Inv.c +++ b/wgrib2/Inv.c @@ -4,7 +4,9 @@ #include "wgrib2.h" #include "fnlist.h" - +/* Inv.c 10/2024 Public Domain Wesley Ebisuzak + * + */ extern int only_submsg; /* diff --git a/wgrib2/Match_inv.c b/wgrib2/Match_inv.c index 3b6fd5da..d76876dd 100644 --- a/wgrib2/Match_inv.c +++ b/wgrib2/Match_inv.c @@ -5,6 +5,15 @@ #include "wgrib2.h" #include "fnlist.h" +/* Match_inv.c 10/2024 Public Domain Wesley Ebisuzaki + * + * Various text tests (ex. -if, -not) compare a string to the match inventory. + * The match inventory is larger and has more items than the normal inventory. + * + * Since the match inventory cannot include everything, the option has + * been added to add extra data to the match inventory. + */ + int (*match_extra_fn[MATCH_EXTRA_FN])(); void *match_extra_fn_local[MATCH_EXTRA_FN]; int match_extra_fn_nargs[MATCH_EXTRA_FN]; diff --git a/wgrib2/Misc.c b/wgrib2/Misc.c index 5095c01b..e886642c 100644 --- a/wgrib2/Misc.c +++ b/wgrib2/Misc.c @@ -4,6 +4,10 @@ #include "wgrib2.h" #include "fnlist.h" +/* Misc.c 10/2024 Public Domain Wesley Ebisuzaki + * + * misc options + */ extern enum input_type input; extern int header, dump_rec, dump_submsg; extern int mode; diff --git a/wgrib2/Ncpu.c b/wgrib2/Ncpu.c index 5fd957ca..b7b61980 100644 --- a/wgrib2/Ncpu.c +++ b/wgrib2/Ncpu.c @@ -4,6 +4,12 @@ #include "wgrib2.h" #include "fnlist.h" +/* Ncpu.c 10/2024 Public Domain Wesley Ebisuzaki + * + * set the maximum number of threads, override OMP_NUM_THREADS + * + */ + /* * HEADER:100:ncpu:setup:1:number of threads, default is environment variable OMP_NUM_THREADS/number of cpus diff --git a/wgrib2/New_grid.c b/wgrib2/New_grid.c index 4137a433..76c3a3cd 100644 --- a/wgrib2/New_grid.c +++ b/wgrib2/New_grid.c @@ -145,6 +145,10 @@ extern unsigned int nx_, ny_; extern enum output_order_type output_order_wanted, output_order; enum wind_rotation_type wind_rotation; +/* + * HEADER:111:new_grid_winds:misc:1:new_grid wind orientation: X = grid, earth (no default) + */ + int f_new_grid_winds(ARG1) { int *save; if (mode == -2) { @@ -165,6 +169,10 @@ int f_new_grid_winds(ARG1) { static int interpol_type = 0; static int ipopt[20] = {-1,-1,0, 0,0,0, 0,0,0, 0}; +/* + * HEADER:111:new_grid_interpolation:misc:1:new_grid interpolation X=bilinear,bicubic,neighbor,budget,neighbor-budget + */ + int f_new_grid_interpolation(ARG1) { // #ifdef USE_SPECTRAL @@ -193,6 +201,10 @@ int f_new_grid_interpolation(ARG1) { return 0; } +/* + * HEADER:111:new_grid_format:misc:1:new_grid output format X=bin,ieee,grib + */ + int f_new_grid_format(ARG1) { if (mode >= -1) { if (strcmp(arg1,"grib") == 0) new_grid_format = grib; @@ -203,6 +215,10 @@ int f_new_grid_format(ARG1) { return 0; } +/* + * HEADER:111:new_grid_ipopt:misc:1:new_grid ipopt values X=i1:i2..:iN N <= 20 + */ + int f_new_grid_ipopt(ARG1) { int i, k, val, m; @@ -262,6 +278,10 @@ unsigned char blank_sec1[21] = { 0,0,0,21,1, 255, 255, // year 255, 255, 255, 255, 255, // month .. second 255, 255}; +/* + * HEADER:111:new_grid:output:4:bilinear interpolate: X=projection Y=x0:nx:dx Z=y0:ny:dy A=grib_file alpha + */ + int f_new_grid(ARG4) { struct local_struct *save; diff --git a/wgrib2/Precision.c b/wgrib2/Precision.c index 9be2815b..7b0e1183 100644 --- a/wgrib2/Precision.c +++ b/wgrib2/Precision.c @@ -4,6 +4,11 @@ #include "wgrib2.h" #include "fnlist.h" +/* Precision.c 10/2024 Public Domain Wesley Ebisuzaki + * + * options dealing with the precision/scaling of input + */ + /* * HEADER:510:scaling:inv:0:scaling for packing (old format) */ diff --git a/wgrib2/Reset_delayed_error.c b/wgrib2/Reset_delayed_error.c index 574b8270..9d77e11f 100644 --- a/wgrib2/Reset_delayed_error.c +++ b/wgrib2/Reset_delayed_error.c @@ -5,7 +5,7 @@ #include "fnlist.h" /* - * Reset_delayed_error.c 12/2020 Wesley Ebisuzaki + * Reset_delayed_error.c 12/2020 Public Domain Wesley Ebisuzaki * * wgrib2 v3.0.1 adds delayed fatal errors, * This allows the user to examine the grib message that caused the fatal diff --git a/wgrib2/Sec1.c b/wgrib2/Sec1.c index d5143be6..6d9581e2 100644 --- a/wgrib2/Sec1.c +++ b/wgrib2/Sec1.c @@ -3,6 +3,11 @@ #include "wgrib2.h" #include "fnlist.h" +/* Sec1.c 10/2024 Public Domain Wesley Ebisuzaki + * + * options dealing with section 1 of the grib file + */ + static const char *months = "janfebmaraprmayjunjulaugsepoctnovdec"; extern int warn_nonzero_min_sec; diff --git a/wgrib2/UDF.c b/wgrib2/UDF.c index 18b60523..c20b8068 100644 --- a/wgrib2/UDF.c +++ b/wgrib2/UDF.c @@ -1,4 +1,5 @@ -/* UDF.c +/* UDF.c + * public domian 2010 Wesley Ebisuzaki * * user defined functions * diff --git a/wgrib2/addtime.c b/wgrib2/addtime.c index c65c9575..2680f30c 100644 --- a/wgrib2/addtime.c +++ b/wgrib2/addtime.c @@ -6,6 +6,8 @@ #include "wgrib2.h" #include "CodeTable4_4.h" +/* addtime.c 10/2024 Public Domain Wesley Ebisuzaki */ + #define FEB29 (31+29) static int monthjday[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365}; diff --git a/wgrib2/check_dup_gribtable.sh b/wgrib2/check_dup_gribtable.sh index 36157c83..6626109a 100755 --- a/wgrib2/check_dup_gribtable.sh +++ b/wgrib2/check_dup_gribtable.sh @@ -1,8 +1,10 @@ #!/bin/sh +# 10/2024 Public Domain Wesley Ebisuzaki +# # This script checks parameter info for wgrib2. This is a test script # that is manually run when updating the grib2 table from the NCO web # pages. - +# export LC_ALL=C # check for duplicate names diff --git a/wgrib2/check_gribdat.sh b/wgrib2/check_gribdat.sh index 0bb5231e..6f06cbc1 100755 --- a/wgrib2/check_gribdat.sh +++ b/wgrib2/check_gribdat.sh @@ -1,4 +1,6 @@ #!/bin/sh +# 10/2024 Public Domain Wesley Ebisuzaki +# # This script checks parameter info for wgrib2. This is a test script # that is manually run when updating the grib2 table from the NCO web # pages. diff --git a/wgrib2/codetable_4_230.c b/wgrib2/codetable_4_230.c index 9741602f..e1dfe53b 100644 --- a/wgrib2/codetable_4_230.c +++ b/wgrib2/codetable_4_230.c @@ -1,4 +1,6 @@ #include "wgrib2.h" +/* 10/2024 public domain Wesley Ebisuzaki */ + struct codetable_4_230 codetable_4_230_table[] = { {0, "Ozone"}, {1, "Water vapour"}, diff --git a/wgrib2/create_tables.sh b/wgrib2/create_tables.sh index 1e167055..29fb67fb 100755 --- a/wgrib2/create_tables.sh +++ b/wgrib2/create_tables.sh @@ -1,5 +1,5 @@ #!/bin/sh - +# 10/2024 Public Domain Wesley Ebisuzaki homedir=`pwd` PATH="$homedir:$PATH" dat=`date "+%Y%m%d"` diff --git a/wgrib2/enc_jpeg2000_clone.c b/wgrib2/enc_jpeg2000_clone.c index 680dc6e5..f19ddfa2 100644 --- a/wgrib2/enc_jpeg2000_clone.c +++ b/wgrib2/enc_jpeg2000_clone.c @@ -6,6 +6,8 @@ #include #define JAS_1_700_2 +/* 2004-12-16 Public Domain Steve Gilbert */ + int enc_jpeg2000_clone(unsigned char *cin,int width,int height,int nbits, int ltype, int ratio, int retry, char *outjpc, diff --git a/wgrib2/flt2ieee.c b/wgrib2/flt2ieee.c index 50e514f0..88d47d42 100644 --- a/wgrib2/flt2ieee.c +++ b/wgrib2/flt2ieee.c @@ -3,7 +3,8 @@ #include #include "wgrib2.h" -/* +/* flt2ieee.c 10/2024 Public Domain Wesley Ebisuzaki + * * convert a float to an ieee single precision number v1.1 * (big endian) * Wesley Ebisuzaki diff --git a/wgrib2/flt2ieee_nan.c b/wgrib2/flt2ieee_nan.c index 7f0e2de2..3cd3ef95 100644 --- a/wgrib2/flt2ieee_nan.c +++ b/wgrib2/flt2ieee_nan.c @@ -3,7 +3,9 @@ #include #include "wgrib2.h" -/* +/* flt2ieee_nan.c 10/2024 Public Domain Wesley Ebisuzaki + * based on flt2ieee.c + * * convert a float to an ieee single precision number v1.1 * (big endian) * diff --git a/wgrib2/fnlist.c b/wgrib2/fnlist.c index 7c24a27a..0adc7fc7 100644 --- a/wgrib2/fnlist.c +++ b/wgrib2/fnlist.c @@ -3,6 +3,8 @@ #include "wgrib2.h" #include "fnlist.h" +/* this file was generated by function.sh */ + struct function functions[] = { {"else",f_else, Else, 0, "else, -if ... -else ... -endif", 100}, {"elseif",f_if, Elseif, 1, "elseif X (POSIX regular expression) conditional on match, -if ... -elseif ... -endif", 200}, diff --git a/wgrib2/fnlist.h b/wgrib2/fnlist.h index 5e46cf19..51a75967 100644 --- a/wgrib2/fnlist.h +++ b/wgrib2/fnlist.h @@ -1,4 +1,6 @@ -/* headers for wgrib callable functions */ +/* headers wgrib2 options */ + +/* this file was generated by function.sh */ struct function {const char *name; int (*fn)(); enum fntype type; int nargs; const char *desc; int sort;}; diff --git a/wgrib2/function.sh b/wgrib2/function.sh index 947232e4..40032fdf 100755 --- a/wgrib2/function.sh +++ b/wgrib2/function.sh @@ -1,12 +1,24 @@ #!/bin/sh +# function.sh 10/2024 Public Domain Wesley Ebisuzaki # -# this sets up the functions for wgrib2 +# wgrib2 options are translated into function calls. +# this script reads the source code and finds all the options +# and creates the header for the options (fnlist.h) and +# a structure that associates the name of the option with +# the address of the option, number of arguements, option type, +# brief description and a integer which is the prority in +# the help screens (fnlist.c) # -# makes fnlist.c, fnlist.h +# function.sh makes fnlist.c, fnlist.h +# +# needs to be rerun when adding new options, option headers are changed +# +# all information for fnlist.c and fnlist.h are in the HEADER line # # set -x -# get list of all callable functions +# get list of all functions that are associated with options + export LC_ALL=C grep "^ \* HEADER:" [A-Z]*.c | cut -f3- -d: | sort -t: -k3,3 -k2,2 >fnlist @@ -16,13 +28,17 @@ cat >fnlist.c <fnlist.h <>fnlist.c echo " " >> fnlist.c echo "int nfunctions = sizeof functions / sizeof functions[0];" >> fnlist.c +rm fnlist diff --git a/wgrib2/gctpc/Copyrights and Credits _ U.S. Geological Survey.pdf b/wgrib2/gctpc/Copyrights and Credits _ U.S. Geological Survey.pdf new file mode 100644 index 0000000000000000000000000000000000000000..96267a5ac29a71e179a56167a967d0368d462028 GIT binary patch literal 110866 zcmeFZcQl;e-tes?5)hvl-+$f*%QCa}HGA)G-PiT~esE|hJmC}K2NQ8j?eDG< z39$;YA}sBRq@@M);2w@JR&IHOi;o-J*3QG773yrwD(?ofh68{5v+DEf^0O+z5RM32 zxE0iqRTt^z3G?A05&(ukJrHiJ-0BElxT7OfK$KsQ)s)*%NJxrR4epHeX7v_-@azHD zl!x_^i;E-70A>k+dkBb%i1CX&00u&o_0-istd4L881VU44hUeNyqz1u2__&UEY2^8 z{btpL+Cbglf4c~nRLc!vjkJORv+6p)p#s3JSe<~;e_sw9;j94l0JftbDJ&=q77`Q` z5)u~?5_!NYD98o;0OQmV*8k@rva&=lXKSoh8cQ3VgZ_FfpJDEts1;!pQ~U40HBi1wP{m+|dIN zguoL=V8;qDD}*&LhZ@Y;7MMg-L_}7W)!hS7krR=3=9g|qT>Hxy;;0@>&mrZnEV`t-~OJNzz#W^^H)2)@qthrogeIKi1bnvZEWFE+yxXmovA+H%Xr2 zLFSC@UsQNXb{LCm6T+CLoi0v-*wlT~e?#f4(hGMl0<*U@Y1YLXogAXI?}!;kG%|&C z8@HwwHF(m7nbo$Z&m%v9)mzR3HKwMKX5Wp1(YO}7w=LkbhV+$vO*O|=2U>+c)COGD z>Z5AO_B<;~RTIr6%kM|#9bS+k4=w^f#jcc=hC#i(8wXMw_2r^*w|px1B|o65!5>D` zk1ckYs;N;nIFOt^h>?BtZi};f7LU1_(njFeVm3+PeoHxRL*+i-3!(wnW4AD1Y95do zK1d%Ik~6$-XiOa%cF?Ct zKJ?bmW;HtbsWqOiii1MYDi$TohC~p}F-t8^G6=czkb<3T%zC`UU?2*Ah|$$9#5?4n_~28iK$w!eF&+|M#>>8@JPYbPQV_*cz&KVeG=Hj~REo z0nb+@3fxpR4cO0ICC|}i5Sw)|(A4z+e4NBNLNq!4i%N)cENjRuS3k7xQ7?$Fp z2A-q&tB=*VdnZMVN*&HD`j6e89!X2(IHf;1>fR@#=*(8s-Z4WGRg#4-HlDc8-k3sO zY8ujCLlHbjlU0LBKr*BfHzY6D=20kEiO+B8!C5C-tEBF9_ctLLhaQRd6_L_&qh1`I zUH7HFxWO&px3IEOwSW^Do_nyZax+b*+HKpKltz;!Zp(4AH~c!|mrF%z#n?#fa=U3D z@O5mYVt$iDLb@=U9@KzJq%7cghAmta6pM`wv)O*+yUb_2+in|gV>BE`AL$OKiI9~c zLrG&EsembjK(BEjy}&MsAo8Ysmy_U8@AY?lafEET>WbQ5T?U)^W}=4+99$GdXgP9V zid-fRqBMY2mG!g`7`Kh7Od)2k7*GVkXkwZ$Gzp0GYc?wEqIkchH|DO3a#;Sa%BE_) z#Aru;#XD%tMT=-5Bbucl9W&wI5dpVR_Lva#a1+A8*02SAVo~zr%i@BBBhM7LHJk4< zC85%5p}?+_a}>V@F3h-P%HmdjiJ&bR1PaJx4-Yccg#pLb9NWKty2Y4>^2}j#4yL&<(aVF-C0~+?2N^ zBbs3kh)b#&j_Gi$>Ge zIzD|C%4Fp20cPY9uh@;vLZg$-BuE$FKOVS-dqFo*m6b>4%@WcJI-@a^jSeHLo$KPa zb8}M*e)kI6v6TVpm#t87x5}d&O{|gr)WB>OI+umFh6};(!oWNL>30UBp&gy*CNoaP z`j~aQXd~CTF6b)vkt4)?OtEoxkLxAn&TPH&IMsgk zqBrQUd_A%$OcVxv%dbv4$hxb~8^2uu%xgG62-1Icws9+J@s3X;nq|+XbI`aT*PS9A-ps z<*od9OdbunL#Q-Tdpsy+KBxo4BcWIdDOE@wM9FMZ-SM_)&F;G!C_sAThQlSC!=wQlt+>Fb}4RoW7T?ifa7C4@OyObs1q#@W4y&nKb{R90_pJZLcw+0C+2m%>H6eK z`0a4pG24>!>Md}@Bl^)n7CU$?{>eQu%!|K5TPQYHeCv!D_~=sGZEyplPYJ#^gEX_u zP^n!7oA7JEcQxj0)TXGZ^^fKUjeVKI7OR)G#Fo4$L8K|>iOe8mFq+T;o{F%7|FnMR zEv=fbSq%wrUAh|?xbV3gb>N|7qop@`gT;Bb;-v8zxu?K=tnmU-i^cGq*pR+D z3H3TmSW_VXjXTF~{y=KKo$!3HQ4vq(2OS`@J3+L5H8+t;sggB%q}Uz>DidK17-~_1 z4?<@2s(cUNd;NJ+Oah}Q%|dh8oc(k?7?<8Z5pduonr<|Esv1bqCAC6cHDFJ*<;DhluvK2l zFZx)5eWSS(L6V3tZ#qcC%(rxDiVGNs1J%f-B(z12%`jnqT)3&>m|XI>Tk}WhT+6Uv zn_3<`UBOX!+rOz+Y-1AZ*E5fO-%b-s87!cl$VFQXaA;gkTNV)A^(%|-#Dun z(r zl47*vHT;xANBC@-&XM%?w9&JdH;mJH0L9{C6-xm4r~`!jrV^8~UW?>+x8|StT8i5B zPUW|_8k1uBjIDVzFXQwyvS#$h>h!di`(ZtMyw%X%LV}m*>SHp)y{GFyh**pVCX2XV zl=Ks?1U-(9&GjusOTnC@wV&97%ZrF%CyVaKsN0IU?~JJG_YdAZNALTQpbCS5R1Y2y zs{#89Z$RUUB~0#v#jXNxKu%H=T*b=+56zLBkkb*P6iU!1jBmAv!&o)=d2Oc!Jld-! z=}kyrS!raeeZ`jxbGoNI6&O>qV)P3DN`y^P2chyy2MLVB9Gg+lFA<9{m9K{LP zjxjCDx$4Nz=zg!d)q8``gKa*y6j$yFon@_fj-_6{(Osy|Sl^Ea@983R)S7tqv4;Og zbv+nC&3bU)_hTZDFF)qyQ(BI}t)k@($6Mug!YY;MNc=lK5_@b$W$M&uy$6kK9ES7+ zSZgtPjux`mm5p96c0szHtJLX)^sDCSWsA8#P|x@2^wO+}wUO1ZFUlxea0LqtV&Lhw zkIMIr;{kWYf#d^exBB=_^>KvS)O4d$vCKY@FJ#;E6*}+A3*E^#J?iG+3GYVPTSO13 zKRNa1zL8%Gnlan1rj5)&2Ea*xNNClCnNhz1NjdXGEmhCP;9Z?6LXsy}FZH|266061 zb*dcfTABwB3O%MJ98mMtMy0%tEmIyNFxiSrF_2jb2`In;Vg)iT_3AffIB(BFqFZ$t zPd>SHKkuc@*PFhhac2i4ld&*dhu#bKp$+>`K|0+2D&ThzVCg-WPtVbv&(T~qlR5#` zO7D+8BFz>trQIEeb!2{CTX)?S;)Dw~Bb*jJ&5Fk7bCTy?M^ObVi>d4C>uXbc{JN`e zUS}U{0ZA5N5d)HzDgR0G$Yui4$5}u5?;oC1eSB;O;)}FA89iDYPMC+65msIo|5>gO z!AM}@wT$3w8l*%WXx%pSy;bcoSlfjO`5A_?$@ zycRNYXOJlH`mp&P|4YV^{F>!5hCSn4mM9!e2PExuJU|df`Ax^E8YXS;!zU2RLqkS2 z$-jm2&bN1%*h`!4(_oWqPPGRGpsjJuN;Ea+0r&xME}CWXxFA(|yW7JsWd-S%mSA-0d+06~$m|;SdQDg;x=qxr7fEG?M=6#NX0~?xzm{RxE`tye%#M9Qn_E79S2W8?|4SP8G>H@2#8{o099Fb zBvx~LxiUp5U0S-(Po7f?>RemY%HF_b+H_GE%l*7NZTW)CgLSWEsf5*oyWhZqspR`J z_4X+~)n#hz=E(uE{#Q>4#N!I#c3GBR8`r|+8MsRnQYI*FkiR6Zbr#sU?>)a0U#9Ps z2ZETd?fq`pmppec`|a-j6st+#3<~7|(R>Z)+OF0!*ZlRF^4pJ5C8s#hNCNNgIFhFB zjFb@6_kqRztTBdQK&fzgL*FpUZVZ^b-h-Bah=pvyKMntsk|~E#!fgjyEfgC`QC6DQ zvD0#Jm(DpPHt{&<;XA2XuVEsrtHb};1bO|j+SkyKHTy2xZZT#Pha59hV$Yz;*`U%_ z4*D9u@@KS$=Q@CC_y#^T+{;?K{`rnpiG(%b1FkB z@=hvgxR%=BrrOlKaD?UA2qt#@UC5myY266R{#AHv2Uml@(oCqS>h0xN_pB#%vu^TV z1&On&y+`Cy+sYF%<5n*+23!j|F*llDdwWLFN5ux^sV*(F?n^o&4yFs?#UDMcxeI1* zGUulNcOacERo@R2)*{6T+_P;D%$*uz}-^~$wFK9BM>Zmo{HhKxiWz>)vAEf;w0 zN$PeQWGnXY8o6;{o}%-^JpUI%Q`?qY?p(T;$)HY9BpYUBdZ}ilD2x7kXPv!9*vHQs zPHp5_ofGbgztx#2%Nk9K0j0v=9=DSOzE93fFCmArATwZs0*jYB!|LV}R2k2|RHdC+B|F1Sd1Oul!9sKOBx`Jz1{p#mb)a+SrdDkLkIF8d~h*}i6*ctnjRc)lk< zISARJ*Wp3`n|UlKz0j4>$l`aq20}{8>}@sma%A8)z7wu&>&f{Ig(>k-e)GaaFO5qiv{o^qb&p>a@TbI&;%KAqC$lsq_fL^NPKq&RAq=X>2{y<%Rpog4>k7 zz9O9tLnQdJy?hM8@S9Ya<@W^v)|T&I?bTQN6G8|LTO4^pAGyH>Pxj0XjDLg)tOJ_C zmm$;GS#N7QjTnSS<|%{Ugfz##x#WAr*buOrC0)@a)XUOH=&Ni%>pmq;p6$J>mMuXZ zO=V9o7`u~I+XFL_Jh{X7xk(Hn4^#iVLA`IOw0#j4^<;~1+?s))GxzrL%HKo)n8>Fg zOpy3GPVID4<(p3NGC^xg;TOk?f--#fGEO@}B!ZTh*^bC%Zya-NZ(dI5#_y!~Wy!VC zF)iz;%JWC6Xt1Iay&kKd>F{qR(Ixn3r25MVQfCN)B72OsDeCl|hSeoA-CbIjF6a)f zTv=DzdzZ2njst|-Cg+zx?x99iHr8)|FFLCB&jSPS4XP>~YKV^4u00n1(o(s(r6hOk zYX1F3mAPB8T@dGK`$y7rS|#@_-532TnNL}b-|kD!(`#f4%WpeH*u-*aV!kuLwZr^* z%KBRQnpOWSWh45ti*T>tJ3gT+>h$`gAbNiyZ#$LgXO&0EBY~R;Vu=Tv$H|#J)QZ62 z`gr#BU$!}ex?193%Owik3Vb2YU3-}3lbw}&9n<4Ow{S;ghWsFeBpY`#JiTVEASJ?E z>S@-^L_&=y?a53i>LNu07LsAk{leXRm`V71NOyy1Ug%{!({8r(S~o)fOrx?>dY^69 z-k_K~L=Nw#3^n})-|potAopYAiQ#$kJf?GqH(`gGYm%Ls=j)K-_td-Fc6Za8*R1Wl z*yd0xp9sElIJr`X(@T^|zBs!;Np9bf=+D(Uzj|4`vKv1@t5II*z@HX0Ey|KW<3KOG zb;ZFHu9)MJ;6?W7`}j(pOk2tby7aznd!=sBWKZ{xLT%aRL=kUXe22S>kx`&KzdlM$ zpURx(E&sgF{brP`L$ai@fV9@&~_yWe_%p)%6@s-2tvyNj{SNs!ZRaet*-6lAY z?z3R@$}eR;o>%$5$2vD32TrGPNEUxyF?$ZY-KF!D^5>w2)V9&ySF-L7sW!sr>Rmc6 zffhX8gm#s$ZaU-5J{nY};(B{V?=N5h%uxMT<>GnK_h<4fq}KoZ2wUhsRc!t$#yoO% zM*Qbe3{aSI07@sUVBoPd!p$0}pO^>&&%FiBhy-+iq7ADFPUYc=s>_7P=K=)jL#kE;(~DV5ODuf zALes{IwPTu0!VilpVi+>%P?!;ZJ=fehdT0MT?0_rf70cj%C5)%raJL|TM%Foz=6TQ z@4p;cSX`VHEGqslY3`rg`TuhY}RzYIiJ_+OI6->mq5>GYq& zn=m$@{zD=0Uv@WPK@omoQC1-_iN9$L{3jHH|D~1wlh*#h+WxD^Apo^P{4r0Vzk8_&t2h|g_P^<+|1WG*_&;>| zf9^YYAodTXTN#H~#^%?{7Y5UVtvK;2k-oPCNj@;gy0YMXJfM3QK)N;CLHv2NA`$=l z5qW84cxjm-hyL8L8t0PHhcB}`k0RF~_h9c-FP`C(f;+|L<=FEns3S&uo2C$4eReM# zS~_2)l2$u`t_$DldaxWMarw<_w5n)XW0tkqv+Jk`J{OMQa>R^}vt%5FA3oEll3myu zd8S#S`4E2V?(5UD!9NyrZSx0t`J`R;U6ykZh0UagS>;zzwTPUmH3^rQ}z4T<;eB+)rW}OM?orxct79$ zcSOZo|do|v?&^Hl66xw zQ`KwU&1;UY0#`pT>bs2iIEMAdu=W{p3H8M@9~?@xC5k^{;EzSozPOc7oYH#mnu_|p zUH02$QzBZzuL&CYgx!kJmXD^0wkABbl#K~84z;)K<+zVy?mqEMk+PaHk96;4yj8Lc zJHG3i^hKpwj-9qb%X6jvq~}urx#S1h-Ulx)cPSEIDy`6UD_QX<77?fw)Z zLP)2jgCe7~*&7B3Yvd_?9JA^xOJN9Qo;>7pZqltjTi;h?Q4dC_t+E4fnL-~Kywa9d zf(ec&Ztqkc;=fuuLNWe!p6)4JJTwj4^tv=0^UWm@k}e)K*UIGWeviYMPi62jZHPbd z)#E_2UeS!^THO1?oP8T+pwwrIN7rBv!gUnsG_Lg}`5bk%QP|M4fM*9|{1$Ovy~6?9 zf47hqpsBb)UxfCOC*Q_pcmDD4^CO(`hs__nn5GldgonIyNsMVkw8l8B1p4D~EK}pz zY41qCc`t6Lb2SA@kz$A@Wq$Q}bLrAZ&+rmgM~TwlI{M|4Gh^H6eB z?hEyXNwFrTEIpc8(6*K%Ni;2ADr`*Ix_Ta0yGFEIz=#J&!6cbzC5CC}ZoNdMn{j>G z!-;L$p@qoz;7KAuQ#neVYw3_#iBb=@@$To2#lBr$f*_|6(WITXU#{C)5JVd|>BjUj ze)X5ry4UM0^Sl|ymC~xs^lM%Lk|E)#oi4`nMds`41jpC$^!HbsIwqWcPf}BN;ze5Z zz8um_dIVN3phI9bUp=ADN?O7j`y)7s_q)Bp7cXlRwhsns!>A{`#X7y@icE#w?5CN#%yz z7(Hjmn6KMSTgUv*s*>N`gtmsu`sE(KcdEc!g)0iPOrpM;>cQ7qRC{;J>h@11 z-c4Pv?ZIVY#xV=7Z0Ye4RW3D3bMChn)^YNdCD`iwq}AEn5-mN}RbCY4>+}RM!DOWP z*v&GyWGly>XSplTVD*D55rli}_7M4uQDd)q@erGS{~kNNjblq7{%MysUo*MKLb1I1 zShobT-RagAj-;t{lg0~!>1{Ukz1!v`Op+mmfk{Iq0x((9c`Y1T$?F#3AExK)eIYJU zQjsR^2_^NdF^OuG{CX;W_qZf<3JxZ2ik9z$A<15i(tG0Moe%FH5>9v?-{PRKLhtGK z@#YxbP8L5bj5+mPZRpi2?>PK$m+W|7k}0-SH`jQ_lxN=z6#oR~FOi}f8ZB|?=C}Qx zy@YxXc!*6OrNac3FTaq*@d%%E+Yqg8QSmavFU)m}_MEU~L zq91*OpH-b~cibJWnu^53;bbc?{@8m#_V5uN35Ty^FhLk)?VCp5kvUS_HD;XesnD5| zis4m;K7}Nef=utK)>lfV@zYCrcSj!B;9XECOw-$XOoXVJX39Ca-R7hBCj@J8(%MQBx>e^6WgX$Haj@No%@-sPB!&nR=%WN z>ylU_`$O9szOk)jOLq@F`|!#b*E_aXDOfi{oziKfz=Fv~6>we#qgy;_RtevX9})WT zFNnHb+KR=hj3GJD@@nU{ zesizGk3&bFT#ox@Z`%3f-WQIUfHw!toCjp;FN-_FbyS==#vUR++RfdSISk)$5Th;AQn9cS_{~RA%G)Tn@xiKFDRF^poax+T*=vli!Tf8&%{9)q%I%o z->2iBDA^B}wrh8G!j|5t5H#EDd}8D5T)^z@9M1&(I?M?SxICX(4DY;L&glp|-#iR* zxY|704su#*gC~%rC4Rf~W)HSzQ(`raJo8|iG}{c&3)%AgNwOzUtFKrf>#SCBGtUM^ z^RoFmg_fzc;x`1tow$+G{wH5s!tZ)ta^7he{A7PfaX9G1;dKpFRX=ToUeY!_%$1B| z^{6qd;+kPE+j+9J5XHw=c;&{8q(_{bz4=s%+~7X< zj8xgcAcr*muxR0=zKK39)I`9=lRHas!v!7QZp=5iyYcq>_a^0NS-s^MY5~!7vzZ7Y zyVJ)7rQc?y93Q{--5(F8XEtYon-`AXi9bm9vSe4}CE+n{8FU!T;5Z4@*lUR9BHOKO zyuM#Y))4QRR8VqSy%J7Sy71}?xwCg$r5etXu>qa=s|{LQe_ZnB{(Z_8`rLCFkBZuK z5(mh=gPYY72YV{LUm{I(^f#lxeT2>pI~)3Q2lg(q;Jc0nm$L>18B8-iOTHANOsA;v zqwY|Xn>Y7HxLg+EDWCdBVen@7zo-zZ_kFWlD!oTm!J&2w?D|UVS9e}e^^W@O3d~XB z?A;E{1trYM#lnIyBJ9zHpIo~94Qkq1Uan?Vq`sCNANb%)&YSHpv{OFlE z2kyN@cg1?X3H4s7*b5duQS#`e(1aDso23M*m!%2K(tGUgcCir|oQQm}cN&CHlrofD zsXw}0nR)hsk(R{6l>dv!iIq&z#>DygBFt5iA$jONWA6#)*@!QruQu!A>svp?!x-%e z%(Me?+2j$tVu!^+Jp6PiEyd4a~k+4odaVcbY_HH`G(g zKqhX!hX_7NR`+y!1e)^;0ewkl^U(ECBuPx;GIGdRc z;8G0Vv3&UXu) z!e}Z6cP775#N9D1ualYd)Mip$rlcXG;d=Xch9TIv2VbAXP^!k9!bjC1PnNV*_S8ek zH#~6uvS8Etgm>9Kb|PDajD%jgy6tPQKqw7cXw6RT&fD!O&%TDepE~SSG^##@J~NtT zK6$)<|ZcXX+w(2odv@pgn6F>W%8pYgWez^VVU7z_={0A?p z`UXc=cpJ*iC-(eg(7fnk$jq4-4pAd#8o=<9~L4HtDk#WtNI#gD@W;Lc* zXydxyipyW7g$zk3^Cct+Xx*1@&T-usoj$yVCTZn9w*AhSYAFuoXOBWC?7Gscz4FDU{OCDI(wlp4YZ%OAI``B@LZ1@PGO17UiSJN?|ow+ zgQ)?R_<3{FGq%MIH%Hk^4MHl2o#MMAp2R*u(}6Y@oGwMX@h z_6~WE%o5a-(vhh&Y!19C=wp7vd7a)Q!zG$W^JRPD&|vt~PX?zFGOd66S> zJwZvF(t1KV^Bos;fO-(aA>X}Hw%CEjtBrDpbDas}wD*s*quIIcnvnZAbY1MWw2O{O zD(T)Ds>8L|7x5@KEZ2LdgOt}qHH zJ$q|vZU)*cL~F5inGWUIz}I&{J|8&&ok~iVHxDayga(+0qo%jt`r{~j8 z+u`HX0EzKq+9@@wT0YJ~f{Z>PN!|5N^OoIqpa|>xtA2|RTUAm)?g{Z>5`uW~fkP_) z9q$T!iq-Ow#Tfa<#OTI5JuXcQMhdJke3+xLje0sOoKv;s!C#5Nf@yLgZjHh_7azdJ z2MA`jyB~^V7mv!cY^<8WolF-N&#IpHQeQGQbOTQl+8-(_JWp>JpnwFG(=_h@!y{j5r5|i@KvVdx~wNG*tJbkj<7k5PcH~4K&oWQ z-hl8(mH82%T9IL_lQzv{^5+-jt7@FH;wnZAMzS%INejJjnHLzG(@$CtT<>P2fuF)B zw%<-Y-E3f{f4;ZTsKlm=X%bOvJF-2do%Nd}j;SlRNdCuT87qzo**=W( z7O$?&J3T8}m0D+fG9Kth+`Q~zi~Bg+;N|cJW71}+`;OtEcIfBpu3JK<0}|vf>S*(? zo5DZH+%h;Ym(V%KjbPe%)OX?Nrce=XfTQQPV|N(J)x46Km1gJuxwPm_YpO|C<$^qi z{R!>y1%+Ak*wllF(lX4ceD8rp{%B0PTe{SZ_rHGbzYCDtjF`B`u@L9*4)5dR`)p*2 zou1XV8y;=OE#OWmCf-+R2z&I1Waop87>)^P_qBbi!p}Q5)QU(+A141qCfOzK%a>3> z^3`Y}BoFmq&pqU?hsSJ_eGb(pEjM>`NsDc3J%6bDggiX1SxIlQAU==mRSSr;hd*K@ z{T*52>$mC$GwR5S;Df0W^q_qrTdM$fL@ZbqRHf+PonmYK!)0=k;Il z>DSBU5;!xg42qC)Ga%!DJOh5gzNZ1+j+bmMZpk-N9O$wX=gr_%NKd<)>xzi`2cw*g zF<;8-MqI!DUi~UV^Urlj;eV?5{f|Ooz@zg2ONsqgom&6*{r{E({wqrCkFEVfb?4tV z<^LuoCMqua54DD@*5LJb6k&sLK2I3#;E>P>L$h58)Y1g0aq!}TZ^hvz;XZzN^Cs?H z)|X^Z(Gla>+ZUns(#kGdzsuLj=Eup~Eal{6ad1{*gbG_Gef|b~ZEu)TE9&d3Pf3d{ z#>U3hg33zm7iX*7&E|5PT#d&p7=RWHa~8vvd5rM1-Q0RzC{^;r%%kN-MQv`(h5wwr z>Og8CJPc}x+6<3@r!O>$4(yCDl*lhOu8SKx7#!8l#;kiQG+Ns%pB_o`@=A}pFBh@U zU`dAqTxK4B%@N7^M_6$TvhL}!HobZ1AVlz0FyqAq7X@Mwj_D)8=qT`(JX_m z&l=Bw!xHOaG+@knnUXnp~Az9OJt$95L3LL#G$|N z!ErziP2McBy;pMxtR4t7Gh^FufF5Cbi(LmF21r!iL~J)V9f5l8NUgLowPm&~x>!jj z@mnSojsx^cHQ_)Eg3$uoGCSR{!EGT+-|gH z6V55zeV=Kyd`nR~Gp)iA3e0Qp92m$0YOh5fNjrFocPwF!{6M$Uv+3vy-DPb_RC{uH zfX`xZ2e6pu=o%8}uHppZ!oMADM9jbCv-P^TSFl(qo&Yf)A@oF!paBF~KFxF=tE7_S z9`gldWxC()r?t8QIJFW2L;C9|$u0~emqbaxx}m~UjwzaCDn-dL~LS7obB zZEuj}w%@x7(14jUEI`lFAN1?IOXm)@LEk*QoGRB`cJ}lk61k7 z7s3GeD;+sOYAZ2hhlRf|Fe!CiLTo?(j5Qd5ziwdRFJD$6axDC1?n_?c27^m#X1Ti= zDoLd0OW3K3AqTV@zMtI$_%CWK|Ahx!`-lIEL;rS8-yKUcVWqm)qs@HywjQ0Xo#t`< zX1_&}KT4EcdDd7xbiZY+q`ETTDcQ)Cmdw)ZLMIfU)zT{kL6@YUle0n;L2L2h#S|9* z3eW%5h=7)`G0mH%^Q-1GcGFt9-S*tnA zCzBX@@^+P-?eDlq@zV0IeugbA`i0z)_SYYnH3PhtI>3AFy-!9NJ4~H1Sj~P1jeIB9 zRxmtgz&4!z1$-TDz}iM?J!U!E+uo*#nMyW>;quhzxw*~(5o$d|SWYlm+QO}zJV zQZ!n1DthkyhZLiM0YXDqz~ibAJP481Vq`j}mD&{ye>*h)eH7oQ>BFYB*HkcWoY%4BmCYl)GswQyLlwGEs((`kB zNS$-Kr5&4yoESE8RpJ5txRT3b7$=)sIWLvu`agu%KHm(M@FM;= z=iLAhUe^W4W{pRUl4G%3)a#|<<14%WgXul-PnAwh?Uu^2ecvgsAC12!8LaGj&M~b= zZnD%iv|(xn0v5Yrxul#TAF-rt38mpVE`-Wo01{H3-Og^JKiRfxVnnrCY^o5a{F@SG z!?$o+GrRQ*Z}wN0>@ubnbjmm;u0BO(0GJm*xkBNQ2&WS1k-+4RL!WhX7u+ts+v=dN zn$f`$OjpdPtxCHi?bsHjcMueV}p~u5FmH}eB0}$nxqe|F5QR(rXm&A zSvwPQ4Gl*@<@da$xnFW3oP*KiT^QDC4>T^cB!n|q00w7c)ITU$JEaElg?!uFk=i~2 z;}@&kHImZq5|ER@mBMCH%rz;Eqg^iJ^n-_@5mb>DCB)b$1cl!;RQ<)Zlq&TjI>?ii z38N{m6R_O$&53i@bIP&#Z5~?blak=L`#arHr5uM6Q?fSl-@JsVu&63!a#TwfhPoR3 zZmtIGy=BhEh@Ry75zF_ng;!gIbCJn#MbpKqhXR%)`wM*q zFyV6)rgYL`YZpoFVZHpNZXk8WLiiJw>N1_fQe6QME&t^opSgjw!OpB<`xn&p2)lBm zF#vU47}GBf=ZJQ>L~+8q`^96_r+yBnz~)Z_)~*p=CVcR#b5JeRJhTIls;p)eM#UeQ z^sXIf1>gOz^dq&^lGr3TLk*=d+yl23TAu@8R^iREObbAgqX-jYj&6H_k-U#KwO`)! zomMBUH&pNn!A9Cb&>vGx402t=}-3LdXe~WSqBgMd@K|Vm>TW!Cyacr_KgLWhq~Hj z$eRTG&*m|i@@N#S+2HI9DLaf&(}rRh_G_ps0u<-ZSyc9|7|FQe`jWhT$sn9k?#MK`(-|*;ROf!fw|~(qAGr>r^~^lkW(-#u%Xy4og(_>5saJ$36=?y$nQH< zst6PeAerIilTp2670s`c50!!4D_hRaZ>;AgQXfk%HuF*;0DbysRqb&d%M4rjQ$Rwv z5eD)Fnb93d!zZWY7fo*ZcLU$uMP{$s~gx}zs?J? z^NP~@tEB*^PXIGSJBW>r>Kj#f)uUSqis@lS_O&xPZ;|!r;ofcO%OGQZRN>++ ztmkCS_h7bfNoCvPw|MSfn5Si1wuUvJmdfh&sHkm?OC=ETbNQ7Cbqfl*P?!U+&I^EM z1pKB2Kq2u_%spWB;S9>epgGXAMGataC@l9` zQd-JQB#BPEUnTMMoWP{i)N(j_{R7f0Ab-CllQ+ApR2XoN9!xLLm3@59jm5mCD!MO5 z5*FbmgacDtIXgV@y%rh#=&?{1h+#`7sQUPx#cnVx7|r$VI^Srs0#s^tVInWJ{EatN z%}M$md-5qeUw~?3+jm;**%%7PB1cuR=e0d`$OuLm*FdezRB7K?=+fAuTU@rhbNxLS z>A$25-96DZv5y`~TX@Ib{21)Oyz?$vE}Qbs1uA=fT7#MlB7%j+t^?ATQ*zo>$!hf7 zq!umo{RDeD7KzW5%~l%pVO=8cJW2;zLIlh?hwX7cw>DOVu4!AzPk~Dis(OgziLLU^ zy0srknG(#mrI+Su-9HXf0hHPlDM%j%Q24u&)q21k1>YI!``9}fV!`C?r(w09N&uia zz4xAGvHQzod|myS4xAYPEI0d%qh;8Vzz5>604_U*BV%wNbMw|bx^u|o({r0l03Fvt z(_5)cf!D=tcF&E*EBD{vNnrEc;@S z4p70~KF9(p#rrRAk5|;v3v-c?-J@6IVGp!)f?EK>OA{cx;JiBzyk~aOqV!|`BD^kZ z4*kxp%;tg)#)z;%k@wGO`no^MR}N5e6IEx+!!|!%*Sw9pNwA^hAk{Fb)r@L+fblYE zneySP1_Q_&F3SAP!)lLEE@R0U_I~nh$By^Ge!HH&Zd6ikJ4V$)<9{Hp%AJcV9=d~< zi z`ndf$x{99|WX83uvwdw9X0#C<@hcG<)QHaaT0GfuTPpjFUJ9FT!sDT|cBzldbM;W@ zw#OFPwi1C9Im2FdT#m{4|(tBdw%cmb#K9;FZX?5?CY-v3lA)FY= zVt-+bCimQBfNHd7|^zQgQSHGc&qo)%5o3)_w7gW&yg&M$1+6py)+@Jdqe&gi6 z(u*YHoxon0Q6`*%Q1p=zs{1Gbev`}FHP>oJhA1hBe5p}6SYxqqtWzqNqN%4AWC}(+ z=kgvCP6m16Q*KhJWy^jDjoq3p7#4`iQx^07{9|{J{<~ZqTqBIpKd~u7*5gWn{Pv~T ziSounw=;c0z)u0rYaAO1{^Gp8j2mO%9ho0&!#;-TnFMmFpS+^M8=y5((XcVPZAD^` zny~sVhW}SQJN4L&GqgM1OCi%64t!a*pgCS~VxfYcvkSY-r&!MGr3A8r-Goyc-RJ}} z5m!H7t!Q51M5lP=EH)bmO%mEW5S zXJa`_*ng-Y?oP=Vp?zhFe|XMSWUT?u3=ealF`obF{w{P+le9ZDAUZT_GhgR{ZIYsm zbF>PVKn~xxgahZ5z+_R9;e%h6aRTTsF)^|GmT$SQG|A4HR|rnSl6#gtj=d$u8l3zN z^-EP87s!C{$&k`GeKs`0{$ArqGHbVBK=#u>O*8p!tVYUkipIK>%hi#z=2Rb^AHq{| zasF`^4Bd4X!`JyW{1`TW$jN0qaCW)ZrgrbJ+>lBj>+A68gb~5Ef9t!HF?_~nu3dEB z#lk&eFVs1Qo-vz}wy2LEf-5_{@o7G3l3+O+EGMXq3iJ*cnl&cMd5gFl^U#U>R%r9^$o^mev_PE0;n!IRt)JFMhm*`x3Li^4=`PjCu=G> zFo5aGTSL6*lv)=1W3Ye#Vr!2(Pf4=+p%|U>M3GKD-9(Cwe6ZWo`{DrCHMgrXmSeCq z@{5J#+S#3=!>rsQ@20o1L4BGLK8|$F3#_t1$AT%h)s`Ye`ytKBV`+t_gDsY%2N3q6 z?e;2u+o3`dZy$Y`_9>s(&%G-T4P5Sjwuy;0+&siSDLVXg6HC5+a^C&jmr&MH2}>Ln zbwHX)5q}mJwTf12tK4619p;q#4v<~j1*rNZHD}jEhA)rt;k9*}BJRAS@~&%(T`Vny zhko;n8rf{}+h$|j5bKG4_3VO8FH9cEH=U;ur!}t0nYjYCph2IZ-RO00F9vUSJB&_{ zj!Fz@=zN4D=}CEUQYYWWhooX7vpF{cT@?2A)=%t@Z8VuIynOIPJK%-8T=!k-`7A-UcY|j$F=Kn3yu7?aS^>CKyLJNoYJk%j{@Chw-O?Ya01`|8}GqQKd-g}QIA<2&HjO>+Ac7?K1DuiT@ z%1ma-|J)(>;-^oa@Avorz5f4Rdfn?d?{l7Yp7WgZjQ4kP;i<5FuWBDs6y-gsv#Sc3 zr5+UgP8C|=eX`x1YJcq;kla=O*%Yx}5VvSQSP44EoYEkRU(FE7U4E9==1au-S3zPI zxZ<+$^o=@H+jhHv5;EhT_G(zq)n&3 z_Y+?1nG@IJyzjmts;VP6dwBO{V20$AvJjv*;?U7Gf~+&_+jvp7WX1gH>UpEm9uG+P z65FZJ9t@Fb@-Hgw!FjRnpr1i;0UFQm&&ylxW4piEwCFb$o!PGR8glZ#x>WxYX8-a^ zoeK+@77<(=2qAvq?W>1U+o-9Qe8woQGzNb;;9omn!$VDi@!=6{f1zjqm$sz#{x*Eu zlD+a@vretu`L&;MbRoQ^0}?@2s8Oy5Qhj(qR9aj6?Xc|IZlr*N*i6CB|WE{T870 zA;h~1n?&#!6~p|tLs6U}&jlXAW|8Q7O6xpxm&jk*T2_s};z&Mz&$*|6(UZ!v9P8y4>76XbM1K+=v8x zUikl4D6qxY`Fknggdx{HAM=7 zgDb1OtG$DvB~~6R$A6yk%fW-pPv+uYN1789bKv6n=NMb+fqK~1d?;uyn;HlsL=};p zj1B1)o93_CgUs0F;zZY4fPgCFKtQ>;xc@P4{vo7WY?Qx-6j{rHlXrb7aRM0Gx!HkP z#|8fn6$(1(ADgsWtd4&PFc;@pD6;s*2EYg;kZu1~1KMm?U4UbYHSsSY2INE);=q8I ziv!j6Zy~labjH@L99v9-e+MlG*kn+(5HO(q%UTv&a_jZ2t*k)(6l{Umvg7|tfVt4h zAF=^3$NCoeZ^?_)h1lT!=leHu!EpduZkAsTfWm(yzZQnZde}8WIR5jk7QBW54nvD6 z1jd6XlmX}c4>bceN&oZB5UFk9pqL4Yq%dv(GpNLZTyFoC_gFA;{ulNx1m$2n>y=gz zFv58M`Obw|F=)Ly3^s`W`KATqg#x<$HY-7WBVb{`|6&_(Ftp%fhVt<6zw#EG#9ypk$y1a>I#=ObA9nOdY9fwgeO>j{ZO(Kg1;4D_Kn`fZr?u%?{C9EO z)3l%HbOnyf-pe5EqnT+?izj68&3)%zL!-MZpgKnI=lqq%1e_{acF(1u@5gWqs*g+E z!zs$+PGeyXz*lgoO6KpIi7dPRr86Xy>>wo$#e_3$)ZtA0Iu9yWU$IZEo%RP?yknh1 zZR_%G$?T@&Hr#hw09sdSJ8KKN-WrZF0J0W)z3+OTuK8n zXTsz`PXvv@QCR4?TAj3yEu-&v&#))_0_)K?%SU?*&G|)Iy-%*BHbrXu2ypQa?-DIn zGY)kg4<9^G!N85XKqEP5DZu%H3TKw&sNat}Wrxkkq6wnxc7J*M!1?RmSKfZyYQ7Dh zlT8&IpS#2mQ(Fi5!b$kk(uK>&6dI!)NP1n#1`aIe^!=J6y><ouLA=hC}t zYXYmUov$s|e;<9NEI0d6ML;m0A^2V(`J3^T=QP2JqeYCzd}*zSFIk)uo_$U$ttw>r z_|7?_(}TzO9^qv5<;YyGyc|OzUp^n*eHTQ$o>`zZ6u+e~eJHZ2y_43z8S^ zh5E*v$q#SB;lW?>^s<$;5}nYSow-i*{zYcMo?ZKi7ri7?U9)>a)o(g@_;HDsQWVh# zA3yFqt@cUcnjPNj&{S#TAv`XlOtH)*3uim1@f$7P8+PWL5^eo~efw)|sH;S$X&G>x zGZ>(mKOWuq@k3!TgEyJHrtb&;@TJ33mgU3dpUqkuslRlOorWPyc#n{;k*a3jK4kw~3JIPWk@Kl_af)cbOTUej>qFUA^4IDMgHT@0=1{ z{`-jz+kT0pi5yo`c$8u)>k@(I15s}$5o1~6fba30csLv{Lhg1Ncn6N1iKxdJc&_o> z^mWGPQw*7x(zHXrGdT_3Q}R0LrlO*G=2JuQ)O3qq`LTAMQ3W~gTm5yuR$gh=>O_eGne$5ncjHXj=%3m)Yv8Aj zU{T@mj4ed3Mo47w^nvck(lFhdPfkj{X3l{JOrOq4a{cCJ$#;Ag>vXR;>3LYV0zX%?Vt-LbD66^sZcv?y z$%l&_7VZ0Nog>at@}Gf8~(QA2n@Ozdii`o^j7Y9={?&tmd zH6VQJsSIbB^-7P-w1V*u`@+V#ma(rBCC5&UH*{wgE3fIMPbRXJ4?5qvn1B1M47rZb zazVsxu^>*Jo0=bW{1sxU9t%{EHoj3TNulRIkWgdkoOyN@-e{XGnd@NgtdU29dnG{i zcDaC3dO-iJntbJ(Q*gcc}VI&Yb7&$bv_j zak%yQj2sc_eD1^PE=jloYE~1W-{gLIUFu@`WXv#9K2aG%bR~i;y6L@Mfax8Ry;Jp{ zuPg5>qZ+rQTNJ&n@S>-3rO58h4~vHUCXokSq4_6c&S=q)v?tQVK6u&~uAaGaq6}yB zdSl{I?r)WP_o}nzY)#k?z|;c9_;n!FD*}z*XF{s35)Z@&WO7GLD$c5Bp30Z2fQr~g zSRGjU(7h@;vDe`k4_Wv=Ee4^>qA@yd)fa8z-G?HRpL{8+G@p9S@bvPZDuu-WYwpOYRpE}~a{FeIMBMnc8*+${rGP(;|55Bs!>Udwh`NOGM z>|@0JPpruvm-0Fuow)3Nuf+@$`YP8x z$?4tu5b0V7J_S?kzplAy7FrC}WZwDu;%^y~Kgo`+wqJGbCMC6XM`js|w z2hEC@aWQMMq{^7H6^m1XZbHjyoRgj}bez?D?WT)fs2f1d*v!hD>ECp=*J0Dpy^`lg4v)OEP~Cel$Har1wFm&n_cXare8IyGEK)&q9VOpI z87%Wv;(}4%m1J3|ETe*5B{Af~mA%fRUx>`eD5cU^h=h4aCo(%-xSn0KsETUS;3m#j z%VQse1iIxd*f$F^8zwmXs#JaG#Yar{HpZ+~X%B;IdZMK;bJ;<*&?Ch!_e;mz;*RAz ze)Ynj=Y0(euiCl67u2&ufr07JOCEl?T!mU5pKiRXESEa(@o7@lHX?pW_O9C1E7>|P zZ*)Y<`?ucy71R1?x4H5If*jZS@}}fT`Q5ILe7oC74mqD1&;8u=R^vmvnI2b1{f#Nw zdYJJA9g9cFUi?3oXL^s1;LTH4tR>bk^nV}Jc5`d zIftox;YDFm&0dR(yEXYv+o!%VRDXN0;iwdCTDKx@&yy2B&=fnH+_a`-wqG3 zHyv`py=`^$Mu-<}_LXc^fkwNI6EAh`sFS`_XvK_>cNleh@T=Ec(TCrWCKqE4HkfpL zGRw{oNZmWmB$n`gLdBW*jCOKc;K7gH83f9cXCS2eC81 z`JO$uh~K4+q`n;K+|@y^nG>i&lPLf@j;HY=CQ#SHrFBd{nD;JA@zGM3 zz7hZCL2lzevZR@nHbF&%k19r)DNKw4%uYJ^i{99-RTLZJ_UfDBT zWLl>SdQ12rmuW+53Qz38_hY_V`nX?8Q+e6K;Y)l)@?n+;*pVkx`Gj}*IBqbID#2el zXi3!S)PD%g5i zV&`{L_@}dnpXctte|UdyNS}u7(0QqwbLs^zcT;>lFMcKSCsgLdFf^0>szmHj7<3^) zkJyBDIwcdV(lZNL?x^Sb?maFdNR7)tW6zUXsHi9=_HI^uJk8a(AiZ6444 zBvzx$C#<@dX?wtj?cRYp9w$?6VTq$-jTclt@LL~Vo@}@$mKbvSjsH;Z{sXcilPUShLr~%u`PN7_WkVMS2pjU% zjH2jIG4!VtIBrU~I9yP2K)g#5JbD2RL7W>EK@H#a*E=Gb)j>to_2%=|;H`|H?K~F* z?PWX94ME%}0e{ z${HhoLze1PgdodUDgva%02096V-JBLApn()krj0n^z4wW?BM;I$gdF2b-dB<4uoMG zt5FX1|92Pw604E9)qrs7Fm4F=K@w3N#tSYJ(BHv*H!_j|(Fb_Okd$z$*tU>zD6u}J~k~K(|iXwyqDHae8BtIY=NGSx>Y*AfM z4CX*Fm;*Hm@>&o)hZ+TWxupnd7b73wM2>>VXXJGVAO<#{!JAJ12RK{{M1hNx3Pqib%GaR&^Y7BIzzbppN&_PWZv6o^bq!6>gPW5Becgws z%f0E3zXcx@?cNxfYl{G)P?E4Pv_ux@zG!WQY5}-GxX|J)1JMFY7A3H9Vt@_`#t`(M z0r)1Mai7Ov}ZNIW0nhc0vYwTC|$`)3mVdriEfo zix_C9X;C%X0Tnk8gE>25(4A%%H+9;~Le#qB zLK0vLN#R@=qjMt|ztiYgB;`i$2Y(_dc(?E7X%X*0-Vh+i712)42 zh4Et2@K0ii4Hr@-{tOogu-q~&9E%)(TKns(fqR1zz~6w_+kfMWu^Nzn*?Bc!A^le> z00V^Ib8km$M3mc(9T2bk-LV5AW@pC^(Ct(;98=A3|4DqY`MDv)JI{;o671Y#8wCi3 z!!RWcG1pEDYde;s_V?d2W3U{l8ZlYE0Ut&$G=A$F-Zo;%jVYEqTfAgDZAt%BFrbLH zl>f$IJJEsuaUnyuTgh-Z27P%DTl!A)#o|2A#$LTMWZN!f4$OJ~r2MzxD-zc2moi#g z@5C`odFS~ni|8M746Nm?3Ji0bK#sH%wUK)d_l5LR8g>PRTQSR!1Gtymj|ue|70z|wlVym za7-%}Inqun`=4lr1b7>UU}`t;LW7-G-)4E>K?wp1z0I=5&WW|c{z|8VH-8{chkqm( z(AYa`CDrZwP>S_$L*JkRmb74{MPqrNP0{n+ugKww8IWRRL66Kv}vss%U#S2Ix>gWJouLIb) z1vO60T>{GfSIPy-{tvYad^-af8DO-2AA%ZcC+x7Pinf%1o=3sF88Ik37pBF+`=?!G zGwsl*Z6z0`euuLEm2QHvZ&*Y-nj-K&?mh57+RSi7;k=z^L1Y5%+++Jw9a6J_YwQ2% z`iuip$AKG$zuB*#>^rR&%$c`8m0|YSPUtu>S2Aj{orG>(-C(i~h0(SO2X)PhQYA=8 zFe$uoGDBShV|CjsXi#o!KoM(rCqS`Q2PU*z8H`Dy?XHdusGVlsx^j>c0M7@K zli(Ane>Nk?&WUMUK-vFFsY2P&C*W=EJWK?)UniJ7wljRNF2$foAI?rB*hKsd-Ly0D zw=;b>vDeO@)YgW4ZV&_o@AmSE1`Tn*MABf3r2x2v1p(4$^%uBrfUz^~+nHaRwxT~7 zDO&{(xx)d0Lt+WsZO9|#X2FAE9WS6;-_*I&tp^n4fBPRU0WrmDJ0lERB+pblVcMxln*Z^{4FF|<^vAS&{ zBUsYd4E&Q)`IiiYZnxiZVQnTz%y**ER*^&*uPEvQ-!{sty$M6$vBNwuA}^kHnq?a= z29nu`H!~t`*-^I$5Y$-`f;wtIkR~L60A<91Po#JOh>+_Nd?N2OHbcgaWpHr)X_s4v z45_)0iw3-w76B6KGHuJ~9GIIZ(gpcX@ZPZ6QC?EC+YRL6A?DgN3E0OmEorVl-4dfw z;6!gVV24JzMmG)1&W?3~i|oD=>{vp{i3AiyA0#qc2FLQ1LAO@4-ci-A#~b|7xlire{>tiIukZ3_wr#z+1I7ZDlH6LZWfRdh z*tW6Fpa9;UZRp)(2ettnhv8WONzs3YJW^4jrDxl9425D@cF0hczh)Z}+0ASNx(^fb zt+gpO(GFYS;2Va`&NkyVZXhr-7E;Kuc0%em+t%ZS5WN2=Hw5kvY}gCiWM|Z`@Kqk-%@+HK9D%f{A!wr}4LC z+jb@epdHp~LmGfPjf^dD>t^MjmE_hV8qnZanty9efK9Tv!L|)+0E&)x+m3B$k=lW6 zFeugzfsCa4=g6;LydV}miV&OE1dJWiq5|%mf5SE;vRg;S68WvE-kWH*iESGK_nUCP zo#|L7m8}O)u#IDxBwKUhH%133fZkAV+kD6hWY1^uX`X60*5lJK;$n{${|oxSu^m7#0Y#McWn^b zyX`i>&W)w7wx%?1;^8Lo*;s#n5TC8ba1eKf>4tzJ<4$)Xfg~IpM*$uiMmiJ~q`HN+ z*rxK3aD$6&7uN_VV&Ur zF7h3^W9U1kt$>Je**Z1W8vkST`){&h1i(X45%Aj`sMeLtj%3B!>Hg`h78H}LC=zVN z4Qq{KrYdZ!7}vE2<{C$>LlA?Glp>INvz?OxTm)cgf8+o=i3ZlXz_{H)-@$OYh#)J*2=$aOCZxgRFS@3`1TQUSQ54MW`!LX0$9KyX8Q}^ zHVj|r_Tl(YZY)KBOd;55d^A@vsf?n)CaMC!F$EFX|DTMzVVj^9H?a7ShkPI_+u5!l z;RJKB|8ZLox7K&G1i4y!*<|&sj3K8Dt(Xwz7RLU7!fZ1(Ag=|B4eQ$vI$Z^Vq5%Y* zc7e(kfUE~@qD)kD5c+!jCK6G|rr(e%9Tf9J$j$HAP89y@k)BBV7J`cOgsg`GB4zOR zZ>XVp(4$~|Y!_w)Sr2tVJ%^46LPflQn|kCD1)nI(qDTx zT@M97`?$drXsxjRiAw)lcSV9vw5`9MvA3S9_xlrt>iYff`i0{94Hby#MACKr3=Kse z%Fy;T&`Rj>QM)yexOK@x!@UJH#C%vnjmipBwlf5|l@}c?L82E(VnhoCNMS^~2sZLi zpqPm$vZj`%4&afETq=arZKPI#O`C@a2d2%!gr25R^1;i~*Jl4`@XZ z3ZpM@CqU5XVzzRER+PYDwsL`16sa&;finf|0>PXOWU@feP8f{7z^#M!$zb*6U|RPf zVfF4@0zvBq%vLZPS}|a@B8aw`aX_{Kc~EkS*%v{|&5VPB z9J+PIf!P<360JutTLCFi(aRVtLImhS(0T>4FTf40STI^a9O`;FCuS?a4HeyqIWD;1 zSl2?BeF1K0ZG_nha6>C6%vONgx~{@(2FR`J9n5Bc9eP8-0t29j-X}4e5#qY8tS|-v z7r>wyWm;f11Nheco0!c=08ttavl#&(TG3%PBLGB&U|>Ol01)jn#q5ocWwdt0Xhz5~ z+Ovu|2#5;+&0F9G4tdbL1wi0~2F+XK4rFgV~H21m*g}goFp#d(#33 z`zM04C{HL>Zv^#F-bk!w1ZPpN#>QwyxT8SxCh-8Wh!9j%{y0`|B!HWw2I&t3y*JYY zid-`2tGf*>5l$L#gNHISFq;vOp!_a%#Kk^n-XtSHppm^d%Lo))g@E2$ zumqkJ(7c&DFm`0~W-Jlc-JthoED^Wt;LNdEP7v4spm{TvFod2&Ut3~e399BInm1z! zLug7UI=_8`RERrj(7YK-7`QY6&6}}A+^&JDc=wV26yQsdpp=5m&v=fv=Ef+&{e#UNh()Y>AE(wiPl)KR?G z54@l!vx@4GhLCkOP#${O?8fbT3Rl*NyVC8Zv3KpW1CI&8)6+Q01)A+)g@^C$!znz7vsW#zt8iqhszU|ma|}*YcfONRz~!a;3VOBS8_c}PkpkI!hkdI7^kkg%4&7@qYKF#-($wBjk2N3TvnYjI-pOR^o z>~y-vDvdpk^N|XNFPpT!>nv!M9nrR&Y#BF7ynx z;p*xtG}1@hAnXV~PF)t$))RsMWg&2qAu~sYmsB_eXAfcdO&VdJAE)UoAl`=!GW~Zy z!H>O95cL!$DZD4w&*}qC)yb3PciE)xaMy}@R_^E1WBop3`;+p@a9snt!I#RbZ}>)K zv+d&|%|^w1bdQKaGZmt~Ez&paA_&wY$n~Y_H~K)-=f9`la!J6$*ZV|zGO0=>C6(>* zvwLvhEMuB)iiIW{&sOr>Jb5TJ{yC94l=0?1g?-lPHhjV7@pu0^WQ8Y$Q~dP2$<4Fs z`z;Fz4;E5%h>=lcEOZIVuHE7iAPofD@!EC6tadK zA!0}9uiR+mCS(@zD=9xj<8}@groI2`fLYaHf}?xy_j4@A>Irg)3AC)lmY?+{8TY-z z*O~Zkv_b#TFx*Ju3XOvp+xMqtH`F`-{Ys9AU;UeX zz2$=Sg&O{f>YlrGn2MkAsqa$yPH5)+$r|5Zfp(8t(6ju4ee`q0r@yb zIx%5wNtD9loX6)oW4bTtkOpyyGXGzG^yG zXrGIdS6|v29_|V!rR9u3gz(XDe`b%65FR8i=OIP=?-EliykRf#DQB+iB^v$cZG3_?F3=|O&yB$*!4nG#J z%8F`fT5>s>!T;glUA3mwRic;&kHv>*V;VhJ67<`tbAsImAF8+1280-%@1|r4f|(50 z=|&x$7&#X$=^9Kgtp|OiJ0CtB>B$)(JT-xYq3J;z>m=Qwe({KI~PNqzBPp zSfQL}3wWW$f9vMM%!6|;3@9`Y8B)&JRHTU$!5%feJ>eq)@rz?UBct>@utk`Nk7P-4+#T}A8WH(h~3Z9D2QZnA^{QNdO=Z2|jzq43SUXZQM*4m$3>oog>^e3SK(Ag@EIl&XrFiM1*N z;XLc5f(x@Rq$@?D@)(G+j3;lELmp)j4;8f(owQ%ZgEgx@hZ+s#-Mkdj<#0_ZyTzjX z((v)UmaEd&rNW+kq>GM8^SujczC?B8LPT-ZS=ELjzDQOPBQ>fc;#5bDCeT{vhIY++ z`N#UkH-wwO7#W|lA23q%w&p$WF<`*8rhl@UT`c+p{8{HgIlDRNmwk(i&GC78bvf*^ zL4&mV@$$z7s~BGto!s9-VHyCpD}U5F@SNUTCrh7FkKLW@fTK09iX>jvWokoSY4v<# z)l)4+hZyQ=VfLr>cw5I?e3m+y}Oqwb_MPVBaT<0_(YmN_B|rUs#Gx|SDdl4MDwos zh@XAKYe;w|QPF3!tO~9MvtQIqwUSzLp|2Do@U;cYl&$*9d=B)TT3y{QeIq+Z~z{VDG*9W;Qe>^?iH`aB4T_Gg1eS;9v_lJ`?5}Qd@0^{YKRT$NB){(lF6Ehf0&J$QOe-Gj;+_bgB5!l;{5RMk0XVE?+UFOvb6#)+$nz9CkbE0w-s)Rwt}*)EGelW2~ zgzSuD2CQEokP8%Gll=obk)~GW*h9^>b@12bSQN}=n;>Fr9!!Nox0r=NhvZqFz zGlfIz-&dJ@XH{EFX>(@E5DV6M@!4U*?qY_%nhhU~)-%_RJ=a-UUG3< z$|&O@GnkC`J4plnGxP4hz~@-@1xz6weOo`rv5d#*!Pz4(^WTmPsz-w_9piSk7I}y- zSyGua_E#Q%x|%E;s$+To2*LGSe<~g8o4Z6xb>*%G8r|@*i@n3QKiz~YOX|rLi}qJ; zGD#2Xg_nbLca02dwbQ2)=0g=O+T{7zUH|%?zJ*q6+O6tAgf(2@;wR(#@g5bib%&nq z-`zxH#Q}On#QN@g*-@ck{du?#Jmq!U$L<@A*+C`z$Hz`Hj&p+^aeViZFWbg6!XWr->X#`MB5?qrY~)(O*gGVmI^{nZzJZI`8-Sx|GJ#_pI^B6r+WqUs|8-h-W@8fctoG0%=^lqY5#q(S&F5cw5Gk*W$z{=vJO_A=GAuSl(_uq zT-V5vsY_PWy283tiNdtB`K@gi-w%(*ram~ud0E?7`jCen=e*a$ms9x9*D6@g9@+Dh z`15_g^t8Fod^uqs$f=yAADyl#!en!WM;d zo;>$uaw7Pac8mNYFIU6voK6edJ!j|(WD`gtc$0W&-rxT8txH|yvsz{N<4Vm73;lF$ z!HTb)xvk>TS4G?}{GhyjqO)Y;Q$CH@*lLKNXTk!NZND*Fu6w1?+t^=aY;=c=j$H13 z-|qM=&oRfn14r~_!zJ7BCv@NRR5N#nDqJrn%@oeG5g@}OBF8(_vP*=F91}~ z(U^hpgBXdu%lE8HpWvw{hFDoMogrXoj8eKJNR{E9C(d-5Uga+D&EY<}Uq5woxCY&d z*SdD?NvxVkC+G@zTk=x(r~72@kLg-|+qM1v)?Gh8NKJZ9>P$8hJTCtD{Zs1^n`e72 z%!Jd;J)U*Psl&6yfj!$_t$WV0}_*$Z5%UEi*s#(ynwtUCA=CNniwRxKt_iwQ4pRq6 z`e$T|yq37Wu?;>IGEt*>tGO&BNBrY8*`gR!yXLjOa$WlQsGfuS591z?#e>fK5Q&?; z)!$9-t^U+i^tr`xoV^_GqCRs9v9DZrmk~IAQE#}Tka@^uq%o1msWJAhk>6F8i;te* zU2W1hJhEIj$$CoK=Ws%>$MA~^vMQC7G-VAU*B{2+?xcc&O)^@#RYGUXPIjE)X4ClL zFxVuJbIyq?_HA(u!x4d@X|K1?fIHLIyyue4%jUb7M|C@k7lgc4zJ)D(SlE~E;YTb} zaB;e_p^#PZEQvSHLg*{@j4A2H^DJe!?l;pWc)jAS^CIca)Zvopi8gRb%M1!j(waum z$33mm1qG`whW6A{s#5c0{Yr((YqO9D9~<`PH;sf`iSYIiggPZep6tpryo$q2PjE^i zTR4`-%f+Q>Hl$G|o_julpM@m;Cw0J7&itTP!){W1u~QinEGPPy-WNVJ5VJXFN!u7< zsm0+YDJLEv7sjSP|6`&|gA9tJDUBdlq*oB8PBT1=?1OCN*Rs2i0)sDIk?cY=T zf>h}F=ra+^nN-qZ&&Eza=#jZlGscp|;**z;oxAbtMm0R1jPURr8%Kb5!pD*G9(Il2 zB;nrg5)%kwLO(CYvXt?2HP5wuE=(D`>-$h!bS9bH`8$oPuzSS)Yd!ixAJbRaZ2Pk> z_d35c*Qrek=bq|uo6O5vl@vO(=jmRn)1-1GCloDUpOXp{Ch#vEQuT(|?AtXg@`$x( zq`|4@qpnm@3@iCAU5Od#z+qNrTillFL(aFnGCh+Y4yDcBPL->g?|!*T>g62a6v{y| zO}^)oK;b|^H$z`%=esHu=HVZs*QGkNeu1gtL|kO=hj78kb@h=$-^S75hhxxw@% zh@JN}ylwLRoGRH3qgu9KDSK&$wf#<9W};X&)+cyv6qxubo+MhU<;au!!#5MU8$uqi z+54Az8m|RAcHeq=P13Y(_m5TAM6Xx2^}iC#J1=(~kQr|M zUcEGPN2tQ=-D@tZY3&|9V~t-eAL}|M;rU+4`$B8-Qk=gShjB;BFF&+D^YF8k42_W6 z#hk%1@i6J}GkMEOD_;g`8FR*S+=7qso{6o;ZNQa3ttMP2ftz>FQ!Rx+ z6~&vwHnuk(>}|_6?G~!}*453H__5?`7I|Iz9TV$b4?Beqvm=3Yf-4P5&-ML+Mn~L& z4&U4hXSt4pA18i>&{sCr-|sfAi^Yf}Z+IgN8tNx~?2LNYi)$^-C58p&HSNFV4_huX zj*G3$sRwy^8V@ucuxW6bY_4yADI)>|XR^8FJ8Rks5Sa$o&G)(Qne?;^u z$A>HyN7{4l?HhyZzC2MR?e-DZPmewrfB7xhIDAjC@WK+~a_`xSNXu8U+_%{eFs6SU z7%0fjU631_HI;buT^GV%m7#VkC(sl`5RAGox7J7(fpSd#i#^CeZ3{;(kby74;b=fjD)>R^fciqyryrl7&LNNo~)?Y-iw%w;tuuU z;5R?#l4`3997#eX^1VpZX6&CF$~j|vGHa4XGkW&?Xl$L|bZ_^O^4zAM&Bas6uPQ#3 zd(G*^Cb?vrx2_mR$p7jMI_1Nh^yFu`zPy0bPgRIE?ARevAAHxsvyq8@Cp5zX=|^Ju zA@oUcs;_TWyBZCT-MMmX-hYvK2tw$}bmHBIWP{ft_xf8KAB`Cr8rkfTJgwodhb#-0 zk@9gQ>dccasY|Yo?U`=$tMegVt8RS}-;7_oTHIMZ^0AnJ+xoKmkNqU^0pEGtDvZNq z)^dJ!zAHbr_-lM5S?+?PgY zA14q�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%0AseuoW`w)!+FqQN!e5xE1m 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 y7Z6r=aBu~8c7RIbuGT2nTR5> 6)) * (int) (((a & 127) << 16)+(b<<8)+c)) #endif diff --git a/wgrib2/gribtables/ecmwf/create_ecmwf_gribtable.sh b/wgrib2/gribtables/ecmwf/create_ecmwf_gribtable.sh index 3d937f7d..66908cd6 100755 --- a/wgrib2/gribtables/ecmwf/create_ecmwf_gribtable.sh +++ b/wgrib2/gribtables/ecmwf/create_ecmwf_gribtable.sh @@ -22,7 +22,7 @@ # program "jq" (https://stedolan.github.io/jq) # # (c) 2020 Manfred Schwarb -# Released under the General Public License Version 2 (GPLv2). +# Released under the General Public License Version 3 (GPLv3). set +o posix diff --git a/wgrib2/gribtables/ecmwf/filter_local_gribtable.sh b/wgrib2/gribtables/ecmwf/filter_local_gribtable.sh index 97b0d009..c9ad794a 100755 --- a/wgrib2/gribtables/ecmwf/filter_local_gribtable.sh +++ b/wgrib2/gribtables/ecmwf/filter_local_gribtable.sh @@ -1,4 +1,6 @@ #!/bin/sh +# (c) 2020 Manfred Schwarb +# Released under the General Public License Version 3 (GPLv3). # local_gribtable includes definitions for other than ECMWF # remove non-ECMWF definitions diff --git a/wgrib2/grid_id.h b/wgrib2/grid_id.h index d22280fe..482ca5cd 100644 --- a/wgrib2/grid_id.h +++ b/wgrib2/grid_id.h @@ -1,3 +1,5 @@ +/* 10/2024 Public Domain Wesley Ebisuzaki */ + enum projection_type {p_unknown, p_latlon, p_lambert_conic, p_polar_stereographic, p_mercator, p_rotated_latlon, p_stretched_latlon, p_rotated_streched_latlon, p_lambert_azimuthal}; diff --git a/wgrib2/ieee2flt.c b/wgrib2/ieee2flt.c index 752ac2a8..10543154 100644 --- a/wgrib2/ieee2flt.c +++ b/wgrib2/ieee2flt.c @@ -2,7 +2,7 @@ #include #include "wgrib2.h" -/* wesley ebisuzaki v0.2 +/* ieee2flt.c 10/2024 Public Domain wesley ebisuzaki * * takes 4 byte character string (single precision ieee big-endian) * and returns a float diff --git a/wgrib2/ieee2flt_nan.c b/wgrib2/ieee2flt_nan.c index fd45c01c..6a5f5de0 100644 --- a/wgrib2/ieee2flt_nan.c +++ b/wgrib2/ieee2flt_nan.c @@ -2,7 +2,7 @@ #include #include "wgrib2.h" -/* wesley ebisuzaki v0.2 +/* 10/2024 Public Domain wesley ebisuzaki * * takes 4 byte character string (single precision ieee big-endian) * and returns a float diff --git a/wgrib2/intpower.c b/wgrib2/intpower.c index 4931db86..c5e5a731 100644 --- a/wgrib2/intpower.c +++ b/wgrib2/intpower.c @@ -1,8 +1,7 @@ #include #include "wgrib2.h" -/* - * w. ebisuzaki +/* intpower.c 10/2024 Public Domain Wesley Ebisuzaki * * return x**y * diff --git a/wgrib2/jpeg_pk.c b/wgrib2/jpeg_pk.c index ec3b7248..495d49ca 100644 --- a/wgrib2/jpeg_pk.c +++ b/wgrib2/jpeg_pk.c @@ -7,6 +7,8 @@ #include "wgrib2.h" #include "fnlist.h" +/* 10/2024 Public Domain Wesley Ebisuzaki */ + #if defined USE_JASPER || defined USE_OPENJPEG /* diff --git a/wgrib2/make_gribtable.sh b/wgrib2/make_gribtable.sh index 1d3449c5..e3f7e8f6 100755 --- a/wgrib2/make_gribtable.sh +++ b/wgrib2/make_gribtable.sh @@ -1,5 +1,6 @@ #!/bin/sh - +# 10/2024 Public Domain Wesley Ebisuzaki +# # Script to convert grib2 table information from the # "gribtable" format to the "gribtable.dat" format. # diff --git a/wgrib2/ncep_grids.c b/wgrib2/ncep_grids.c index 7e1cc2ae..52d9a3b9 100644 --- a/wgrib2/ncep_grids.c +++ b/wgrib2/ncep_grids.c @@ -7,6 +7,15 @@ #include "wgrib2.h" #include "fnlist.h" +/* ncep_grid.c 10/2024 Public Domain Wesley Ebisuzaki + * + * the option -new_grid handles several grids + * + * this routine alters the arguements to -new_grid + * which are in the form "ncep grid XXX" to one of the + * generic definitions understood by -new_grid. + */ + #ifdef USE_IPOLATES diff --git a/wgrib2/proj4_initialize.c b/wgrib2/proj4_initialize.c index cab6c69b..b881a240 100644 --- a/wgrib2/proj4_initialize.c +++ b/wgrib2/proj4_initialize.c @@ -5,6 +5,11 @@ #include "wgrib2.h" #include "fnlist.h" +/* proj4_initialize.c 10/2024 Public Domain Dusan Jovic, Wesley Ebisuzaki + * + * initialize using Proj + */ + #ifdef USE_PROJ4 #include "proj_api.h" diff --git a/wgrib2/proj4_wgrib2.h b/wgrib2/proj4_wgrib2.h index fcef094d..a7e8560d 100644 --- a/wgrib2/proj4_wgrib2.h +++ b/wgrib2/proj4_wgrib2.h @@ -1,4 +1,5 @@ /* wgrib2 interface to proj4.c */ +/* proj4.h 10/2024 Public Domain Wesley Ebisuzaki */ /* projection parameters and scaling for x, y (to get in grid lengths) */ diff --git a/wgrib2/rd_seq_grib.c b/wgrib2/rd_seq_grib.c index 99fd97db..11d8f4f1 100644 --- a/wgrib2/rd_seq_grib.c +++ b/wgrib2/rd_seq_grib.c @@ -5,6 +5,22 @@ #include #include +/* rd_seq_grib.c 10/2024 Public Domain Wesley Ebisuzaki + * + * two ways to read a grib file + * random access + * sequentially + * + * ex random access + * wgrib2 IN.grb | grep HGT | wgrib2 -i IN.grb -grib OUT.grb + * reading in controlled by index + * ex sequential access + * wgrib2 IN.grb -if "HGT:" -grib OUT.grb -endif + * + * Note: reading from pipes requires sequential access. + * handling files > 2GB on a 32-bit CPU required sequential access + */ + #ifndef DISABLE_STAT #include #include diff --git a/wgrib2/rotll.c b/wgrib2/rotll.c index e696a1cf..51cd2110 100644 --- a/wgrib2/rotll.c +++ b/wgrib2/rotll.c @@ -7,6 +7,8 @@ #include "wgrib2.h" #include "fnlist.h" +/* 10/2024 Public Domain Wesley Ebisuzaki */ + extern int latlon; extern double *lon, *lat; extern enum output_order_type output_order; diff --git a/wgrib2/setup_user_gribtable.c b/wgrib2/setup_user_gribtable.c index cadb60b7..af8ccc9b 100644 --- a/wgrib2/setup_user_gribtable.c +++ b/wgrib2/setup_user_gribtable.c @@ -3,6 +3,18 @@ #include #include "wgrib2.h" +/* setup_user_gribtable.c 10/2024 Public Domain Wesley Ebisuzaki + * + * read user defined grib table + * add user defined grib table to wgrib2's own grib table + * + * source of user defined gribtable + * + * $GRIB2TABLE (environment variable) + * $grib2table (environment variable) + * gribtable (file) + */ + struct gribtable_s *user_gribtable = NULL; #define LINELEN 300 diff --git a/wgrib2/simple_pk.c b/wgrib2/simple_pk.c index c0cc6753..fb7ff60f 100644 --- a/wgrib2/simple_pk.c +++ b/wgrib2/simple_pk.c @@ -13,7 +13,8 @@ #define omp_get_num_threads() 1 #endif -/* +/* 10/2024 Public Domain Wesley Ebisuzaki + * * write a grib-2 file * * sec0..sec4 predefined sections 0 to 4 diff --git a/wgrib2/subtime.c b/wgrib2/subtime.c index 7fb28542..d392e316 100644 --- a/wgrib2/subtime.c +++ b/wgrib2/subtime.c @@ -6,7 +6,9 @@ #include "wgrib2.h" #include "CodeTable4_4.h" - +/* subtime.c 10/2024 Public Domain Wesley Ebisuzaki + * subtract two times + */ #define FEB29 (31+29) static int monthjday[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365}; diff --git a/wgrib2/test_sec.c b/wgrib2/test_sec.c index d9210c5b..e2885764 100644 --- a/wgrib2/test_sec.c +++ b/wgrib2/test_sec.c @@ -5,8 +5,8 @@ #include "wgrib2.h" #include "fnlist.h" - -/* some routines to check whether two fields are the same */ +/* test_sec.c 10/2024 Public Domain Wesley Ebisuzaki + some routines to check whether two fields are the same */ int same_sec0(unsigned char **sec_a, unsigned char **sec_b) { diff --git a/wgrib2/units.c b/wgrib2/units.c index 5a376b6f..a7b5180d 100644 --- a/wgrib2/units.c +++ b/wgrib2/units.c @@ -3,7 +3,8 @@ #include "grb2.h" #include "wgrib2.h" -/* +/* units.c 10/2024 Public Domain Wesley Ebisuzaki + * * time range: ascii to int, int to ascii */ diff --git a/wgrib2/unpk_0.c b/wgrib2/unpk_0.c index f0617e79..27a49159 100644 --- a/wgrib2/unpk_0.c +++ b/wgrib2/unpk_0.c @@ -23,7 +23,7 @@ * undefined values filled with UNDEFINED * * note: code assumes an integer >= 32 bits - * + * 7/98 Public Domain Wesley Ebisuzaki * 7/98 v1.2.1 fix bug for bitmaps and nbit >= 25 found by Larry Brasfield * 2/01 v1.2.2 changed jj from long int to double * 3/02 v1.2.3 added unpacking extensions for spectral data diff --git a/wgrib2/wgrib2_api.h b/wgrib2/wgrib2_api.h index 9cdbae76..055028a2 100644 --- a/wgrib2/wgrib2_api.h +++ b/wgrib2/wgrib2_api.h @@ -1,4 +1,4 @@ -/* used by C and fortran callable_wgrib2 API */ +/* used by C and fortran callable_wgrib2 API 10/2024 Public Domain Wesley Ebisuzaki */ int wgrib2(int argc, const char **argv); int wgrib2a(char *arg1, ...); diff --git a/wmo_scripts/get_BUFR02020.sh b/wmo_scripts/get_BUFR02020.sh index 03923f9e..e06609dc 100644 --- a/wmo_scripts/get_BUFR02020.sh +++ b/wmo_scripts/get_BUFR02020.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/BUFR4" diff --git a/wmo_scripts/get_CCT05.sh b/wmo_scripts/get_CCT05.sh index 8e7db667..48e47bff 100644 --- a/wmo_scripts/get_CCT05.sh +++ b/wmo_scripts/get_CCT05.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/CCT" diff --git a/wmo_scripts/get_CCT08.sh b/wmo_scripts/get_CCT08.sh index 0a8e68de..9fc93b34 100644 --- a/wmo_scripts/get_CCT08.sh +++ b/wmo_scripts/get_CCT08.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/CCT" diff --git a/wmo_scripts/get_CCT11.sh b/wmo_scripts/get_CCT11.sh index c44ab671..49facba9 100644 --- a/wmo_scripts/get_CCT11.sh +++ b/wmo_scripts/get_CCT11.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/CCT" diff --git a/wmo_scripts/get_CCT14.sh b/wmo_scripts/get_CCT14.sh index 5d10b094..f9f9c447 100644 --- a/wmo_scripts/get_CCT14.sh +++ b/wmo_scripts/get_CCT14.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/CCT" diff --git a/wmo_scripts/get_code_Table_0.0.sh b/wmo_scripts/get_code_Table_0.0.sh index 9c28ec9b..20104e42 100644 --- a/wmo_scripts/get_code_Table_0.0.sh +++ b/wmo_scripts/get_code_Table_0.0.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_1.2.sh b/wmo_scripts/get_code_Table_1.2.sh index ac86a6fe..343610ae 100644 --- a/wmo_scripts/get_code_Table_1.2.sh +++ b/wmo_scripts/get_code_Table_1.2.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.1.sh b/wmo_scripts/get_code_Table_3.1.sh index c7c7397a..8e9e3408 100644 --- a/wmo_scripts/get_code_Table_3.1.sh +++ b/wmo_scripts/get_code_Table_3.1.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.11.sh b/wmo_scripts/get_code_Table_3.11.sh index ee579e16..b71b72d3 100644 --- a/wmo_scripts/get_code_Table_3.11.sh +++ b/wmo_scripts/get_code_Table_3.11.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.15.sh b/wmo_scripts/get_code_Table_3.15.sh index ca926c99..edf9c76d 100644 --- a/wmo_scripts/get_code_Table_3.15.sh +++ b/wmo_scripts/get_code_Table_3.15.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.2.sh b/wmo_scripts/get_code_Table_3.2.sh index 074d9e63..93ce2984 100644 --- a/wmo_scripts/get_code_Table_3.2.sh +++ b/wmo_scripts/get_code_Table_3.2.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.20.sh b/wmo_scripts/get_code_Table_3.20.sh index 58825ab4..e05dd621 100644 --- a/wmo_scripts/get_code_Table_3.20.sh +++ b/wmo_scripts/get_code_Table_3.20.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.21.sh b/wmo_scripts/get_code_Table_3.21.sh index e571cf43..2c385186 100644 --- a/wmo_scripts/get_code_Table_3.21.sh +++ b/wmo_scripts/get_code_Table_3.21.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_3.8.sh b/wmo_scripts/get_code_Table_3.8.sh index dc4480cd..392862e0 100644 --- a/wmo_scripts/get_code_Table_3.8.sh +++ b/wmo_scripts/get_code_Table_3.8.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.0.sh b/wmo_scripts/get_code_Table_4.0.sh index b6fc6c7b..756e4b71 100644 --- a/wmo_scripts/get_code_Table_4.0.sh +++ b/wmo_scripts/get_code_Table_4.0.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.10.sh b/wmo_scripts/get_code_Table_4.10.sh index 2c13f214..dba2cf4d 100644 --- a/wmo_scripts/get_code_Table_4.10.sh +++ b/wmo_scripts/get_code_Table_4.10.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.11.sh b/wmo_scripts/get_code_Table_4.11.sh index 45a4e827..f0cedf25 100644 --- a/wmo_scripts/get_code_Table_4.11.sh +++ b/wmo_scripts/get_code_Table_4.11.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.15.sh b/wmo_scripts/get_code_Table_4.15.sh index ec6e4e0e..1179970e 100644 --- a/wmo_scripts/get_code_Table_4.15.sh +++ b/wmo_scripts/get_code_Table_4.15.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.16.sh b/wmo_scripts/get_code_Table_4.16.sh index 624d167f..58f13e29 100644 --- a/wmo_scripts/get_code_Table_4.16.sh +++ b/wmo_scripts/get_code_Table_4.16.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.208.sh b/wmo_scripts/get_code_Table_4.208.sh index c8a7d4aa..85cb486a 100644 --- a/wmo_scripts/get_code_Table_4.208.sh +++ b/wmo_scripts/get_code_Table_4.208.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.212.sh b/wmo_scripts/get_code_Table_4.212.sh index 96436804..d202b1ff 100644 --- a/wmo_scripts/get_code_Table_4.212.sh +++ b/wmo_scripts/get_code_Table_4.212.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.222.sh b/wmo_scripts/get_code_Table_4.222.sh index a16af7e0..ab08a634 100644 --- a/wmo_scripts/get_code_Table_4.222.sh +++ b/wmo_scripts/get_code_Table_4.222.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.230.sh b/wmo_scripts/get_code_Table_4.230.sh index 398e008f..28ba9190 100644 --- a/wmo_scripts/get_code_Table_4.230.sh +++ b/wmo_scripts/get_code_Table_4.230.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. #---Code table 4.230 is Common Code table C-14: diff --git a/wmo_scripts/get_code_Table_4.235.sh b/wmo_scripts/get_code_Table_4.235.sh index f89ae112..13fca2cc 100644 --- a/wmo_scripts/get_code_Table_4.235.sh +++ b/wmo_scripts/get_code_Table_4.235.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. tab=$1 diff --git a/wmo_scripts/get_code_Table_4.240.sh b/wmo_scripts/get_code_Table_4.240.sh index 8b04b2da..b301e8f9 100644 --- a/wmo_scripts/get_code_Table_4.240.sh +++ b/wmo_scripts/get_code_Table_4.240.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.3.sh b/wmo_scripts/get_code_Table_4.3.sh index 42322c00..43d8fc2f 100644 --- a/wmo_scripts/get_code_Table_4.3.sh +++ b/wmo_scripts/get_code_Table_4.3.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.4.sh b/wmo_scripts/get_code_Table_4.4.sh index 270e9612..9c32e96b 100644 --- a/wmo_scripts/get_code_Table_4.4.sh +++ b/wmo_scripts/get_code_Table_4.4.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.5_ncep.sh b/wmo_scripts/get_code_Table_4.5_ncep.sh index da825995..5ca247d1 100644 --- a/wmo_scripts/get_code_Table_4.5_ncep.sh +++ b/wmo_scripts/get_code_Table_4.5_ncep.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. tab=$1 diff --git a/wmo_scripts/get_code_Table_4.7.sh b/wmo_scripts/get_code_Table_4.7.sh index 335d2436..dd80b67a 100644 --- a/wmo_scripts/get_code_Table_4.7.sh +++ b/wmo_scripts/get_code_Table_4.7.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.8.sh b/wmo_scripts/get_code_Table_4.8.sh index 4c478779..3e47b983 100644 --- a/wmo_scripts/get_code_Table_4.8.sh +++ b/wmo_scripts/get_code_Table_4.8.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.9.sh b/wmo_scripts/get_code_Table_4.9.sh index 9b1dcbc2..616c0f09 100644 --- a/wmo_scripts/get_code_Table_4.9.sh +++ b/wmo_scripts/get_code_Table_4.9.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_4.91.sh b/wmo_scripts/get_code_Table_4.91.sh index 1138f470..091ea2c4 100644 --- a/wmo_scripts/get_code_Table_4.91.sh +++ b/wmo_scripts/get_code_Table_4.91.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_5.0.sh b/wmo_scripts/get_code_Table_5.0.sh index bcf31122..08a96bfe 100644 --- a/wmo_scripts/get_code_Table_5.0.sh +++ b/wmo_scripts/get_code_Table_5.0.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_5.1.sh b/wmo_scripts/get_code_Table_5.1.sh index 639abc0c..f7d18221 100644 --- a/wmo_scripts/get_code_Table_5.1.sh +++ b/wmo_scripts/get_code_Table_5.1.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2" diff --git a/wmo_scripts/get_code_Table_6.0.sh b/wmo_scripts/get_code_Table_6.0.sh index c8167213..5d4324c8 100644 --- a/wmo_scripts/get_code_Table_6.0.sh +++ b/wmo_scripts/get_code_Table_6.0.sh @@ -1,4 +1,5 @@ #!/bin/sh +# 10/2024 Public Domain Manfred Schwarb # This script updates wgrib2 with WMO code info. urlbase="https://github.com/wmo-im/GRIB2"