天天看点

Java 求阴历(C++ 求阴历方法的转换)

前言:本篇文章求阴历方法不同于 我截止目前看到的大部分 java 求阴历方法,本篇文章代码都是从C++代码中翻译过来的。

由于本篇文章没有什么技术点可以说的,下边我们直接放上工具类,年份时间范围为 1901年 - 2099年。如果想要调试直接将工具类复制 cv到工程 工具类中,调用 solarToLunar 方法即可获取到 所有相关信息的 HashMap对象。

import android.annotation.SuppressLint;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;

/**
 * 阳历 转 阴历 工具类
 *
 * @packageName: cn.ymc.vip.suntimejava.util
 * @fileName: CalendarUtil
 * @date: 2019/1/4  14:49
 * @author: ymc
 * @QQ:745612618
 */

public class CalendarUtil {

    private volatile static CalendarUtil instance;

    private CalendarUtil() {
    }

    private static final int MIN_YEAR = 1900;
    private static final int MIN_SOLAR_YEAR = 1901;
    private static final int MAX_YEAR = 2099;
    /**
     * 年干支
     */
    private String[] mYearGanZhi = {"甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
            "甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未",
            "甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
            "甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
            "甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑",
            "甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"};

    /**
     * 定义起始年,1804年为甲子年属鼠
     */
    private final static int START_YEAR = 1804;

    /**
     * 10天干 /  12 地支
     */
    private String[] tianGan = new String[]{"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬",
            "癸"};
    private String[] diZhi = new String[]{"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申",
            "酉", "戌", "亥"};

    private static String[] shuXiang = {"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};

    private int[] mDiZhiTimes = {23, 1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 21, 21, 23};

    /**
     * 年干和月干的对应关系
     */
    private int[] mYearAndMonthGan = {3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
            5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
            3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
            5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2};

    private int[] mDayAndTimeGan = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
            3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
            5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
            3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
            5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
            7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
            9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,};

