SunDate.smali

.class public Lim/tpelyyftgw/messenger/time/SunDate;
.super Ljava/lang/Object;
.source "SunDate.java"


# static fields
.field private static final DEGRAD:D = 0.017453292519943295

.field private static final INV360:D = 0.002777777777777778

.field private static final RADEG:D = 57.29577951308232


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>()V
    .registers 1

    .line 8
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method private static GMST0(D)D
    .registers 6
    .param p0, "d"    # D

    .line 27
    const-wide v0, 0x3fef8a6c50c753f8L    # 0.985647352

    mul-double v0, v0, p0

    const-wide v2, 0x408997e631f8a090L    # 818.9874

    add-double/2addr v0, v2

    invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D

    move-result-wide v0

    return-wide v0
.end method

.method private static acosd(D)D
    .registers 6
    .param p0, "x"    # D

    .line 43
    invoke-static {p0, p1}, Ljava/lang/Math;->acos(D)D

    move-result-wide v0

    const-wide v2, 0x404ca5dc1a63c1f8L    # 57.29577951308232

    mul-double v0, v0, v2

    return-wide v0
.end method

.method private static atan2d(DD)D
    .registers 8
    .param p0, "y"    # D
    .param p2, "x"    # D

    .line 47
    invoke-static {p0, p1, p2, p3}, Ljava/lang/Math;->atan2(DD)D

    move-result-wide v0

    const-wide v2, 0x404ca5dc1a63c1f8L    # 57.29577951308232

    mul-double v0, v0, v2

    return-wide v0
.end method

