Subject: Extend the public and private stub tables with dummy NULL entries, up to the size of the Tcl 8.6 stub tables. This makes it easier to debug extensions which use Tcl 8.5/8.6 features but (erroneously) are attempted to be loaded in Tcl 8.4.

From: "jan.nijtmans" <[email-masked]>
Date: Mon, 7 Jan 2013 11:06:16 +0000

---
 ChangeLog             |   8 +++
 generic/tcl.decls     |   4 ++
 generic/tclDecls.h    | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++
 generic/tclInt.decls  |  35 ++++------
 generic/tclIntDecls.h | 155 +++++++++++++++++++++++++++++++++++++++++++
 generic/tclStubInit.c | 108 ++++++++++++++++++++++++++++++
 6 files changed, 465 insertions(+), 22 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8eb7af6..a885b3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-01-07  Jan Nijtmans  <[email-masked]>
+
+	* generic/tcl.decls: Extend the public and private stub tables with
+	* generic/tclInt.decls: dummy NULL entries, up to the size of the
+	Tcl 8.6 stub tables. This makes it easier to debug extensions which
+	use Tcl 8.5/8.6 features but (erroneously) are attempted to be loaded
+	in Tcl 8.4.
+
 2012-12-31  Donal K. Fellows  <[email-masked]>
 
 	* doc/string.n: Noted the obsolescence of the 'bytelength',
diff --git a/generic/tcl.decls b/generic/tcl.decls
index 19bacc3..b8d8d7d 100644
--- a/generic/tcl.decls
+++ b/generic/tcl.decls
@@ -1795,6 +1795,10 @@ declare 573 {
 	    int objc, Tcl_Obj *const objv[], ClientData *clientDataPtr)
 }
 
+declare 630 {
+    void TclUnusedStubEntry(void)
+}
+
 ##############################################################################
 
 # Define the platform specific public Tcl interface. These functions are only
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 29b0eb0..7df9897 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -1629,6 +1629,64 @@ EXTERN int		Tcl_PkgRequireProc _ANSI_ARGS_((Tcl_Interp *interp,
 				CONST char *name, int objc,
 				Tcl_Obj *CONST objv[],
 				ClientData *clientDataPtr));
+/* Slot 574 is reserved */
+/* Slot 575 is reserved */
+/* Slot 576 is reserved */
+/* Slot 577 is reserved */
+/* Slot 578 is reserved */
+/* Slot 579 is reserved */
+/* Slot 580 is reserved */
+/* Slot 581 is reserved */
+/* Slot 582 is reserved */
+/* Slot 583 is reserved */
+/* Slot 584 is reserved */
+/* Slot 585 is reserved */
+/* Slot 586 is reserved */
+/* Slot 587 is reserved */
+/* Slot 588 is reserved */
+/* Slot 589 is reserved */
+/* Slot 590 is reserved */
+/* Slot 591 is reserved */
+/* Slot 592 is reserved */
+/* Slot 593 is reserved */
+/* Slot 594 is reserved */
+/* Slot 595 is reserved */
+/* Slot 596 is reserved */
+/* Slot 597 is reserved */
+/* Slot 598 is reserved */
+/* Slot 599 is reserved */
+/* Slot 600 is reserved */
+/* Slot 601 is reserved */
+/* Slot 602 is reserved */
+/* Slot 603 is reserved */
+/* Slot 604 is reserved */
+/* Slot 605 is reserved */
+/* Slot 606 is reserved */
+/* Slot 607 is reserved */
+/* Slot 608 is reserved */
+/* Slot 609 is reserved */
+/* Slot 610 is reserved */
+/* Slot 611 is reserved */
+/* Slot 612 is reserved */
+/* Slot 613 is reserved */
+/* Slot 614 is reserved */
+/* Slot 615 is reserved */
+/* Slot 616 is reserved */
+/* Slot 617 is reserved */
+/* Slot 618 is reserved */
+/* Slot 619 is reserved */
+/* Slot 620 is reserved */
+/* Slot 621 is reserved */
+/* Slot 622 is reserved */
+/* Slot 623 is reserved */
+/* Slot 624 is reserved */
+/* Slot 625 is reserved */
+/* Slot 626 is reserved */
+/* Slot 627 is reserved */
+/* Slot 628 is reserved */
+/* Slot 629 is reserved */
+/* 630 */
+EXTERN void		TclUnusedStubEntry _ANSI_ARGS_((void));
 
 typedef struct TclStubHooks {
     struct TclPlatStubs *tclPlatStubs;
@@ -2238,6 +2296,63 @@ typedef struct TclStubs {
     VOID *reserved571;
     VOID *reserved572;
     int (*tcl_PkgRequireProc) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, int objc, Tcl_Obj *CONST objv[], ClientData *clientDataPtr)); /* 573 */