    private int[] normalYday = {1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
    /**
     * 闰年的 情况
     */
    private int[] leapYday = {1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336};

    private int[] TianGanDayLG = {10, 9, 7, 8, 7, 10, 9, 7, 8, 7};
    private int[] YinYang = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
    private int[] DiZhiDayLG = {7, 10, 8, 8, 10, 7, 7, 10, 9, 9, 10, 7};
    private int[] TianGanTimeLG = {9, 8, 7, 6, 5, 9, 8, 7, 6, 5};
    private int[] DiZhiTimeLG = {9, 8, 7, 6, 5, 4, 9, 8, 7, 6, 5, 4};

    private int[] JiuGong = {6, 1, 8, 3, 4, 9, 2, 5, 7};
    private String[] m_LGAcupoint = {"公孙", "申脉", "内关", "外关", "临泣", "列缺", "照海", "照海", "后溪"};

    private int year;
    private int month;
    private int day;
    private int leap;
    private int nTem;
    private String baGuiStr;
    /**
     * 闰月
     */
    private int leapMonth;
    /**
     * 是否 闰月
     */
    private boolean isLeap;
    /**
     * 世纪
     */
    private int nCentry;
    /**
     * 求年的后两位
     */
    private int nLYear;
    /**
     * index 下标
     */
    private int rTn = -1;

    private int nTradYesrs;
    /**
     * 所求数据 包装
     */
    private HashMap<String, Object> resMap = new HashMap<>();

    /**
     * 用来表示1900年到2099年间农历年份的相关信息,共24位bit的16进制表示,其中:
     * 1. 前4位表示该年闰哪个月;
     * 2. 5-17位表示农历年份13个月的大小月分布,0表示小,1表示大;
     * 3. 最后7位表示农历年首(正月初一)对应的公历日期。** 以2014年的数据0x955ABF为例说明:
     * 1001 0101 0101 1010 1011 1111
     *   农历正月初一对应公历1月31号
     */
    private int[] lunarInfo = {
            //1900
            0x84B6BF,
            //1901-1910
            0x04AE53, 0x0A5748, 0x5526BD, 0x0D2650, 0x0D9544, 0x46AAB9, 0x056A4D, 0x09AD42, 0x24AEB6, 0x04AE4A,
            //1911-1920
            0x6A4DBE, 0x0A4D52, 0x0D2546, 0x5D52BA, 0x0B544E, 0x0D6A43, 0x296D37, 0x095B4B, 0x749BC1, 0x049754,
            //1921-1930
            0x0A4B48, 0x5B25BC, 0x06A550, 0x06D445, 0x4ADAB8, 0x02B64D, 0x095742, 0x2497B7, 0x04974A, 0x664B3E,
            //1931-1940
            0x0D4A51, 0x0EA546, 0x56D4BA, 0x05AD4E, 0x02B644, 0x393738, 0x092E4B, 0x7C96BF, 0x0C9553, 0x0D4A48,
            //1941-1950
            0x6DA53B, 0x0B554F, 0x056A45, 0x4AADB9, 0x025D4D, 0x092D42, 0x2C95B6, 0x0A954A, 0x7B4ABD, 0x06CA51,
            //1951-1960
            0x0B5546, 0x555ABB, 0x04DA4E, 0x0A5B43, 0x352BB8, 0x052B4C, 0x8A953F, 0x0E9552, 0x06AA48, 0x6AD53C,
            //1961-1970
            0x0AB54F, 0x04B645, 0x4A5739, 0x0A574D, 0x052642, 0x3E9335, 0x0D9549, 0x75AABE, 0x056A51, 0x096D46,
            //1971-1980
            0x54AEBB, 0x04AD4F, 0x0A4D43, 0x4D26B7, 0x0D254B, 0x8D52BF, 0x0B5452, 0x0B6A47, 0x696D3C, 0x095B50,
            //1981-1990
            0x049B45, 0x4A4BB9, 0x0A4B4D, 0xAB25C2, 0x06A554, 0x06D449, 0x6ADA3D, 0x0AB651, 0x095746, 0x5497BB,
            //1991-2000
            0x04974F, 0x064B44, 0x36A537, 0x0EA54A, 0x86B2BF, 0x05AC53, 0x0AB647, 0x5936BC, 0x092E50, 0x0C9645,
            //2001-2010
            0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, 0x0A954E,
            //2011-2020
            0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, 0x474AB9,
            //2021-2030
            0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x6a573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, 0x05AA43,
            //2031-2040
            0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, 0x0B5A4C,
            //2041-2050
            0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, 0x355B37,
            //2051-2060
            0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06AA44, 0x4AB638, 0x0AAE4C, 0x092E42,
            //2061-2070
            0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, 0x052D4B,
            //2071-2080
            0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, 0x3A93B6,
            //2081-2090
            0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, 0x8E933E,
            //2091-2099
            0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5};

    /**
     * 单例模式
     *
     * @return CalendarUtil
     */
    public static CalendarUtil getInstance() {
        if (instance == null) {
            synchronized (CalendarUtil.class) {
                if (instance == null) {
                    instance = new CalendarUtil();
                }
            }
        }
        return instance;
    }

    /**
     * 将公历日期转换为农历日期,且标识是否是闰月
     *
     * @return 返回公历日期对应的农历日期
     */
    public HashMap<String, Object> solarToLunar(String date, Calendar today) throws ParseException {
        @SuppressLint("SimpleDateFormat")
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(date));
        int y = cal.get(Calendar.YEAR);
        // 月份统一 +1
        int m = cal.get(Calendar.MONTH) + 1;
        int i = cal.get(Calendar.DATE);
        int h = cal.get(Calendar.HOUR_OF_DAY);
        Date baseDate = new GregorianCalendar(MIN_YEAR, 0, 31).getTime();
        Date objDate = new GregorianCalendar(y, m - 1, i).getTime();
        int offset = (int) ((objDate.getTime() - baseDate.getTime()) / 86400000L);
        // 用offset减去每农历年的天数计算当天是农历第几天// iYear最终结果是农历的年份, offset是当年的第几天
        int iYear, daysOfYear = 0;
        for (iYear = MIN_YEAR; iYear <= MAX_YEAR && offset > 0; iYear++) {
            daysOfYear = daysInLunarYear(iYear);
            offset -= daysOfYear;
        }
        if (offset < 0) {
            offset += daysOfYear;
            iYear--;
        }
        // 农历年份
        year = iYear;
        leapMonth = leapMonth(iYear);
        // 闰哪个月,1 - 12
        isLeap = false;
        // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天
        int iMonth, daysOfMonth = 0;
        for (iMonth = 1; iMonth <= 13 && offset > 0; iMonth++) {
            daysOfMonth = daysInLunarMonth(iYear, iMonth);
            offset -= daysOfMonth;
        }
        // 当前月超过闰月,要校正
        if (leapMonth != 0 && iMonth > leapMonth) {
            --iMonth;
            if (iMonth == leapMonth) {
                isLeap = true;
            }
        }
        // offset小于0时,也要校正
        if (offset < 0) {
            offset += daysOfMonth;
            --iMonth;
        }
        month = iMonth;
        day = offset + 1;
        leap = isLeap ? 1 : 0;
        // 获取年份天干地支
        resMap.put("cY", tianGan[getYearTianGanIndex(year)] + diZhi[getYearDiZhiIndex(year)] + "年");
        resMap.put("shu", getAnimalYearName(year));
        resMap.put("solar", getTraditionYearBySolarTerm(y, m, i));
        resMap.put("year", year);
        resMap.put("month", month);
        resMap.put("day", day);
        resMap.put("leap", leap);
        resMap.put("cM", tianGan[getMonthGanIndexBySolarTerm(y, m, i)] +
                diZhi[getMonthZhiIndexBySolarTerm(y, m, i)] + "月");
        resMap.put("cD", tianGan[getDayGanIndex(y, m, i)] +
                diZhi[getDayZhiIndex(y, m, i)] + "日");
        resMap.put("cH", tianGan[getTimeGanIndex(y, m, i, h)] +
                diZhi[getTimeZhiIndex(h)] + "时");
        // 纳甲算法 查询所需信息
        resMap.put("najiaCD", tianGan[getDayGanIndex(y, m, i)]);
        resMap.put("najiaCDZhi", diZhi[getDayZhiIndex(y, m, i)]);
        resMap.put("najiaCH", tianGan[getTimeGanIndex(y, m, i, h)] +
                diZhi[getTimeZhiIndex(h)]);
        resMap.put("najiaCHGan",tianGan[getTimeGanIndex(y, m, i, h)]);
        // 纳支算法 查询所需信息
        resMap.put("nazhiCH", diZhi[getTimeZhiIndex(h)]);

        return resMap;
    }