.method public static calculateSunriseSunset(DD)[I
    .registers 16
    .param p0, "lat"    # D
    .param p2, "lon"    # D

    .line 128
    invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;

    move-result-object v0

    .line 129
    .local v0, "calendar":Ljava/util/Calendar;
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v1

    invoke-virtual {v0, v1, v2}, Ljava/util/Calendar;->setTimeInMillis(J)V

    .line 130
    const/4 v1, 0x2

    new-array v10, v1, [D

    .line 131
    .local v10, "sun":[D
    const/4 v11, 0x1

    invoke-virtual {v0, v11}, Ljava/util/Calendar;->get(I)I

    move-result v2

    invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I

    move-result v3

    add-int/2addr v3, v11

    const/4 v4, 0x5

    invoke-virtual {v0, v4}, Ljava/util/Calendar;->get(I)I

    move-result v4

    move-wide v5, p2

    move-wide v7, p0

    move-object v9, v10

    invoke-static/range {v2 .. v9}, Lim/tpelyyftgw/messenger/time/SunDate;->sunRiseSetForYear(IIIDD[D)I

    .line 132
    invoke-static {}, Ljava/util/TimeZone;->getDefault()Ljava/util/TimeZone;

    move-result-object v2

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v3

    invoke-virtual {v2, v3, v4}, Ljava/util/TimeZone;->getOffset(J)I

    move-result v2

    div-int/lit16 v2, v2, 0x3e8

    div-int/lit8 v2, v2, 0x3c

    .line 133
    .local v2, "timeZoneOffset":I
    const/4 v3, 0x0

    aget-wide v4, v10, v3

    const-wide/high16 v6, 0x404e000000000000L    # 60.0

    mul-double v4, v4, v6

    double-to-int v4, v4

    add-int/2addr v4, v2

    .line 134
    .local v4, "sunrise":I
    aget-wide v8, v10, v11

    mul-double v8, v8, v6

    double-to-int v5, v8

    add-int/2addr v5, v2

    .line 135
    .local v5, "sunset":I
    const/16 v6, 0x5a0

    if-gez v4, :cond_49

    .line 136
    add-int/lit16 v4, v4, 0x5a0

    goto :goto_4d

    .line 137
    :cond_49
    if-le v4, v6, :cond_4d

    .line 138
    add-int/lit16 v4, v4, -0x5a0

    .line 140
    :cond_4d
    :goto_4d
    if-gez v5, :cond_52

    .line 141
    add-int/lit16 v5, v5, 0x5a0

    goto :goto_56

    .line 142
    :cond_52
    if-le v5, v6, :cond_56

    .line 143
    add-int/lit16 v5, v5, 0x5a0

    .line 145
    :cond_56
    :goto_56
    new-array v1, v1, [I

    aput v4, v1, v3

    aput v5, v1, v11

    return-object v1
.end method

.method private static cosd(D)D
    .registers 4
    .param p0, "x"    # D

    .line 35
    const-wide v0, 0x3f91df46a2529d39L    # 0.017453292519943295

    mul-double v0, v0, p0

    invoke-static {v0, v1}, Ljava/lang/Math;->cos(D)D

    move-result-wide v0

    return-wide v0
.end method

.method private static days_since_2000_Jan_0(III)J
    .registers 7
    .param p0, "y"    # I
    .param p1, "m"    # I
    .param p2, "d"    # I

    .line 15
    int-to-long v0, p0

    const-wide/16 v2, 0x16f

    mul-long v0, v0, v2

    add-int/lit8 v2, p1, 0x9

    div-int/lit8 v2, v2, 0xc

    add-int/2addr v2, p0

    mul-int/lit8 v2, v2, 0x7

    div-int/lit8 v2, v2, 0x4

    int-to-long v2, v2

    sub-long/2addr v0, v2

    mul-int/lit16 v2, p1, 0x113

    div-int/lit8 v2, v2, 0x9

    int-to-long v2, v2

    add-long/2addr v0, v2

    int-to-long v2, p2

    add-long/2addr v0, v2

    const-wide/32 v2, 0xb25a2

    sub-long/2addr v0, v2

    return-wide v0
.end method

.method private static rev180(D)D
    .registers 6
    .param p0, "x"    # D

    .line 23
    const-wide v0, 0x3f66c16c16c16c17L    # 0.002777777777777778

    mul-double v0, v0, p0

    const-wide/high16 v2, 0x3fe0000000000000L    # 0.5

    add-double/2addr v0, v2

    invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D

    move-result-wide v0

    const-wide v2, 0x4076800000000000L    # 360.0

    mul-double v0, v0, v2

    sub-double v0, p0, v0

    return-wide v0
.end method

.method private static revolution(D)D
    .registers 6
    .param p0, "x"    # D

    .line 19
    const-wide v0, 0x3f66c16c16c16c17L    # 0.002777777777777778

    mul-double v0, v0, p0

    invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D

    move-result-wide v0

    const-wide v2, 0x4076800000000000L    # 360.0

    mul-double v0, v0, v2

    sub-double v0, p0, v0

    return-wide v0
.end method

.method private static sind(D)D
    .registers 4
    .param p0, "x"    # D

    .line 31
    const-wide v0, 0x3f91df46a2529d39L    # 0.017453292519943295

    mul-double v0, v0, p0

    invoke-static {v0, v1}, Ljava/lang/Math;->sin(D)D

    move-result-wide v0

    return-wide v0
.end method

.method private static sunRiseSetForYear(IIIDD[D)I
    .registers 19
    .param p0, "year"    # I
    .param p1, "month"    # I
    .param p2, "day"    # I
    .param p3, "lon"    # D
    .param p5, "lat"    # D
    .param p7, "sun"    # [D

    .line 124
    const-wide v7, -0x401d555555555555L    # -0.5833333333333334

    const/4 v9, 0x1

    move v0, p0

    move v1, p1

    move v2, p2

    move-wide v3, p3

    move-wide/from16 v5, p5

    move-object/from16 v10, p7

    invoke-static/range {v0 .. v10}, Lim/tpelyyftgw/messenger/time/SunDate;->sunRiseSetHelperForYear(IIIDDDI[D)I

    move-result v0

    return v0
.end method

.method private static sunRiseSetHelperForYear(IIIDDDI[D)I
    .registers 35
    .param p0, "year"    # I
    .param p1, "month"    # I
    .param p2, "day"    # I
    .param p3, "lon"    # D
    .param p5, "lat"    # D
    .param p7, "altit"    # D
    .param p9, "upper_limb"    # I
    .param p10, "sun"    # [D

    .line 91
    const/4 v0, 0x1

    new-array v1, v0, [D

    .line 92
    .local v1, "sRA":[D
    new-array v2, v0, [D

    .line 93
    .local v2, "sdec":[D
    new-array v3, v0, [D

    .line 96
    .local v3, "sr":[D
    const/4 v4, 0x0

    .line 97
    .local v4, "rc":I
    invoke-static/range {p0 .. p2}, Lim/tpelyyftgw/messenger/time/SunDate;->days_since_2000_Jan_0(III)J

    move-result-wide v5

    long-to-double v5, v5

    const-wide/high16 v7, 0x3fe0000000000000L    # 0.5

    invoke-static {v5, v6}, Ljava/lang/Double;->isNaN(D)Z

    add-double/2addr v5, v7

    const-wide v7, 0x4076800000000000L    # 360.0

    div-double v7, p3, v7

    sub-double/2addr v5, v7

    .line 98
    .local v5, "d":D
    invoke-static {v5, v6}, Lim/tpelyyftgw/messenger/time/SunDate;->GMST0(D)D

    move-result-wide v7

    const-wide v9, 0x4066800000000000L    # 180.0

    add-double/2addr v7, v9

    add-double v7, v7, p3

    invoke-static {v7, v8}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D

    move-result-wide v7

    .line 99
    .local v7, "sidtime":D
    invoke-static {v5, v6, v1, v2, v3}, Lim/tpelyyftgw/messenger/time/SunDate;->sun_RA_decAtDay(D[D[D[D)V

    .line 100
    const/4 v9, 0x0

    aget-wide v10, v1, v9

    sub-double v10, v7, v10

    invoke-static {v10, v11}, Lim/tpelyyftgw/messenger/time/SunDate;->rev180(D)D

    move-result-wide v10

    const-wide/high16 v12, 0x402e000000000000L    # 15.0

    div-double/2addr v10, v12

    const-wide/high16 v14, 0x4028000000000000L    # 12.0

    sub-double/2addr v14, v10

    .line 101
    .local v14, "tsouth":D
    aget-wide v10, v3, v9

    const-wide v16, 0x3fd10ff972474539L    # 0.2666

    div-double v16, v16, v10

    .line 102
    .local v16, "sradius":D
    if-eqz p9, :cond_4b

    .line 103
    sub-double v10, p7, v16

    .end local p7    # "altit":D
    .local v10, "altit":D
    goto :goto_4d

    .line 102
    .end local v10    # "altit":D
    .restart local p7    # "altit":D
    :cond_4b
    move-wide/from16 v10, p7

    .line 107
    .end local p7    # "altit":D
    .restart local v10    # "altit":D
    :goto_4d
    invoke-static {v10, v11}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v18

    invoke-static/range {p5 .. p6}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v20

    aget-wide v22, v2, v9

    invoke-static/range {v22 .. v23}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v22

    mul-double v20, v20, v22

    sub-double v18, v18, v20

    invoke-static/range {p5 .. p6}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v20

    aget-wide v22, v2, v9

    invoke-static/range {v22 .. v23}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v22

    mul-double v20, v20, v22

    div-double v18, v18, v20

    .line 108
    .local v18, "cost":D
    const-wide/high16 v20, 0x3ff0000000000000L    # 1.0

    cmpl-double v22, v18, v20

    if-ltz v22, :cond_77

    .line 109
    const/4 v4, -0x1

    .line 110
    const-wide/16 v12, 0x0

    .local v12, "t":D
    goto :goto_87

    .line 111
    .end local v12    # "t":D
    :cond_77
    const-wide/high16 v20, -0x4010000000000000L    # -1.0

    cmpg-double v22, v18, v20

    if-gtz v22, :cond_81

    .line 112
    const/4 v4, 0x1

    .line 113
    const-wide/high16 v12, 0x4028000000000000L    # 12.0

    .restart local v12    # "t":D
    goto :goto_87

    .line 115
    .end local v12    # "t":D
    :cond_81
    invoke-static/range {v18 .. v19}, Lim/tpelyyftgw/messenger/time/SunDate;->acosd(D)D

    move-result-wide v20

    div-double v12, v20, v12

    .line 117
    .restart local v12    # "t":D
    :goto_87
    sub-double v20, v14, v12

    aput-wide v20, p10, v9

    .line 118
    add-double v20, v14, v12

    aput-wide v20, p10, v0

    .line 120
    return v4
.end method

.method private static sun_RA_decAtDay(D[D[D[D)V
    .registers 26
    .param p0, "d"    # D
    .param p2, "RA"    # [D
    .param p3, "dec"    # [D
    .param p4, "r"    # [D

    .line 70
    move-wide/from16 v0, p0

    move-object/from16 v2, p4

    const/4 v3, 0x1

    new-array v3, v3, [D

    .line 75
    .local v3, "lon":[D
    invoke-static {v0, v1, v3, v2}, Lim/tpelyyftgw/messenger/time/SunDate;->sunposAtDay(D[D[D)V

    .line 77
    const/4 v4, 0x0

    aget-wide v5, v2, v4

    aget-wide v7, v3, v4

    invoke-static {v7, v8}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v7

    mul-double v5, v5, v7

    .line 78
    .local v5, "xs":D
    aget-wide v7, v2, v4

    aget-wide v9, v3, v4

    invoke-static {v9, v10}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v9

    mul-double v7, v7, v9

    .line 80
    .local v7, "ys":D
    const-wide v9, 0x3e97e92ff8cedadaL    # 3.563E-7

    mul-double v9, v9, v0

    const-wide v11, 0x40377075f6fd21ffL    # 23.4393

    sub-double/2addr v11, v9

    .line 82
    .local v11, "obl_ecl":D
    move-wide v9, v5

    .line 83
    .local v9, "xe":D
    invoke-static {v11, v12}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v13

    mul-double v13, v13, v7

    .line 84
    .local v13, "ye":D
    invoke-static {v11, v12}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v15

    move-wide/from16 v17, v5

    .end local v5    # "xs":D
    .local v17, "xs":D
    mul-double v4, v7, v15

    .line 86
    .local v4, "ze":D
    invoke-static {v13, v14, v9, v10}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D

    move-result-wide v15

    const/4 v6, 0x0

    aput-wide v15, p2, v6

    .line 87
    mul-double v15, v9, v9

    mul-double v19, v13, v13

    add-double v15, v15, v19

    invoke-static/range {v15 .. v16}, Ljava/lang/Math;->sqrt(D)D

    move-result-wide v0

    invoke-static {v4, v5, v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D

    move-result-wide v0

    aput-wide v0, p3, v6

    .line 88
    return-void
.end method

.method private static sunposAtDay(D[D[D)V
    .registers 22
    .param p0, "p"    # D
    .param p2, "ot"    # [D
    .param p3, "d"    # [D

    .line 53
    const-wide v0, 0x3fef8a098da5f901L    # 0.9856002585

    mul-double v0, v0, p0

    const-wide v2, 0x407640c083126e98L    # 356.047

    add-double/2addr v0, v2

    invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D

    move-result-wide v0

    .line 54
    .local v0, "S":D
    const-wide v2, 0x3f08b0c856bdc946L    # 4.70935E-5

    mul-double v2, v2, p0

    const-wide v4, 0x4071af0be0ded289L    # 282.9404

    add-double/2addr v2, v4

    .line 55
    .local v2, "l":D
    const-wide v4, 0x3e13c626caf35bd9L    # 1.151E-9

    mul-double v4, v4, p0

    const-wide v6, 0x3f911c2a02320968L    # 0.016709

    sub-double/2addr v6, v4

    .line 57
    .local v6, "a":D
    const-wide v4, 0x404ca5dc1a63c1f8L    # 57.29577951308232

    mul-double v4, v4, v6

    invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v8

    mul-double v4, v4, v8

    invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v8

    mul-double v8, v8, v6

    const-wide/high16 v10, 0x3ff0000000000000L    # 1.0

    add-double/2addr v8, v10

    mul-double v4, v4, v8

    add-double/2addr v4, v0

    .line 58
    .local v4, "V":D
    invoke-static {v4, v5}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D

    move-result-wide v8

    sub-double/2addr v8, v6

    .line 60
    .local v8, "k":D
    mul-double v12, v6, v6

    sub-double/2addr v10, v12

    invoke-static {v10, v11}, Ljava/lang/Math;->sqrt(D)D

    move-result-wide v10

    invoke-static {v4, v5}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D

    move-result-wide v12

    mul-double v10, v10, v12

    .line 61
    .local v10, "i":D
    mul-double v12, v8, v8

    mul-double v14, v10, v10

    add-double/2addr v12, v14

    invoke-static {v12, v13}, Ljava/lang/Math;->sqrt(D)D

    move-result-wide v12

    const/4 v14, 0x0

    aput-wide v12, p3, v14

    .line 62
    invoke-static {v10, v11, v8, v9}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D

    move-result-wide v10

    .line 63
    add-double v12, v10, v2

    aput-wide v12, p2, v14

    .line 64
    aget-wide v12, p2, v14

    const-wide v15, 0x4076800000000000L    # 360.0

    cmpl-double v17, v12, v15

    if-ltz v17, :cond_7a

    .line 65
    aget-wide v12, p2, v14

    sub-double/2addr v12, v15

    aput-wide v12, p2, v14

    .line 67
    :cond_7a
    return-void
.end method

.method private static tand(D)D
    .registers 4
    .param p0, "x"    # D

    .line 39
    const-wide v0, 0x3f91df46a2529d39L    # 0.017453292519943295

    mul-double v0, v0, p0

    invoke-static {v0, v1}, Ljava/lang/Math;->tan(D)D

    move-result-wide v0

    return-wide v0
.end method