+    VOID *reserved574;
+    VOID *reserved575;
+    VOID *reserved576;
+    VOID *reserved577;
+    VOID *reserved578;
+    VOID *reserved579;
+    VOID *reserved580;
+    VOID *reserved581;
+    VOID *reserved582;
+    VOID *reserved583;
+    VOID *reserved584;
+    VOID *reserved585;
+    VOID *reserved586;
+    VOID *reserved587;
+    VOID *reserved588;
+    VOID *reserved589;
+    VOID *reserved590;
+    VOID *reserved591;
+    VOID *reserved592;
+    VOID *reserved593;
+    VOID *reserved594;
+    VOID *reserved595;
+    VOID *reserved596;
+    VOID *reserved597;
+    VOID *reserved598;
+    VOID *reserved599;
+    VOID *reserved600;
+    VOID *reserved601;
+    VOID *reserved602;
+    VOID *reserved603;
+    VOID *reserved604;
+    VOID *reserved605;
+    VOID *reserved606;
+    VOID *reserved607;
+    VOID *reserved608;
+    VOID *reserved609;
+    VOID *reserved610;
+    VOID *reserved611;
+    VOID *reserved612;
+    VOID *reserved613;
+    VOID *reserved614;
+    VOID *reserved615;
+    VOID *reserved616;
+    VOID *reserved617;
+    VOID *reserved618;
+    VOID *reserved619;
+    VOID *reserved620;
+    VOID *reserved621;
+    VOID *reserved622;
+    VOID *reserved623;
+    VOID *reserved624;
+    VOID *reserved625;
+    VOID *reserved626;
+    VOID *reserved627;
+    VOID *reserved628;
+    VOID *reserved629;
+    void (*tclUnusedStubEntry) _ANSI_ARGS_((void)); /* 630 */
 } TclStubs;
 
 #ifdef __cplusplus
@@ -4334,10 +4449,72 @@ extern TclStubs *tclStubsPtr;
 #define Tcl_PkgRequireProc \
 	(tclStubsPtr->tcl_PkgRequireProc) /* 573 */
 #endif
+/* Slot 574 is reserved */
+/* Slot 575 is reserved */
+/* Slot 576 is reserved */
+/* Slot 577 is reserved */
+/* Slot 578 is reserved */
+/* Slot 579 is reserved */
+/* Slot 580 is reserved */
+/* Slot 581 is reserved */
+/* Slot 582 is reserved */
+/* Slot 583 is reserved */
+/* Slot 584 is reserved */
+/* Slot 585 is reserved */
+/* Slot 586 is reserved */
+/* Slot 587 is reserved */
+/* Slot 588 is reserved */
+/* Slot 589 is reserved */
+/* Slot 590 is reserved */
+/* Slot 591 is reserved */
+/* Slot 592 is reserved */
+/* Slot 593 is reserved */
+/* Slot 594 is reserved */
+/* Slot 595 is reserved */
+/* Slot 596 is reserved */
+/* Slot 597 is reserved */
+/* Slot 598 is reserved */
+/* Slot 599 is reserved */
+/* Slot 600 is reserved */
+/* Slot 601 is reserved */
+/* Slot 602 is reserved */
+/* Slot 603 is reserved */
+/* Slot 604 is reserved */
+/* Slot 605 is reserved */
+/* Slot 606 is reserved */
+/* Slot 607 is reserved */
+/* Slot 608 is reserved */
+/* Slot 609 is reserved */
+/* Slot 610 is reserved */
+/* Slot 611 is reserved */
+/* Slot 612 is reserved */
+/* Slot 613 is reserved */
+/* Slot 614 is reserved */
+/* Slot 615 is reserved */
+/* Slot 616 is reserved */
+/* Slot 617 is reserved */
+/* Slot 618 is reserved */
+/* Slot 619 is reserved */
+/* Slot 620 is reserved */
+/* Slot 621 is reserved */
+/* Slot 622 is reserved */
+/* Slot 623 is reserved */
+/* Slot 624 is reserved */
+/* Slot 625 is reserved */
+/* Slot 626 is reserved */
+/* Slot 627 is reserved */
+/* Slot 628 is reserved */
+/* Slot 629 is reserved */
+#ifndef TclUnusedStubEntry
+#define TclUnusedStubEntry \
+	(tclStubsPtr->tclUnusedStubEntry) /* 630 */
+#endif
 
 #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */
 
 /* !END!: Do not edit above this line. */
 