    /**
     * 获取该年的天干名称
     */
    private int getYearTianGanIndex(int year) {
        nTem = year % tianGan.length - 3;
        if (nTem <= 0) {
            return tianGan.length + nTem - 1;
        } else {
            return nTem - 1;
        }
    }

    /**
     * 获取该年的地支名称
     */
    private int getYearDiZhiIndex(int year) {
        nTem = year % 12 - 3;
        if (nTem <= 0) {
            return 12 + nTem - 1;
        } else {
            return nTem - 1;
        }
    }

    /**
     * 获取当前年份与起始年之间的差值
     **/
    private int subtractYear(int year) {
        int jiaziYear = START_YEAR;
        //如果年份小于起始的甲子年(START_YEAR = 1804),则起始甲子年往前偏移
        if (year < jiaziYear) {
            //60年一个周期
            jiaziYear = jiaziYear - (60 + 60 * ((jiaziYear - year) / 60));
        }
        return year - jiaziYear;
    }

    /**
     * 获取该年的生肖名称
     *
     * @param year 年份
     * @return
     */
    private String getAnimalYearName(int year) {
        return shuXiang[subtractYear(year) % 12] + "年";
    }

    /**
     * 传回农历 year年的总天数
     *
     * @param year 将要计算的年份
     * @return 返回传入年份的总天数
     */
    private int daysInLunarYear(int year) {
        int i, sum = 348;
        if (leapMonth(year) != 0) {
            sum = 377;
        }
        int monthInfo = lunarInfo[year - MIN_YEAR] & 0x0FFF80;
        for (i = 0x80000; i > 0x7; i >>= 1) {
            if ((monthInfo & i) != 0) {
                sum += 1;
            }
        }
        return sum;
    }

