Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

update to sqlite 3.7.9

  • Loading branch information...
commit bb1497a7d6364d72892ada1dfe63624895f12c12 1 parent 11068de
Jeremy Hinegardner authored January 08, 2012
9,348  ext/amalgalite/sqlite3.c
6405 additions, 2943 deletions not shown
103  ext/amalgalite/sqlite3.h
@@ -107,9 +107,9 @@ extern "C" {
107 107
 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 108
 ** [sqlite_version()] and [sqlite_source_id()].
109 109
 */
110  
-#define SQLITE_VERSION        "3.7.7.1"
111  
-#define SQLITE_VERSION_NUMBER 3007007
112  
-#define SQLITE_SOURCE_ID      "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
  110
+#define SQLITE_VERSION        "3.7.9"
  111
+#define SQLITE_VERSION_NUMBER 3007009
  112
+#define SQLITE_SOURCE_ID      "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
113 113
 
114 114
 /*
115 115
 ** CAPI3REF: Run-Time Library Version Numbers
@@ -741,6 +741,41 @@ struct sqlite3_io_methods {
741 741
 ** Applications should not call [sqlite3_file_control()] with this
742 742
 ** opcode as doing so may disrupt the operation of the specialized VFSes
743 743
 ** that do require it.  
  744
+**
  745
+** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
  746
+** retry counts and intervals for certain disk I/O operations for the
  747
+** windows [VFS] in order to work to provide robustness against
  748
+** anti-virus programs.  By default, the windows VFS will retry file read,
  749
+** file write, and file delete operations up to 10 times, with a delay
  750
+** of 25 milliseconds before the first retry and with the delay increasing
  751
+** by an additional 25 milliseconds with each subsequent retry.  This
  752
+** opcode allows those to values (10 retries and 25 milliseconds of delay)
  753
+** to be adjusted.  The values are changed for all database connections
  754
+** within the same process.  The argument is a pointer to an array of two
  755
+** integers where the first integer i the new retry count and the second
  756
+** integer is the delay.  If either integer is negative, then the setting
  757
+** is not changed but instead the prior value of that setting is written
  758
+** into the array entry, allowing the current retry settings to be
  759
+** interrogated.  The zDbName parameter is ignored.
  760
+**
  761
+** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
  762
+** persistent [WAL | Write AHead Log] setting.  By default, the auxiliary
  763
+** write ahead log and shared memory files used for transaction control
  764
+** are automatically deleted when the latest connection to the database
  765
+** closes.  Setting persistent WAL mode causes those files to persist after
  766
+** close.  Persisting the files is useful when other processes that do not
  767
+** have write permission on the directory containing the database file want
  768
+** to read the database file, as the WAL and shared memory files must exist
  769
+** in order for the database to be readable.  The fourth parameter to
  770
+** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
  771
+** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
  772
+** WAL mode.  If the integer is -1, then it is overwritten with the current
  773
+** WAL persistence setting.
  774
+**
  775
+** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening
  776
+** a write transaction to indicate that, unless it is rolled back for some
  777
+** reason, the entire database file will be overwritten by the current 
  778
+** transaction. This is used by VACUUM operations.
744 779
 */
745 780
 #define SQLITE_FCNTL_LOCKSTATE        1
746 781
 #define SQLITE_GET_LOCKPROXYFILE      2
@@ -750,7 +785,9 @@ struct sqlite3_io_methods {
750 785
 #define SQLITE_FCNTL_CHUNK_SIZE       6
751 786
 #define SQLITE_FCNTL_FILE_POINTER     7
752 787
 #define SQLITE_FCNTL_SYNC_OMITTED     8
753  
-
  788
+#define SQLITE_FCNTL_WIN32_AV_RETRY   9
  789
+#define SQLITE_FCNTL_PERSIST_WAL     10
  790
+#define SQLITE_FCNTL_OVERWRITE       11
754 791
 
755 792
 /*
756 793
 ** CAPI3REF: Mutex Handle
@@ -1178,16 +1215,10 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
1178 1215
 ** order to verify that SQLite recovers gracefully from such
1179 1216
 ** conditions.
1180 1217
 **
1181  
-** The xMalloc and xFree methods must work like the
1182  
-** malloc() and free() functions from the standard C library.
1183  
-** The xRealloc method must work like realloc() from the standard C library
1184  
-** with the exception that if the second argument to xRealloc is zero,
1185  
-** xRealloc must be a no-op - it must not perform any allocation or
1186  
-** deallocation.  ^SQLite guarantees that the second argument to
  1218
+** The xMalloc, xRealloc, and xFree methods must work like the
  1219
+** malloc(), realloc() and free() functions from the standard C library.
  1220
+** ^SQLite guarantees that the second argument to
1187 1221
 ** xRealloc is always a value returned by a prior call to xRoundup.
1188  
-** And so in cases where xRoundup always returns a positive number,
1189  
-** xRealloc can perform exactly as the standard library realloc() and
1190  
-** still be in compliance with this specification.
1191 1222
 **
1192 1223
 ** xSize should return the allocated size of a memory allocation
1193 1224
 ** previously obtained from xMalloc or xRealloc.  The allocated size
@@ -1373,8 +1404,8 @@ struct sqlite3_mem_methods {
1373 1404
 ** allocator is engaged to handle all of SQLites memory allocation needs.
1374 1405
 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1375 1406
 ** boundary or subsequent behavior of SQLite will be undefined.
1376  
-** The minimum allocation size is capped at 2^12. Reasonable values
1377  
-** for the minimum allocation size are 2^5 through 2^8.</dd>
  1407
+** The minimum allocation size is capped at 2**12. Reasonable values
  1408
+** for the minimum allocation size are 2**5 through 2**8.</dd>
1378 1409
 **
1379 1410
 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1380 1411
 ** <dd> ^(This option takes a single argument which is a pointer to an
@@ -2773,7 +2804,8 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
2773 2804
 ** that the supplied string is nul-terminated, then there is a small
2774 2805
 ** performance advantage to be gained by passing an nByte parameter that
2775 2806
 ** is equal to the number of bytes in the input string <i>including</i>
2776  
-** the nul-terminator bytes.
  2807
+** the nul-terminator bytes as this saves SQLite from having to
  2808
+** make a copy of the input string.
2777 2809
 **
2778 2810
 ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
2779 2811
 ** past the end of the first SQL statement in zSql.  These routines only
@@ -2824,7 +2856,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
2824 2856
 ** ^The specific value of WHERE-clause [parameter] might influence the 
2825 2857
 ** choice of query plan if the parameter is the left-hand side of a [LIKE]
2826 2858
 ** or [GLOB] operator or if the parameter is compared to an indexed column
2827  
-** and the [SQLITE_ENABLE_STAT2] compile-time option is enabled.
  2859
+** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled.
2828 2860
 ** the 
2829 2861
 ** </li>
2830 2862
 ** </ol>
@@ -2994,6 +3026,13 @@ typedef struct sqlite3_context sqlite3_context;
2994 3026
 ** number of <u>bytes</u> in the value, not the number of characters.)^
2995 3027
 ** ^If the fourth parameter is negative, the length of the string is
2996 3028
 ** the number of bytes up to the first zero terminator.
  3029
+** If a non-negative fourth parameter is provided to sqlite3_bind_text()
  3030
+** or sqlite3_bind_text16() then that parameter must be the byte offset
  3031
+** where the NUL terminator would occur assuming the string were NUL
  3032
+** terminated.  If any NUL characters occur at byte offsets less than 
  3033
+** the value of the fourth parameter then the resulting string value will
  3034
+** contain embedded NULs.  The result of expressions involving strings
  3035
+** with embedded NULs is undefined.
2997 3036
 **
2998 3037
 ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
2999 3038
 ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
@@ -3327,6 +3366,12 @@ SQLITE_API int sqlite3_step(sqlite3_stmt*);
3327 3366
 ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
3328 3367
 ** interfaces) then sqlite3_data_count(P) returns 0.
3329 3368
 ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
  3369
+** ^The sqlite3_data_count(P) routine returns 0 if the previous call to
  3370
+** [sqlite3_step](P) returned [SQLITE_DONE].  ^The sqlite3_data_count(P)
  3371
+** will return non-zero if previous call to [sqlite3_step](P) returned
  3372
+** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum]
  3373
+** where it always returns zero since each step of that multi-step
  3374
+** pragma returns 0 columns of data.
3330 3375
 **
3331 3376
 ** See also: [sqlite3_column_count()]
3332 3377
 */
@@ -4006,7 +4051,12 @@ typedef void (*sqlite3_destructor_type)(void*);
4006 4051
 ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
4007 4052
 ** is non-negative, then as many bytes (not characters) of the text
4008 4053
 ** pointed to by the 2nd parameter are taken as the application-defined
4009  
-** function result.
  4054
+** function result.  If the 3rd parameter is non-negative, then it
  4055
+** must be the byte offset into the string where the NUL terminator would
  4056
+** appear if the string where NUL terminated.  If any NUL characters occur
  4057
+** in the string at a byte offset that is less than the value of the 3rd
  4058
+** parameter, then the resulting string will contain embedded NULs and the
  4059
+** result of expressions operating on strings with embedded NULs is undefined.
4010 4060
 ** ^If the 4th parameter to the sqlite3_result_text* interfaces
4011 4061
 ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
4012 4062
 ** function as the destructor on the text or BLOB result when it has
@@ -5789,6 +5839,18 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
5789 5839
 ** the database connection.)^
5790 5840
 ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
5791 5841
 ** </dd>
  5842
+**
  5843
+** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
  5844
+** <dd>This parameter returns the number of pager cache hits that have
  5845
+** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT 
  5846
+** is always 0.
  5847
+** </dd>
  5848
+**
  5849
+** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
  5850
+** <dd>This parameter returns the number of pager cache misses that have
  5851
+** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS 
  5852
+** is always 0.
  5853
+** </dd>
5792 5854
 ** </dl>
5793 5855
 */
5794 5856
 #define SQLITE_DBSTATUS_LOOKASIDE_USED       0
@@ -5798,7 +5860,9 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
5798 5860
 #define SQLITE_DBSTATUS_LOOKASIDE_HIT        4
5799 5861
 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE  5
5800 5862
 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL  6
5801  
-#define SQLITE_DBSTATUS_MAX                  6   /* Largest defined DBSTATUS */
  5863
+#define SQLITE_DBSTATUS_CACHE_HIT            7
  5864
+#define SQLITE_DBSTATUS_CACHE_MISS           8
  5865
+#define SQLITE_DBSTATUS_MAX                  8   /* Largest defined DBSTATUS */
5802 5866
 
5803 5867
 
5804 5868
 /*
@@ -5852,7 +5916,6 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
5852 5916
 ** A non-zero value in this counter may indicate an opportunity to
5853 5917
 ** improvement performance by adding permanent indices that do not
5854 5918
 ** need to be reinitialized each time the statement is run.</dd>
5855  
-**
5856 5919
 ** </dl>
5857 5920
 */
5858 5921
 #define SQLITE_STMTSTATUS_FULLSCAN_STEP     1
53  ext/amalgalite/sqlite3ext.h
@@ -49,8 +49,10 @@ struct sqlite3_api_routines {
49 49
   int  (*busy_timeout)(sqlite3*,int ms);
50 50
   int  (*changes)(sqlite3*);
51 51
   int  (*close)(sqlite3*);
52  
-  int  (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*));
53  
-  int  (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*));
  52