+#undef TclUnusedStubEntry
+
 #endif /* _TCLDECLS */
 
diff --git a/generic/tclInt.decls b/generic/tclInt.decls
index bdae099..18d1bdf 100644
--- a/generic/tclInt.decls
+++ b/generic/tclInt.decls
@@ -87,7 +87,7 @@ declare 14 {
 declare 16 {
     void TclExprFloatError(Tcl_Interp *interp, double value)
 }
-# Removed in 8.4
+# Removed in 8.4:
 #declare 17 {
 #    int TclFileAttrsCmd(Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 #}
@@ -531,19 +531,9 @@ declare 135 {
     int TclpCheckStackSpace(void)
 }
 
-# Added in 8.1:
-
-#declare 137 {
-#   int TclpChdir(const char *dirName)
-#}
 declare 138 {
     CONST84_RETURN char *TclGetEnv(const char *name, Tcl_DString *valuePtr)
 }
-#declare 139 {
-#    int TclpLoadFile(Tcl_Interp *interp, char *fileName, char *sym1,
-#	    char *sym2, Tcl_PackageInitProc **proc1Ptr,
-#	    Tcl_PackageInitProc **proc2Ptr, ClientData *clientDataPtr)
-#}
 declare 140 {
     int TclLooksLikeInt(const char *bytes, int length)
 }
@@ -579,7 +569,7 @@ declare 149 {
     void TclHandleRelease(TclHandle handle)
 }
 
-# Added for Tcl 8.2
+# Added in 8.2:
 
 declare 150 {
     int TclRegAbout(Tcl_Interp *interp, Tcl_RegExp re)
@@ -595,7 +585,7 @@ declare 153 {
     Tcl_Obj *TclGetLibraryPath(void)
 }
 
-# moved to tclTest.c (static) in 8.3.2/8.4a2
+# moved to tclTest.c (static) in 8.3.2:
 #declare 154 {
 #    int TclTestChannelCmd(ClientData clientData,
 #    Tcl_Interp *interp, int argc, char **argv)
@@ -686,7 +676,7 @@ declare 172 {
     int TclInThreadExit(void)
 }
 
-# added for 8.4.2
+# Added in 8.4.2:
 
 declare 173 {
     int TclUniCharMatch(const Tcl_UniChar *string, int strLen,
@@ -706,6 +696,10 @@ declare 199 {
     int TclMatchIsTrivial(const char *pattern)
 }
 
+declare 249 {
+    void TclUnusedStubEntry(void)
+}
+
 ##############################################################################
 
 # Define the platform specific internal Tcl interface. These functions are
@@ -758,7 +752,7 @@ declare 9 win {
 declare 10 win {
     Tcl_DirEntry *TclpReaddir(DIR *dir)
 }
-# Removed in 8.3.1 (for Win32s only)
+# Removed in 8.3.1 (for Win32s only):
 #declare 10 win {
 #    int TclWinSynchSpawn(void *args, int type, void **trans, Tcl_Pid *pidPtr)
 #}
@@ -807,7 +801,7 @@ declare 20 win {
 declare 21 win {
     char *TclpInetNtoa(struct in_addr addr)
 }
-# removed permanently for 8.4
+# Removed in 8.4:
 #declare 21 win {
 #    void TclpAsyncMark(Tcl_AsyncHandler async)
 #}
@@ -829,20 +823,17 @@ declare 26 win {
     void TclWinSetInterfaces(int wide)
 }
 
-# Added in Tcl 8.3.3 / 8.4
+# Added in 8.3.3:
 
 declare 27 win {
     void TclWinFlushDirtyChannels(void)
 }
 
-# Added in 8.4.2
+# Added in 8.4.2:
 
 declare 28 win {
     void TclWinResetInterfaces(void)
 }
-declare 29 win {
-    int TclWinCPUID(unsigned int index, unsigned int *regs)
-}
 
 ################################
 # Unix specific functions
@@ -903,7 +894,7 @@ declare 12 unix {
 declare 13 unix {
     char *TclpInetNtoa(struct in_addr addr)
 }
-declare 29 unix {
+declare 29 {win unix} {
     int TclWinCPUID(unsigned int index, unsigned int *regs)
 }
 
diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h
index 91db149..3bb9795 100644
--- a/generic/tclIntDecls.h
+++ b/generic/tclIntDecls.h
@@ -505,6 +505,57 @@ EXTERN struct tm *	TclpGmtime _ANSI_ARGS_((TclpTime_t_CONST clock));
 /* Slot 198 is reserved */
 /* 199 */
 EXTERN int		TclMatchIsTrivial _ANSI_ARGS_((CONST char *pattern));
+/* Slot 200 is reserved */
+/* Slot 201 is reserved */
+/* Slot 202 is reserved */
+/* Slot 203 is reserved */
+/* Slot 204 is reserved */
+/* Slot 205 is reserved */
+/* Slot 206 is reserved */
+/* Slot 207 is reserved */
+/* Slot 208 is reserved */
+/* Slot 209 is reserved */
+/* Slot 210 is reserved */
+/* Slot 211 is reserved */
+/* Slot 212 is reserved */
+/* Slot 213 is reserved */
+/* Slot 214 is reserved */
+/* Slot 215 is reserved */
+/* Slot 216 is reserved */
+/* Slot 217 is reserved */
+/* Slot 218 is reserved */
+/* Slot 219 is reserved */
+/* Slot 220 is reserved */
+/* Slot 221 is reserved */
+/* Slot 222 is reserved */
+/* Slot 223 is reserved */
+/* Slot 224 is reserved */
+/* Slot 225 is reserved */
+/* Slot 226 is reserved */
+/* Slot 227 is reserved */
+/* Slot 228 is reserved */
+/* Slot 229 is reserved */
+/* Slot 230 is reserved */
+/* Slot 231 is reserved */
+/* Slot 232 is reserved */
+/* Slot 233 is reserved */
+/* Slot 234 is reserved */
+/* Slot 235 is reserved */
+/* Slot 236 is reserved */
+/* Slot 237 is reserved */
+/* Slot 238 is reserved */
+/* Slot 239 is reserved */
+/* Slot 240 is reserved */
+/* Slot 241 is reserved */
+/* Slot 242 is reserved */
+/* Slot 243 is reserved */
+/* Slot 244 is reserved */
+/* Slot 245 is reserved */
+/* Slot 246 is reserved */
+/* Slot 247 is reserved */
+/* Slot 248 is reserved */
+/* 249 */
+EXTERN void		TclUnusedStubEntry _ANSI_ARGS_((void));
 
 typedef struct TclIntStubs {
     int magic;
@@ -710,6 +761,56 @@ typedef struct TclIntStubs {
     VOID *reserved197;
     VOID *reserved198;
     int (*tclMatchIsTrivial) _ANSI_ARGS_((CONST char *pattern)); /* 199 */
+    VOID *reserved200;
+    VOID *reserved201;
+    VOID *reserved202;
+    VOID *reserved203;
+    VOID *reserved204;
+    VOID *reserved205;
+    VOID *reserved206;
+    VOID *reserved207;
+    VOID *reserved208;
+    VOID *reserved209;
+    VOID *reserved210;
+    VOID *reserved211;
+    VOID *reserved212;
+    VOID *reserved213;
+    VOID *reserved214;
+    VOID *reserved215;
+    VOID *reserved216;
+    VOID *reserved217;
+    VOID *reserved218;
+    VOID *reserved219;
+    VOID *reserved220;
+    VOID *reserved221;
+    VOID *reserved222;
+    VOID *reserved223;
+    VOID *reserved224;
+    VOID *reserved225;
+    VOID *reserved226;
+    VOID *reserved227;
+    VOID *reserved228;
+    VOID *reserved229;
+    VOID *reserved230;
+    VOID *reserved231;
+    VOID *reserved232;
+    VOID *reserved233;
+    VOID *reserved234;
+    VOID *reserved235;
+    VOID *reserved236;
+    VOID *reserved237;
+    VOID *reserved238;
+    VOID *reserved239;
+    VOID *reserved240;
+    VOID *reserved241;
+    VOID *reserved242;
+    VOID *reserved243;
+    VOID *reserved244;
+    VOID *reserved245;
+    VOID *reserved246;
+    VOID *reserved247;
+    VOID *reserved248;
+    void (*tclUnusedStubEntry) _ANSI_ARGS_((void)); /* 249 */
 } TclIntStubs;
 
 #ifdef __cplusplus
@@ -1334,6 +1435,59 @@ extern TclIntStubs *tclIntStubsPtr;
 #define TclMatchIsTrivial \
 	(tclIntStubsPtr->tclMatchIsTrivial) /* 199 */
 #endif
+/* Slot 200 is reserved */
+/* Slot 201 is reserved */
+/* Slot 202 is reserved */
+/* Slot 203 is reserved */
+/* Slot 204 is reserved */
+/* Slot 205 is reserved */
+/* Slot 206 is reserved */
+/* Slot 207 is reserved */
+/* Slot 208 is reserved */
+/* Slot 209 is reserved */
+/* Slot 210 is reserved */
+/* Slot 211 is reserved */
+/* Slot 212 is reserved */
+/* Slot 213 is reserved */
+/* Slot 214 is reserved */
+/* Slot 215 is reserved */
+/* Slot 216 is reserved */
+/* Slot 217 is reserved */
+/* Slot 218 is reserved */
+/* Slot 219 is reserved */
+/* Slot 220 is reserved */
+/* Slot 221 is reserved */
+/* Slot 222 is reserved */
+/* Slot 223 is reserved */
+/* Slot 224 is reserved */
+/* Slot 225 is reserved */
+/* Slot 226 is reserved */
+/* Slot 227 is reserved */
+/* Slot 228 is reserved */
+/* Slot 229 is reserved */
+/* Slot 230 is reserved */
+/* Slot 231 is reserved */
+/* Slot 232 is reserved */
+/* Slot 233 is reserved */
+/* Slot 234 is reserved */
+/* Slot 235 is reserved */
+/* Slot 236 is reserved */
+/* Slot 237 is reserved */
+/* Slot 238 is reserved */
+/* Slot 239 is reserved */
+/* Slot 240 is reserved */
+/* Slot 241 is reserved */
+/* Slot 242 is reserved */
+/* Slot 243 is reserved */
+/* Slot 244 is reserved */
+/* Slot 245 is reserved */
+/* Slot 246 is reserved */
+/* Slot 247 is reserved */
+/* Slot 248 is reserved */
+#ifndef TclUnusedStubEntry
+#define TclUnusedStubEntry \
+	(tclIntStubsPtr->tclUnusedStubEntry) /* 249 */
+#endif
 
 #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */
 
@@ -1344,5 +1498,6 @@ extern TclIntStubs *tclIntStubsPtr;
 #   undef TclSockMinimumBuffers
 #   define TclSockMinimumBuffers(a,b) TclSockMinimumBuffersOld((int)(a),b)
 #endif
+#undef TclUnusedStubEntry
 
 #endif /* _TCLINTDECLS */
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index c601256..85dfe1c 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -33,6 +33,7 @@
 #undef Tcl_CreateHashEntry
 #undef TclpGetPid
 #undef TclSockMinimumBuffers
+#define TclUnusedStubEntry NULL
 
 /*
  * Keep a record of the original Notifier procedures, created in the
@@ -405,6 +406,56 @@ TclIntStubs tclIntStubs = {
     NULL, /* 197 */
     NULL, /* 198 */
     TclMatchIsTrivial, /* 199 */
+    NULL, /* 200 */
+    NULL, /* 201 */
+    NULL, /* 202 */
+    NULL, /* 203 */
+    NULL, /* 204 */
+    NULL, /* 205 */
+    NULL, /* 206 */
+    NULL, /* 207 */
+    NULL, /* 208 */
+    NULL, /* 209 */
+    NULL, /* 210 */
+    NULL, /* 211 */
+    NULL, /* 212 */
+    NULL, /* 213 */
+    NULL, /* 214 */
+    NULL, /* 215 */
+    NULL, /* 216 */
+    NULL, /* 217 */
+    NULL, /* 218 */
+    NULL, /* 219 */
+    NULL, /* 220 */
+    NULL, /* 221 */
+    NULL, /* 222 */
+    NULL, /* 223 */
+    NULL, /* 224 */
+    NULL, /* 225 */
+    NULL, /* 226 */
+    NULL, /* 227 */
+    NULL, /* 228 */
+    NULL, /* 229 */
+    NULL, /* 230 */
+    NULL, /* 231 */
+    NULL, /* 232 */
+    NULL, /* 233 */
+    NULL, /* 234 */
+    NULL, /* 235 */
+    NULL, /* 236 */
+    NULL, /* 237 */
+    NULL, /* 238 */
+    NULL, /* 239 */
+    NULL, /* 240 */
+    NULL, /* 241 */
+    NULL, /* 242 */
+    NULL, /* 243 */
+    NULL, /* 244 */
+    NULL, /* 245 */
+    NULL, /* 246 */
+    NULL, /* 247 */
+    NULL, /* 248 */
+    TclUnusedStubEntry, /* 249 */
 };
 
 TclIntPlatStubs tclIntPlatStubs = {
@@ -1128,6 +1179,63 @@ TclStubs tclStubs = {
     NULL, /* 571 */
     NULL, /* 572 */
     Tcl_PkgRequireProc, /* 573 */
+    NULL, /* 574 */
+    NULL, /* 575 */
+    NULL, /* 576 */
+    NULL, /* 577 */
+    NULL, /* 578 */
+    NULL, /* 579 */
+    NULL, /* 580 */
+    NULL, /* 581 */
+    NULL, /* 582 */
+    NULL, /* 583 */
+    NULL, /* 584 */
+    NULL, /* 585 */
+    NULL, /* 586 */
+    NULL, /* 587 */
+    NULL, /* 588 */
+    NULL, /* 589 */
+    NULL, /* 590 */
+    NULL, /* 591 */
+    NULL, /* 592 */
+    NULL, /* 593 */
+    NULL, /* 594 */
+    NULL, /* 595 */
+    NULL, /* 596 */
+    NULL, /* 597 */
+    NULL, /* 598 */
+    NULL, /* 599 */
+    NULL, /* 600 */
+    NULL, /* 601 */
+    NULL, /* 602 */
+    NULL, /* 603 */
+    NULL, /* 604 */
+    NULL, /* 605 */
+    NULL, /* 606 */
+    NULL, /* 607 */
+    NULL, /* 608 */
+    NULL, /* 609 */
+    NULL, /* 610 */
+    NULL, /* 611 */
+    NULL, /* 612 */
+    NULL, /* 613 */
+    NULL, /* 614 */
+    NULL, /* 615 */
+    NULL, /* 616 */
+    NULL, /* 617 */
+    NULL, /* 618 */
+    NULL, /* 619 */
+    NULL, /* 620 */
+    NULL, /* 621 */
+    NULL, /* 622 */
+    NULL, /* 623 */
+    NULL, /* 624 */
+    NULL, /* 625 */
+    NULL, /* 626 */
+    NULL, /* 627 */
+    NULL, /* 628 */
+    NULL, /* 629 */
+    TclUnusedStubEntry, /* 630 */
 };
 
 /* !END!: Do not edit above this line. */
-- 
cgit v0.12