    /**
     * 传回农历 year年month月的总天数,总共有13个月包括闰月
     *
     * @param year  将要计算的年份
     * @param month 将要计算的月份
     * @return 传回农历 year年month月的总天数
     */
    private int daysInLunarMonth(int year, int month) {
        return (lunarInfo[year - MIN_YEAR] & (0x100000 >> month)) == 0 ? 29 : 30;
    }

    /**
     * 传回农历 year年闰哪个月 1-12 , 没闰传回 0
     *
     * @param year 将要计算的年份
     * @return 传回农历 year年闰哪个月1-12, 没闰传回 0
     */
    private int leapMonth(int year) {
        return ((lunarInfo[year - MIN_YEAR] & 0xF00000)) >> 20;
    }

    /**
     * 通过SolarTerm 计算阴历年份
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return 阴历年份
     */
    private int getTraditionYearBySolarTerm(int year, int month, int day) {
        //计算当前年的立春日期
        if (month < 2) {
            nTradYesrs = year - 1;
        } else if (month > 3) {
            nTradYesrs = year;
        } else {
            //获取当年立春的日子
            if (day >= ((solarterms1[(year - MIN_SOLAR_YEAR) * 12 + 1]) >> 4)) {
                nTradYesrs = year;
            } else {
                nTradYesrs = year - 1;
            }
        }
        return nTradYesrs;
    }

    /**
     * 通过 年月日 计算 月份 天干
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return 天干位置
     */
    private int getMonthGanIndexBySolarTerm(int year, int month, int day) {
        rTn = -1;
        int monthGanNTem = 0;
        //获取年的天干
        int nTradYesrs = getTraditionYearBySolarTerm(year, month, day);
        //当前月的节气的开始
        if (day >= (solarterms1[(year - MIN_SOLAR_YEAR) * 12 + month - 1] >> 4)) {
            monthGanNTem = month - 1;
        } else {
            monthGanNTem = month - 2;
        }
        if (monthGanNTem <= 0) {
            monthGanNTem += 12;
        }
        int nGanValue = mYearAndMonthGan[getYearTianGanIndex(nTradYesrs) * 12 + monthGanNTem - 1];
        for (int i = 0; i < tianGan.length; i++) {
            if (nGanValue == (i + 1)) {
                rTn = i;
                break;
            }
        }
        return rTn;
    }

    /**
     * 通过 SolarTerm 计算月份 地支
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return
     */
    private int getMonthZhiIndexBySolarTerm(int year, int month, int day) {
        //当前月的节气的开始
        int monthZhiNTem;
        if (day >= (solarterms1[(year - MIN_SOLAR_YEAR) * 12 + month - 1] >> 4)) {
            monthZhiNTem = month + 1;
        } else {
            monthZhiNTem = month;
        }
        if (monthZhiNTem > 12) {
            monthZhiNTem = monthZhiNTem % 12;
        }
        for (int i = 0; i < 12; i++) {
            if (monthZhiNTem == i + 1) {
                rTn = i;
                break;
            }
        }
        return rTn;
    }

    /**
     * 获取 日 的 天干
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return 日的天干index
     */
    private int getDayGanIndex(int year, int month, int day) {
        int dayZhiNTem;
        //计算当前是什么世纪
        nCentry = year / 100 + 1;
        nCentry--;
        //取年份后两位数
        nLYear = year % 100;
        dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (month + 1) / 5 + day - 3;
        if (month == 1) {
            nCentry = (year - 1) / 100 + 1;
            nCentry--;
            nLYear = (year - 1) % 100;
            dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (13 + 1) / 5 + day - 3;
        } else if (month == 2) {
            nCentry = (year - 1) / 100 + 1;
            nCentry--;
            nLYear = (year - 1) % 100;
            dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (14 + 1) / 5 + day - 3;
        }
        rTn = dayZhiNTem % tianGan.length - 1;
        if ((dayZhiNTem % tianGan.length) == 0) {
            rTn = tianGan.length - 1;
        }
        return rTn;
    }