+  int  (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
  53
+                           int eTextRep,const char*));
  54
+  int  (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
  55
+                             int eTextRep,const void*));
54 56
   const void * (*column_blob)(sqlite3_stmt*,int iCol);
55 57
   int  (*column_bytes)(sqlite3_stmt*,int iCol);
56 58
   int  (*column_bytes16)(sqlite3_stmt*,int iCol);
@@ -75,10 +77,18 @@ struct sqlite3_api_routines {
75 77
   void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
76 78
   int  (*complete)(const char*sql);
77 79
   int  (*complete16)(const void*sql);
78  
-  int  (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*));
79  
-  int  (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*));
80  
-  int  (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
81  
-  int  (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
  80
+  int  (*create_collation)(sqlite3*,const char*,int,void*,
  81
+                           int(*)(void*,int,const void*,int,const void*));
  82
+  int  (*create_collation16)(sqlite3*,const void*,int,void*,
  83
+                             int(*)(void*,int,const void*,int,const void*));
  84
+  int  (*create_function)(sqlite3*,const char*,int,int,void*,
  85
+                          void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
  86
+                          void (*xStep)(sqlite3_context*,int,sqlite3_value**),
  87
+                          void (*xFinal)(sqlite3_context*));
  88
+  int  (*create_function16)(sqlite3*,const void*,int,int,void*,
  89
+                            void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
  90
+                            void (*xStep)(sqlite3_context*,int,sqlite3_value**),
  91
+                            void (*xFinal)(sqlite3_context*));
82 92
   int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
83 93
   int  (*data_count)(sqlite3_stmt*pStmt);
84 94
   sqlite3 * (*db_handle)(sqlite3_stmt*);
@@ -123,16 +133,19 @@ struct sqlite3_api_routines {
123 133
   void  (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
124 134
   void  (*result_value)(sqlite3_context*,sqlite3_value*);
125 135
   void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
126  
-  int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*);
  136
+  int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
  137
+                         const char*,const char*),void*);
127 138
   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
128 139
   char * (*snprintf)(int,char*,const char*,...);
129 140
   int  (*step)(sqlite3_stmt*);
130  
-  int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*);
  141
