diff --git a/ap/lib/libssl/openssl-1.1.1o/test/gmdifftest.c b/ap/lib/libssl/openssl-1.1.1o/test/gmdifftest.c
new file mode 100644
index 0000000..f7aa1a3
--- /dev/null
+++ b/ap/lib/libssl/openssl-1.1.1o/test/gmdifftest.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/crypto.h>
+
+#include "testutil.h"
+
+#define SECS_PER_DAY (24 * 60 * 60)
+
+/*
+ * Time checking test code. Check times are identical for a wide range of
+ * offsets. This should be run on a machine with 64 bit time_t or it will
+ * trigger the very errors the routines fix.
+ */
+
+static int check_time(long offset)
+{
+    struct tm tm1, tm2, o1;
+    int off_day, off_sec;
+    long toffset;
+    time_t t1, t2;
+
+    time(&t1);
+
+    t2 = t1 + offset;
+    OPENSSL_gmtime(&t2, &tm2);
+    OPENSSL_gmtime(&t1, &tm1);
+    o1 = tm1;
+    OPENSSL_gmtime_adj(&tm1, 0, offset);
+    if (!TEST_int_eq(tm1.tm_year, tm2.tm_year)
+        || !TEST_int_eq(tm1.tm_mon, tm2.tm_mon)
+        || !TEST_int_eq(tm1.tm_mday, tm2.tm_mday)
+        || !TEST_int_eq(tm1.tm_hour, tm2.tm_hour)
+        || !TEST_int_eq(tm1.tm_min, tm2.tm_min)
+        || !TEST_int_eq(tm1.tm_sec, tm2.tm_sec)
+        || !TEST_true(OPENSSL_gmtime_diff(&off_day, &off_sec, &o1, &tm1)))
+        return 0;
+    toffset = (long)off_day * SECS_PER_DAY + off_sec;
+    if (!TEST_long_eq(offset, toffset))
+        return 0;
+    return 1;
+}
+
+static int test_gmtime(int offset)
+{
+    return check_time(offset) &&
+           check_time(-offset) &&
+           check_time(offset * 1000L) &&
+           check_time(-offset * 1000L);
+}
+
+int setup_tests(void)
+{
+    if (sizeof(time_t) < 8)
+        TEST_info("Skipping; time_t is less than 64-bits");
+    else
+        ADD_ALL_TESTS_NOSUBTEST(test_gmtime, 1000000);
+    return 1;
+}