    /**
     * 计算 天的 地支index
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return 天的 地支index
     */
    private int getDayZhiIndex(int year, int month, int day) {
        int dayZhinTem;
        //计算当前是什么世纪
        nCentry = year / 100 + 1;
        nCentry--;
        //取年份后两位数
        nLYear = year % 100;
        dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (month + 1) / 5 + day + 7;
        if (month == 1) {
            nCentry = (year - 1) / 100 + 1;
            nCentry--;
            nLYear = (year - 1) % 100;
            dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (13 + 1) / 5 + day + 7;
        } else if (month == 2) {
            nCentry = (year - 1) / 100 + 1;
            nCentry--;
            nLYear = (year - 1) % 100;
            dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (14 + 1) / 5 + day + 7;
        }
        if (month % 2 == 0) {
            dayZhinTem += 6;
        }
        rTn = dayZhinTem % 12 - 1;
        if ((dayZhinTem % 12) == 0) {
            rTn = 12 - 1;
        }
        return rTn;
    }

    /**
     * 计算小时天干index
     *
     * @param year  year
     * @param month month
     * @param day   day
     * @return 小时天干index
     */
    private int getTimeGanIndex(int year, int month, int day, int hour) {
        //找对应关系
        int nTimeGanIndex = mDayAndTimeGan[getDayGanIndex(year, month, day) * 12
                + getTimeZhiIndex(hour)];
        for (int i = 0; i < 60; i++) {
            if (nTimeGanIndex == i + 1) {
                rTn = i;
                break;
            }
        }
        return rTn;
    }

    /**
     * 计算 小时 地支 index
     *
     * @param hour hour
     * @return 小时 地支 index
     */
    private int getTimeZhiIndex(int hour) {
        for (int i = 0; i < 12; i++) {
            if (mDiZhiTimes[i * 2] == 23 || mDiZhiTimes[i * 2 + 1] == 1) {
                if (mDiZhiTimes[i * 2] <= hour) {
                    rTn = i;
                    break;
                }
                if (mDiZhiTimes[i * 2 + 1] > hour) {
                    rTn = i;
                    break;
                }
            } else {
                if (mDiZhiTimes[i * 2] <= hour && mDiZhiTimes[i * 2 + 1] > hour) {
                    rTn = i;
                    break;
                }
            }
        }
        return rTn;
    }

    /**
     * 获取灵龟八法 信息
     * @param dayGanStr 天干
     * @param dayZhiStr 天支
     * @param timeGanStr 时间干
     * @param timeZhiStr 时间支
     * @return 灵龟八法信息
     */
    public String getBaGuiVal(String dayGanStr,String dayZhiStr,String timeGanStr,String timeZhiStr) {
        int GanValue = 0;
        int ZhiValue = 0;
        int YinYangValue = -1;
        for (int i = 0; i < 10; i++) {
            baGuiStr = tianGan[i];
            if (baGuiStr.equals(dayGanStr)) {
                GanValue += TianGanDayLG[i];
                YinYangValue = YinYang[i];
            }
            if (baGuiStr.equals(timeGanStr)) {
                GanValue += TianGanTimeLG[i];
            }
        }
        for (int i = 0; i < 12; i++) {
            baGuiStr = diZhi[i];
            if (baGuiStr.equals(dayZhiStr)) {
                ZhiValue += DiZhiDayLG[i];
            }
            if (baGuiStr.equals(timeZhiStr)) {
                ZhiValue += DiZhiTimeLG[i];
            }
        }
        int sumValue = GanValue + ZhiValue;
        if (YinYangValue == 1) {
            sumValue %= 9;
            if (sumValue == 0) {
                sumValue = 9;
            }
        } else if (YinYangValue == 0) {
            sumValue %= 6;
            if (sumValue == 0) {
                sumValue = 6;
            }
        } else {
            sumValue = -1;
        }
        baGuiStr = "";
        for (int i = 0; i < 9; i++) {
            if (JiuGong[i] == sumValue) {
                baGuiStr = m_LGAcupoint[i];
                break;
            }
        }
        return baGuiStr;
    }