+  int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
  142
+                                char const**,char const**,int*,int*,int*);
131 143
   void  (*thread_cleanup)(void);
132 144
   int  (*total_changes)(sqlite3*);
133 145
   void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
134 146
   int  (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
135  
-  void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*);
  147
+  void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
  148
+                                         sqlite_int64),void*);
136 149
   void * (*user_data)(sqlite3_context*);
137 150
   const void * (*value_blob)(sqlite3_value*);
138 151
   int  (*value_bytes)(sqlite3_value*);
@@ -154,15 +167,19 @@ struct sqlite3_api_routines {
154 167
   int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
155 168
   int (*clear_bindings)(sqlite3_stmt*);
156 169
   /* Added by 3.4.1 */
157  
-  int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *));
  170
+  int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
  171
+                          void (*xDestroy)(void *));
158 172
   /* Added by 3.5.0 */
159 173
   int (*bind_zeroblob)(sqlite3_stmt*,int,int);
160 174
   int (*blob_bytes)(sqlite3_blob*);
161 175
   int (*blob_close)(sqlite3_blob*);
162  
-  int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**);
  176
+  int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
  177
+                   int,sqlite3_blob**);
163 178
   int (*blob_read)(sqlite3_blob*,void*,int,int);
164 179
   int (*blob_write)(sqlite3_blob*,const void*,int,int);