    /**
     * solarterms1 月日时 数组
     */
    private int[] solarterms1 = {
            //1901
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1902
            0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1903
            0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
            //1904
            0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1905
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1906
            0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1907
            0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
            //1908
            0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1909
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1910
            0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1911
            0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
            //1912
            0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1913
            0x65, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1914
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1915
            0x66, 0x55, 0x67, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
            //1916
            0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1917
            0x65, 0x44, 0x66, 0x56, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
            //1918
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1919
            0x66, 0x55, 0x67, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
            //1920
            0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1921
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
            //1922
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1923
            0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
            //1924
            0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1925
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
            //1926
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1927
            0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1928
            0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1929
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1930
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1931
            0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1932
            0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1933
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1934
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1935
            0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1936
            0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1937
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1938
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1939
            0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1940
            0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1941
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1942
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1943
            0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1944
            0x66, 0x55, 0x66, 0x55, 0x56, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1945
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1946
            0x65, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
            //1947
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1948
            0x66, 0x55, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1949
            0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1950
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
            //1951
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
            //1952
            0x66, 0x55, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1953
            0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1954
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
            //1955
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1956
            0x66, 0x55, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1957
            0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1958
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1959
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1960
            0x66, 0x54, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1961
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1962
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1963
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1964
            0x66, 0x54, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1965
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1966
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1967
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1968
            0x66, 0x54, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1969
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1970
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1971
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
            //1972
            0x66, 0x54, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1973
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1974
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1975
            0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
            //1976
            0x66, 0x54, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1977
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1978
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x88, 0x77,
            //1979
            0x66, 0x44, 0x66, 0x56, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
            //1980
            0x66, 0x54, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1981
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1982
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1983
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
            //1984
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1985
            0x55, 0x44, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //1986
            0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1987
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x89, 0x88, 0x99, 0x88, 0x77,
            //1988
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //1989
            0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1990
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //1991
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1992
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //1993
            0x55, 0x43, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1994
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1995
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //1996
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //1997
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //1998
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //1999
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //2000
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2001
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2002
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //2003
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //2004
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2005
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2006
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2007
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
            //2008
            0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2009
            0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2010
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2011
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x88, 0x77,
            //2012
            0x66, 0x44, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2013
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2014
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2015
            0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //2016
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2017
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2018
            0x55, 0x44, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2019
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //2020
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
            //2021
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2022
            0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2023
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
            //2024
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2025
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2026
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2027
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //2028
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2029
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2030
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2031
            0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
            //2032
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2033
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2034
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2035
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2036
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2037
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2038
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2039
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2040
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2041
            0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2042
            0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2043
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2044
            0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
            //2045
            0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2046
            0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2047
            0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
            //2048
            0x65, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2049
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
            //2050
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2051
            0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2052
            0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2053
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
            //2054
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2055
            0x55, 0x44, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2056
            0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2057
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2058
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2059
            0x55, 0x44, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2060
            0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
            //2061
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2062
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2063
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2064
            0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
            //2065
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2066
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2067
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2068
            0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
            //2069
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2070
            0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2071
            0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2072
            0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
            //2073
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
            //2074
            0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2075
            0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2076
            0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
            //2077
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
            //2078
            0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x78, 0x77, 0x88, 0x77, 0x76,
            //2079
            0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2080
            0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
            //2081
            0x54, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2082
            0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
            //2083
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2084
            0x55, 0x44, 0x44, 0x44, 0x45, 0x55, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
            //2085
            0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2086
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
            //2087
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
            //2088
            0x55, 0x44, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
            //2089
            0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
            //2090
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2091
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2092
            0x55, 0x44, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
            //2093
            0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
            //2094
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2095
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
            //2096
            0x55, 0x43, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
            //2097
            0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
            //2098
            0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
            //2099
            0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76
    };

}