165  
-  int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*));
  180
+  int (*create_collation_v2)(sqlite3*,const char*,int,void*,
  181
+                             int(*)(void*,int,const void*,int,const void*),
  182
+                             void(*)(void*));
166 183
   int (*file_control)(sqlite3*,const char*,int,void*);
167 184
   sqlite3_int64 (*memory_highwater)(int);
168 185
   sqlite3_int64 (*memory_used)(void);
@@ -198,7 +215,11 @@ struct sqlite3_api_routines {
198 215
   int (*backup_step)(sqlite3_backup*,int);
199 216
   const char *(*compileoption_get)(int);
200 217
   int (*compileoption_used)(const char*);
201  
-  int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
  218
+  int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
  219
+                            void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
  220
+                            void (*xStep)(sqlite3_context*,int,sqlite3_value**),
  221
+                            void (*xFinal)(sqlite3_context*),
  222
+                            void(*xDestroy)(void*));
202 223
   int (*db_config)(sqlite3*,int,...);
203 224
   sqlite3_mutex *(*db_mutex)(sqlite3*);
204 225
   int (*db_status)(sqlite3*,int,int*,int*,int);
@@ -212,6 +233,9 @@ struct sqlite3_api_routines {
212 233
   int (*wal_autocheckpoint)(sqlite3*,int);
213 234
   int (*wal_checkpoint)(sqlite3*,const char*);
214 235
   void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
  236
+  int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
  237
+  int (*vtab_config)(sqlite3*,int op,...);
  238
+  int (*vtab_on_conflict)(sqlite3*);
215 239
 };
216 240
 
217 241
 /*
@@ -412,6 +436,9 @@ struct sqlite3_api_routines {
412 436
 #define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
413 437
 #define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
414 438
 #define sqlite3_wal_hook               sqlite3_api->wal_hook
  439
+#define sqlite3_blob_reopen            sqlite3_api->blob_reopen
  440
+#define sqlite3_vtab_config            sqlite3_api->vtab_config
  441
+#define sqlite3_vtab_on_conflict       sqlite3_api->vtab_on_conflict
415 442
 #endif /* SQLITE_CORE */
416 443
 
417 444
 #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
10  spec/sqlite3/version_spec.rb
@@ -7,16 +7,16 @@
7 7
     Amalgalite::SQLite3::Version.to_s.should =~ /\d\.\d\.\d/
8 8
     Amalgalite::SQLite3::Version.runtime_version.should =~ /\d\.\d\.\d/
9 9
 
10  
-    Amalgalite::SQLite3::Version.to_i.should eql(3007007)
11  
-    Amalgalite::SQLite3::Version.runtime_version_number.should eql(3007007)
  10
+    Amalgalite::SQLite3::Version.to_i.should eql(3007009)
  11
+    Amalgalite::SQLite3::Version.runtime_version_number.should eql(3007009)
12 12
 
13 13
     Amalgalite::SQLite3::Version::MAJOR.should eql(3)
14 14
     Amalgalite::SQLite3::Version::MINOR.should eql(7)
15  
-    Amalgalite::SQLite3::Version::RELEASE.should eql(7)
  15
+    Amalgalite::SQLite3::Version::RELEASE.should eql(9)
16 16
     Amalgalite::SQLite3::Version.to_a.should have(3).items
17 17
 
18  
-    Amalgalite::SQLite3::Version.compiled_version.should == "3.7.7.1"
19  
-    Amalgalite::SQLite3::Version.compiled_version_number.should == 3007007
  18
+    Amalgalite::SQLite3::Version.compiled_version.should == "3.7.9"
  19
+    Amalgalite::SQLite3::Version.compiled_version_number.should == 3007009
20 20
     Amalgalite::SQLite3::Version.compiled_matches_runtime?.should == true
21 21
   end
22 22
 end

0 notes on commit bb1497a

Please sign in to comment.
Something went wrong with that request. Please try again.